public abstract class AbstractExecutionContext extends Object implements ExecutionContext
Modifier and Type | Field and Description |
---|---|
private TIntStack |
callFrameSizes |
private TByteList |
callStack |
private ExecutionEnvironment |
env |
private Map<Reference,?> |
functions |
private Stack |
gamma |
private static MapMaker |
MAPMAKER |
private NetworkManager |
nm |
private Number |
previousRoundTime |
private Map<DeviceUID,Map<CodePath,Object>> |
theta |
private Map<CodePath,Object> |
toSend |
Modifier | Constructor and Description |
---|---|
protected |
AbstractExecutionContext(ExecutionEnvironment execenv,
NetworkManager netmgr)
Create a new AbstractExecutionContext.
|
Modifier and Type | Method and Description |
---|---|
<T> Field |
buildField(Function<T,?> computeValue,
T localValue)
Builds a new
Field , fetching data from all the aligned neighbors. |
void |
commit()
Called just after the VM is executed, to finalize information of the
execution for the environment.
|
Number |
getDeltaTime() |
ExecutionEnvironment |
getExecutionEnvironment() |
protected Map<Reference,?> |
getFunctions()
Support for first-class functions by returning the set of currently
accessible functions.
|
protected NetworkManager |
getNetworkManager()
Accessor for abstract network interface.
|
Object |
getVariable(Reference name)
Look up the value of a variable from the local environment.
|
protected abstract AbstractExecutionContext |
instance()
Produce a child execution context, for encapsulated evaluation of
sub-programs.
|
void |
newCallStackFrame(byte... id) |
void |
putMultipleVariables(Map<Reference,?> map)
Pushes multiple variables.
|
void |
putVariable(Reference name,
Object value,
boolean canShadow) |
AbstractExecutionContext |
restrictDomain(Field f)
Give a field, returns a new
ExecutionContext whose domain is the same of the field one. |
void |
returnFromCallFrame()
returns from the last frame.
|
void |
setAvailableFunctions(Map<Reference,FunctionDefinition> knownFunctions)
Used internally to support first-class functions by make the functions of
a program accessible for reflection at runtime.
|
void |
setup()
Called just before the VM is executed, to enable and preparations needed
in the environment.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getCurrentTime, getDeviceUID, nextRandomDouble
private static final MapMaker MAPMAKER
private final TByteList callStack
private final TIntStack callFrameSizes
private final NetworkManager nm
private Stack gamma
private Number previousRoundTime
private final ExecutionEnvironment env
protected AbstractExecutionContext(ExecutionEnvironment execenv, NetworkManager netmgr)
execenv
- The execution environmentnetmgr
- Abstract network interface to be usedpublic final void setAvailableFunctions(Map<Reference,FunctionDefinition> knownFunctions)
ExecutionContext
setAvailableFunctions
in interface ExecutionContext
knownFunctions
- Collection of accessible functions, associating function name
and value.public final void commit()
ExecutionContext
commit
in interface ExecutionContext
public final void setup()
ExecutionContext
setup
in interface ExecutionContext
public final void newCallStackFrame(byte... id)
newCallStackFrame
in interface ExecutionContext
id
- stack frame typepublic final void returnFromCallFrame()
ExecutionContext
returnFromCallFrame
in interface ExecutionContext
public final void putVariable(Reference name, Object value, boolean canShadow)
putVariable
in interface ExecutionContext
name
- variable referencevalue
- variable valuecanShadow
- if no other variable with the same name exists, this parameter
is irrelevant. Otherwise, if true, the previous variable will
be shadowed. If false, the variable will be overridden (with
possible side effects upon return) instead.public final void putMultipleVariables(Map<Reference,?> map)
ExecutionContext
putMultipleVariables
in interface ExecutionContext
map
- the variables to pushprotected abstract AbstractExecutionContext instance()
public final AbstractExecutionContext restrictDomain(Field f)
ExecutionContext
ExecutionContext
whose domain is the same of the field one.restrictDomain
in interface ExecutionContext
f
- the fieldpublic final <T> Field buildField(Function<T,?> computeValue, T localValue)
ExecutionContext
Field
, fetching data from all the aligned neighbors.
A neighbor is considered to be aligned it it has reached the exact same
CodePath
. The field will always contain at least one value,
namely the value of the local device.buildField
in interface ExecutionContext
T
- the type of the inputcomputeValue
- a function that will be applied to localValue and the
equivalents shared from neighbors in the process of
constructing this field: the field consists of the values
returned from applying computeValue to each of device's valuelocalValue
- a Supplier
which will be used to compute the local
value for this fieldField
containing the local device value and the
values for any of the aligned neighborspublic final Object getVariable(Reference name)
ExecutionContext
getVariable
in interface ExecutionContext
name
- The variable to be looked upprotected final NetworkManager getNetworkManager()
protected final Map<Reference,?> getFunctions()
public Number getDeltaTime()
getDeltaTime
in interface ExecutionContext
public ExecutionEnvironment getExecutionEnvironment()
getExecutionEnvironment
in interface ExecutionContext
ExecutionEnvironment