Exemple #1
0
        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);
        }
Exemple #2
0
        private Fact CreateAggregateFact(AggregationResult result)
        {
            var fact = new SyntheticFact(result.Aggregate);

            fact.Source = new AggregateFactSource(result.Source);
            _aggregateFactMap.Add(result.Aggregate, fact);
            return(fact);
        }
Exemple #3
0
        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);
        }