/// <summary> /// Adds the intervals to the containers in batch mode. /// </summary> /// <param name="newSymbols">Intervals.</param> public void Add(IEnumerable <Symbol> newSymbols) { var sortedIntervals = SelectDistinctViaImportance(newSymbols).ToArray(); Array.Sort(sortedIntervals, comparer); if (Count > 0) { List <Symbol> createdSymbols; List <Symbol> deletedSymbols; MergeInSymbolArray(sortedIntervals, out createdSymbols, out deletedSymbols); foreach (var deletedSymbol in deletedSymbols) { owner.RemoveSymbolFromNameLookup(deletedSymbol); } foreach (var createdSymbol in createdSymbols) { owner.AddSymbolToNameLookup(SymbolLookup.GetUnique(createdSymbol)); } } else { symbols = sortedIntervals; } Count = symbols.Length; RebuildEnclosingIntervals(); }
public SortedIntervals(SymbolLookup owner) { this.owner = owner; symbols = new Symbol[0]; indexOfEnclosingInterval = new int[0]; Count = 0; }