public void QueueInsertLinked(Activation activation, IEnumerable <KeyValuePair <object, object> > keyedFacts) { var toAdd = new List <Tuple <object, Fact> >(); var toPropagate = new List <Fact>(); foreach (var keyedFact in keyedFacts) { var key = keyedFact.Key; var factWrapper = _workingMemory.GetLinkedFact(activation, key); if (factWrapper != null) { throw new ArgumentException($"Linked fact already exists. Key={key}"); } factWrapper = new SyntheticFact(keyedFact.Value); factWrapper.Source = new LinkedFactSource(activation); toAdd.Add(System.Tuple.Create(key, factWrapper)); toPropagate.Add(factWrapper); } foreach (var item in toAdd) { _workingMemory.AddLinkedFact(activation, item.Item1, item.Item2); } LinkedFactSet current; if (_linkedFacts.Count == 0 || (current = _linkedFacts.Peek()).Action != LinkedFactAction.Insert) { current = new LinkedFactSet(LinkedFactAction.Insert); _linkedFacts.Enqueue(current); } current.Facts.AddRange(toPropagate); }
private Fact CreateAggregateFact(AggregationResult result) { var fact = new SyntheticFact(result.Aggregate); fact.Source = new AggregateFactSource(result.Source); _aggregateFactMap.Add(result.Aggregate, fact); return(fact); }
public void InsertLinked(Activation activation, IEnumerable <KeyValuePair <object, object> > keyedFacts) { var toAdd = new List <Tuple <object, Fact> >(); var toPropagate = new List <Fact>(); foreach (var keyedFact in keyedFacts) { var key = keyedFact.Key; var factWrapper = _workingMemory.GetLinkedFact(activation, key); if (factWrapper != null) { throw new ArgumentException($"Linked fact already exists. Key={key}"); } factWrapper = new SyntheticFact(keyedFact.Value); factWrapper.Source = new LinkedFactSource(activation); toAdd.Add(System.Tuple.Create(key, factWrapper)); toPropagate.Add(factWrapper); } foreach (var item in toAdd) { _workingMemory.AddLinkedFact(activation, item.Item1, item.Item2); } _network.PropagateAssert(_executionContext, toPropagate); }