S
- The Store
used to keep track of intermediate results.public 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 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(Node n,
Analysis<A,S,?> analysis,
S s)
Create a
TransferInput , given a store and a node-value mapping. |
|
TransferInput(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(Object o) |
S |
getElseStore() |
Node |
getNode() |
S |
getRegularStore() |
S |
getThenStore() |
A |
getValueOfSubNode(Node n) |
boolean |
hasDOToutput() |
int |
hashCode() |
TransferInput<A,S> |
leastUpperBound(TransferInput<A,S> other)
Compute the least upper bound of two stores.
|
String |
toDOToutput() |
String |
toString() |
protected Node node
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 transfered to this object.
The node-value mapping nodeValues
is provided by the analysis and
is only read from within this TransferInput
.
public TransferInput(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
transfered to this object.
The node-value mapping nodeValues
is provided by the analysis and
is only read from within this TransferInput
.
public TransferInput(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 transfered to this object.
protected TransferInput(TransferInput<A,S> from)
public 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 result.public 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
.
public boolean hasDOToutput()
public String toDOToutput()