return new VirtualFact(object, getAttribute(), splitvals);
ret.add(generateVirtualFact(object, binding, values)); generateBindings(weight-i, cur+1, binding, object, values, ret); generateBindings(weight-1, cur+1, binding, object, values, ret);
state.getProfiler().start(IProfiler.TYPE_NODEEVENT, IProfiler.NODEEVENT_OBJECTMODIFIED); if(getRelevantAttributes().contains(type)) boolean affected = isAffected(type); Collection before = mem.hasNodeMemory(this) ? (Collection)((Map)mem.getNodeMemory(this)).get(object) : null; Collection after = generateVirtualFacts(object, state); if(!contains(state, after, o)) propagateRemovalToObjectConsumers(o, state, mem, agenda); propagateAdditionToObjectConsumers(o, state, mem, agenda); propagateModificationToObjectConsumers(it.next(), type, oldvalue, newvalue, state, mem, agenda);
if(attr.equals(snode.getAttribute()) && Arrays.equals(binds, snode.getSplitPattern())) node = new SplitNode(context.getRootNode().getNextNodeId(), createValueExtractor(-1, attr, -1, context, false), attr, binds); connectRight(context.getLastAlphaNode(), node, context);
ret.put("Attribute:", n.getAttribute().getName()); ret.put("Split in:", Integer.valueOf(n.getSplitPattern().length)); ret.put("Split pattern:", SUtil.arrayToString(n.getSplitPattern()));
/** * Send a new object to this node. * @param object The object. */ public void addObject(Object object, IOAVState state, ReteMemory mem, AbstractAgenda agenda) { //System.out.println("Add object called: "+this+" "+object); state.getProfiler().start(IProfiler.TYPE_NODE, this); state.getProfiler().start(IProfiler.TYPE_NODEEVENT, IProfiler.NODEEVENT_OBJECTADDED); Map smem = (Map)mem.getNodeMemory(this); assert !smem.containsKey(object) : object; // if(!smem.containsKey(object)) { Collection vfs = generateVirtualFacts(object, state); smem.put(object, vfs); //System.out.println("ADD: Object splitted to: "+object+" "+vfs); for(Iterator it=vfs.iterator(); it.hasNext(); ) { propagateAdditionToObjectConsumers(it.next(), state, mem, agenda); } } state.getProfiler().stop(IProfiler.TYPE_NODEEVENT, IProfiler.NODEEVENT_OBJECTADDED); state.getProfiler().stop(IProfiler.TYPE_NODE, this); }
/** * Generate virtual facts. * @param object The object. * @param state The state. */ protected Collection generateVirtualFacts(Object object, IOAVState state) { List ret = new ArrayList(); Object vals = extractor.getValue(null, object, null, state); Object[] values = (Object[])SReflect.getArray(vals); // Hack! assumes Object[] if(values!=null && values.length>=min_values) generateBindings(values.length, 0, new int[splitpattern.length], object, values, ret); return ret; }
state.getProfiler().start(IProfiler.TYPE_NODEEVENT, IProfiler.NODEEVENT_OBJECTMODIFIED); if(getRelevantAttributes().contains(type)) boolean affected = isAffected(type); Collection before = mem.hasNodeMemory(this) ? (Collection)((Map)mem.getNodeMemory(this)).get(object) : null; Collection after = generateVirtualFacts(object, state); if(!contains(state, after, o)) propagateRemovalToObjectConsumers(o, state, mem, agenda); propagateAdditionToObjectConsumers(o, state, mem, agenda); propagateModificationToObjectConsumers(it.next(), type, oldvalue, newvalue, state, mem, agenda);
if(attr.equals(snode.getAttribute()) && Arrays.equals(binds, snode.getSplitPattern())) node = new SplitNode(context.getRootNode().getNextNodeId(), createValueExtractor(-1, attr, -1, context, false), attr, binds); connectRight(context.getLastAlphaNode(), node, context);
/** * Send a new object to this node. * @param object The object. */ public void addObject(Object object, IOAVState state, ReteMemory mem, AbstractAgenda agenda) { //System.out.println("Add object called: "+this+" "+object); state.getProfiler().start(IProfiler.TYPE_NODE, this); state.getProfiler().start(IProfiler.TYPE_NODEEVENT, IProfiler.NODEEVENT_OBJECTADDED); Map smem = (Map)mem.getNodeMemory(this); assert !smem.containsKey(object) : object; // if(!smem.containsKey(object)) { Collection vfs = generateVirtualFacts(object, state); smem.put(object, vfs); //System.out.println("ADD: Object splitted to: "+object+" "+vfs); for(Iterator it=vfs.iterator(); it.hasNext(); ) { propagateAdditionToObjectConsumers(it.next(), state, mem, agenda); } } state.getProfiler().stop(IProfiler.TYPE_NODEEVENT, IProfiler.NODEEVENT_OBJECTADDED); state.getProfiler().stop(IProfiler.TYPE_NODE, this); }
/** * Generate virtual facts. * @param object The object. * @param state The state. */ protected Collection generateVirtualFacts(Object object, IOAVState state) { List ret = new ArrayList(); Object vals = extractor.getValue(null, object, null, state); Object[] values = (Object[])SReflect.getArray(vals); // Hack! assumes Object[] if(values!=null && values.length>=min_values) generateBindings(values.length, 0, new int[splitpattern.length], object, values, ret); return ret; }
ret.add(generateVirtualFact(object, binding, values)); generateBindings(weight-i, cur+1, binding, object, values, ret); generateBindings(weight-1, cur+1, binding, object, values, ret);
return new VirtualFact(object, getAttribute(), splitvals);