public abstract class AbstractExecutionContext extends java.lang.Object implements ExecutionContext
Modifier and Type | Field and Description |
---|---|
private TIntStack |
callFrameSizes |
private TByteList |
callStack |
private int |
deferredExportSize |
private ExecutionEnvironment |
env |
private int |
exportsSize |
private java.util.Map<Reference,?> |
functions |
private Stack |
gamma |
private static org.slf4j.Logger |
L |
private NetworkManager |
nm |
private java.lang.Number |
previousRoundTime |
private java.util.List<AbstractExecutionContext> |
restrictedContexts |
private java.util.Map<DeviceUID,java.util.Map<CodePath,java.lang.Object>> |
theta |
private java.util.Map<CodePath,java8.util.function.Supplier<?>> |
tobeComputedBeforeSending |
private java.util.Map<CodePath,java.lang.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(java8.util.function.Function<T,?> computeValue,
T localValue)
Builds a new
Field , fetching data from all the aligned neighbors. |
private <T,D> Field |
buildField(java8.util.function.Function<T,?> computeValue,
T localValue,
java.util.Map<CodePath,D> destination,
D toBeSent) |
<T> Field |
buildFieldDeferred(java8.util.function.Function<T,?> computeValue,
T currentLocal,
java8.util.function.Supplier<T> toBeSent)
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.
|
void |
commitRecursively()
recursively commits on restricted contexts.
|
java.lang.Number |
getDeltaTime() |
ExecutionEnvironment |
getExecutionEnvironment() |
protected java.util.Map<Reference,?> |
getFunctions()
Support for first-class functions by returning the set of currently
accessible functions.
|
protected NetworkManager |
getNetworkManager()
Accessor for abstract network interface.
|
java.lang.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(java.util.Map<Reference,?> map)
Pushes multiple variables.
|
void |
putVariable(Reference name,
java.lang.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 |
setGloballyAvailableReferences(java.util.Map<Reference,?> 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 org.slf4j.Logger L
private final TByteList callStack
private final TIntStack callFrameSizes
private final NetworkManager nm
private java.util.Map<Reference,?> functions
private Stack gamma
private java.util.Map<CodePath,java8.util.function.Supplier<?>> tobeComputedBeforeSending
private java.util.Map<CodePath,java.lang.Object> toSend
private final java.util.List<AbstractExecutionContext> restrictedContexts
private java.lang.Number previousRoundTime
private final ExecutionEnvironment env
private int exportsSize
private int deferredExportSize
protected AbstractExecutionContext(ExecutionEnvironment execenv, NetworkManager netmgr)
execenv
- The execution environmentnetmgr
- Abstract network interface to be usedpublic final void setGloballyAvailableReferences(java.util.Map<Reference,?> knownFunctions)
ExecutionContext
setGloballyAvailableReferences
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 commitRecursively()
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, java.lang.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(java.util.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(java8.util.function.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
- the local value for this fieldField
containing the local device value and the
values for any of the aligned neighborspublic final <T> Field buildFieldDeferred(java8.util.function.Function<T,?> computeValue, T currentLocal, java8.util.function.Supplier<T> toBeSent)
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. The deferred version does not immediately schedule
the local value for being sent away. Rather, it schedules the provided Supplier
to be executed at the end of the round for obtaining the value to be shared. This
function is the base upon which the ShareCall
is built.buildFieldDeferred
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 valuecurrentLocal
- the value to be used as local for this fieldtoBeSent
- a Supplier
which will be used to compute the local
value for this field that will get exported at the end of the roundField
containing the local device value and the
values for any of the aligned neighborsprivate <T,D> Field buildField(java8.util.function.Function<T,?> computeValue, T localValue, java.util.Map<CodePath,D> destination, D toBeSent)
public final java.lang.Object getVariable(Reference name)
ExecutionContext
getVariable
in interface ExecutionContext
name
- The variable to be looked upprotected final NetworkManager getNetworkManager()
protected final java.util.Map<Reference,?> getFunctions()
public java.lang.Number getDeltaTime()
getDeltaTime
in interface ExecutionContext
public final ExecutionEnvironment getExecutionEnvironment()
getExecutionEnvironment
in interface ExecutionContext
ExecutionEnvironment