Search in sources :

Example 21 with Tuple

use of org.drools.core.spi.Tuple in project drools by kiegroup.

the class AccumulateNodeVisitor method doVisit.

@Override
protected void doVisit(NetworkNode node, Stack<NetworkNode> nodeStack, StatefulKnowledgeSessionInfo info) {
    AccumulateNode an = (AccumulateNode) node;
    DefaultNodeInfo ni = info.getNodeInfo(node);
    final AccumulateMemory memory = (AccumulateMemory) info.getSession().getNodeMemory(an);
    ni.setMemoryEnabled(true);
    if (an.isObjectMemoryEnabled()) {
        ni.setFactMemorySize(memory.getBetaMemory().getRightTupleMemory().size());
    }
    if (an.isLeftTupleMemoryEnabled()) {
        ni.setTupleMemorySize(memory.getBetaMemory().getLeftTupleMemory().size());
        FastIterator it = memory.getBetaMemory().getLeftTupleMemory().fullFastIterator();
        int i = 0;
        for (Tuple leftTuple = BetaNode.getFirstTuple(memory.getBetaMemory().getLeftTupleMemory(), it); leftTuple != null; leftTuple = (Tuple) it.next(leftTuple)) {
            AccumulateContext ctx = (AccumulateContext) leftTuple.getContextObject();
            if (ctx != null && ctx.result != null) {
                i++;
            }
        }
        ni.setCreatedFactHandles(i);
    }
}
Also used : AccumulateMemory(org.drools.core.reteoo.AccumulateNode.AccumulateMemory) AccumulateNode(org.drools.core.reteoo.AccumulateNode) FastIterator(org.drools.core.util.FastIterator) Tuple(org.drools.core.spi.Tuple) AccumulateContext(org.drools.core.reteoo.AccumulateNode.AccumulateContext)

Example 22 with Tuple

use of org.drools.core.spi.Tuple in project drools by kiegroup.

the class LeftTupleIndexRangeRBTree method toArray.

public Entry[] toArray() {
    FastIterator it = tree.fastIterator();
    if (it == null) {
        return new Entry[0];
    }
    List<Comparable> toBeRemoved = new ArrayList<Comparable>();
    List<Comparable> nestedToBeRemoved = new ArrayList<Comparable>();
    List<Tuple> result = new ArrayList<Tuple>();
    RBTree.Node<Comparable<Comparable>, RBTree<Comparable<Comparable>, TupleList>> node = null;
    RBTree.Node<Comparable<Comparable>, TupleList> nestedNode = null;
    while ((node = (RBTree.Node<Comparable<Comparable>, RBTree<Comparable<Comparable>, TupleList>>) it.next(node)) != null) {
        nestedToBeRemoved.clear();
        RBTree<Comparable<Comparable>, TupleList> nestedTree = node.value;
        FastIterator nestedIt = nestedTree.fastIterator();
        while ((nestedNode = (RBTree.Node<Comparable<Comparable>, TupleList>) nestedIt.next(nestedNode)) != null) {
            TupleList list = nestedNode.value;
            int listSize = list.size();
            if (listSize == 0) {
                nestedToBeRemoved.add(nestedNode.key);
            } else {
                Tuple entry = list.getFirst();
                while (entry != null) {
                    result.add(entry);
                    entry = (Tuple) entry.getNext();
                }
            }
        }
        for (Comparable key : nestedToBeRemoved) {
            nestedTree.delete(key);
        }
        if (nestedTree.isEmpty()) {
            toBeRemoved.add(node.key);
        }
    }
    for (Comparable key : toBeRemoved) {
        tree.delete(key);
    }
    return result.toArray(new Tuple[result.size()]);
}
Also used : ArrayList(java.util.ArrayList) Entry(org.drools.core.util.Entry) RBTree(org.drools.core.util.RBTree) FastIterator(org.drools.core.util.FastIterator) Tuple(org.drools.core.spi.Tuple)

Example 23 with Tuple

use of org.drools.core.spi.Tuple in project drools by kiegroup.

the class LeftTupleIndexRangeRBTree method getNext.

