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); }
public void InsertLinked(Activation activation, object key, object fact) { if (key == null) { throw new ArgumentNullException(nameof(key)); } if (fact == null) { throw new ArgumentNullException(nameof(fact)); } var factWrapper = _workingMemory.GetLinkedFact(activation, key); if (factWrapper != null) { throw new ArgumentException($"Linked fact already exists. Key={key}", nameof(fact)); } factWrapper = new Fact(fact); _workingMemory.AddLinkedFact(activation, key, factWrapper); _network.PropagateAssert(_executionContext, new List <Fact> { factWrapper }); }
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); }