package org.scribble.visit.env;
import java.util.Arrays;
import java.util.List;
public class UnfoldingEnv extends Env<UnfoldingEnv>
{
private boolean shouldUnfold; // i.e. unguarded choice context
public UnfoldingEnv()
{
this.shouldUnfold = false;
}
protected UnfoldingEnv(boolean shouldUnfold)
{
this.shouldUnfold = shouldUnfold;
}
@Override
protected UnfoldingEnv copy()
{
return new UnfoldingEnv(this.shouldUnfold);
}
@Override
public UnfoldingEnv enterContext()
{
return copy();
}
@Override
public UnfoldingEnv mergeContext(UnfoldingEnv env)
{
return mergeContexts(Arrays.asList(env));
}
@Override
public UnfoldingEnv mergeContexts(List<UnfoldingEnv> envs)
{
UnfoldingEnv copy = copy();
boolean merge = (envs.stream().filter((e) -> e.shouldUnfold).count() > 0);
copy.shouldUnfold = merge;
return copy;
}
public boolean shouldUnfold()
{
return this.shouldUnfold;
}
public UnfoldingEnv pushChoiceParent()
{
UnfoldingEnv copy = copy();
copy.shouldUnfold = true;
return copy;
}
public UnfoldingEnv disableUnfold()
{
UnfoldingEnv copy = copy();
copy.shouldUnfold = false;
return copy;
}
@Override
public String toString()
{
return super.toString() + ": " + this.shouldUnfold;
}
}