예제 #1
0
파일: Session.cs 프로젝트: arastoul/NRules
        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);
        }
예제 #2
0
파일: Session.cs 프로젝트: zhrjin/NRules
        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
            });
        }
예제 #3
0
파일: Session.cs 프로젝트: zhlf1987/NRules
        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);
        }