private readonly Term lastTerm = new Term(""); // LUCENENET: marked readonly /// <summary> /// add a term </summary> public virtual void Add(Term term) { if (Debugging.AssertsEnabled) { Debugging.Assert(lastTerm.Equals(new Term("")) || term.CompareTo(lastTerm) > 0); } try { int prefix = SharedPrefix(lastTerm.Bytes, term.Bytes); int suffix = term.Bytes.Length - prefix; if (term.Field.Equals(lastTerm.Field, StringComparison.Ordinal)) { output.WriteVInt32(prefix << 1); } else { output.WriteVInt32(prefix << 1 | 1); output.WriteString(term.Field); } output.WriteVInt32(suffix); output.WriteBytes(term.Bytes.Bytes, term.Bytes.Offset + prefix, suffix); lastTerm.Bytes.CopyBytes(term.Bytes); lastTerm.Field = term.Field; } catch (IOException e) { throw new Exception(e.ToString(), e); } }
// used only by assert private bool CheckDeleteTerm(Term term) { if (term != null) { Debug.Assert(lastDeleteTerm == null || term.CompareTo(lastDeleteTerm) > 0, "lastTerm=" + lastDeleteTerm + " vs term=" + term); } // TODO: we re-use term now in our merged iterable, but we shouldn't clone, instead copy for this assert lastDeleteTerm = term == null ? null : new Term(term.Field, BytesRef.DeepCopyOf(term.Bytes)); return(true); }