public final class ReteContainer
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
protected IQueryBackendContext |
backendContext |
protected java.util.LinkedList<Clearable> |
clearables |
protected java.lang.Long |
clock |
protected org.eclipse.viatra.query.runtime.rete.network.ConnectionFactory |
connectionFactory |
protected java.lang.Thread |
consumerThread |
protected java.lang.Object |
externalMessageLock |
protected java.util.Deque<org.eclipse.viatra.query.runtime.rete.network.UpdateMessage> |
externalMessageQueue |
protected java.util.Deque<org.eclipse.viatra.query.runtime.rete.network.UpdateMessage> |
internalMessageQueue |
protected boolean |
killed |
protected org.apache.log4j.Logger |
logger |
static com.google.common.base.Function<Node,java.lang.String> |
NAME_MAPPER |
protected Network |
network |
protected long |
nextId |
protected NodeProvisioner |
nodeProvisioner |
protected java.util.Map<java.lang.Long,Node> |
nodesById |
protected java.util.Map<ReteContainer,java.lang.Long> |
terminationCriteria |
protected CommunicationTracker |
tracker |
Constructor and Description |
---|
ReteContainer(Network network,
boolean threaded) |
Modifier and Type | Method and Description |
---|---|
void |
clearAll()
Clears all memory contents in the network.
|
void |
connect(Supplier supplier,
Receiver receiver)
Connects a receiver to a supplier
|
void |
connectAndSynchronize(Supplier supplier,
Receiver receiver)
Connects a receiver to a remote supplier, and synchronises it to the current contents of the supplier
|
void |
connectRemoteNodes(Address<? extends Supplier> supplier,
Address<? extends Receiver> receiver,
boolean synchronise)
Establishes connection between a supplier and a receiver node, regardless which container they are in.
|
void |
connectRemoteSupplier(Address<? extends Supplier> supplier,
Receiver receiver,
boolean synchronise)
Establishes connection between a remote supplier and a local receiver node.
|
void |
deliverMessagesSingleThreaded()
Sends out all pending messages to their receivers.
|
void |
disconnect(Supplier supplier,
Receiver receiver)
Disconnects a receiver from a supplier
|
void |
disconnectAndDesynchronize(Supplier supplier,
Receiver receiver)
Disconnects a receiver from a supplier
|
void |
disconnectRemoteNodes(Address<? extends Supplier> supplier,
Address<? extends Receiver> receiver,
boolean desynchronise)
Severs connection between a supplier and a receiver node, regardless which container they are in.
|
void |
disconnectRemoteSupplier(Address<? extends Supplier> supplier,
Receiver receiver,
boolean desynchronise)
Severs connection between a remote supplier and a local receiver node.
|
void |
flushUpdates()
Finalises all update sequences and returns.
|
java.util.Collection<Node> |
getAllNodes()
Access all the Rete nodes inside this container.
|
org.eclipse.viatra.query.runtime.rete.network.ConnectionFactory |
getConnectionFactory() |
InputConnector |
getInputConnectionFactory() |
Network |
getNetwork() |
org.eclipse.viatra.query.runtime.rete.network.NodeFactory |
getNodeFactory() |
NodeProvisioner |
getProvisioner() |
CommunicationTracker |
getTracker() |
boolean |
isLocal(Address<? extends Node> address)
Checks whether a certain address points to a node at this container.
|
void |
kill()
Stops this container.
|
<N extends Node> |
makeAddress(N node)
Provides an external address for the selected node.
|
java.util.Collection<Tuple> |
pullContents(Supplier supplier)
Retrieves a safe copy of the contents of a supplier.
|
java.util.Collection<Tuple> |
pullPropagatedContents(SingleInputNode supplier)
Retrieves the contents of a SingleInputNode's parentage.
|
void |
registerClearable(Clearable c)
Registers a pattern memory into the rete network.
|
long |
registerNode(Node n)
Registers a node into the rete network (should be called by constructor).
|
java.util.Map<java.lang.String,java.lang.Integer> |
remotePosMapping(Address<? extends Production> production)
Proxies for the getPosMapping() of Production nodes.
|
java.util.Collection<Tuple> |
remotePull(Address<? extends Supplier> supplier)
Retrieves the contents of a supplier for a remote caller.
|
<N extends Node> |
resolveLocal(Address<N> address)
Returns an addressed node at this container.
|
void |
sendConstructionUpdate(Receiver receiver,
Direction direction,
Tuple updateElement)
Sends an update message to the receiver node, indicating a newly found or lost partial matching.
|
void |
sendConstructionUpdates(Receiver receiver,
Direction direction,
java.util.Collection<Tuple> updateElements)
Sends several update messages atomically to the receiver node, indicating a newly found or lost partial matching.
|
void |
sendUpdateInternal(Receiver receiver,
Direction direction,
Tuple updateElement)
Sends an update message to the receiver node by placing the message into its mailbox.
|
void |
sendUpdateToRemoteAddress(Address<? extends Receiver> address,
Direction direction,
Tuple updateElement)
Sends an update message to a node in a different container.
|
java.lang.String |
toString() |
void |
unregisterClearable(Clearable c)
Unregisters a pattern memory from the rete network.
|
void |
unregisterNode(Node n)
Unregisters a node from the rete network.
|
protected java.lang.Thread consumerThread
protected boolean killed
protected Network network
protected java.util.LinkedList<Clearable> clearables
protected java.util.Map<java.lang.Long,Node> nodesById
protected long nextId
protected org.eclipse.viatra.query.runtime.rete.network.ConnectionFactory connectionFactory
protected NodeProvisioner nodeProvisioner
protected java.util.Deque<org.eclipse.viatra.query.runtime.rete.network.UpdateMessage> internalMessageQueue
protected java.util.Deque<org.eclipse.viatra.query.runtime.rete.network.UpdateMessage> externalMessageQueue
protected java.lang.Object externalMessageLock
protected java.lang.Long clock
protected java.util.Map<ReteContainer,java.lang.Long> terminationCriteria
protected final org.apache.log4j.Logger logger
protected final CommunicationTracker tracker
protected final IQueryBackendContext backendContext
public static final com.google.common.base.Function<Node,java.lang.String> NAME_MAPPER
public ReteContainer(Network network, boolean threaded)
threaded
- false if operating in a single-threaded environmentpublic CommunicationTracker getTracker()
public void kill()
public void connectRemoteNodes(Address<? extends Supplier> supplier, Address<? extends Receiver> receiver, boolean synchronise)
synchronise
- indicates whether the receiver should be synchronised to the current contents of the supplierpublic void disconnectRemoteNodes(Address<? extends Supplier> supplier, Address<? extends Receiver> receiver, boolean desynchronise)
desynchronise
- indicates whether the current contents of the supplier should be subtracted from the receiverpublic void connectRemoteSupplier(Address<? extends Supplier> supplier, Receiver receiver, boolean synchronise)
synchronise
- indicates whether the receiver should be synchronised to the current contents of the supplierpublic void disconnectRemoteSupplier(Address<? extends Supplier> supplier, Receiver receiver, boolean desynchronise)
desynchronise
- indicates whether the current contents of the supplier should be subtracted from the receiverpublic void disconnect(Supplier supplier, Receiver receiver)
public void connectAndSynchronize(Supplier supplier, Receiver receiver)
public void disconnectAndDesynchronize(Supplier supplier, Receiver receiver)
public void sendConstructionUpdate(Receiver receiver, Direction direction, Tuple updateElement)
public void sendConstructionUpdates(Receiver receiver, Direction direction, java.util.Collection<Tuple> updateElements)
public void sendUpdateInternal(Receiver receiver, Direction direction, Tuple updateElement)
public void sendUpdateToRemoteAddress(Address<? extends Receiver> address, Direction direction, Tuple updateElement)
public void flushUpdates()
public java.util.Collection<Tuple> pullContents(Supplier supplier)
public java.util.Collection<Tuple> pullPropagatedContents(SingleInputNode supplier)
public java.util.Collection<Tuple> remotePull(Address<? extends Supplier> supplier)
supplier
- the address of the supplier to be pulled.public java.util.Map<java.lang.String,java.lang.Integer> remotePosMapping(Address<? extends Production> production)
public void deliverMessagesSingleThreaded()
public <N extends Node> Address<N> makeAddress(N node)
public boolean isLocal(Address<? extends Node> address)
public <N extends Node> N resolveLocal(Address<N> address)
java.lang.IllegalArgumentException
- if address is non-localpublic long registerNode(Node n)
public void unregisterNode(Node n)
public void registerClearable(Clearable c)
public void unregisterClearable(Clearable c)
public void clearAll()
public org.eclipse.viatra.query.runtime.rete.network.NodeFactory getNodeFactory()
public org.eclipse.viatra.query.runtime.rete.network.ConnectionFactory getConnectionFactory()
public NodeProvisioner getProvisioner()
public Network getNetwork()
public java.lang.String toString()
toString
in class java.lang.Object
public java.util.Collection<Node> getAllNodes()
Node
instancespublic InputConnector getInputConnectionFactory()