S - the type of the store returned by copy and that is used in leastUpperBound. Usually it is the implementing class itself, e.g. in T extends
     Store<T>.public interface Store<S extends Store<S>>
| Modifier and Type | Interface and Description | 
|---|---|
| static class  | Store.FlowRuleA flow rule describes how stores flow along one edge between basic blocks. | 
| static class  | Store.Kind | 
| Modifier and Type | Method and Description | 
|---|---|
| boolean | canAlias(FlowExpressions.Receiver a,
        FlowExpressions.Receiver b)Can the objects  aandbbe aliases? Returns a conservative answer (i.e.,
 returnstrueif not enough information is available to determine aliasing). | 
| S | copy() | 
| S | leastUpperBound(S other)Compute the least upper bound of two stores. | 
| String | visualize(CFGVisualizer<?,S,?> viz)Delegate visualization responsibility to a visualizer. | 
| S | widenedUpperBound(S previous)Compute an upper bound of two stores that is wider than the least upper bound of the two
 stores. | 
S copy()
S leastUpperBound(S other)
Important: This method must fulfill the following contract:
this.
   other.
   this, even if the signature is
       more permissive.
   S widenedUpperBound(S previous)
Analysis. previous must be the previous store.
 A particular analysis might not require widening and should implement this method by calling leastUpperBound.
Important: This method must fulfill the following contract:
this.
   previous.
   this, even if the signature is
       more permissive.
   previous - must be the previous storeboolean canAlias(FlowExpressions.Receiver a, FlowExpressions.Receiver b)
a and b be aliases? Returns a conservative answer (i.e.,
 returns true if not enough information is available to determine aliasing).String visualize(CFGVisualizer<?,S,?> viz)
viz - the visualizer to visualize this store