ScopeStateFactory.java

package edu.udel.cis.vsl.tass.state.impl;

import edu.udel.cis.vsl.tass.dynamic.IF.DynamicFactoryIF;
import edu.udel.cis.vsl.tass.dynamic.IF.value.ValueIF;
import edu.udel.cis.vsl.tass.model.IF.scope.ScopeIF;
import edu.udel.cis.vsl.tass.morph.MorphicArray;
import edu.udel.cis.vsl.tass.morph.MorphicArrayFactory;
import edu.udel.cis.vsl.tass.morph.MorphicFactory;
import edu.udel.cis.vsl.tass.state.IF.ScopeStateIF;

public class ScopeStateFactory extends MorphicFactory<ScopeStateIF> {

	private MorphicArrayFactory<ValueIF> valueFactory;

	private DynamicFactoryIF dynamicFactory;

	public ScopeStateFactory(DynamicFactoryIF dynamicFactory) {
		this.dynamicFactory = dynamicFactory;
		this.valueFactory = dynamicFactory.valueArrayFactory();
	}

	public ScopeStateSimplifier simplifier() {
		return new ScopeStateSimplifier(this);
	}

	public DynamicFactoryIF dynamicFactory() {
		return dynamicFactory;
	}

	public ScopeState scopeState(ScopeIF scope, MorphicArray<ValueIF> values) {
		ScopeState scopeState = new ScopeState(scope, values);

		return scopeState;
	}

	@Override
	public void canonicalizeChildren(ScopeStateIF scopeState) {
		((ScopeState) scopeState).canonicalizeChildren(valueFactory);
	}
}