http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsFormat.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsFormat.cs b/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsFormat.cs index 9ab1706..8f64077 100644 --- a/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsFormat.cs +++ b/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsFormat.cs @@ -30,26 +30,21 @@ namespace Lucene.Net.Codecs.Pulsing /// </summary> public abstract class PulsingPostingsFormat : PostingsFormat { - private readonly int _freqCutoff; private readonly int _minBlockSize; private readonly int _maxBlockSize; private readonly PostingsBaseFormat _wrappedPostingsBaseFormat; - public int FreqCutoff - { - get { return _freqCutoff; } - } - - protected PulsingPostingsFormat(String name, PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff) : - this(name, wrappedPostingsBaseFormat, freqCutoff, BlockTreeTermsWriter.DEFAULT_MIN_BLOCK_SIZE, + public PulsingPostingsFormat(string name, PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff) + : this(name, wrappedPostingsBaseFormat, freqCutoff, BlockTreeTermsWriter.DEFAULT_MIN_BLOCK_SIZE, BlockTreeTermsWriter.DEFAULT_MAX_BLOCK_SIZE) { } /// <summary>Terms with freq less than or equal freqCutoff are inlined into terms dict.</summary> - protected PulsingPostingsFormat(String name, PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff, - int minBlockSize, int maxBlockSize) : base(name) + public PulsingPostingsFormat(string name, PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff, + int minBlockSize, int maxBlockSize) + : base(name) { Debug.Assert(minBlockSize > 1); @@ -59,7 +54,7 @@ namespace Lucene.Net.Codecs.Pulsing _wrappedPostingsBaseFormat = wrappedPostingsBaseFormat; } - public override String ToString() + public override string ToString() { return string.Format("{0} (freqCutoff={1}, minBlockSize={2}, maxBlockSize={3})", Name, _freqCutoff, _minBlockSize, _maxBlockSize); } @@ -121,5 +116,10 @@ namespace Lucene.Net.Codecs.Pulsing } } } + + public virtual int FreqCutoff + { + get { return _freqCutoff; } + } } } \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsReader.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsReader.cs b/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsReader.cs index aaca6da..1e24672 100644 --- a/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsReader.cs +++ b/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsReader.cs @@ -15,6 +15,8 @@ * limitations under the License. */ +using Lucene.Net.Support; + namespace Lucene.Net.Codecs.Pulsing { @@ -36,7 +38,6 @@ namespace Lucene.Net.Codecs.Pulsing /// </summary> public class PulsingPostingsReader : PostingsReaderBase { - // Fallback reader for non-pulsed terms: private readonly PostingsReaderBase _wrappedPostingsReader; private readonly SegmentReadState _segmentState; @@ -94,6 +95,66 @@ namespace Lucene.Net.Codecs.Pulsing } } + internal class PulsingTermState : BlockTermState + { + internal bool Absolute { get; set; } + [WritableArray] + internal long[] Longs { get; set; } + [WritableArray] + internal byte[] Postings { get; set; } + internal int PostingsSize { get; set; } // -1 if this term was not inlined + internal BlockTermState WrappedTermState { get; set; } + + public override object Clone() + { + var clone = (PulsingTermState)base.Clone(); + if (PostingsSize != -1) + { + clone.Postings = new byte[PostingsSize]; + Array.Copy(Postings, 0, clone.Postings, 0, PostingsSize); + } + else + { + Debug.Assert(WrappedTermState != null); + clone.WrappedTermState = (BlockTermState)WrappedTermState.Clone(); + clone.Absolute = Absolute; + + if (Longs == null) return clone; + + clone.Longs = new long[Longs.Length]; + Array.Copy(Longs, 0, clone.Longs, 0, Longs.Length); + } + return clone; + } + + public override void CopyFrom(TermState other) + { + base.CopyFrom(other); + var _other = (PulsingTermState)other; + PostingsSize = _other.PostingsSize; + if (_other.PostingsSize != -1) + { + if (Postings == null || Postings.Length < _other.PostingsSize) + { + Postings = new byte[ArrayUtil.Oversize(_other.PostingsSize, 1)]; + } + Array.Copy(_other.Postings, 0, Postings, 0, _other.PostingsSize); + } + else + { + WrappedTermState.CopyFrom(_other.WrappedTermState); + } + } + + public override string ToString() + { + if (PostingsSize == -1) + return "PulsingTermState: not inlined: wrapped=" + WrappedTermState; + + return "PulsingTermState: inlined size=" + PostingsSize + " " + base.ToString(); + } + } + public override BlockTermState NewTermState() { return new PulsingTermState {WrappedTermState = _wrappedPostingsReader.NewTermState()}; @@ -247,125 +308,7 @@ namespace Lucene.Net.Codecs.Pulsing return wrapped; } - public override long RamBytesUsed() - { - return ((_wrappedPostingsReader != null) ? _wrappedPostingsReader.RamBytesUsed() : 0); - } - - public override void CheckIntegrity() - { - _wrappedPostingsReader.CheckIntegrity(); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _wrappedPostingsReader.Dispose(); - } - } - - /// <summary> - /// for a docsenum, gets the 'other' reused enum. - /// Example: Pulsing(Standard). - /// when doing a term range query you are switching back and forth - /// between Pulsing and Standard - /// - /// The way the reuse works is that Pulsing.other = Standard and - /// Standard.other = Pulsing. - /// </summary> - private DocsEnum GetOther(DocsEnum de) - { - if (de == null) - return null; - - var atts = de.Attributes; - DocsEnum result; - atts.AddAttribute<IPulsingEnumAttribute>().Enums().TryGetValue(this, out result); - return result; - } - - /// <summary> - /// for a docsenum, sets the 'other' reused enum. - /// see GetOther for an example. - /// </summary> - private DocsEnum SetOther(DocsEnum de, DocsEnum other) - { - var atts = de.Attributes; - return atts.AddAttribute<IPulsingEnumAttribute>().Enums()[this] = other; - } - - ///<summary> - /// A per-docsenum attribute that stores additional reuse information - /// so that pulsing enums can keep a reference to their wrapped enums, - /// and vice versa. this way we can always reuse. - /// - /// @lucene.internal - /// </summary> - public interface IPulsingEnumAttribute : IAttribute - { - Dictionary<PulsingPostingsReader, DocsEnum> Enums(); // LUCENENET TODO: Make property, change to IDictionary - } - - internal class PulsingTermState : BlockTermState - { - public bool Absolute { get; set; } - public long[] Longs { get; set; } - public byte[] Postings { get; set; } - public int PostingsSize { get; set; } // -1 if this term was not inlined - public BlockTermState WrappedTermState { get; set; } - - public override object Clone() - { - var clone = (PulsingTermState) base.Clone(); - if (PostingsSize != -1) - { - clone.Postings = new byte[PostingsSize]; - Array.Copy(Postings, 0, clone.Postings, 0, PostingsSize); - } - else - { - Debug.Assert(WrappedTermState != null); - clone.WrappedTermState = (BlockTermState) WrappedTermState.Clone(); - clone.Absolute = Absolute; - - if (Longs == null) return clone; - - clone.Longs = new long[Longs.Length]; - Array.Copy(Longs, 0, clone.Longs, 0, Longs.Length); - } - return clone; - } - - public override void CopyFrom(TermState other) - { - base.CopyFrom(other); - var _other = (PulsingTermState) other; - PostingsSize = _other.PostingsSize; - if (_other.PostingsSize != -1) - { - if (Postings == null || Postings.Length < _other.PostingsSize) - { - Postings = new byte[ArrayUtil.Oversize(_other.PostingsSize, 1)]; - } - Array.Copy(_other.Postings, 0, Postings, 0, _other.PostingsSize); - } - else - { - WrappedTermState.CopyFrom(_other.WrappedTermState); - } - } - - public override String ToString() - { - if (PostingsSize == -1) - return "PulsingTermState: not inlined: wrapped=" + WrappedTermState; - - return "PulsingTermState: inlined size=" + PostingsSize + " " + base.ToString(); - } - } - - internal class PulsingDocsEnum : DocsEnum + private class PulsingDocsEnum : DocsEnum { private byte[] _postingsBytes; private readonly ByteArrayDataInput _postings = new ByteArrayDataInput(); @@ -387,7 +330,7 @@ namespace Lucene.Net.Codecs.Pulsing _storeOffsets = _indexOptions.Value.CompareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS) >= 0; } - public PulsingDocsEnum Reset(IBits liveDocs, PulsingTermState termState) + public virtual PulsingDocsEnum Reset(IBits liveDocs, PulsingTermState termState) { Debug.Assert(termState.PostingsSize != -1); @@ -412,23 +355,18 @@ namespace Lucene.Net.Codecs.Pulsing return this; } - public bool CanReuse(FieldInfo fieldInfo) + internal bool CanReuse(FieldInfo fieldInfo) { return _indexOptions == fieldInfo.IndexOptions && _storePayloads == fieldInfo.HasPayloads; } - public override int DocID - { - get { return _docId; } - } - public override int NextDoc() { while (true) { if (_postings.Eof) return _docId = NO_MORE_DOCS; - + var code = _postings.ReadVInt(); if (_indexOptions == IndexOptions.DOCS_ONLY) { @@ -483,6 +421,16 @@ namespace Lucene.Net.Codecs.Pulsing } } + public override int Freq + { + get { return _freq; } + } + + public override int DocID + { + get { return _docId; } + } + public override int Advance(int target) { return _docId = SlowAdvance(target); @@ -492,14 +440,9 @@ namespace Lucene.Net.Codecs.Pulsing { return _cost; } - - public override int Freq - { - get { return _freq; } - } } - internal class PulsingDocsAndPositionsEnum : DocsAndPositionsEnum + private class PulsingDocsAndPositionsEnum : DocsAndPositionsEnum { private byte[] _postingsBytes; private readonly ByteArrayDataInput _postings = new ByteArrayDataInput(); @@ -531,7 +474,12 @@ namespace Lucene.Net.Codecs.Pulsing _indexOptions.Value.CompareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS) >= 0; } - public PulsingDocsAndPositionsEnum Reset(IBits liveDocs, PulsingTermState termState) + internal bool CanReuse(FieldInfo fieldInfo) + { + return _indexOptions == fieldInfo.IndexOptions && _storePayloads == fieldInfo.HasPayloads; + } + + public virtual PulsingDocsAndPositionsEnum Reset(IBits liveDocs, PulsingTermState termState) { Debug.Assert(termState.PostingsSize != -1); @@ -558,11 +506,6 @@ namespace Lucene.Net.Codecs.Pulsing return this; } - public bool CanReuse(FieldInfo fieldInfo) - { - return _indexOptions == fieldInfo.IndexOptions && _storePayloads == fieldInfo.HasPayloads; - } - public override int NextDoc() { while (true) @@ -651,13 +594,26 @@ namespace Lucene.Net.Codecs.Pulsing get { return _startOffset + _offsetLength; } } + private void SkipPositions() + { + while (_posPending != 0) + { + NextPosition(); + } + if (_storePayloads && !_payloadRetrieved) + { + _postings.SkipBytes(_payloadLength); + _payloadRetrieved = true; + } + } + public override BytesRef Payload { get { if (_payloadRetrieved) return _payload; - + if (_storePayloads && _payloadLength > 0) { _payloadRetrieved = true; @@ -673,37 +629,74 @@ namespace Lucene.Net.Codecs.Pulsing _payload.Length = _payloadLength; return _payload; } - + return null; } } - private void SkipPositions() - { - while (_posPending != 0) - { - NextPosition(); - } - if (_storePayloads && !_payloadRetrieved) - { - _postings.SkipBytes(_payloadLength); - _payloadRetrieved = true; - } - } - public override long GetCost() { return _cost; } } - + + protected override void Dispose(bool disposing) + { + if (disposing) + { + _wrappedPostingsReader.Dispose(); + } + } + + /// <summary> + /// for a docsenum, gets the 'other' reused enum. + /// Example: Pulsing(Standard). + /// when doing a term range query you are switching back and forth + /// between Pulsing and Standard + /// + /// The way the reuse works is that Pulsing.other = Standard and + /// Standard.other = Pulsing. + /// </summary> + private DocsEnum GetOther(DocsEnum de) + { + if (de == null) + return null; + + var atts = de.Attributes; + DocsEnum result; + atts.AddAttribute<IPulsingEnumAttribute>().Enums().TryGetValue(this, out result); + return result; + } + + /// <summary> + /// for a docsenum, sets the 'other' reused enum. + /// see GetOther for an example. + /// </summary> + private DocsEnum SetOther(DocsEnum de, DocsEnum other) + { + var atts = de.Attributes; + return atts.AddAttribute<IPulsingEnumAttribute>().Enums()[this] = other; + } + + ///<summary> + /// A per-docsenum attribute that stores additional reuse information + /// so that pulsing enums can keep a reference to their wrapped enums, + /// and vice versa. this way we can always reuse. + /// + /// @lucene.internal + /// </summary> + public interface IPulsingEnumAttribute : IAttribute + { + Dictionary<PulsingPostingsReader, DocsEnum> Enums(); // LUCENENET TODO: Make property, change to IDictionary + } + /// <summary> /// Implementation of {@link PulsingEnumAttribute} for reuse of /// wrapped postings readers underneath pulsing. /// /// @lucene.internal /// </summary> - internal sealed class PulsingEnumAttribute : Util.Attribute, IPulsingEnumAttribute + public sealed class PulsingEnumAttribute : Util.Attribute, IPulsingEnumAttribute { // we could store 'other', but what if someone 'chained' multiple postings readers, // this could cause problems? @@ -730,5 +723,15 @@ namespace Lucene.Net.Codecs.Pulsing // we don't want to copy any stuff over to another docsenum ever! } } + + public override long RamBytesUsed() + { + return ((_wrappedPostingsReader != null) ? _wrappedPostingsReader.RamBytesUsed() : 0); + } + + public override void CheckIntegrity() + { + _wrappedPostingsReader.CheckIntegrity(); + } } } http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsWriter.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsWriter.cs b/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsWriter.cs index 298eebd..f93b2b0 100644 --- a/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsWriter.cs +++ b/src/Lucene.Net.Codecs/Pulsing/PulsingPostingsWriter.cs @@ -42,9 +42,8 @@ namespace Lucene.Net.Codecs.Pulsing /// </summary> public sealed class PulsingPostingsWriter : PostingsWriterBase { - - internal static readonly String CODEC = "PulsedPostingsWriter"; - internal static readonly String SUMMARY_EXTENSION = "smy"; // recording field summary + internal static readonly string CODEC = "PulsedPostingsWriter"; + internal static readonly string SUMMARY_EXTENSION = "smy"; // recording field summary // To add a new version, increment from the last one, and // change VERSION_CURRENT to point to your new version: @@ -65,10 +64,10 @@ namespace Lucene.Net.Codecs.Pulsing private class PulsingTermState : BlockTermState { - internal byte[] BYTES; - internal BlockTermState WRAPPED_STATE; + internal byte[] BYTES; // LUCENENET TODO: Rename bytes + internal BlockTermState WRAPPED_STATE; // LUCENENET TODO: Rename wrappedState - public override String ToString() + public override string ToString() { if (BYTES != null) { @@ -95,8 +94,8 @@ namespace Lucene.Net.Codecs.Pulsing private class FieldMetaData { - public int FieldNumber { get; private set; } - public int LongsSize { get; private set; } + internal int FieldNumber { get; private set; } + internal int LongsSize { get; private set; } public FieldMetaData(int number, int size) { @@ -118,7 +117,6 @@ namespace Lucene.Net.Codecs.Pulsing /// </summary> public PulsingPostingsWriter(SegmentWriteState state, int maxPositions, PostingsWriterBase wrappedPostingsWriter) { - _pending = new Position[maxPositions]; for (var i = 0; i < maxPositions; i++) { @@ -170,6 +168,8 @@ namespace Lucene.Net.Codecs.Pulsing return 0; } + private bool DEBUG; + public override void StartDoc(int docId, int termDocFreq) { Debug.Assert(docId >= 0, "Got DocID=" + docId); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/RectangularArrays.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/RectangularArrays.cs b/src/Lucene.Net.Codecs/RectangularArrays.cs index 9b41c8a..476fc1b 100644 --- a/src/Lucene.Net.Codecs/RectangularArrays.cs +++ b/src/Lucene.Net.Codecs/RectangularArrays.cs @@ -5,7 +5,7 @@ // This class provides the logic to simulate Java rectangular arrays, which are jagged // arrays with inner arrays of the same length. A size of -1 indicates unknown length. //---------------------------------------------------------------------------------------- -internal static partial class RectangularArrays +internal static partial class RectangularArrays // LUCENENET TODO: Move to Support ? { internal static long[][] ReturnRectangularLongArray(int Size1, int Size2) { http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Sep/IntIndexInput.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Sep/IntIndexInput.cs b/src/Lucene.Net.Codecs/Sep/IntIndexInput.cs index d08b7d4..6c46a3c 100644 --- a/src/Lucene.Net.Codecs/Sep/IntIndexInput.cs +++ b/src/Lucene.Net.Codecs/Sep/IntIndexInput.cs @@ -29,15 +29,15 @@ namespace Lucene.Net.Codecs.Sep /// </summary> public abstract class IntIndexInput : IDisposable { - public abstract IntIndexInputReader Reader(); + public abstract IntIndexInputReader Reader(); // LUCENENET TODO: Rename GetReader() public abstract void Dispose(); - public abstract IntIndexInputIndex Index(); + public abstract IntIndexInputIndex Index(); // LUCENENET TODO: Rename GetIndex() } /// <summary>Reads int values</summary> - public abstract class IntIndexInputReader + public abstract class IntIndexInputReader // LUCENENET TODO: Rename AbstractReader and nest within IntIndexInput { /// <summary>Reads next single int</summary> public abstract int Next(); @@ -45,7 +45,7 @@ namespace Lucene.Net.Codecs.Sep /// <summary> /// Records a single skip-point in the <seealso cref="IntIndexInput.Reader"/>. </summary> - public abstract class IntIndexInputIndex + public abstract class IntIndexInputIndex // LUCENENET TODO: Rename AbstractIndex and nest within IntIndexInput { public abstract void Read(DataInput indexIn, bool absolute); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Sep/IntIndexOutput.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Sep/IntIndexOutput.cs b/src/Lucene.Net.Codecs/Sep/IntIndexOutput.cs index e7c51e9..aca46c2 100644 --- a/src/Lucene.Net.Codecs/Sep/IntIndexOutput.cs +++ b/src/Lucene.Net.Codecs/Sep/IntIndexOutput.cs @@ -34,9 +34,6 @@ namespace Lucene.Net.Codecs.Sep /// </remarks> public abstract class IntIndexOutput : IDisposable { - protected internal IndexOutput OUTPUT; - protected internal int _upto; - /// <summary> /// Write an int to the primary file. The value must be /// >= 0. @@ -47,14 +44,14 @@ namespace Lucene.Net.Codecs.Sep /// If you are indexing the primary output file, call /// this and interact with the returned IndexWriter. /// </summary> - public abstract IntIndexOutputIndex Index(); + public abstract IntIndexOutputIndex Index(); // LUCENENET TODO: Rename GetIndex() - public abstract void Dispose(); + public abstract void Dispose(); // LUCENENET TODO: Implement disposable pattern } /// <summary>Records a single skip-point in the IndexOutput. </summary> - public abstract class IntIndexOutputIndex + public abstract class IntIndexOutputIndex // LUCENENET TODO: Rename AbstractIndex and nest within IntIndexOutput { /// <summary>Internally records the current location </summary> http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Sep/IntStreamFactory.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Sep/IntStreamFactory.cs b/src/Lucene.Net.Codecs/Sep/IntStreamFactory.cs index a718d27..1f84e48 100644 --- a/src/Lucene.Net.Codecs/Sep/IntStreamFactory.cs +++ b/src/Lucene.Net.Codecs/Sep/IntStreamFactory.cs @@ -27,7 +27,6 @@ namespace Lucene.Net.Codecs.Sep /// </summary> public abstract class IntStreamFactory { - /// <summary> /// Create an <seealso cref="IntIndexInput"/> on the provided fileName. /// </summary> @@ -38,5 +37,4 @@ namespace Lucene.Net.Codecs.Sep /// </summary> public abstract IntIndexOutput CreateOutput(Directory dir, string fileName, IOContext context); } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Sep/SepPostingsReader.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Sep/SepPostingsReader.cs b/src/Lucene.Net.Codecs/Sep/SepPostingsReader.cs index 797ce4c..60cbd18 100644 --- a/src/Lucene.Net.Codecs/Sep/SepPostingsReader.cs +++ b/src/Lucene.Net.Codecs/Sep/SepPostingsReader.cs @@ -115,6 +115,78 @@ namespace Lucene.Net.Codecs.Sep IOUtils.Close(_freqIn, _docIn, _skipIn, _posIn, _payloadIn); } + internal sealed class SepTermState : BlockTermState + { + // We store only the seek point to the docs file because + // the rest of the info (freqIndex, posIndex, etc.) is + // stored in the docs file: + internal IntIndexInputIndex DOC_INDEX; + internal IntIndexInputIndex POS_INDEX; + internal IntIndexInputIndex FREQ_INDEX; + internal long PAYLOAD_FP; + internal long SKIP_FP; + + public override object Clone() + { + var other = new SepTermState(); + other.CopyFrom(this); + return other; + } + + public override void CopyFrom(TermState tsOther) + { + base.CopyFrom(tsOther); + + var other = (SepTermState)tsOther; + if (DOC_INDEX == null) + { + DOC_INDEX = other.DOC_INDEX.Clone(); + } + else + { + DOC_INDEX.CopyFrom(other.DOC_INDEX); + } + if (other.FREQ_INDEX != null) + { + if (FREQ_INDEX == null) + { + FREQ_INDEX = other.FREQ_INDEX.Clone(); + } + else + { + FREQ_INDEX.CopyFrom(other.FREQ_INDEX); + } + } + else + { + FREQ_INDEX = null; + } + if (other.POS_INDEX != null) + { + if (POS_INDEX == null) + { + POS_INDEX = other.POS_INDEX.Clone(); + } + else + { + POS_INDEX.CopyFrom(other.POS_INDEX); + } + } + else + { + POS_INDEX = null; + } + PAYLOAD_FP = other.PAYLOAD_FP; + SKIP_FP = other.SKIP_FP; + } + + public override string ToString() + { + return base.ToString() + " docIndex=" + DOC_INDEX + " freqIndex=" + FREQ_INDEX + " posIndex=" + POS_INDEX + + " payloadFP=" + PAYLOAD_FP + " skipFP=" + SKIP_FP; + } + } + public override BlockTermState NewTermState() { var state = new SepTermState {DOC_INDEX = _docIn.Index()}; @@ -222,89 +294,6 @@ namespace Lucene.Net.Codecs.Sep return postingsEnum.Init(fieldInfo, termState, liveDocs); } - public override long RamBytesUsed() - { - return 0; - } - - public override void CheckIntegrity() - { - // TODO: remove sep layout, its fallen behind on features... - } - - internal sealed class SepTermState : BlockTermState - { - // We store only the seek point to the docs file because - // the rest of the info (freqIndex, posIndex, etc.) is - // stored in the docs file: - internal IntIndexInputIndex DOC_INDEX; - internal IntIndexInputIndex POS_INDEX; - internal IntIndexInputIndex FREQ_INDEX; - internal long PAYLOAD_FP; - internal long SKIP_FP; - - public override object Clone() - { - var other = new SepTermState(); - other.CopyFrom(this); - return other; - } - - public override void CopyFrom(TermState tsOther) - { - base.CopyFrom(tsOther); - - var other = (SepTermState)tsOther; - if (DOC_INDEX == null) - { - DOC_INDEX = other.DOC_INDEX.Clone(); - } - else - { - DOC_INDEX.CopyFrom(other.DOC_INDEX); - } - if (other.FREQ_INDEX != null) - { - if (FREQ_INDEX == null) - { - FREQ_INDEX = other.FREQ_INDEX.Clone(); - } - else - { - FREQ_INDEX.CopyFrom(other.FREQ_INDEX); - } - } - else - { - FREQ_INDEX = null; - } - if (other.POS_INDEX != null) - { - if (POS_INDEX == null) - { - POS_INDEX = other.POS_INDEX.Clone(); - } - else - { - POS_INDEX.CopyFrom(other.POS_INDEX); - } - } - else - { - POS_INDEX = null; - } - PAYLOAD_FP = other.PAYLOAD_FP; - SKIP_FP = other.SKIP_FP; - } - - public override string ToString() - { - return base.ToString() + " docIndex=" + DOC_INDEX + " freqIndex=" + FREQ_INDEX + " posIndex=" + POS_INDEX + - " payloadFP=" + PAYLOAD_FP + " skipFP=" + SKIP_FP; - } - } - - internal class SepDocsEnum : DocsEnum { private readonly SepPostingsReader _outerInstance; @@ -327,14 +316,13 @@ namespace Lucene.Net.Codecs.Sep private readonly IntIndexInputIndex _docIndex; private readonly IntIndexInputIndex _freqIndex; private readonly IntIndexInputIndex _posIndex; + internal IntIndexInput START_DOC_IN; // LUCENENET TODO: Rename startDocIn // TODO: -- should we do hasProx with 2 different enum classes? private bool _skipped; private SepSkipListReader _skipper; - internal IntIndexInput START_DOC_IN; - internal SepDocsEnum(SepPostingsReader outerInstance) { _outerInstance = outerInstance; @@ -389,7 +377,6 @@ namespace Lucene.Net.Codecs.Sep public override int NextDoc() { - while (true) { if (_count == _docFreq) @@ -429,17 +416,15 @@ namespace Lucene.Net.Codecs.Sep public override int Advance(int target) { - if ((target - _outerInstance._skipInterval) >= _doc && _docFreq >= _outerInstance._skipMinimum) { - // There are enough docs in the posting to have // skip data, and its not too close if (_skipper == null) { // This DocsEnum has never done any skipping - _skipper = new SepSkipListReader((IndexInput) _outerInstance._skipIn.Clone(), + _skipper = new SepSkipListReader((IndexInput)_outerInstance._skipIn.Clone(), _outerInstance._freqIn, _outerInstance._docIn, _outerInstance._posIn, _outerInstance._maxSkipLevels, _outerInstance._skipInterval); @@ -492,7 +477,6 @@ namespace Lucene.Net.Codecs.Sep internal class SepDocsAndPositionsEnum : DocsAndPositionsEnum { private readonly SepPostingsReader _outerInstance; - private BytesRef _payload; private int _docFreq; private int _doc = -1; @@ -511,6 +495,7 @@ namespace Lucene.Net.Codecs.Sep private readonly IntIndexInputIndex _docIndex; private readonly IntIndexInputIndex _freqIndex; private readonly IntIndexInputIndex _posIndex; + internal IntIndexInput START_DOC_IN; // LUCENENET TODO: Rename startDocIn private long _payloadFp; @@ -524,8 +509,6 @@ namespace Lucene.Net.Codecs.Sep private bool _payloadPending; private bool _posSeekPending; - internal IntIndexInput START_DOC_IN; - internal SepDocsAndPositionsEnum(SepPostingsReader outerInstance) { _outerInstance = outerInstance; @@ -730,6 +713,8 @@ namespace Lucene.Net.Codecs.Sep get { return -1; } } + private BytesRef _payload; + public override BytesRef Payload { get @@ -772,5 +757,15 @@ namespace Lucene.Net.Codecs.Sep return _docFreq; } } + + public override long RamBytesUsed() + { + return 0; + } + + public override void CheckIntegrity() + { + // TODO: remove sep layout, its fallen behind on features... + } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Sep/SepPostingsWriter.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Sep/SepPostingsWriter.cs b/src/Lucene.Net.Codecs/Sep/SepPostingsWriter.cs index b34c584..17f3eed 100644 --- a/src/Lucene.Net.Codecs/Sep/SepPostingsWriter.cs +++ b/src/Lucene.Net.Codecs/Sep/SepPostingsWriter.cs @@ -42,20 +42,20 @@ namespace Lucene.Net.Codecs.Sep internal const int VERSION_START = 0; internal const int VERSION_CURRENT = VERSION_START; - internal IntIndexOutput FREQ_OUT; - internal IntIndexOutputIndex FREQ_INDEX; + internal IntIndexOutput FREQ_OUT; // LUCENENET TODO: Rename freqOut + internal IntIndexOutputIndex FREQ_INDEX; // LUCENENET TODO: Rename camelCase - internal IntIndexOutput POS_OUT; - internal IntIndexOutputIndex POS_INDEX; + internal IntIndexOutput POS_OUT; // LUCENENET TODO: Rename camelCase + internal IntIndexOutputIndex POS_INDEX; // LUCENENET TODO: Rename camelCase - internal IntIndexOutput DOC_OUT; - internal IntIndexOutputIndex DOC_INDEX; + internal IntIndexOutput DOC_OUT; // LUCENENET TODO: Rename camelCase + internal IntIndexOutputIndex DOC_INDEX; // LUCENENET TODO: Rename camelCase - internal IndexOutput PAYLOAD_OUT; + internal IndexOutput PAYLOAD_OUT; // LUCENENET TODO: Rename camelCase - internal IndexOutput SKIP_OUT; + internal IndexOutput SKIP_OUT; // LUCENENET TODO: Rename camelCase - internal readonly SepSkipListWriter SKIP_LIST_WRITER; + internal readonly SepSkipListWriter SKIP_LIST_WRITER; // LUCENENET TODO: Rename camelCase /// <summary> /// Expert: The fraction of TermDocs entries stored in skip tables, @@ -64,37 +64,37 @@ namespace Lucene.Net.Codecs.Sep /// smaller values result in bigger indexes, less acceleration and more /// accelerable cases. More detailed experiments would be useful here. /// </summary> - internal readonly int SKIP_INTERVAL; + internal readonly int SKIP_INTERVAL; // LUCENENET TODO: Rename camelCase internal const int DEFAULT_SKIP_INTERVAL = 16; /// <summary> /// Expert: minimum docFreq to write any skip data at all /// </summary> - internal readonly int SKIP_MINIMUM; + internal readonly int SKIP_MINIMUM; // LUCENENET TODO: Rename camelCase /// <summary> /// Expert: The maximum number of skip levels. Smaller values result in /// slightly smaller indexes, but slower skipping in big posting lists. /// </summary> - internal readonly int MAX_SKIP_LEVELS = 10; + internal readonly int MAX_SKIP_LEVELS = 10; // LUCENENET TODO: Rename camelCase - internal readonly int TOTAL_NUM_DOCS; + internal readonly int TOTAL_NUM_DOCS; // LUCENENET TODO: Rename camelCase - internal bool STORE_PAYLOADS; - internal IndexOptions INDEX_OPTIONS; + internal bool STORE_PAYLOADS; // LUCENENET TODO: Rename camelCase + internal IndexOptions INDEX_OPTIONS; // LUCENENET TODO: Rename camelCase - internal FieldInfo FIELD_INFO; + internal FieldInfo FIELD_INFO; // LUCENENET TODO: Rename - internal int LAST_PAYLOAD_LENGTH; - internal int LAST_POSITION; - internal long PAYLOAD_START; - internal int LAST_DOC_ID; - internal int DF; + internal int LAST_PAYLOAD_LENGTH; // LUCENENET TODO: Rename camelCase + internal int LAST_POSITION; // LUCENENET TODO: Rename camelCase + internal long PAYLOAD_START; // LUCENENET TODO: Rename camelCase + internal int LAST_DOC_ID; // LUCENENET TODO: Rename camelCase + internal int DF; // LUCENENET TODO: Rename camelCase private SepTermState _lastState; - internal long LAST_PAYLOAD_FP; - internal long LAST_SKIP_FP; + internal long LAST_PAYLOAD_FP; // LUCENENET TODO: Rename camelCase + internal long LAST_SKIP_FP; // LUCENENET TODO: Rename camelCase public SepPostingsWriter(SegmentWriteState state, IntStreamFactory factory) : this(state, factory, DEFAULT_SKIP_INTERVAL) @@ -407,5 +407,4 @@ namespace Lucene.Net.Codecs.Sep IOUtils.Close(DOC_OUT, SKIP_OUT, FREQ_OUT, POS_OUT, PAYLOAD_OUT); } } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Sep/SepSkipListReader.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Sep/SepSkipListReader.cs b/src/Lucene.Net.Codecs/Sep/SepSkipListReader.cs index 9c5642f..1491df4 100644 --- a/src/Lucene.Net.Codecs/Sep/SepSkipListReader.cs +++ b/src/Lucene.Net.Codecs/Sep/SepSkipListReader.cs @@ -88,7 +88,6 @@ namespace Lucene.Net.Codecs.Sep internal virtual void Init(long skipPointer, IntIndexInputIndex docBaseIndex, IntIndexInputIndex freqBaseIndex, IntIndexInputIndex posBaseIndex, long payloadBasePointer, int df, bool storesPayloads) { - base.Init(skipPointer, df); _currentFieldStoresPayloads = storesPayloads; @@ -208,5 +207,4 @@ namespace Lucene.Net.Codecs.Sep return delta; } } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/Sep/SepSkipListWriter.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/Sep/SepSkipListWriter.cs b/src/Lucene.Net.Codecs/Sep/SepSkipListWriter.cs index 639af28..13f9529 100644 --- a/src/Lucene.Net.Codecs/Sep/SepSkipListWriter.cs +++ b/src/Lucene.Net.Codecs/Sep/SepSkipListWriter.cs @@ -22,202 +22,202 @@ namespace Lucene.Net.Codecs.Sep using Store; using Support; - /// <summary> - /// Implements the skip list writer for the default posting list format - /// that stores positions and payloads. - /// - /// @lucene.experimental - /// </summary> - /// <remarks> + /// <summary> + /// Implements the skip list writer for the default posting list format + /// that stores positions and payloads. + /// + /// @lucene.experimental + /// </summary> + /// <remarks> /// TODO: -- skip data should somehow be more local to the particular stream /// (doc, freq, pos, payload) - /// </remarks> - internal class SepSkipListWriter : MultiLevelSkipListWriter - { - private readonly int[] _lastSkipDoc; - private readonly int[] _lastSkipPayloadLength; - private readonly long[] _lastSkipPayloadPointer; - private IndexOptions _indexOptions; - - private readonly IntIndexOutputIndex[] _docIndex; - private readonly IntIndexOutputIndex[] _freqIndex; - private readonly IntIndexOutputIndex[] _posIndex; - - private readonly IntIndexOutput _freqOutput; - private IntIndexOutput _posOutput; - private IndexOutput _payloadOutput; - - private int _curDoc; - private bool _curStorePayloads; - private int _curPayloadLength; - private long _curPayloadPointer; - - internal SepSkipListWriter(int skipInterval, int numberOfSkipLevels, int docCount, IntIndexOutput freqOutput, - IntIndexOutput docOutput, IntIndexOutput posOutput, IndexOutput payloadOutput) - : base(skipInterval, numberOfSkipLevels, docCount) - { - - _freqOutput = freqOutput; - _posOutput = posOutput; - _payloadOutput = payloadOutput; - - _lastSkipDoc = new int[numberOfSkipLevels]; - _lastSkipPayloadLength = new int[numberOfSkipLevels]; - // TODO: -- also cutover normal IndexOutput to use getIndex()? - _lastSkipPayloadPointer = new long[numberOfSkipLevels]; - - _freqIndex = new IntIndexOutputIndex[numberOfSkipLevels]; - _docIndex = new IntIndexOutputIndex[numberOfSkipLevels]; - _posIndex = new IntIndexOutputIndex[numberOfSkipLevels]; - - for (var i = 0; i < numberOfSkipLevels; i++) - { - if (freqOutput != null) - { - _freqIndex[i] = freqOutput.Index(); - } - _docIndex[i] = docOutput.Index(); - if (posOutput != null) - { - _posIndex[i] = posOutput.Index(); - } - } - } - - internal virtual IndexOptions IndexOptions - { - set { _indexOptions = value; } - } - - internal virtual IntIndexOutput PosOutput - { - set - { - _posOutput = value; + /// </remarks> + internal class SepSkipListWriter : MultiLevelSkipListWriter + { + private readonly int[] _lastSkipDoc; + private readonly int[] _lastSkipPayloadLength; + private readonly long[] _lastSkipPayloadPointer; + + private readonly IntIndexOutputIndex[] _docIndex; + private readonly IntIndexOutputIndex[] _freqIndex; + private readonly IntIndexOutputIndex[] _posIndex; + + private readonly IntIndexOutput _freqOutput; + private IntIndexOutput _posOutput; + private IndexOutput _payloadOutput; + + private int _curDoc; + private bool _curStorePayloads; + private int _curPayloadLength; + private long _curPayloadPointer; + + internal SepSkipListWriter(int skipInterval, int numberOfSkipLevels, int docCount, IntIndexOutput freqOutput, + IntIndexOutput docOutput, IntIndexOutput posOutput, IndexOutput payloadOutput) + : base(skipInterval, numberOfSkipLevels, docCount) + { + + _freqOutput = freqOutput; + _posOutput = posOutput; + _payloadOutput = payloadOutput; + + _lastSkipDoc = new int[numberOfSkipLevels]; + _lastSkipPayloadLength = new int[numberOfSkipLevels]; + // TODO: -- also cutover normal IndexOutput to use getIndex()? + _lastSkipPayloadPointer = new long[numberOfSkipLevels]; + + _freqIndex = new IntIndexOutputIndex[numberOfSkipLevels]; + _docIndex = new IntIndexOutputIndex[numberOfSkipLevels]; + _posIndex = new IntIndexOutputIndex[numberOfSkipLevels]; + + for (var i = 0; i < numberOfSkipLevels; i++) + { + if (freqOutput != null) + { + _freqIndex[i] = freqOutput.Index(); + } + _docIndex[i] = docOutput.Index(); + if (posOutput != null) + { + _posIndex[i] = posOutput.Index(); + } + } + } + + private IndexOptions _indexOptions; + + internal virtual IndexOptions IndexOptions // LUCENENET TODO: Make SetIndexOptions(IndexOptions v) + { + set { _indexOptions = value; } + } + + internal virtual IntIndexOutput PosOutput // LUCENENET TODO: Make SetPosOutput(IntIndexOutput posOutput) + { + set + { + _posOutput = value; for (var i = 0; i < m_numberOfSkipLevels; i++) - { - _posIndex[i] = value.Index(); - } - } - } - - internal virtual IndexOutput PayloadOutput - { - set { _payloadOutput = value; } - } - - /// <summary> - /// Sets the values for the current skip data. + { + _posIndex[i] = value.Index(); + } + } + } + + internal virtual IndexOutput PayloadOutput // LUCENENET TODO: Make SetPayloadOutput(IndexOutput payloadOutput) + { + set { _payloadOutput = value; } + } + + /// <summary> + /// Sets the values for the current skip data. /// Called @ every index interval (every 128th (by default) doc) - /// </summary> - internal virtual void SetSkipData(int doc, bool storePayloads, int payloadLength) - { - _curDoc = doc; - _curStorePayloads = storePayloads; - _curPayloadLength = payloadLength; - if (_payloadOutput != null) - { - _curPayloadPointer = _payloadOutput.FilePointer; - } - } - - /// <summary> - /// Called @ start of new term - /// </summary> + /// </summary> + internal virtual void SetSkipData(int doc, bool storePayloads, int payloadLength) + { + _curDoc = doc; + _curStorePayloads = storePayloads; + _curPayloadLength = payloadLength; + if (_payloadOutput != null) + { + _curPayloadPointer = _payloadOutput.FilePointer; + } + } + + /// <summary> + /// Called @ start of new term + /// </summary> protected internal virtual void ResetSkip(IntIndexOutputIndex topDocIndex, IntIndexOutputIndex topFreqIndex, - IntIndexOutputIndex topPosIndex) - { - base.ResetSkip(); - - Arrays.Fill(_lastSkipDoc, 0); - Arrays.Fill(_lastSkipPayloadLength, -1); // we don't have to write the first length in the skip list - for (int i = 0; i < m_numberOfSkipLevels; i++) - { - _docIndex[i].CopyFrom(topDocIndex, true); - if (_freqOutput != null) - { - _freqIndex[i].CopyFrom(topFreqIndex, true); - } - if (_posOutput != null) - { - _posIndex[i].CopyFrom(topPosIndex, true); - } - } - if (_payloadOutput != null) - { - Arrays.Fill(_lastSkipPayloadPointer, _payloadOutput.FilePointer); - } - } - - protected override void WriteSkipData(int level, IndexOutput skipBuffer) - { - // To efficiently store payloads in the posting lists we do not store the length of - // every payload. Instead we omit the length for a payload if the previous payload had - // the same length. - // However, in order to support skipping the payload length at every skip point must be known. - // So we use the same length encoding that we use for the posting lists for the skip data as well: - // Case 1: current field does not store payloads - // SkipDatum --> DocSkip, FreqSkip, ProxSkip - // DocSkip,FreqSkip,ProxSkip --> VInt - // DocSkip records the document number before every SkipInterval th document in TermFreqs. - // Document numbers are represented as differences from the previous value in the sequence. - // Case 2: current field stores payloads - // SkipDatum --> DocSkip, PayloadLength?, FreqSkip,ProxSkip - // DocSkip,FreqSkip,ProxSkip --> VInt - // PayloadLength --> VInt - // In this case DocSkip/2 is the difference between - // the current and the previous value. If DocSkip - // is odd, then a PayloadLength encoded as VInt follows, - // if DocSkip is even, then it is assumed that the - // current payload length equals the length at the previous - // skip point + IntIndexOutputIndex topPosIndex) + { + base.ResetSkip(); + + Arrays.Fill(_lastSkipDoc, 0); + Arrays.Fill(_lastSkipPayloadLength, -1); // we don't have to write the first length in the skip list + for (int i = 0; i < m_numberOfSkipLevels; i++) + { + _docIndex[i].CopyFrom(topDocIndex, true); + if (_freqOutput != null) + { + _freqIndex[i].CopyFrom(topFreqIndex, true); + } + if (_posOutput != null) + { + _posIndex[i].CopyFrom(topPosIndex, true); + } + } + if (_payloadOutput != null) + { + Arrays.Fill(_lastSkipPayloadPointer, _payloadOutput.FilePointer); + } + } + + protected override void WriteSkipData(int level, IndexOutput skipBuffer) + { + // To efficiently store payloads in the posting lists we do not store the length of + // every payload. Instead we omit the length for a payload if the previous payload had + // the same length. + // However, in order to support skipping the payload length at every skip point must be known. + // So we use the same length encoding that we use for the posting lists for the skip data as well: + // Case 1: current field does not store payloads + // SkipDatum --> DocSkip, FreqSkip, ProxSkip + // DocSkip,FreqSkip,ProxSkip --> VInt + // DocSkip records the document number before every SkipInterval th document in TermFreqs. + // Document numbers are represented as differences from the previous value in the sequence. + // Case 2: current field stores payloads + // SkipDatum --> DocSkip, PayloadLength?, FreqSkip,ProxSkip + // DocSkip,FreqSkip,ProxSkip --> VInt + // PayloadLength --> VInt + // In this case DocSkip/2 is the difference between + // the current and the previous value. If DocSkip + // is odd, then a PayloadLength encoded as VInt follows, + // if DocSkip is even, then it is assumed that the + // current payload length equals the length at the previous + // skip point Debug.Assert(_indexOptions == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS || !_curStorePayloads); - if (_curStorePayloads) - { - int delta = _curDoc - _lastSkipDoc[level]; - if (_curPayloadLength == _lastSkipPayloadLength[level]) - { - // the current payload length equals the length at the previous skip point, - // so we don't store the length again - skipBuffer.WriteVInt(delta << 1); - } - else - { - // the payload length is different from the previous one. We shift the DocSkip, - // set the lowest bit and store the current payload length as VInt. - skipBuffer.WriteVInt(delta << 1 | 1); - skipBuffer.WriteVInt(_curPayloadLength); - _lastSkipPayloadLength[level] = _curPayloadLength; - } - } - else - { - // current field does not store payloads - skipBuffer.WriteVInt(_curDoc - _lastSkipDoc[level]); - } + if (_curStorePayloads) + { + int delta = _curDoc - _lastSkipDoc[level]; + if (_curPayloadLength == _lastSkipPayloadLength[level]) + { + // the current payload length equals the length at the previous skip point, + // so we don't store the length again + skipBuffer.WriteVInt(delta << 1); + } + else + { + // the payload length is different from the previous one. We shift the DocSkip, + // set the lowest bit and store the current payload length as VInt. + skipBuffer.WriteVInt(delta << 1 | 1); + skipBuffer.WriteVInt(_curPayloadLength); + _lastSkipPayloadLength[level] = _curPayloadLength; + } + } + else + { + // current field does not store payloads + skipBuffer.WriteVInt(_curDoc - _lastSkipDoc[level]); + } if (_indexOptions != IndexOptions.DOCS_ONLY) - { - _freqIndex[level].Mark(); - _freqIndex[level].Write(skipBuffer, false); - } - _docIndex[level].Mark(); - _docIndex[level].Write(skipBuffer, false); - if (_indexOptions == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) - { - _posIndex[level].Mark(); - _posIndex[level].Write(skipBuffer, false); - if (_curStorePayloads) - { - skipBuffer.WriteVInt((int) (_curPayloadPointer - _lastSkipPayloadPointer[level])); - } - } - - _lastSkipDoc[level] = _curDoc; - _lastSkipPayloadPointer[level] = _curPayloadPointer; - } - } - + { + _freqIndex[level].Mark(); + _freqIndex[level].Write(skipBuffer, false); + } + _docIndex[level].Mark(); + _docIndex[level].Write(skipBuffer, false); + if (_indexOptions == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) + { + _posIndex[level].Mark(); + _posIndex[level].Write(skipBuffer, false); + if (_curStorePayloads) + { + skipBuffer.WriteVInt((int)(_curPayloadPointer - _lastSkipPayloadPointer[level])); + } + } + + _lastSkipDoc[level] = _curDoc; + _lastSkipPayloadPointer[level] = _curPayloadPointer; + } + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/SimpleText/SimpleTextCodec.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/SimpleText/SimpleTextCodec.cs b/src/Lucene.Net.Codecs/SimpleText/SimpleTextCodec.cs index 4426e9c..d86b2d5 100644 --- a/src/Lucene.Net.Codecs/SimpleText/SimpleTextCodec.cs +++ b/src/Lucene.Net.Codecs/SimpleText/SimpleTextCodec.cs @@ -36,7 +36,8 @@ namespace Lucene.Net.Codecs.SimpleText private readonly LiveDocsFormat _liveDocs = new SimpleTextLiveDocsFormat(); private readonly DocValuesFormat _dvFormat = new SimpleTextDocValuesFormat(); - public SimpleTextCodec() : base("SimpleText") + public SimpleTextCodec() + : base("SimpleText") { } @@ -80,5 +81,4 @@ namespace Lucene.Net.Codecs.SimpleText get { return _dvFormat; } } } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesFormat.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesFormat.cs b/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesFormat.cs index fdbda1d..b99dc1c 100644 --- a/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesFormat.cs +++ b/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesFormat.cs @@ -119,8 +119,8 @@ namespace Lucene.Net.Codecs.SimpleText /// </summary> public class SimpleTextDocValuesFormat : DocValuesFormat { - - public SimpleTextDocValuesFormat() : base("SimpleText") + public SimpleTextDocValuesFormat() + : base("SimpleText") { } @@ -128,11 +128,10 @@ namespace Lucene.Net.Codecs.SimpleText { return new SimpleTextDocValuesWriter(state, "dat"); } + public override DocValuesProducer FieldsProducer(SegmentReadState state) { return new SimpleTextDocValuesReader(state, "dat"); } - } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesReader.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesReader.cs b/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesReader.cs index fe20ff8..cdea8dc 100644 --- a/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesReader.cs +++ b/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesReader.cs @@ -43,7 +43,7 @@ namespace Lucene.Net.Codecs.SimpleText using StringHelper = Util.StringHelper; using System.Numerics; - public class SimpleTextDocValuesReader : DocValuesProducer + public class SimpleTextDocValuesReader : DocValuesProducer // LUCENENET NOTE: Changed from internal to public because it is subclassed by a public class { internal class OneField { @@ -56,12 +56,13 @@ namespace Lucene.Net.Codecs.SimpleText public long NumValues { get; set; } } - internal readonly int MAX_DOC; - internal readonly IndexInput DATA; - internal readonly BytesRef SCRATCH = new BytesRef(); - internal readonly IDictionary<string, OneField> FIELDS = new Dictionary<string, OneField>(); + private readonly int MAX_DOC; // LUCENENET TODO: Rename camelCase + private readonly IndexInput DATA; // LUCENENET TODO: Rename camelCase + private readonly BytesRef SCRATCH = new BytesRef(); // LUCENENET TODO: Rename camelCase + private readonly IDictionary<string, OneField> FIELDS = new Dictionary<string, OneField>(); // LUCENENET TODO: Rename camelCase - public SimpleTextDocValuesReader(SegmentReadState state, string ext) + // LUCENENET NOTE: Changed from public to internal because the class had to be made public, but is not for public use. + internal SimpleTextDocValuesReader(SegmentReadState state, string ext) { DATA = state.Directory.OpenInput( IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, ext), state.Context); @@ -153,66 +154,49 @@ namespace Lucene.Net.Codecs.SimpleText return new NumericDocValuesAnonymousInnerClassHelper(this, field, @in, scratch); } - public override BinaryDocValues GetBinary(FieldInfo fieldInfo) + private class NumericDocValuesAnonymousInnerClassHelper : NumericDocValues { - var field = FIELDS[fieldInfo.Name]; - Debug.Assert(field != null); - var input = (IndexInput)DATA.Clone(); - var scratch = new BytesRef(); - - return new BinaryDocValuesAnonymousInnerClassHelper(this, field, input, scratch); - } + private readonly SimpleTextDocValuesReader _outerInstance; - public override SortedDocValues GetSorted(FieldInfo fieldInfo) - { - var field = FIELDS[fieldInfo.Name]; + private readonly OneField _field; + private readonly IndexInput _input; + private readonly BytesRef _scratch; - // SegmentCoreReaders already verifies this field is valid: - Debug.Assert(field != null); - var input = (IndexInput)DATA.Clone(); - var scratch = new BytesRef(); + public NumericDocValuesAnonymousInnerClassHelper(SimpleTextDocValuesReader outerInstance, + OneField field, IndexInput input, BytesRef scratch) + { + _outerInstance = outerInstance; + _field = field; + _input = input; + _scratch = scratch; + } - return new SortedDocValuesAnonymousInnerClassHelper(this, field, input, scratch); - } + public override long Get(int docId) + { + if (docId < 0 || docId >= _outerInstance.MAX_DOC) + throw new IndexOutOfRangeException("docID must be 0 .. " + (_outerInstance.MAX_DOC - 1) + + "; got " + docId); - public override SortedSetDocValues GetSortedSet(FieldInfo fieldInfo) - { - var field = FIELDS[fieldInfo.Name]; + _input.Seek(_field.DataStartFilePointer + (1 + _field.Pattern.Length + 2) * docId); + SimpleTextUtil.ReadLine(_input, _scratch); - // SegmentCoreReaders already verifies this field is - // valid: - Debug.Assert(field != null); - var input = (IndexInput) DATA.Clone(); - var scratch = new BytesRef(); - - return new SortedSetDocValuesAnonymousInnerClassHelper(this, field, input, scratch); - } + decimal bd; + try + { + // LUCNENENET: .NET doesn't have a way to specify a pattern with decimal, but all of the standard ones are built in. + bd = decimal.Parse(_scratch.Utf8ToString(), NumberStyles.Float, CultureInfo.InvariantCulture); + } + catch (FormatException ex) + { + throw new CorruptIndexException("failed to parse long value (resource=" + _input + ")", ex); + } - public override IBits GetDocsWithField(FieldInfo field) - { - switch (field.DocValuesType) - { - case DocValuesType.SORTED_SET: - return DocValues.DocsWithValue(GetSortedSet(field), MAX_DOC); - case DocValuesType.SORTED: - return DocValues.DocsWithValue(GetSorted(field), MAX_DOC); - case DocValuesType.BINARY: - return GetBinaryDocsWithField(field); - case DocValuesType.NUMERIC: - return GetNumericDocsWithField(field); - default: - throw new ArgumentOutOfRangeException(); + SimpleTextUtil.ReadLine(_input, _scratch); // read the line telling us if its real or not + return (long)BigInteger.Add(new BigInteger(_field.MinValue), new BigInteger(bd)); } } - protected override void Dispose(bool disposing) - { - if (!disposing) return; - - DATA.Dispose(); - } - private IBits GetNumericDocsWithField(FieldInfo fieldInfo) { var field = FIELDS[fieldInfo.Name]; @@ -221,56 +205,6 @@ namespace Lucene.Net.Codecs.SimpleText return new BitsAnonymousInnerClassHelper(this, field, input, scratch); } - private IBits GetBinaryDocsWithField(FieldInfo fieldInfo) - { - var field = FIELDS[fieldInfo.Name]; - var input = (IndexInput)DATA.Clone(); - var scratch = new BytesRef(); - - return new BitsAnonymousInnerClassHelper2(this, field, input, scratch); - } - - /// <summary> Used only in ctor: </summary> - private void ReadLine() - { - SimpleTextUtil.ReadLine(DATA, SCRATCH); - } - - /// <summary> Used only in ctor: </summary> - private bool StartsWith(BytesRef prefix) - { - return StringHelper.StartsWith(SCRATCH, prefix); - } - - /// <summary> Used only in ctor: </summary> - private string StripPrefix(BytesRef prefix) - { - return Encoding.UTF8.GetString(SCRATCH.Bytes, SCRATCH.Offset + prefix.Length, SCRATCH.Length - prefix.Length); - } - - public override long RamBytesUsed() - { - return 0; - } - - public override void CheckIntegrity() - { - var iScratch = new BytesRef(); - var clone = (IndexInput) DATA.Clone(); - clone.Seek(0); - ChecksumIndexInput input = new BufferedChecksumIndexInput(clone); - while (true) - { - SimpleTextUtil.ReadLine(input, iScratch); - if (!iScratch.Equals(SimpleTextDocValuesWriter.END)) continue; - - SimpleTextUtil.CheckFooter(input); - break; - } - } - - - private class BitsAnonymousInnerClassHelper : IBits { private readonly SimpleTextDocValuesReader _outerInstance; @@ -302,6 +236,70 @@ namespace Lucene.Net.Codecs.SimpleText } } + public override BinaryDocValues GetBinary(FieldInfo fieldInfo) + { + var field = FIELDS[fieldInfo.Name]; + Debug.Assert(field != null); + var input = (IndexInput)DATA.Clone(); + var scratch = new BytesRef(); + + return new BinaryDocValuesAnonymousInnerClassHelper(this, field, input, scratch); + } + + private class BinaryDocValuesAnonymousInnerClassHelper : BinaryDocValues + { + private readonly SimpleTextDocValuesReader _outerInstance; + + private readonly OneField _field; + private readonly IndexInput _input; + private readonly BytesRef _scratch; + + public BinaryDocValuesAnonymousInnerClassHelper(SimpleTextDocValuesReader outerInstance, OneField field, + IndexInput input, BytesRef scratch) + { + _outerInstance = outerInstance; + _field = field; + _input = input; + _scratch = scratch; + } + + public override void Get(int docId, BytesRef result) + { + if (docId < 0 || docId >= _outerInstance.MAX_DOC) + throw new IndexOutOfRangeException("docID must be 0 .. " + (_outerInstance.MAX_DOC - 1) + + "; got " + docId); + + _input.Seek(_field.DataStartFilePointer + (9 + _field.Pattern.Length + _field.MaxLength + 2) * docId); + SimpleTextUtil.ReadLine(_input, _scratch); + Debug.Assert(StringHelper.StartsWith(_scratch, SimpleTextDocValuesWriter.LENGTH)); + int len; + try + { + // LUCNENENET: .NET doesn't have a way to specify a pattern with integer, but all of the standard ones are built in. + len = int.Parse(Encoding.UTF8.GetString(_scratch.Bytes, _scratch.Offset + SimpleTextDocValuesWriter.LENGTH.Length, + _scratch.Length - SimpleTextDocValuesWriter.LENGTH.Length), NumberStyles.Integer, CultureInfo.InvariantCulture); + } + catch (FormatException ex) + { + throw new CorruptIndexException("failed to parse int value (resource=" + _input + ")", ex); + } + + result.Bytes = new byte[len]; + result.Offset = 0; + result.Length = len; + _input.ReadBytes(result.Bytes, 0, len); + } + } + + private IBits GetBinaryDocsWithField(FieldInfo fieldInfo) + { + var field = FIELDS[fieldInfo.Name]; + var input = (IndexInput)DATA.Clone(); + var scratch = new BytesRef(); + + return new BitsAnonymousInnerClassHelper2(this, field, input, scratch); + } + private class BitsAnonymousInnerClassHelper2 : IBits { private readonly SimpleTextDocValuesReader _outerInstance; @@ -349,6 +347,18 @@ namespace Lucene.Net.Codecs.SimpleText } } + public override SortedDocValues GetSorted(FieldInfo fieldInfo) + { + var field = FIELDS[fieldInfo.Name]; + + // SegmentCoreReaders already verifies this field is valid: + Debug.Assert(field != null); + var input = (IndexInput)DATA.Clone(); + var scratch = new BytesRef(); + + return new SortedDocValuesAnonymousInnerClassHelper(this, field, input, scratch); + } + private class SortedDocValuesAnonymousInnerClassHelper : SortedDocValues { private readonly SimpleTextDocValuesReader _outerInstance; @@ -430,6 +440,20 @@ namespace Lucene.Net.Codecs.SimpleText } } + public override SortedSetDocValues GetSortedSet(FieldInfo fieldInfo) + { + var field = FIELDS[fieldInfo.Name]; + + // SegmentCoreReaders already verifies this field is + // valid: + Debug.Assert(field != null); + + var input = (IndexInput) DATA.Clone(); + var scratch = new BytesRef(); + + return new SortedSetDocValuesAnonymousInnerClassHelper(this, field, input, scratch); + } + private class SortedSetDocValuesAnonymousInnerClassHelper : SortedSetDocValues { private readonly SimpleTextDocValuesReader _outerInstance; @@ -510,94 +534,67 @@ namespace Lucene.Net.Codecs.SimpleText } } - private class NumericDocValuesAnonymousInnerClassHelper : NumericDocValues + public override IBits GetDocsWithField(FieldInfo field) { - private readonly SimpleTextDocValuesReader _outerInstance; - - private readonly OneField _field; - private readonly IndexInput _input; - private readonly BytesRef _scratch; - - public NumericDocValuesAnonymousInnerClassHelper(SimpleTextDocValuesReader outerInstance, - OneField field, IndexInput input, BytesRef scratch) + switch (field.DocValuesType) { - _outerInstance = outerInstance; - _field = field; - _input = input; - _scratch = scratch; + case DocValuesType.SORTED_SET: + return DocValues.DocsWithValue(GetSortedSet(field), MAX_DOC); + case DocValuesType.SORTED: + return DocValues.DocsWithValue(GetSorted(field), MAX_DOC); + case DocValuesType.BINARY: + return GetBinaryDocsWithField(field); + case DocValuesType.NUMERIC: + return GetNumericDocsWithField(field); + default: + throw new ArgumentOutOfRangeException(); } + } - public override long Get(int docId) - { - if (docId < 0 || docId >= _outerInstance.MAX_DOC) - throw new IndexOutOfRangeException("docID must be 0 .. " + (_outerInstance.MAX_DOC - 1) + - "; got " + docId); - - _input.Seek(_field.DataStartFilePointer + (1 + _field.Pattern.Length + 2) * docId); - SimpleTextUtil.ReadLine(_input, _scratch); + protected override void Dispose(bool disposing) + { + if (!disposing) return; - - decimal bd; - try - { - // LUCNENENET: .NET doesn't have a way to specify a pattern with decimal, but all of the standard ones are built in. - bd = decimal.Parse(_scratch.Utf8ToString(), NumberStyles.Float, CultureInfo.InvariantCulture); - } - catch (FormatException ex) - { - throw new CorruptIndexException("failed to parse long value (resource=" + _input + ")", ex); - } + DATA.Dispose(); + } - SimpleTextUtil.ReadLine(_input, _scratch); // read the line telling us if its real or not - return (long)BigInteger.Add(new BigInteger(_field.MinValue), new BigInteger(bd)); - } + /// <summary> Used only in ctor: </summary> + private void ReadLine() + { + SimpleTextUtil.ReadLine(DATA, SCRATCH); } - private class BinaryDocValuesAnonymousInnerClassHelper : BinaryDocValues + /// <summary> Used only in ctor: </summary> + private bool StartsWith(BytesRef prefix) { - private readonly SimpleTextDocValuesReader _outerInstance; + return StringHelper.StartsWith(SCRATCH, prefix); + } - private readonly OneField _field; - private readonly IndexInput _input; - private readonly BytesRef _scratch; + /// <summary> Used only in ctor: </summary> + private string StripPrefix(BytesRef prefix) + { + return Encoding.UTF8.GetString(SCRATCH.Bytes, SCRATCH.Offset + prefix.Length, SCRATCH.Length - prefix.Length); + } - public BinaryDocValuesAnonymousInnerClassHelper(SimpleTextDocValuesReader outerInstance, OneField field, - IndexInput input, BytesRef scratch) - { - _outerInstance = outerInstance; - _field = field; - _input = input; - _scratch = scratch; - } + public override long RamBytesUsed() + { + return 0; + } - public override void Get(int docId, BytesRef result) + public override void CheckIntegrity() + { + var iScratch = new BytesRef(); + var clone = (IndexInput) DATA.Clone(); + clone.Seek(0); + ChecksumIndexInput input = new BufferedChecksumIndexInput(clone); + while (true) { - if (docId < 0 || docId >= _outerInstance.MAX_DOC) - throw new IndexOutOfRangeException("docID must be 0 .. " + (_outerInstance.MAX_DOC - 1) + - "; got " + docId); - - _input.Seek(_field.DataStartFilePointer + (9 + _field.Pattern.Length + _field.MaxLength + 2) * docId); - SimpleTextUtil.ReadLine(_input, _scratch); - Debug.Assert(StringHelper.StartsWith(_scratch, SimpleTextDocValuesWriter.LENGTH)); - int len; - try - { - // LUCNENENET: .NET doesn't have a way to specify a pattern with integer, but all of the standard ones are built in. - len = int.Parse(Encoding.UTF8.GetString(_scratch.Bytes, _scratch.Offset + SimpleTextDocValuesWriter.LENGTH.Length, - _scratch.Length - SimpleTextDocValuesWriter.LENGTH.Length), NumberStyles.Integer, CultureInfo.InvariantCulture); - } - catch (FormatException ex) - { - throw new CorruptIndexException("failed to parse int value (resource=" + _input + ")", ex); - } + SimpleTextUtil.ReadLine(input, iScratch); + if (!iScratch.Equals(SimpleTextDocValuesWriter.END)) continue; - result.Bytes = new byte[len]; - result.Offset = 0; - result.Length = len; - _input.ReadBytes(result.Bytes, 0, len); + SimpleTextUtil.CheckFooter(input); + break; } } - } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesWriter.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesWriter.cs b/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesWriter.cs index eea616d..df88f2d 100644 --- a/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesWriter.cs +++ b/src/Lucene.Net.Codecs/SimpleText/SimpleTextDocValuesWriter.cs @@ -33,36 +33,47 @@ namespace Lucene.Net.Codecs.SimpleText using BytesRef = Util.BytesRef; using IOUtils = Util.IOUtils; - public class SimpleTextDocValuesWriter : DocValuesConsumer + public class SimpleTextDocValuesWriter : DocValuesConsumer // LUCENENET NOTE: changed from internal to public because it is subclassed by a public type { internal static readonly BytesRef END = new BytesRef("END"); internal static readonly BytesRef FIELD = new BytesRef("field "); internal static readonly BytesRef TYPE = new BytesRef(" type "); - + // used for numerics internal static readonly BytesRef MINVALUE = new BytesRef(" minvalue "); internal static readonly BytesRef PATTERN = new BytesRef(" pattern "); - + // used for bytes internal static readonly BytesRef LENGTH = new BytesRef("length "); internal static readonly BytesRef MAXLENGTH = new BytesRef(" maxlength "); - + // used for sorted bytes internal static readonly BytesRef NUMVALUES = new BytesRef(" numvalues "); internal static readonly BytesRef ORDPATTERN = new BytesRef(" ordpattern "); - internal IndexOutput data; - internal readonly BytesRef scratch = new BytesRef(); - internal readonly int numDocs; + private IndexOutput data; + private readonly BytesRef scratch = new BytesRef(); + private readonly int numDocs; private readonly HashSet<string> _fieldsSeen = new HashSet<string>(); // for asserting - public SimpleTextDocValuesWriter(SegmentWriteState state, string ext) + // LUCENENET NOTE: Changed from public to internal because the class had to be made public, but is not for public use. + internal SimpleTextDocValuesWriter(SegmentWriteState state, string ext) { data = state.Directory.CreateOutput( IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, ext), state.Context); numDocs = state.SegmentInfo.DocCount; } + /// <summary> + /// For Asserting + /// </summary> + private bool FieldSeen(string field) + { + Debug.Assert(!_fieldsSeen.Contains(field), "field \"" + field + "\" was added more than once during flush"); + _fieldsSeen.Add(field); + return true; + } + public override void AddNumericField(FieldInfo field, IEnumerable<long?> values) { Debug.Assert(FieldSeen(field.Name)); @@ -396,6 +407,18 @@ namespace Lucene.Net.Codecs.SimpleText } } + /// <summary>Write the header for this field </summary> + private void WriteFieldEntry(FieldInfo field, DocValuesType type) + { + SimpleTextUtil.Write(data, FIELD); + SimpleTextUtil.Write(data, field.Name, scratch); + SimpleTextUtil.WriteNewline(data); + + SimpleTextUtil.Write(data, TYPE); + SimpleTextUtil.Write(data, type.ToString(), scratch); + SimpleTextUtil.WriteNewline(data); + } + protected override void Dispose(bool disposing) { if (data == null || !disposing) return; @@ -422,30 +445,5 @@ namespace Lucene.Net.Codecs.SimpleText data = null; } } - - /// <summary>Write the header for this field </summary> - private void WriteFieldEntry(FieldInfo field, DocValuesType type) - { - SimpleTextUtil.Write(data, FIELD); - SimpleTextUtil.Write(data, field.Name, scratch); - SimpleTextUtil.WriteNewline(data); - - SimpleTextUtil.Write(data, TYPE); - SimpleTextUtil.Write(data, type.ToString(), scratch); - SimpleTextUtil.WriteNewline(data); - } - - /// <summary> - /// For Asserting - /// </summary> - /// <param name="field"></param> - /// <returns></returns> - private bool FieldSeen(string field) - { - Debug.Assert(!_fieldsSeen.Contains(field), "field \"" + field + "\" was added more than once during flush"); - _fieldsSeen.Add(field); - return true; - } - } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosReader.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosReader.cs b/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosReader.cs index 67e50b1..e3a9e47 100644 --- a/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosReader.cs +++ b/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosReader.cs @@ -165,7 +165,7 @@ namespace Lucene.Net.Codecs.SimpleText return "false".Equals(dvType) ? null : (Index.DocValuesType?)Enum.Parse(typeof(Index.DocValuesType), dvType); } - private static string ReadString(int offset, BytesRef scratch) + private string ReadString(int offset, BytesRef scratch) { return Encoding.UTF8.GetString(scratch.Bytes, scratch.Offset + offset, scratch.Length - offset); } http://git-wip-us.apache.org/repos/asf/lucenenet/blob/c602c98f/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosWriter.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosWriter.cs b/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosWriter.cs index 291916b..2f151b4 100644 --- a/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosWriter.cs +++ b/src/Lucene.Net.Codecs/SimpleText/SimpleTextFieldInfosWriter.cs @@ -42,7 +42,6 @@ namespace Lucene.Net.Codecs.SimpleText /// </summary> public class SimpleTextFieldInfosWriter : FieldInfosWriter { - /// <summary> /// Extension of field infos </summary> internal const string FIELD_INFOS_EXTENSION = "inf"; @@ -163,5 +162,4 @@ namespace Lucene.Net.Codecs.SimpleText return type.HasValue ? type.ToString() : "false"; } } - } \ No newline at end of file
