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