S
- self-type. Subclasses must parameterize AbstractExecutionContext
with themselves, and return themselves in instance(). This forces
a compiler check on the type of instanced contexts, ensuring (if
no foolish cast is used) that restricted contexts have all the
methods available in the main ExecutionContext
. For
instance, if your class is MyContext, it should be written as
MyContext extends AbstractExecutionContextpublic abstract class AbstractExecutionContext<S extends AbstractExecutionContext<S>> extends java.lang.Object implements ExecutionContext
Modifier | Constructor and Description |
---|---|
protected |
AbstractExecutionContext(ExecutionEnvironment execenv,
NetworkManager netmgr)
Create a new AbstractExecutionContext with a default, time-efficient code path factory.
|
protected |
AbstractExecutionContext(ExecutionEnvironment execenv,
NetworkManager netmgr,
CodePathFactory codePathFactory)
Create a new AbstractExecutionContext with the specified
CodePathFactory . |
Modifier and Type | Method and Description |
---|---|
<T,R> Field<R> |
buildField(java.util.function.Function<T,R> computeValue,
T localValue)
Builds a new
Field , fetching data from all the aligned neighbors. |
<T,R> Field<R> |
buildFieldDeferred(java.util.function.Function<T,R> computeValue,
T currentLocal,
java.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.
|
protected 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 S |
instance()
Produce a child execution context, for encapsulated evaluation of
sub-programs.
|
void |
newCallStackFrame(byte... id) |
void |
newCallStackFrame(int... id) |
void |
putMultipleVariables(java.util.Map<Reference,?> map)
Pushes multiple variables.
|
void |
putVariable(Reference name,
java.lang.Object value)
Puts a variable value, overwriting the previous one, if any.
|
S |
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
protected AbstractExecutionContext(ExecutionEnvironment execenv, NetworkManager netmgr)
execenv
- The execution environmentnetmgr
- Abstract network interface to be usedprotected AbstractExecutionContext(ExecutionEnvironment execenv, NetworkManager netmgr, CodePathFactory codePathFactory)
CodePathFactory
. Subclasses which want to use hashing or other means
to encode CodePath
s can call this constructor, e.g.:
super(execenv, netmgr, new HashingCodePathFactory(Hashing.sha256()));
execenv
- The execution environmentnetmgr
- Abstract network interface to be usedcodePathFactory
- The code path factory to usepublic final <T,R> Field<R> buildField(java.util.function.Function<T,R> 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
DefaultTimeEfficientCodePath
. 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 inputR
- the type of the outputcomputeValue
- 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,R> Field<R> buildFieldDeferred(java.util.function.Function<T,R> computeValue, T currentLocal, java.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
DefaultTimeEfficientCodePath
. 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 inputR
- the type of the outputcomputeValue
- 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 java8.util.function.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 neighborspublic final void commit()
ExecutionContext
commit
in interface ExecutionContext
protected final void commitRecursively()
public java.lang.Number getDeltaTime()
getDeltaTime
in interface ExecutionContext
public final ExecutionEnvironment getExecutionEnvironment()
getExecutionEnvironment
in interface ExecutionContext
ExecutionEnvironment
protected final java.util.Map<Reference,?> getFunctions()
protected final NetworkManager getNetworkManager()
public final java.lang.Object getVariable(Reference name)
ExecutionContext
getVariable
in interface ExecutionContext
name
- The variable to be looked upprotected abstract S instance()
public final void newCallStackFrame(byte... id)
newCallStackFrame
in interface ExecutionContext
id
- stack frame typepublic final void newCallStackFrame(int... id)
newCallStackFrame
in interface ExecutionContext
id
- stack frame typepublic final void putMultipleVariables(java.util.Map<Reference,?> map)
ExecutionContext
putMultipleVariables
in interface ExecutionContext
map
- the variables to pushpublic final void putVariable(Reference name, java.lang.Object value)
ExecutionContext
putVariable
in interface ExecutionContext
name
- variable referencevalue
- variable valuepublic final S restrictDomain(@Nonnull Field<?> f)
ExecutionContext
ExecutionContext
whose domain is the same of the field one.restrictDomain
in interface ExecutionContext
f
- the fieldpublic final void returnFromCallFrame()
ExecutionContext
returnFromCallFrame
in interface ExecutionContext
public 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 setup()
ExecutionContext
setup
in interface ExecutionContext