/// <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); } }
/// <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); }