nodeTypesInSegment = updateRiaAndTerminalMemory((LeftTupleSource) sink, originalLt, smem, wm, fromPrototype, nodeTypesInSegment);
} else if (sink.getType() == NodeTypeEnums.RightInputAdaterNode) {
// Only add the RIANode, if the LeftTupleSource is part of the RIANode subnetwork.
if (inSubNetwork((RightInputAdapterNode) sink, originalLt)) {
RiaNodeMemory riaMem = (RiaNodeMemory) wm.getNodeMemory((MemoryFactory) sink);
PathMemory pmem = (PathMemory) riaMem.getRiaPathMemory();
smem.getPathMemories().add(pmem);
pmem.getSegmentMemories()[smem.getPos()] = smem;
if (fromPrototype) {
ObjectSink[] nodes = ((RightInputAdapterNode) sink).getSinkPropagator().getSinks();
for ( ObjectSink node : nodes ) {
// check if the SegmentMemory has been already created by the BetaNode and if so avoid to build it twice
if ( NodeTypeEnums.isLeftTupleSource(node) && wm.getNodeMemory((MemoryFactory) node).getSegmentMemory() == null ) {
restoreSegmentFromPrototype(wm, (LeftTupleSource) node, nodeTypesInSegment);
}
}
} else if ( ( pmem.getAllLinkedMaskTest() & ( 1L << pmem.getSegmentMemories().length ) ) == 0 ) {
// must eagerly initialize child segment memories
ObjectSink[] nodes = ((RightInputAdapterNode) sink).getSinkPropagator().getSinks();
for ( ObjectSink node : nodes ) {
if ( NodeTypeEnums.isLeftTupleSource(node) ) {
createSegmentMemory( (LeftTupleSource) node, wm );
}
}
}
}
} else if (NodeTypeEnums.isTerminalNode(sink)) {
PathMemory pmem = (PathMemory) wm.getNodeMemory((MemoryFactory) sink);
smem.getPathMemories().add(pmem);
pmem.getSegmentMemories()[smem.getPos()] = smem;
smem.setTupleQueue( pmem.getTupleQueue() );
if (smem.isSegmentLinked()) {
// not's can cause segments to be linked, and the rules need to be notified for evaluation
smem.notifyRuleLinkSegment(wm);
}
checkEagerSegmentCreation(((TerminalNode) sink).getLeftTupleSource(), wm, nodeTypesInSegment);