private Entry getNext(Tuple tuple) {
    Tuple next = (Tuple) tuple.getNext();
    if (next != null) {
        return next;
    }
    Comparable ascendingKey = getLeftAscendingIndexedValue(tuple);
    Comparable descendingKey = getLeftDescendingIndexedValue(tuple);
    RBTree<Comparable<Comparable>, TupleList> nestedTree = tree.lookup(ascendingKey);
    while (nestedTree != null) {
        while (true) {
            RBTree.Node<Comparable<Comparable>, TupleList> nextNode = nestedTree.findNearestNode(descendingKey, false, RBTree.Boundary.LOWER);
            if (nextNode == null) {
                break;
            }
            if (nextNode.value.size() == 0) {
                nestedTree.delete(nextNode.key);
            } else {
                return nextNode.value.getFirst();
            }
        }
        RBTree.Node<Comparable<Comparable>, RBTree<Comparable<Comparable>, TupleList>> nextNode = tree.findNearestNode(ascendingKey, false, RBTree.Boundary.UPPER);
        nestedTree = nextNode == null ? null : nextNode.value;
    }
    return null;
}
Also used : RBTree(org.drools.core.util.RBTree) Tuple(org.drools.core.spi.Tuple)

Example 24 with Tuple

use of org.drools.core.spi.Tuple in project drools by kiegroup.

the class RightTupleIndexRangeRBTree method getFirst.

public Tuple getFirst(Tuple leftTuple) {
    Comparable lowerBound = getLeftAscendingIndexedValue(leftTuple);
    Tuple rightTuple = getNext(lowerBound, true);
    return rightTuple == null ? null : checkUpperBound(rightTuple, getLeftDescendingIndexedValue(leftTuple));
}
Also used : Tuple(org.drools.core.spi.Tuple)

Example 25 with Tuple

use of org.drools.core.spi.Tuple in project drools by kiegroup.

the class RightTupleIndexRangeRBTree method toArray.

public Entry[] toArray() {
    FastIterator it = tree.fastIterator();
    if (it == null) {
        return new Entry[0];
    }
    List<Comparable> toBeRemoved = new ArrayList<Comparable>();
    List<Tuple> result = new ArrayList<Tuple>();
    RBTree.Node<Comparable<Comparable>, TupleList> node;
    while ((node = (RBTree.Node<Comparable<Comparable>, TupleList>) it.next(null)) != null) {
        TupleList bucket = node.value;
        if (bucket.size() == 0) {
            toBeRemoved.add(node.key);
        } else {
            Tuple entry = bucket.getFirst();
            while (entry != null) {
                result.add(entry);
                entry = (Tuple) entry.getNext();
            }
        }
    }
    for (Comparable key : toBeRemoved) {
        tree.delete(key);
    }
    return result.toArray(new Tuple[result.size()]);
}
Also used : Entry(org.drools.core.util.Entry) ArrayList(java.util.ArrayList) RBTree(org.drools.core.util.RBTree) FastIterator(org.drools.core.util.FastIterator) Tuple(org.drools.core.spi.Tuple)

Aggregations

Tuple (org.drools.core.spi.Tuple)54 InternalFactHandle (org.drools.core.common.InternalFactHandle)17 LeftTuple (org.drools.core.reteoo.LeftTuple)16 RightTuple (org.drools.core.reteoo.RightTuple)14 FastIterator (org.drools.core.util.FastIterator)14 Declaration (org.drools.core.rule.Declaration)9 InternalWorkingMemory (org.drools.core.common.InternalWorkingMemory)8 WorkingMemory (org.drools.core.WorkingMemory)7 RightTupleImpl (org.drools.core.reteoo.RightTupleImpl)7 Cheese (org.drools.core.test.model.Cheese)7 Test (org.junit.Test)7 DefaultFactHandle (org.drools.core.common.DefaultFactHandle)6 FieldIndex (org.drools.core.util.AbstractHashTable.FieldIndex)6 AccumulateContext (org.drools.core.reteoo.AccumulateNode.AccumulateContext)5 AccumulateMemory (org.drools.core.reteoo.AccumulateNode.AccumulateMemory)5 BetaMemory (org.drools.core.reteoo.BetaMemory)5 RuleTerminalNode (org.drools.core.reteoo.RuleTerminalNode)5 TupleMemory (org.drools.core.reteoo.TupleMemory)5 MethodVisitor (org.mvel2.asm.MethodVisitor)5 FromMemory (org.drools.core.reteoo.FromNode.FromMemory)4