public void updateSink(final ObjectSink sink, final PropagationContext context, final InternalWorkingMemory workingMemory) { final WindowMemory memory = (WindowMemory) workingMemory.getNodeMemory(this); // even if the update Sink guarantees the kbase/ksession lock is acquired, we can't // have triggers being executed concurrently memory.gate.lock(); try { Iterator it = memory.events.iterator(); try { for (ObjectHashMap.ObjectEntry entry = (ObjectHashMap.ObjectEntry) it.next(); entry != null; entry = (ObjectHashMap.ObjectEntry) it.next()) { sink.assertObject((InternalFactHandle) entry.getValue(), context, workingMemory); } } catch (Exception e) { e.printStackTrace(); } } finally { memory.gate.unlock(); } }
int i = 0; for (org.drools.core.util.ObjectHashMap.ObjectEntry entry = (org.drools.core.util.ObjectHashMap.ObjectEntry) it.next(); entry != null; entry = (org.drools.core.util.ObjectHashMap.ObjectEntry) it.next()) { EqualityKey key = (EqualityKey) entry.getKey(); keys[i++] = key; for (org.drools.core.util.ObjectHashMap.ObjectEntry entry = (org.drools.core.util.ObjectHashMap.ObjectEntry) it.next(); entry != null; entry = (org.drools.core.util.ObjectHashMap.ObjectEntry) it.next()) { ProtobufMessages.Justification.Builder _justification = ProtobufMessages.Justification.newBuilder(); _justification.setHandleId(((Integer) entry.getKey()).intValue()); org.drools.core.util.LinkedList list = (org.drools.core.util.LinkedList) entry.getValue(); for (LinkedListEntry node = (LinkedListEntry) list.getFirst(); node != null; node = (LinkedListEntry) node.getNext()) { LogicalDependency dependency = (LogicalDependency) node.getObject();
final AlphaNode alphaNode = (AlphaNode) entry.getValue(); final IndexableConstraint indexableConstraint = (IndexableConstraint) alphaNode.getConstraint();
public static void writeTruthMaintenanceSystem(MarshallerWriteContext context) throws IOException { ObjectOutputStream stream = context.stream; ObjectHashMap assertMap = context.wm.getTruthMaintenanceSystem().getAssertMap(); EqualityKey[] keys = new EqualityKey[assertMap.size()]; org.drools.core.util.Iterator it = assertMap.iterator(); int i = 0; for ( org.drools.core.util.ObjectHashMap.ObjectEntry entry = (org.drools.core.util.ObjectHashMap.ObjectEntry) it.next(); entry != null; entry = (org.drools.core.util.ObjectHashMap.ObjectEntry) it.next() ) { EqualityKey key = (EqualityKey) entry.getKey(); keys[i++] = key; } Arrays.sort( keys, EqualityKeySorter.instance ); // write the assert map of Equality keys for ( EqualityKey key : keys ) { stream.writeShort( PersisterEnums.EQUALITY_KEY ); stream.writeInt( key.getStatus() ); InternalFactHandle handle = key.getFactHandle(); stream.writeInt( handle.getId() ); //context.out.println( "EqualityKey int:" + key.getStatus() + " int:" + handle.getId() ); if ( key.getOtherFactHandle() != null && !key.getOtherFactHandle().isEmpty() ) { for ( InternalFactHandle handle2 : key.getOtherFactHandle() ) { stream.writeShort( PersisterEnums.FACT_HANDLE ); stream.writeInt( handle2.getId() ); //context.out.println( "OtherHandle int:" + handle2.getId() ); } } stream.writeShort( PersisterEnums.END ); } stream.writeShort( PersisterEnums.END ); }
public Object put(final Object key, final Object value, final boolean checkExists) { final int hashCode = this.comparator.hashCodeOf( key ); final int index = indexOf( hashCode, this.table.length ); // scan the linked entries to see if it exists if ( checkExists ) { ObjectEntry current = (ObjectEntry) this.table[index]; while ( current != null ) { if ( hashCode == current.cachedHashCode && this.comparator.equal( key, current.key ) ) { final Object oldValue = current.value; current.value = value; return oldValue; } current = (ObjectEntry) current.getNext(); } } // We aren't checking the key exists, or it didn't find the key final ObjectEntry entry = new ObjectEntry( key, value, hashCode ); entry.next = this.table[index]; this.table[index] = entry; if ( this.size++ >= this.threshold ) { resize( 2 * this.table.length ); } return null; }
private static ProtobufMessages.NodeMemory writeRIANodeMemory(final int nodeId, final Memory memory) { // for RIA nodes, we need to store the ID of the created handles RIAMemory mem = (RIAMemory) memory; if (!mem.memory.isEmpty()) { ProtobufMessages.NodeMemory.RIANodeMemory.Builder _ria = ProtobufMessages.NodeMemory.RIANodeMemory.newBuilder(); final org.drools.core.util.Iterator it = mem.memory.iterator(); // iterates over all propagated handles and assert them to the new sink for (ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next()) { LeftTuple leftTuple = (LeftTuple) entry.getKey(); InternalFactHandle handle = (InternalFactHandle) entry.getValue(); FactHandle _handle = ProtobufMessages.FactHandle.newBuilder() .setId(handle.getId()) .setRecency(handle.getRecency()) .build(); _ria.addContext(ProtobufMessages.NodeMemory.RIANodeMemory.RIAContext.newBuilder() .setTuple(PersisterHelper.createTuple(leftTuple)) .setResultHandle(_handle) .build()); } return ProtobufMessages.NodeMemory.newBuilder() .setNodeId(nodeId) .setNodeType(ProtobufMessages.NodeMemory.NodeType.RIA) .setRia(_ria.build()) .build(); } return null; }
public BaseNode getMatchingNode(BaseNode candidate) { if ( this.otherSinks != null ) { for ( ObjectSinkNode sink = this.otherSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) { if ( candidate.equals( sink ) ) { return (BaseNode) sink; } } } if ( this.hashableSinks != null ) { for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) { if ( candidate.equals( sink ) ) { return (BaseNode) sink; } } } if ( this.hashedSinkMap != null ) { final Iterator it = this.hashedSinkMap.newIterator(); for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) { final ObjectSink sink = (ObjectSink) entry.getValue(); if ( candidate.equals( sink ) ) { return (BaseNode) sink; } } } return null; }
public Object remove(final Object key) { final int hashCode = this.comparator.hashCodeOf( key ); final int index = indexOf( hashCode, this.table.length ); ObjectEntry previous = (ObjectEntry) this.table[index]; ObjectEntry current = previous; while ( current != null ) { final ObjectEntry next = (ObjectEntry) current.getNext(); if ( hashCode == current.cachedHashCode && this.comparator.equal( key, current.key ) ) { if ( previous == current ) { this.table[index] = next; } else { previous.setNext( next ); } current.setNext( null ); this.size--; return current.value; } previous = current; current = next; } return null; }
private void traverseHashedAlphaNodes(ObjectHashMap hashedAlphaNodes, NetworkHandler handler) { if (hashedAlphaNodes != null && hashedAlphaNodes.size() > 0) { AlphaNode firstAlpha = getFirstAlphaNode(hashedAlphaNodes); ClassFieldReader hashedFieldReader = getClassFieldReaderForHashedAlpha(firstAlpha); // start the hashed alphas handler.startHashedAlphaNodes(hashedFieldReader); Iterator iter = hashedAlphaNodes.iterator(); for (ObjectHashMap.ObjectEntry entry = (ObjectHashMap.ObjectEntry) iter.next(); entry != null; entry = (ObjectHashMap.ObjectEntry) iter.next()) { CompositeObjectSinkAdapter.HashKey hashKey = (CompositeObjectSinkAdapter.HashKey) entry.getKey(); AlphaNode alphaNode = (AlphaNode) entry.getValue(); handler.startHashedAlphaNode(alphaNode, hashKey.getObjectValue()); // traverse the propagator for each alpha traversePropagator(alphaNode.getSinkPropagator(), handler); handler.endHashedAlphaNode(alphaNode, hashKey.getObjectValue()); } // end of the hashed alphas handler.endHashedAlphaNodes(hashedFieldReader); } }
/** * Returns the first {@link org.drools.reteoo.AlphaNode} from the specified {@link ObjectHashMap}. * * @param hashedAlphaNodes map of hashed AlphaNodes * @return first alpha from the specified map * @throws IllegalArgumentException thrown if the map doesn't contain any alpha nodes */ private AlphaNode getFirstAlphaNode(final ObjectHashMap hashedAlphaNodes) throws IllegalArgumentException { AlphaNode firstAlphaNode; final Iterator iter = hashedAlphaNodes.iterator(); final ObjectHashMap.ObjectEntry entry = (ObjectHashMap.ObjectEntry) iter.next(); if (entry != null) { firstAlphaNode = (AlphaNode) entry.getValue(); } else { throw new IllegalArgumentException("ObjectHashMap does not contain any hashed AlphaNodes!"); } return firstAlphaNode; }
protected void doRemove(final RuleRemovalContext context, final ReteooBuilder builder, final InternalWorkingMemory[] workingMemories) { if ( !this.isInUse() ) { for ( InternalWorkingMemory workingMemory : workingMemories ) { final RIAMemory memory = (RIAMemory) workingMemory.getNodeMemory( this ); Iterator it = memory.memory.iterator(); for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) { LeftTuple leftTuple = (LeftTuple) entry.getKey(); leftTuple.unlinkFromLeftParent(); leftTuple.unlinkFromRightParent(); } workingMemory.clearNodeMemory( this ); } } if ( !isInUse() ) { tupleSource.removeTupleSink(this); } }
private void setNext() { ObjectEntry entry = null; while ( entry == null ) { entry = (ObjectEntry) this.iterator.next(); if ( entry == null ) { break; } if ( this.filter != null ) { Object object = ((InternalFactHandle) entry.getKey()).getObject(); if ( this.filter.accept( object ) == false ) { entry = null; } } } this.nextEntry = entry; // this.nextHandle = handle; // this.nextObject = object; }
public Object get(final Object key) { final int hashCode = this.comparator.hashCodeOf( key ); final int index = indexOf( hashCode, this.table.length ); ObjectEntry current = (ObjectEntry) this.table[index]; while ( current != null ) { if ( hashCode == current.cachedHashCode && this.comparator.equal( key, current.key ) ) { return current.value; } current = (ObjectEntry) current.getNext(); } return null; }
public int getLogicalCount(TruthMaintenanceSystem tms) { ObjectHashMap map = tms.getEqualityKeyMap(); final Iterator<ObjectEntry> it = map.iterator(); int i = 0; for ( ObjectEntry entry = it.next(); entry != null; entry = it.next() ) { EqualityKey key = (EqualityKey) entry.getKey(); if ( key.getStatus() == EqualityKey.JUSTIFIED ) { i++; } } return i; } }
public Object next() { ObjectEntry current = this.nextEntry; if ( current != null ) { setNext(); } else { throw new NoSuchElementException( "No more elements to return" ); } if ( this.type == OBJECT ) { return ((InternalFactHandle) current.getKey()).getObject(); } else { return current.getKey(); } }
public void updateSink(final ObjectSink sink, final PropagationContext context, final InternalWorkingMemory workingMemory) { final RIAMemory memory = (RIAMemory) workingMemory.getNodeMemory( this ); final Iterator it = memory.memory.iterator(); // iterates over all propagated handles and assert them to the new sink for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) { sink.assertObject((InternalFactHandle) entry.getValue(), context, workingMemory); } }
assertEquals( 1, equalityMap.size() ); // Only Person type is logical org.drools.core.util.Iterator it = equalityMap.iterator(); EqualityKey key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); while ( !key.getFactHandle().getObject().equals( new Person( "darth") ) ) { key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); kSession.fireAllRules(); it = equalityMap.iterator(); key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); while ( !key.getFactHandle().getObject().equals( new Person( "darth") ) ) { key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); kSession.fireAllRules(); it = equalityMap.iterator(); key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); while ( !key.getFactHandle().getObject().equals( new Person( "darth") ) ) { key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue();
assertEquals( 1, equalityMap.size() ); // Only Person type is logical org.drools.core.util.Iterator it = equalityMap.iterator(); EqualityKey key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); while ( !key.getFactHandle().getObject().equals( new Person( "darth") ) ) { key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); kSession.fireAllRules(); it = equalityMap.iterator(); key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); while ( !key.getFactHandle().getObject().equals( new Person( "darth") ) ) { key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); kSession.fireAllRules(); it = equalityMap.iterator(); key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); while ( !key.getFactHandle().getObject().equals( new Person( "darth") ) ) { key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue();
assertEquals( 2, equalityMap.size() ); // go1, neg are two different strings. org.drools.core.util.Iterator it = equalityMap.iterator(); EqualityKey key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue(); while ( !key.getFactHandle().getObject().equals( "neg") ) { key = ( EqualityKey ) (( ObjectEntry ) it.next() ).getValue();