Class TransferInput<V extends AbstractValue<V>,S extends Store<S>>
- java.lang.Object
-
- org.checkerframework.dataflow.analysis.TransferInput<V,S>
-
- Type Parameters:
V- type of the abstract value that is trackedS- the store type used in the analysis
- All Implemented Interfaces:
org.plumelib.util.UniqueId
public class TransferInput<V extends AbstractValue<V>,S extends Store<S>> extends java.lang.Object implements org.plumelib.util.UniqueIdTransferInputis used as the input type of the individual transfer functions of aForwardTransferFunctionor aBackwardTransferFunction. It also contains a reference to the node for which the transfer function will be applied.A
TransferInputcontains one or two stores. If two stores are present, one belongs to 'then', and the other to 'else'.
-
-
Field Summary
Fields Modifier and Type Field Description protected Analysis<V,S,?>analysisThe corresponding analysis class to get intermediate flow results.protected @Nullable SelseStoreThe 'else' result store (ornullif none is present).protected @Nullable NodenodeThe corresponding node.protected @Nullable Sstoreprotected @Nullable SthenStoreThe 'then' result store (ornullif none is present).
-
Constructor Summary
Constructors Modifier Constructor Description TransferInput(@Nullable Node n, Analysis<V,S,?> analysis, S s)Create aTransferInput, given a store and a node-value mapping.TransferInput(@Nullable Node n, Analysis<V,S,?> analysis, S s1, S s2)Create aTransferInput, given two stores and a node-value mapping.protectedTransferInput(TransferInput<V,S> from)Copy constructor.TransferInput(Node n, Analysis<V,S,?> analysis, TransferResult<V,S> to)Create aTransferInput, given aTransferResultand a node-value mapping.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancontainsTwoStores()Returnstrueif and only if this transfer input contains two stores that are potentially not equal.TransferInput<V,S>copy()Returns an exact copy of this store.booleanequals(@Nullable java.lang.Object o)SgetElseStore()Returns the result store produced if theNodethis result belongs to evaluates tofalse.@Nullable NodegetNode()Returns theNodefor thisTransferInput.SgetRegularStore()Returns the regular result store produced if no exception is thrown by theNodecorresponding to this transfer function result.SgetThenStore()Returns the result store produced if theNodethis result belongs to evaluates totrue.longgetUid()@Nullable VgetValueOfSubNode(Node n)Returns the abstract value of noden, which is required to be a 'sub-node' (that is, a direct or indirect child) of the node this transfer input is associated with.inthashCode()TransferInput<V,S>leastUpperBound(TransferInput<V,S> other)Compute the least upper bound of two stores.java.lang.StringtoString()
-
-
-
Constructor Detail
-
TransferInput
public TransferInput(Node n, Analysis<V,S,?> analysis, TransferResult<V,S> to)
Create aTransferInput, given aTransferResultand a node-value mapping.Aliasing: The stores returned by any methods of
towill be stored internally and are not allowed to be used elsewhere. Full control of them is transferred to this object.The node-value mapping
nodeValuesis provided by the analysis and is only read from within thisTransferInput.
-
TransferInput
public TransferInput(@Nullable Node n, Analysis<V,S,?> analysis, S s)
Create aTransferInput, given a store and a node-value mapping.Aliasing: The store
swill be stored internally and is not allowed to be used elsewhere. Full control oversis transferred to this object.The node-value mapping
nodeValuesis provided by the analysis and is only read from within thisTransferInput.
-
TransferInput
public TransferInput(@Nullable Node n, Analysis<V,S,?> analysis, S s1, S s2)
Create aTransferInput, given two stores and a node-value mapping.Aliasing: The two stores
s1ands2will be stored internally and are not allowed to be used elsewhere. Full control of them is transferred to this object.
-
TransferInput
protected TransferInput(TransferInput<V,S> from)
Copy constructor.- Parameters:
from- aTransferInputto copy
-
-
Method Detail
-
getUid
public long getUid(@UnknownInitialization TransferInput<V extends AbstractValue<V>,S extends Store<S>> this)
- Specified by:
getUidin interfaceorg.plumelib.util.UniqueId
-
getNode
public @Nullable Node getNode()
Returns theNodefor thisTransferInput.- Returns:
- the
Nodefor thisTransferInput
-
getValueOfSubNode
public @Nullable V getValueOfSubNode(Node n)
Returns the abstract value of noden, 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,ncannot be a l-value node. Returnsnullif no value is available.- Parameters:
n- a node- Returns:
- the abstract value of node
n, ornullif no value is available
-
getRegularStore
public S getRegularStore()
Returns the regular result store produced if no exception is thrown by theNodecorresponding to this transfer function result.- Returns:
- the regular result store produced if no exception is thrown by the
Nodecorresponding to this transfer function result
-
getThenStore
public S getThenStore()
Returns the result store produced if theNodethis result belongs to evaluates totrue.- Returns:
- the result store produced if the
Nodethis result belongs to evaluates totrue
-
getElseStore
public S getElseStore()
Returns the result store produced if theNodethis result belongs to evaluates tofalse.- Returns:
- the result store produced if the
Nodethis result belongs to evaluates tofalse
-
containsTwoStores
public boolean containsTwoStores()
Returnstrueif and only if this transfer input contains two stores that are potentially not equal. Note that the resulttruedoes not imply thatgetRegularStorecannot be called (or vice versa forfalse). Rather, it indicates thatgetThenStoreorgetElseStorecan be used to give more precise results. Otherwise, if the result isfalse, then all three methodsgetRegularStore,getThenStore, andgetElseStorereturn equivalent stores.- Returns:
trueif and only if this transfer input contains two stores that are potentially not equal
-
copy
public TransferInput<V,S> copy()
Returns an exact copy of this store.- Returns:
- an exact copy of this store
-
leastUpperBound
public TransferInput<V,S> leastUpperBound(TransferInput<V,S> other)
Compute the least upper bound of two stores.Important: This method must fulfill the same contract as
leastUpperBoundofStore.- Parameters:
other- a transfer input- Returns:
- the least upper bound of this and
other
-
equals
public boolean equals(@Nullable java.lang.Object o)
- Overrides:
equalsin classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-