示例#1
0
        internal TermTupleIndex returnIndexOfTermTupleForHumanReadableTermNameOrCreate(string name, out int termOrCompoundTermOrVariableRefererId)
        {
            bool nameIsPresentInHumanReadableNames = termNamesByhumanReadableName.ContainsKey(name);

            if (nameIsPresentInHumanReadableNames)
            {
                termOrCompoundTermOrVariableRefererId = termTuples[(int)termNamesByhumanReadableName[name].index].refererOrIntervals[0].referer.getAtomic;
                return(termNamesByhumanReadableName[name]);
            }
            // else here

            termOrCompoundTermOrVariableRefererId = TermOrCompoundTermOrVariableRefererCounter;
            TermOrCompoundTermOrVariableRefererCounter++;

            TermTuple termTuple = TermTuple.makeByReferers(new TermOrCompoundTermOrVariableReferer[] { TermOrCompoundTermOrVariableReferer.makeAtomic(termOrCompoundTermOrVariableRefererId) });

            TermTupleIndex index = TermTupleIndex.make((ulong)termTuples.Count);

            termTuples.Add(termTuple);

            termNamesByhumanReadableName[name] = index;
            termOrCompoundTermOrVariableRefererIdToHumanReadableName[termOrCompoundTermOrVariableRefererId] = name;

            return(index);
        }
示例#2
0
        internal TermTupleIndex addTermTupleByReferers(TermOrCompoundTermOrVariableReferer[] referers)
        {
            ulong hash = calcHashOfTermOrCompoundTermOrVariableReferers(referers);

            TermTupleIndex insertionIndex = TermTupleIndex.make((ulong)termTuples.Count);

            termTuples.Add(TermTuple.makeByReferers(referers));
            if (!termTupleIndicesByTermTupleHash.ContainsKey(hash))
            {
                termTupleIndicesByTermTupleHash[hash] = new List <TermTupleIndex>()
                {
                    insertionIndex
                };
                return(insertionIndex);
            }

            termTupleIndicesByTermTupleHash[hash].Add(insertionIndex);

            return(insertionIndex);
        }