S
- the Store
used to keep track of intermediate resultspublic class TransferInput<A extends AbstractValue<A>,S extends Store<S>> extends Object
TransferInput
is used as the input type of the individual transfer functions of a TransferFunction
. It also contains a reference to the node for which the transfer function will
be applied.
A TransferInput
contains one or two stores. If two stores are present, one belongs to
'then', and the other to 'else'.
Modifier and Type | Field and Description |
---|---|
protected Analysis<A,S,?> |
analysis
The corresponding analysis class to get intermediate flow results.
|
protected S |
elseStore
The 'else' result store (or
null if none is present). |
protected @Nullable Node |
node
The corresponding node.
|
protected S |
store
The regular result store (or
null if none is present). |
protected S |
thenStore
The 'then' result store (or
null if none is present). |
Modifier | Constructor and Description |
---|---|
|
TransferInput(@Nullable Node n,
Analysis<A,S,?> analysis,
S s)
Create a
TransferInput , given a store and a node-value mapping. |
|
TransferInput(@Nullable Node n,
Analysis<A,S,?> analysis,
S s1,
S s2)
Create a
TransferInput , given two stores and a node-value mapping. |
|
TransferInput(Node n,
Analysis<A,S,?> analysis,
TransferResult<A,S> to)
Create a
TransferInput , given a TransferResult and a node-value mapping. |
protected |
TransferInput(TransferInput<A,S> from)
Copy constructor.
|
Modifier and Type | Method and Description |
---|---|
boolean |
containsTwoStores() |
TransferInput<A,S> |
copy() |
boolean |
equals(@Nullable Object o) |
S |
getElseStore() |
@Nullable Node |
getNode() |
S |
getRegularStore() |
S |
getThenStore() |
A |
getValueOfSubNode(Node n) |
int |
hashCode() |
TransferInput<A,S> |
leastUpperBound(TransferInput<A,S> other)
Compute the least upper bound of two stores.
|
String |
toString() |
protected final S extends Store<S> store
null
if none is present). The following invariant is
maintained:
store == null ⇔ thenStore != null && elseStore != null
protected final S extends Store<S> thenStore
null
if none is present). The following invariant is
maintained:
store == null ⇔ thenStore != null && elseStore != null
protected final S extends Store<S> elseStore
null
if none is present). The following invariant is
maintained:
store == null ⇔ thenStore != null && elseStore != null
public TransferInput(Node n, Analysis<A,S,?> analysis, TransferResult<A,S> to)
TransferInput
, given a TransferResult
and a node-value mapping.
Aliasing: The stores returned by any methods of to
will be stored
internally and are not allowed to be used elsewhere. Full control of them is transferred to
this object.
The node-value mapping nodeValues
is provided by the analysis and is only read
from within this TransferInput
.
public TransferInput(@Nullable Node n, Analysis<A,S,?> analysis, S s)
TransferInput
, given a store and a node-value mapping.
Aliasing: The store s
will be stored internally and is not allowed to be
used elsewhere. Full control over s
is transferred to this object.
The node-value mapping nodeValues
is provided by the analysis and is only read
from within this TransferInput
.
public TransferInput(@Nullable Node n, Analysis<A,S,?> analysis, S s1, S s2)
TransferInput
, given two stores and a node-value mapping.
Aliasing: The two stores s1
and s2
will be stored internally and
are not allowed to be used elsewhere. Full control of them is transferred to this object.
protected TransferInput(TransferInput<A,S> from)
public @Nullable Node getNode()
Node
for this TransferInput
.public A getValueOfSubNode(Node n)
Node
n
, which is required to be a 'sub-node'
(that is, a direct or indirect child) of the node this transfer input is associated with.
Furthermore, n
cannot be a l-value node. Returns null
if no value if
available.public S getRegularStore()
Node
corresponding to this transfer function resultpublic S getThenStore()
Node
this result belongs to evaluates to
true
.public S getElseStore()
Node
this result belongs to evaluates to
false
.public boolean containsTwoStores()
true
if and only if this transfer input contains two stores that are
potentially not equal. Note that the result true
does not imply that getRegularStore
cannot be called (or vice versa for false
). Rather, it indicates
that getThenStore
or getElseStore
can be used to give more precise
results. Otherwise, if the result is false
, then all three methods getRegularStore
, getThenStore
, and getElseStore
return equivalent
stores.public TransferInput<A,S> copy()
public TransferInput<A,S> leastUpperBound(TransferInput<A,S> other)
Important: This method must fulfill the same contract as leastUpperBound
of Store
.