Package org.eclipse.viatra.query.runtime.base.itc.alg.counting

## Class CountingAlg<V>

- java.lang.Object
- - org.eclipse.viatra.query.runtime.base.itc.alg.counting.CountingAlg<V>

- Type Parameters:
    `V` - the type parameter of the nodes in the graph data source
  All Implemented Interfaces:
    `IGraphObserver<V>`, `ITcDataSource<V>`

      public class CountingAlg<V>
      extends java.lang.Object
      implements IGraphObserver<V>, ITcDataSource<V>

  This class is the optimized implementation of the Counting algorithm.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `CountingAlg​(IGraphDataSource<V> gds)` | Constructs a new Counting algorithm and initializes the transitive closure relation with the given graph data source.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `attachObserver​(ITcObserver<V> to)` | Attach a transitive closure relation observer.
    `void` | `detachObserver​(ITcObserver<V> to)` | Detach a transitive closure relation observer.
    `void` | `dispose()` | Call this method to properly dispose the data structures of a transitive closure algorithm.
    `void` | `edgeDeleted​(V source, V target)` | Used to notify when an edge is deleted from the graph.
    `void` | `edgeInserted​(V source, V target)` | Used to notify when an edge is inserted into the graph.
    `java.util.Set<V>` | `getAllReachableSources​(V target)` | Returns all nodes from which the target node is reachable.
    `java.util.Set<V>` | `getAllReachableTargets​(V source)` | Returns all nodes which are reachable from the source node.
    `IGraphPathFinder<V>` | `getPathFinder()` | The returned `IGraphPathFinder` can be used to retrieve paths between nodes using transitive reachability.
    `ITcRelation<V>` | `getTcRelation()` |
    `boolean` | `isReachable​(V source, V target)` | Returns true if the target node is reachable from the source node.
    `void` | `nodeDeleted​(V n)` | Used to notify when a node is deleted from the graph.
    `void` | `nodeInserted​(V n)` | Used to notify when a node is inserted into the graph.
    `void` | `setTcRelation​(CountingTcRelation<V> tc)` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### CountingAlg

          public CountingAlg​(IGraphDataSource<V> gds)

      Constructs a new Counting algorithm and initializes the transitive closure relation with the given graph data source. Attach itself on the graph data source as an observer.
      Parameters:
        `gds` - the graph data source instance

  - ### Method Detail

    - #### edgeInserted

          public void edgeInserted​(V source,
                                   V target)

      Description copied from interface: `IGraphObserver`
      Used to notify when an edge is inserted into the graph.
      Specified by:
        `edgeInserted` in interface `IGraphObserver<V>`
      Parameters:
        `source` - the source of the edge
        `target` - the target of the edge

    - #### edgeDeleted

          public void edgeDeleted​(V source,
                                  V target)

      Description copied from interface: `IGraphObserver`
      Used to notify when an edge is deleted from the graph.
      Specified by:
        `edgeDeleted` in interface `IGraphObserver<V>`
      Parameters:
        `source` - the source of the edge
        `target` - the target of the edge

    - #### nodeInserted

          public void nodeInserted​(V n)

      Description copied from interface: `IGraphObserver`
      Used to notify when a node is inserted into the graph.
      Specified by:
        `nodeInserted` in interface `IGraphObserver<V>`
      Parameters:
        `n` - the node

    - #### nodeDeleted

          public void nodeDeleted​(V n)

      Description copied from interface: `IGraphObserver`
      Used to notify when a node is deleted from the graph.
      Specified by:
        `nodeDeleted` in interface `IGraphObserver<V>`
      Parameters:
        `n` - the node

    - #### getTcRelation

          public ITcRelation<V> getTcRelation()

    - #### setTcRelation

          public void setTcRelation​(CountingTcRelation<V> tc)

    - #### isReachable

          public boolean isReachable​(V source,
                                     V target)

      Description copied from interface: `ITcDataSource`
      Returns true if the target node is reachable from the source node.
      Specified by:
        `isReachable` in interface `ITcDataSource<V>`
      Parameters:
        `source` - the source node
        `target` - the target node
      Returns:
        true if target is reachable from source, false otherwise

    - #### attachObserver

          public void attachObserver​(ITcObserver<V> to)

      Description copied from interface: `ITcDataSource`
      Attach a transitive closure relation observer.
      Specified by:
        `attachObserver` in interface `ITcDataSource<V>`
      Parameters:
        `to` - the observer object

    - #### detachObserver

          public void detachObserver​(ITcObserver<V> to)

      Description copied from interface: `ITcDataSource`
      Detach a transitive closure relation observer.
      Specified by:
        `detachObserver` in interface `ITcDataSource<V>`
      Parameters:
        `to` - the observer object

    - #### getAllReachableTargets

          public java.util.Set<V> getAllReachableTargets​(V source)

      Description copied from interface: `ITcDataSource`
      Returns all nodes which are reachable from the source node.
      Specified by:
        `getAllReachableTargets` in interface `ITcDataSource<V>`
      Parameters:
        `source` - the source node
      Returns:
        the set of target nodes

    - #### getAllReachableSources

          public java.util.Set<V> getAllReachableSources​(V target)

      Description copied from interface: `ITcDataSource`
      Returns all nodes from which the target node is reachable.
      Specified by:
        `getAllReachableSources` in interface `ITcDataSource<V>`
      Parameters:
        `target` - the target node
      Returns:
        the set of source nodes

    - #### dispose

          public void dispose()

      Description copied from interface: `ITcDataSource`
      Call this method to properly dispose the data structures of a transitive closure algorithm.
      Specified by:
        `dispose` in interface `ITcDataSource<V>`

    - #### getPathFinder

          public IGraphPathFinder<V> getPathFinder()

      Description copied from interface: `ITcDataSource`
      The returned `IGraphPathFinder` can be used to retrieve paths between nodes using transitive reachability.
      Specified by:
        `getPathFinder` in interface `ITcDataSource<V>`
      Returns:
        a path finder for the graph.