예제 #1
0
        /// <summary>
        /// Register a comprehension symbol
        /// </summary>
        private void Register(Symbol comprSymbol)
        {
            Contract.Requires(comprSymbol != null);
            ShapeTrie index;

            if (!comprIndices.TryFindValue(comprSymbol, out index))
            {
                index = new ShapeTrie(MkPattern(comprSymbol, true));
                comprIndices.Add(comprSymbol, index);

                LinkedList <ShapeTrie> subindices;
                if (!symbToIndexMap.TryFindValue(comprSymbol, out subindices))
                {
                    subindices = new LinkedList <ShapeTrie>();
                    symbToIndexMap.Add(comprSymbol, subindices);
                }

                subindices.AddLast(index);
            }
        }
예제 #2
0
        /// <summary>
        /// Register a rule triggered by a find in position findnumber
        /// </summary>
        private void Register(CoreRule rule, Term trigger, int findNumber)
        {
            Contract.Requires(rule != null && trigger != null);

            ShapeTrie index;

            if (!trigIndices.TryFindValue(trigger, out index))
            {
                index = new ShapeTrie(trigger);
                trigIndices.Add(trigger, index);

                LinkedList <ShapeTrie> subindices;
                if (!symbToIndexMap.TryFindValue(index.Pattern.Symbol, out subindices))
                {
                    subindices = new LinkedList <ShapeTrie>();
                    symbToIndexMap.Add(index.Pattern.Symbol, subindices);
                }

                subindices.AddLast(index);
            }

            index.AddTrigger(rule, findNumber);
        }