You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2017/02/26 23:37:50 UTC
[62/72] [abbrv] lucenenet git commit: Lucene.Net.TestFramework:
Renamed Codecs\lucene42\ to Codecs\Lucene42\
Lucene.Net.TestFramework: Renamed Codecs\lucene42\ to Codecs\Lucene42\
Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/9e2f4c5b
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/9e2f4c5b
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/9e2f4c5b
Branch: refs/heads/api-work
Commit: 9e2f4c5b96e5d3c4cce0e38da1609f7b03a3dedb
Parents: 9138d1b
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Sun Feb 26 03:17:42 2017 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Mon Feb 27 06:17:58 2017 +0700
----------------------------------------------------------------------
.../Lucene42/Lucene42DocValuesConsumer.cs | 469 +++++++++++++++++++
.../Codecs/Lucene42/Lucene42FieldInfosWriter.cs | 145 ++++++
.../Codecs/Lucene42/Lucene42RWCodec.cs | 99 ++++
.../Lucene42/Lucene42RWDocValuesFormat.cs | 67 +++
.../lucene42/Lucene42DocValuesConsumer.cs | 469 -------------------
.../Codecs/lucene42/Lucene42FieldInfosWriter.cs | 145 ------
.../Codecs/lucene42/Lucene42RWCodec.cs | 99 ----
.../lucene42/Lucene42RWDocValuesFormat.cs | 67 ---
.../Lucene.Net.TestFramework.csproj | 8 +-
9 files changed, 784 insertions(+), 784 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42DocValuesConsumer.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42DocValuesConsumer.cs b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42DocValuesConsumer.cs
new file mode 100644
index 0000000..7441346
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42DocValuesConsumer.cs
@@ -0,0 +1,469 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+
+namespace Lucene.Net.Codecs.Lucene42
+{
+ using Lucene.Net.Util.Fst;
+ using ArrayUtil = Lucene.Net.Util.ArrayUtil;
+ using BlockPackedWriter = Lucene.Net.Util.Packed.BlockPackedWriter;
+ using ByteArrayDataOutput = Lucene.Net.Store.ByteArrayDataOutput;
+ using BytesRef = Lucene.Net.Util.BytesRef;
+
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ using FieldInfo = Lucene.Net.Index.FieldInfo;
+ using FormatAndBits = Lucene.Net.Util.Packed.PackedInt32s.FormatAndBits;
+ using IndexFileNames = Lucene.Net.Index.IndexFileNames;
+ using IndexOutput = Lucene.Net.Store.IndexOutput;
+ using INPUT_TYPE = Lucene.Net.Util.Fst.FST.INPUT_TYPE;
+ using Int32sRef = Lucene.Net.Util.Int32sRef;
+ using IOUtils = Lucene.Net.Util.IOUtils;
+ using MathUtil = Lucene.Net.Util.MathUtil;
+ using MonotonicBlockPackedWriter = Lucene.Net.Util.Packed.MonotonicBlockPackedWriter;
+ using PackedInt32s = Lucene.Net.Util.Packed.PackedInt32s;
+ using PositiveInt32Outputs = Lucene.Net.Util.Fst.PositiveInt32Outputs;
+ using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
+ using Util = Lucene.Net.Util.Fst.Util;
+
+ // Constants use Lucene42DocValuesProducer.
+
+ /// <summary>
+ /// Writer for <seealso cref="Lucene42DocValuesFormat"/>
+ /// </summary>
+#pragma warning disable 612, 618
+ internal class Lucene42DocValuesConsumer : DocValuesConsumer
+ {
+ internal readonly IndexOutput Data, Meta;
+ internal readonly int MaxDoc;
+ internal readonly float AcceptableOverheadRatio;
+
+ internal Lucene42DocValuesConsumer(SegmentWriteState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension, float acceptableOverheadRatio)
+ {
+ this.AcceptableOverheadRatio = acceptableOverheadRatio;
+ MaxDoc = state.SegmentInfo.DocCount;
+ bool success = false;
+ try
+ {
+ string dataName = IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, dataExtension);
+ Data = state.Directory.CreateOutput(dataName, state.Context);
+ // this writer writes the format 4.2 did!
+ CodecUtil.WriteHeader(Data, dataCodec, Lucene42DocValuesProducer.VERSION_GCD_COMPRESSION);
+ string metaName = IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, metaExtension);
+ Meta = state.Directory.CreateOutput(metaName, state.Context);
+ CodecUtil.WriteHeader(Meta, metaCodec, Lucene42DocValuesProducer.VERSION_GCD_COMPRESSION);
+ success = true;
+ }
+ finally
+ {
+ if (!success)
+ {
+ IOUtils.CloseWhileHandlingException(this);
+ }
+ }
+ }
+
+ public override void AddNumericField(FieldInfo field, IEnumerable<long?> values)
+ {
+ AddNumericField(field, values, true);
+ }
+
+ internal virtual void AddNumericField(FieldInfo field, IEnumerable<long?> values, bool optimizeStorage)
+ {
+ Meta.WriteVInt32(field.Number);
+ Meta.WriteByte((byte)Lucene42DocValuesProducer.NUMBER);
+ Meta.WriteInt64(Data.FilePointer);
+ long minValue = long.MaxValue;
+ long maxValue = long.MinValue;
+ long gcd = 0;
+ // TODO: more efficient?
+ HashSet<long> uniqueValues = null;
+ if (optimizeStorage)
+ {
+ uniqueValues = new HashSet<long>();
+
+ long count = 0;
+ foreach (long? nv in values)
+ {
+ // TODO: support this as MemoryDVFormat (and be smart about missing maybe)
+ long v = nv == null ? 0 : (long)nv;
+
+ if (gcd != 1)
+ {
+ if (v < long.MinValue / 2 || v > long.MaxValue / 2)
+ {
+ // in that case v - minValue might overflow and make the GCD computation return
+ // wrong results. Since these extreme values are unlikely, we just discard
+ // GCD computation for them
+ gcd = 1;
+ } // minValue needs to be set first
+ else if (count != 0)
+ {
+ gcd = MathUtil.Gcd(gcd, v - minValue);
+ }
+ }
+
+ minValue = Math.Min(minValue, v);
+ maxValue = Math.Max(maxValue, v);
+
+ if (uniqueValues != null)
+ {
+ if (uniqueValues.Add(v))
+ {
+ if (uniqueValues.Count > 256)
+ {
+ uniqueValues = null;
+ }
+ }
+ }
+
+ ++count;
+ }
+ Debug.Assert(count == MaxDoc);
+ }
+
+ if (uniqueValues != null)
+ {
+ // small number of unique values
+ int bitsPerValue = PackedInt32s.BitsRequired(uniqueValues.Count - 1);
+ FormatAndBits formatAndBits = PackedInt32s.FastestFormatAndBits(MaxDoc, bitsPerValue, AcceptableOverheadRatio);
+ if (formatAndBits.BitsPerValue == 8 && minValue >= sbyte.MinValue && maxValue <= sbyte.MaxValue)
+ {
+ Meta.WriteByte((byte)Lucene42DocValuesProducer.UNCOMPRESSED); // uncompressed
+ foreach (long? nv in values)
+ {
+ Data.WriteByte(nv == null ? (byte)0 : (byte)nv);
+ }
+ }
+ else
+ {
+ Meta.WriteByte((byte)Lucene42DocValuesProducer.TABLE_COMPRESSED); // table-compressed
+ long[] decode = uniqueValues.ToArray(/*new long?[uniqueValues.Count]*/);
+ var encode = new Dictionary<long, int>();
+ Data.WriteVInt32(decode.Length);
+ for (int i = 0; i < decode.Length; i++)
+ {
+ Data.WriteInt64(decode[i]);
+ encode[decode[i]] = i;
+ }
+
+ Meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
+ Data.WriteVInt32(formatAndBits.Format.Id);
+ Data.WriteVInt32(formatAndBits.BitsPerValue);
+
+ PackedInt32s.Writer writer = PackedInt32s.GetWriterNoHeader(Data, formatAndBits.Format, MaxDoc, formatAndBits.BitsPerValue, PackedInt32s.DEFAULT_BUFFER_SIZE);
+ foreach (long? nv in values)
+ {
+ writer.Add(encode[nv == null ? 0 : (long)nv]);
+ }
+ writer.Finish();
+ }
+ }
+ else if (gcd != 0 && gcd != 1)
+ {
+ Meta.WriteByte((byte)Lucene42DocValuesProducer.GCD_COMPRESSED);
+ Meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
+ Data.WriteInt64(minValue);
+ Data.WriteInt64(gcd);
+ Data.WriteVInt32(Lucene42DocValuesProducer.BLOCK_SIZE);
+
+ BlockPackedWriter writer = new BlockPackedWriter(Data, Lucene42DocValuesProducer.BLOCK_SIZE);
+ foreach (long? nv in values)
+ {
+ long value = nv == null ? 0 : (long)nv;
+ writer.Add((value - minValue) / gcd);
+ }
+ writer.Finish();
+ }
+ else
+ {
+ Meta.WriteByte((byte)Lucene42DocValuesProducer.DELTA_COMPRESSED); // delta-compressed
+
+ Meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
+ Data.WriteVInt32(Lucene42DocValuesProducer.BLOCK_SIZE);
+
+ BlockPackedWriter writer = new BlockPackedWriter(Data, Lucene42DocValuesProducer.BLOCK_SIZE);
+ foreach (long? nv in values)
+ {
+ writer.Add(nv == null ? 0 : (long)nv);
+ }
+ writer.Finish();
+ }
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ bool success = false;
+ try
+ {
+ if (Meta != null)
+ {
+ Meta.WriteVInt32(-1); // write EOF marker
+ }
+ success = true;
+ }
+ finally
+ {
+ if (success)
+ {
+ IOUtils.Close(Data, Meta);
+ }
+ else
+ {
+ IOUtils.CloseWhileHandlingException(Data, Meta);
+ }
+ }
+ }
+ }
+
+ public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values)
+ {
+ // write the byte[] data
+ Meta.WriteVInt32(field.Number);
+ Meta.WriteByte((byte)Lucene42DocValuesProducer.BYTES);
+ int minLength = int.MaxValue;
+ int maxLength = int.MinValue;
+ long startFP = Data.FilePointer;
+ foreach (BytesRef v in values)
+ {
+ int length = v == null ? 0 : v.Length;
+ if (length > Lucene42DocValuesFormat.MAX_BINARY_FIELD_LENGTH)
+ {
+ throw new System.ArgumentException("DocValuesField \"" + field.Name + "\" is too large, must be <= " + Lucene42DocValuesFormat.MAX_BINARY_FIELD_LENGTH);
+ }
+ minLength = Math.Min(minLength, length);
+ maxLength = Math.Max(maxLength, length);
+ if (v != null)
+ {
+ Data.WriteBytes(v.Bytes, v.Offset, v.Length);
+ }
+ }
+ Meta.WriteInt64(startFP);
+ Meta.WriteInt64(Data.FilePointer - startFP);
+ Meta.WriteVInt32(minLength);
+ Meta.WriteVInt32(maxLength);
+
+ // if minLength == maxLength, its a fixed-length byte[], we are done (the addresses are implicit)
+ // otherwise, we need to record the length fields...
+ if (minLength != maxLength)
+ {
+ Meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
+ Meta.WriteVInt32(Lucene42DocValuesProducer.BLOCK_SIZE);
+
+ MonotonicBlockPackedWriter writer = new MonotonicBlockPackedWriter(Data, Lucene42DocValuesProducer.BLOCK_SIZE);
+ long addr = 0;
+ foreach (BytesRef v in values)
+ {
+ if (v != null)
+ {
+ addr += v.Length;
+ }
+ writer.Add(addr);
+ }
+ writer.Finish();
+ }
+ }
+
+ private void WriteFST(FieldInfo field, IEnumerable<BytesRef> values)
+ {
+ Meta.WriteVInt32(field.Number);
+ Meta.WriteByte((byte)Lucene42DocValuesProducer.FST);
+ Meta.WriteInt64(Data.FilePointer);
+ PositiveInt32Outputs outputs = PositiveInt32Outputs.Singleton;
+ Builder<long?> builder = new Builder<long?>(INPUT_TYPE.BYTE1, outputs);
+ Int32sRef scratch = new Int32sRef();
+ long ord = 0;
+ foreach (BytesRef v in values)
+ {
+ builder.Add(Util.ToInt32sRef(v, scratch), ord);
+ ord++;
+ }
+
+ var fst = builder.Finish();
+ if (fst != null)
+ {
+ fst.Save(Data);
+ }
+ Meta.WriteVInt64(ord);
+ }
+
+ public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd)
+ {
+ // three cases for simulating the old writer:
+ // 1. no missing
+ // 2. missing (and empty string in use): remap ord=-1 -> ord=0
+ // 3. missing (and empty string not in use): remap all ords +1, insert empty string into values
+ bool anyMissing = false;
+ foreach (long? n in docToOrd)
+ {
+ if (n.Value == -1)
+ {
+ anyMissing = true;
+ break;
+ }
+ }
+
+ bool hasEmptyString = false;
+ foreach (BytesRef b in values)
+ {
+ hasEmptyString = b.Length == 0;
+ break;
+ }
+
+ if (!anyMissing)
+ {
+ // nothing to do
+ }
+ else if (hasEmptyString)
+ {
+ docToOrd = MissingOrdRemapper.MapMissingToOrd0(docToOrd);
+ }
+ else
+ {
+ docToOrd = MissingOrdRemapper.MapAllOrds(docToOrd);
+ values = MissingOrdRemapper.InsertEmptyValue(values);
+ }
+
+ // write the ordinals as numerics
+ AddNumericField(field, docToOrd, false);
+
+ // write the values as FST
+ WriteFST(field, values);
+ }
+
+ // note: this might not be the most efficient... but its fairly simple
+ public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
+ {
+ // write the ordinals as a binary field
+ AddBinaryField(field, new IterableAnonymousInnerClassHelper(this, docToOrdCount, ords));
+
+ // write the values as FST
+ WriteFST(field, values);
+ }
+
+ private class IterableAnonymousInnerClassHelper : IEnumerable<BytesRef>
+ {
+ private readonly Lucene42DocValuesConsumer OuterInstance;
+
+ private IEnumerable<long?> DocToOrdCount;
+ private IEnumerable<long?> Ords;
+
+ public IterableAnonymousInnerClassHelper(Lucene42DocValuesConsumer outerInstance, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
+ {
+ this.OuterInstance = outerInstance;
+ this.DocToOrdCount = docToOrdCount;
+ this.Ords = ords;
+ }
+
+ public IEnumerator<BytesRef> GetEnumerator()
+ {
+ return new SortedSetIterator(DocToOrdCount.GetEnumerator(), Ords.GetEnumerator());
+ }
+
+ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+ }
+
+ // per-document vint-encoded byte[]
+ internal class SortedSetIterator : IEnumerator<BytesRef>
+ {
+ internal byte[] Buffer = new byte[10];
+ internal ByteArrayDataOutput @out = new ByteArrayDataOutput();
+ internal BytesRef @ref = new BytesRef();
+
+ internal readonly IEnumerator<long?> Counts;
+ internal readonly IEnumerator<long?> Ords;
+
+ internal SortedSetIterator(IEnumerator<long?> counts, IEnumerator<long?> ords)
+ {
+ this.Counts = counts;
+ this.Ords = ords;
+ }
+
+ public bool MoveNext()
+ {
+ if (!Counts.MoveNext())
+ {
+ return false;
+ }
+
+ int count = (int)Counts.Current;
+ int maxSize = count * 9; //worst case
+ if (maxSize > Buffer.Length)
+ {
+ Buffer = ArrayUtil.Grow(Buffer, maxSize);
+ }
+
+ try
+ {
+ EncodeValues(count);
+ }
+ catch (IOException bogus)
+ {
+ throw new Exception(bogus.Message, bogus);
+ }
+
+ @ref.Bytes = Buffer;
+ @ref.Offset = 0;
+ @ref.Length = @out.Position;
+
+ return true;
+ }
+
+ public BytesRef Current
+ {
+ get { return @ref; }
+ }
+
+ object System.Collections.IEnumerator.Current
+ {
+ get { return Current; }
+ }
+
+ // encodes count values to buffer
+ internal virtual void EncodeValues(int count)
+ {
+ @out.Reset(Buffer);
+ long lastOrd = 0;
+ for (int i = 0; i < count; i++)
+ {
+ Ords.MoveNext();
+ long ord = Ords.Current.Value;
+ @out.WriteVInt64(ord - lastOrd);
+ lastOrd = ord;
+ }
+ }
+
+ public void Reset()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+ }
+#pragma warning restore 612, 618
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42FieldInfosWriter.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42FieldInfosWriter.cs b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42FieldInfosWriter.cs
new file mode 100644
index 0000000..acdae7b
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42FieldInfosWriter.cs
@@ -0,0 +1,145 @@
+using System;
+using System.Diagnostics;
+
+namespace Lucene.Net.Codecs.Lucene42
+{
+ using Directory = Lucene.Net.Store.Directory;
+
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ using DocValuesType = Lucene.Net.Index.DocValuesType;
+ using FieldInfo = Lucene.Net.Index.FieldInfo;
+ using FieldInfos = Lucene.Net.Index.FieldInfos;
+ using IndexFileNames = Lucene.Net.Index.IndexFileNames;
+ using IndexOutput = Lucene.Net.Store.IndexOutput;
+ using IndexOptions = Lucene.Net.Index.IndexOptions;
+ using IOContext = Lucene.Net.Store.IOContext;
+ using IOUtils = Lucene.Net.Util.IOUtils;
+
+ /// <summary>
+ /// Lucene 4.2 FieldInfos writer.
+ /// </summary>
+ /// <seealso> cref= Lucene42FieldInfosFormat
+ /// @lucene.experimental </seealso>
+ [Obsolete]
+ public sealed class Lucene42FieldInfosWriter : FieldInfosWriter
+ {
+ /// <summary>
+ /// Sole constructor. </summary>
+ public Lucene42FieldInfosWriter()
+ {
+ }
+
+ public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context)
+ {
+ string fileName = IndexFileNames.SegmentFileName(segmentName, "", Lucene42FieldInfosFormat.EXTENSION);
+ IndexOutput output = directory.CreateOutput(fileName, context);
+ bool success = false;
+ try
+ {
+ CodecUtil.WriteHeader(output, Lucene42FieldInfosFormat.CODEC_NAME, Lucene42FieldInfosFormat.FORMAT_CURRENT);
+ output.WriteVInt32(infos.Count);
+ foreach (FieldInfo fi in infos)
+ {
+ IndexOptions? indexOptions = fi.IndexOptions;
+ sbyte bits = 0x0;
+ if (fi.HasVectors)
+ {
+ bits |= Lucene42FieldInfosFormat.STORE_TERMVECTOR;
+ }
+ if (fi.OmitsNorms)
+ {
+ bits |= Lucene42FieldInfosFormat.OMIT_NORMS;
+ }
+ if (fi.HasPayloads)
+ {
+ bits |= Lucene42FieldInfosFormat.STORE_PAYLOADS;
+ }
+ if (fi.IsIndexed)
+ {
+ bits |= Lucene42FieldInfosFormat.IS_INDEXED;
+ Debug.Assert(indexOptions >= IndexOptions.DOCS_AND_FREQS_AND_POSITIONS || !fi.HasPayloads);
+ if (indexOptions == IndexOptions.DOCS_ONLY)
+ {
+ bits |= Lucene42FieldInfosFormat.OMIT_TERM_FREQ_AND_POSITIONS;
+ }
+ else if (indexOptions == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS)
+ {
+ bits |= Lucene42FieldInfosFormat.STORE_OFFSETS_IN_POSTINGS;
+ }
+ else if (indexOptions == IndexOptions.DOCS_AND_FREQS)
+ {
+ bits |= Lucene42FieldInfosFormat.OMIT_POSITIONS;
+ }
+ }
+ output.WriteString(fi.Name);
+ output.WriteVInt32(fi.Number);
+ output.WriteByte((byte)bits);
+
+ // pack the DV types in one byte
+ var dv = DocValuesByte(fi.DocValuesType);
+ var nrm = DocValuesByte(fi.NormType);
+ Debug.Assert((dv & (~0xF)) == 0 && (nrm & (~0x0F)) == 0);
+ var val = unchecked((sbyte)(0xff & ((nrm << 4) | dv)));
+ output.WriteByte((byte)val);
+ output.WriteStringStringMap(fi.Attributes);
+ }
+ success = true;
+ }
+ finally
+ {
+ if (success)
+ {
+ output.Dispose();
+ }
+ else
+ {
+ IOUtils.CloseWhileHandlingException(output);
+ }
+ }
+ }
+
+ private static sbyte DocValuesByte(DocValuesType? type)
+ {
+ if (type == null)
+ {
+ return 0;
+ }
+ else if (type == DocValuesType.NUMERIC)
+ {
+ return 1;
+ }
+ else if (type == DocValuesType.BINARY)
+ {
+ return 2;
+ }
+ else if (type == DocValuesType.SORTED)
+ {
+ return 3;
+ }
+ else if (type == DocValuesType.SORTED_SET)
+ {
+ return 4;
+ }
+ else
+ {
+ throw new InvalidOperationException();
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42RWCodec.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42RWCodec.cs b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42RWCodec.cs
new file mode 100644
index 0000000..39e3b66
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42RWCodec.cs
@@ -0,0 +1,99 @@
+namespace Lucene.Net.Codecs.Lucene42
+{
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
+
+ /// <summary>
+ /// Read-write version of <seealso cref="Lucene42Codec"/> for testing.
+ /// </summary>
+#pragma warning disable 612, 618
+ public class Lucene42RWCodec : Lucene42Codec
+ {
+ private readonly DocValuesFormat Dv;
+ private readonly NormsFormat Norms = new Lucene42NormsFormat();
+ private readonly FieldInfosFormat fieldInfosFormat;
+
+ /// <summary>
+ /// LUCENENET specific
+ /// Creates the codec with OldFormatImpersonationIsActive = true.
+ /// </summary>
+ /// <remarks>
+ /// Added so that SPIClassIterator can locate this Codec. The iterator
+ /// only recognises classes that have empty constructors.
+ /// </remarks>
+ public Lucene42RWCodec()
+ : this(true)
+ { }
+
+ /// <param name="oldFormatImpersonationIsActive">
+ /// LUCENENET specific
+ /// Added to remove dependency on then-static <see cref="LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE"/>
+ /// </param>
+ public Lucene42RWCodec(bool oldFormatImpersonationIsActive) : base()
+ {
+ Dv = new Lucene42RWDocValuesFormat(oldFormatImpersonationIsActive);
+ fieldInfosFormat = new Lucene42FieldInfosFormatAnonymousInnerClassHelper(oldFormatImpersonationIsActive);
+ }
+
+ private class Lucene42FieldInfosFormatAnonymousInnerClassHelper : Lucene42FieldInfosFormat
+ {
+ private readonly bool _oldFormatImpersonationIsActive;
+
+ /// <param name="oldFormatImpersonationIsActive">
+ /// LUCENENET specific
+ /// Added to remove dependency on then-static <see cref="LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE"/>
+ /// </param>
+ public Lucene42FieldInfosFormatAnonymousInnerClassHelper(bool oldFormatImpersonationIsActive) : base()
+ {
+ _oldFormatImpersonationIsActive = oldFormatImpersonationIsActive;
+ }
+
+ public override FieldInfosWriter FieldInfosWriter
+ {
+ get
+ {
+ if (!_oldFormatImpersonationIsActive)
+ {
+ return base.FieldInfosWriter;
+ }
+ else
+ {
+ return new Lucene42FieldInfosWriter();
+ }
+ }
+ }
+ }
+
+ public override DocValuesFormat GetDocValuesFormatForField(string field)
+ {
+ return Dv;
+ }
+
+ public override NormsFormat NormsFormat
+ {
+ get { return Norms; }
+ }
+
+ public override FieldInfosFormat FieldInfosFormat
+ {
+ get { return fieldInfosFormat; }
+ }
+ }
+#pragma warning restore 612, 618
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42RWDocValuesFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42RWDocValuesFormat.cs b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42RWDocValuesFormat.cs
new file mode 100644
index 0000000..1a29fe6
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Lucene42/Lucene42RWDocValuesFormat.cs
@@ -0,0 +1,67 @@
+namespace Lucene.Net.Codecs.Lucene42
+{
+ using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
+
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
+
+ /// <summary>
+ /// Read-write version of <seealso cref="Lucene42DocValuesFormat"/> for testing.
+ /// </summary>
+#pragma warning disable 612, 618
+ public class Lucene42RWDocValuesFormat : Lucene42DocValuesFormat
+ {
+ private readonly bool _oldFormatImpersonationIsActive;
+
+ /// <summary>
+ /// LUCENENET specific
+ /// Creates the codec with OldFormatImpersonationIsActive = true.
+ /// </summary>
+ /// <remarks>
+ /// Added so that SPIClassIterator can locate this Codec. The iterator
+ /// only recognises classes that have empty constructors.
+ /// </remarks>
+ public Lucene42RWDocValuesFormat()
+ : this(true)
+ { }
+
+ /// <param name="oldFormatImpersonationIsActive">
+ /// LUCENENET specific
+ /// Added to remove dependency on then-static <see cref="LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE"/>
+ /// </param>
+ public Lucene42RWDocValuesFormat(bool oldFormatImpersonationIsActive) : base()
+ {
+ _oldFormatImpersonationIsActive = oldFormatImpersonationIsActive;
+ }
+
+ public override DocValuesConsumer FieldsConsumer(SegmentWriteState state)
+ {
+ if (!_oldFormatImpersonationIsActive)
+ {
+ return base.FieldsConsumer(state);
+ }
+ else
+ {
+ // note: we choose DEFAULT here (its reasonably fast, and for small bpv has tiny waste)
+ return new Lucene42DocValuesConsumer(state, DATA_CODEC, DATA_EXTENSION, METADATA_CODEC, METADATA_EXTENSION, m_acceptableOverheadRatio);
+ }
+ }
+ }
+#pragma warning restore 612, 618
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42DocValuesConsumer.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42DocValuesConsumer.cs b/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42DocValuesConsumer.cs
deleted file mode 100644
index 7441346..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42DocValuesConsumer.cs
+++ /dev/null
@@ -1,469 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-
-namespace Lucene.Net.Codecs.Lucene42
-{
- using Lucene.Net.Util.Fst;
- using ArrayUtil = Lucene.Net.Util.ArrayUtil;
- using BlockPackedWriter = Lucene.Net.Util.Packed.BlockPackedWriter;
- using ByteArrayDataOutput = Lucene.Net.Store.ByteArrayDataOutput;
- using BytesRef = Lucene.Net.Util.BytesRef;
-
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- using FieldInfo = Lucene.Net.Index.FieldInfo;
- using FormatAndBits = Lucene.Net.Util.Packed.PackedInt32s.FormatAndBits;
- using IndexFileNames = Lucene.Net.Index.IndexFileNames;
- using IndexOutput = Lucene.Net.Store.IndexOutput;
- using INPUT_TYPE = Lucene.Net.Util.Fst.FST.INPUT_TYPE;
- using Int32sRef = Lucene.Net.Util.Int32sRef;
- using IOUtils = Lucene.Net.Util.IOUtils;
- using MathUtil = Lucene.Net.Util.MathUtil;
- using MonotonicBlockPackedWriter = Lucene.Net.Util.Packed.MonotonicBlockPackedWriter;
- using PackedInt32s = Lucene.Net.Util.Packed.PackedInt32s;
- using PositiveInt32Outputs = Lucene.Net.Util.Fst.PositiveInt32Outputs;
- using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
- using Util = Lucene.Net.Util.Fst.Util;
-
- // Constants use Lucene42DocValuesProducer.
-
- /// <summary>
- /// Writer for <seealso cref="Lucene42DocValuesFormat"/>
- /// </summary>
-#pragma warning disable 612, 618
- internal class Lucene42DocValuesConsumer : DocValuesConsumer
- {
- internal readonly IndexOutput Data, Meta;
- internal readonly int MaxDoc;
- internal readonly float AcceptableOverheadRatio;
-
- internal Lucene42DocValuesConsumer(SegmentWriteState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension, float acceptableOverheadRatio)
- {
- this.AcceptableOverheadRatio = acceptableOverheadRatio;
- MaxDoc = state.SegmentInfo.DocCount;
- bool success = false;
- try
- {
- string dataName = IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, dataExtension);
- Data = state.Directory.CreateOutput(dataName, state.Context);
- // this writer writes the format 4.2 did!
- CodecUtil.WriteHeader(Data, dataCodec, Lucene42DocValuesProducer.VERSION_GCD_COMPRESSION);
- string metaName = IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, metaExtension);
- Meta = state.Directory.CreateOutput(metaName, state.Context);
- CodecUtil.WriteHeader(Meta, metaCodec, Lucene42DocValuesProducer.VERSION_GCD_COMPRESSION);
- success = true;
- }
- finally
- {
- if (!success)
- {
- IOUtils.CloseWhileHandlingException(this);
- }
- }
- }
-
- public override void AddNumericField(FieldInfo field, IEnumerable<long?> values)
- {
- AddNumericField(field, values, true);
- }
-
- internal virtual void AddNumericField(FieldInfo field, IEnumerable<long?> values, bool optimizeStorage)
- {
- Meta.WriteVInt32(field.Number);
- Meta.WriteByte((byte)Lucene42DocValuesProducer.NUMBER);
- Meta.WriteInt64(Data.FilePointer);
- long minValue = long.MaxValue;
- long maxValue = long.MinValue;
- long gcd = 0;
- // TODO: more efficient?
- HashSet<long> uniqueValues = null;
- if (optimizeStorage)
- {
- uniqueValues = new HashSet<long>();
-
- long count = 0;
- foreach (long? nv in values)
- {
- // TODO: support this as MemoryDVFormat (and be smart about missing maybe)
- long v = nv == null ? 0 : (long)nv;
-
- if (gcd != 1)
- {
- if (v < long.MinValue / 2 || v > long.MaxValue / 2)
- {
- // in that case v - minValue might overflow and make the GCD computation return
- // wrong results. Since these extreme values are unlikely, we just discard
- // GCD computation for them
- gcd = 1;
- } // minValue needs to be set first
- else if (count != 0)
- {
- gcd = MathUtil.Gcd(gcd, v - minValue);
- }
- }
-
- minValue = Math.Min(minValue, v);
- maxValue = Math.Max(maxValue, v);
-
- if (uniqueValues != null)
- {
- if (uniqueValues.Add(v))
- {
- if (uniqueValues.Count > 256)
- {
- uniqueValues = null;
- }
- }
- }
-
- ++count;
- }
- Debug.Assert(count == MaxDoc);
- }
-
- if (uniqueValues != null)
- {
- // small number of unique values
- int bitsPerValue = PackedInt32s.BitsRequired(uniqueValues.Count - 1);
- FormatAndBits formatAndBits = PackedInt32s.FastestFormatAndBits(MaxDoc, bitsPerValue, AcceptableOverheadRatio);
- if (formatAndBits.BitsPerValue == 8 && minValue >= sbyte.MinValue && maxValue <= sbyte.MaxValue)
- {
- Meta.WriteByte((byte)Lucene42DocValuesProducer.UNCOMPRESSED); // uncompressed
- foreach (long? nv in values)
- {
- Data.WriteByte(nv == null ? (byte)0 : (byte)nv);
- }
- }
- else
- {
- Meta.WriteByte((byte)Lucene42DocValuesProducer.TABLE_COMPRESSED); // table-compressed
- long[] decode = uniqueValues.ToArray(/*new long?[uniqueValues.Count]*/);
- var encode = new Dictionary<long, int>();
- Data.WriteVInt32(decode.Length);
- for (int i = 0; i < decode.Length; i++)
- {
- Data.WriteInt64(decode[i]);
- encode[decode[i]] = i;
- }
-
- Meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
- Data.WriteVInt32(formatAndBits.Format.Id);
- Data.WriteVInt32(formatAndBits.BitsPerValue);
-
- PackedInt32s.Writer writer = PackedInt32s.GetWriterNoHeader(Data, formatAndBits.Format, MaxDoc, formatAndBits.BitsPerValue, PackedInt32s.DEFAULT_BUFFER_SIZE);
- foreach (long? nv in values)
- {
- writer.Add(encode[nv == null ? 0 : (long)nv]);
- }
- writer.Finish();
- }
- }
- else if (gcd != 0 && gcd != 1)
- {
- Meta.WriteByte((byte)Lucene42DocValuesProducer.GCD_COMPRESSED);
- Meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
- Data.WriteInt64(minValue);
- Data.WriteInt64(gcd);
- Data.WriteVInt32(Lucene42DocValuesProducer.BLOCK_SIZE);
-
- BlockPackedWriter writer = new BlockPackedWriter(Data, Lucene42DocValuesProducer.BLOCK_SIZE);
- foreach (long? nv in values)
- {
- long value = nv == null ? 0 : (long)nv;
- writer.Add((value - minValue) / gcd);
- }
- writer.Finish();
- }
- else
- {
- Meta.WriteByte((byte)Lucene42DocValuesProducer.DELTA_COMPRESSED); // delta-compressed
-
- Meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
- Data.WriteVInt32(Lucene42DocValuesProducer.BLOCK_SIZE);
-
- BlockPackedWriter writer = new BlockPackedWriter(Data, Lucene42DocValuesProducer.BLOCK_SIZE);
- foreach (long? nv in values)
- {
- writer.Add(nv == null ? 0 : (long)nv);
- }
- writer.Finish();
- }
- }
-
- protected override void Dispose(bool disposing)
- {
- if (disposing)
- {
- bool success = false;
- try
- {
- if (Meta != null)
- {
- Meta.WriteVInt32(-1); // write EOF marker
- }
- success = true;
- }
- finally
- {
- if (success)
- {
- IOUtils.Close(Data, Meta);
- }
- else
- {
- IOUtils.CloseWhileHandlingException(Data, Meta);
- }
- }
- }
- }
-
- public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values)
- {
- // write the byte[] data
- Meta.WriteVInt32(field.Number);
- Meta.WriteByte((byte)Lucene42DocValuesProducer.BYTES);
- int minLength = int.MaxValue;
- int maxLength = int.MinValue;
- long startFP = Data.FilePointer;
- foreach (BytesRef v in values)
- {
- int length = v == null ? 0 : v.Length;
- if (length > Lucene42DocValuesFormat.MAX_BINARY_FIELD_LENGTH)
- {
- throw new System.ArgumentException("DocValuesField \"" + field.Name + "\" is too large, must be <= " + Lucene42DocValuesFormat.MAX_BINARY_FIELD_LENGTH);
- }
- minLength = Math.Min(minLength, length);
- maxLength = Math.Max(maxLength, length);
- if (v != null)
- {
- Data.WriteBytes(v.Bytes, v.Offset, v.Length);
- }
- }
- Meta.WriteInt64(startFP);
- Meta.WriteInt64(Data.FilePointer - startFP);
- Meta.WriteVInt32(minLength);
- Meta.WriteVInt32(maxLength);
-
- // if minLength == maxLength, its a fixed-length byte[], we are done (the addresses are implicit)
- // otherwise, we need to record the length fields...
- if (minLength != maxLength)
- {
- Meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
- Meta.WriteVInt32(Lucene42DocValuesProducer.BLOCK_SIZE);
-
- MonotonicBlockPackedWriter writer = new MonotonicBlockPackedWriter(Data, Lucene42DocValuesProducer.BLOCK_SIZE);
- long addr = 0;
- foreach (BytesRef v in values)
- {
- if (v != null)
- {
- addr += v.Length;
- }
- writer.Add(addr);
- }
- writer.Finish();
- }
- }
-
- private void WriteFST(FieldInfo field, IEnumerable<BytesRef> values)
- {
- Meta.WriteVInt32(field.Number);
- Meta.WriteByte((byte)Lucene42DocValuesProducer.FST);
- Meta.WriteInt64(Data.FilePointer);
- PositiveInt32Outputs outputs = PositiveInt32Outputs.Singleton;
- Builder<long?> builder = new Builder<long?>(INPUT_TYPE.BYTE1, outputs);
- Int32sRef scratch = new Int32sRef();
- long ord = 0;
- foreach (BytesRef v in values)
- {
- builder.Add(Util.ToInt32sRef(v, scratch), ord);
- ord++;
- }
-
- var fst = builder.Finish();
- if (fst != null)
- {
- fst.Save(Data);
- }
- Meta.WriteVInt64(ord);
- }
-
- public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd)
- {
- // three cases for simulating the old writer:
- // 1. no missing
- // 2. missing (and empty string in use): remap ord=-1 -> ord=0
- // 3. missing (and empty string not in use): remap all ords +1, insert empty string into values
- bool anyMissing = false;
- foreach (long? n in docToOrd)
- {
- if (n.Value == -1)
- {
- anyMissing = true;
- break;
- }
- }
-
- bool hasEmptyString = false;
- foreach (BytesRef b in values)
- {
- hasEmptyString = b.Length == 0;
- break;
- }
-
- if (!anyMissing)
- {
- // nothing to do
- }
- else if (hasEmptyString)
- {
- docToOrd = MissingOrdRemapper.MapMissingToOrd0(docToOrd);
- }
- else
- {
- docToOrd = MissingOrdRemapper.MapAllOrds(docToOrd);
- values = MissingOrdRemapper.InsertEmptyValue(values);
- }
-
- // write the ordinals as numerics
- AddNumericField(field, docToOrd, false);
-
- // write the values as FST
- WriteFST(field, values);
- }
-
- // note: this might not be the most efficient... but its fairly simple
- public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
- {
- // write the ordinals as a binary field
- AddBinaryField(field, new IterableAnonymousInnerClassHelper(this, docToOrdCount, ords));
-
- // write the values as FST
- WriteFST(field, values);
- }
-
- private class IterableAnonymousInnerClassHelper : IEnumerable<BytesRef>
- {
- private readonly Lucene42DocValuesConsumer OuterInstance;
-
- private IEnumerable<long?> DocToOrdCount;
- private IEnumerable<long?> Ords;
-
- public IterableAnonymousInnerClassHelper(Lucene42DocValuesConsumer outerInstance, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
- {
- this.OuterInstance = outerInstance;
- this.DocToOrdCount = docToOrdCount;
- this.Ords = ords;
- }
-
- public IEnumerator<BytesRef> GetEnumerator()
- {
- return new SortedSetIterator(DocToOrdCount.GetEnumerator(), Ords.GetEnumerator());
- }
-
- System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
- }
-
- // per-document vint-encoded byte[]
- internal class SortedSetIterator : IEnumerator<BytesRef>
- {
- internal byte[] Buffer = new byte[10];
- internal ByteArrayDataOutput @out = new ByteArrayDataOutput();
- internal BytesRef @ref = new BytesRef();
-
- internal readonly IEnumerator<long?> Counts;
- internal readonly IEnumerator<long?> Ords;
-
- internal SortedSetIterator(IEnumerator<long?> counts, IEnumerator<long?> ords)
- {
- this.Counts = counts;
- this.Ords = ords;
- }
-
- public bool MoveNext()
- {
- if (!Counts.MoveNext())
- {
- return false;
- }
-
- int count = (int)Counts.Current;
- int maxSize = count * 9; //worst case
- if (maxSize > Buffer.Length)
- {
- Buffer = ArrayUtil.Grow(Buffer, maxSize);
- }
-
- try
- {
- EncodeValues(count);
- }
- catch (IOException bogus)
- {
- throw new Exception(bogus.Message, bogus);
- }
-
- @ref.Bytes = Buffer;
- @ref.Offset = 0;
- @ref.Length = @out.Position;
-
- return true;
- }
-
- public BytesRef Current
- {
- get { return @ref; }
- }
-
- object System.Collections.IEnumerator.Current
- {
- get { return Current; }
- }
-
- // encodes count values to buffer
- internal virtual void EncodeValues(int count)
- {
- @out.Reset(Buffer);
- long lastOrd = 0;
- for (int i = 0; i < count; i++)
- {
- Ords.MoveNext();
- long ord = Ords.Current.Value;
- @out.WriteVInt64(ord - lastOrd);
- lastOrd = ord;
- }
- }
-
- public void Reset()
- {
- throw new NotImplementedException();
- }
-
- public void Dispose()
- {
- }
- }
- }
-#pragma warning restore 612, 618
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42FieldInfosWriter.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42FieldInfosWriter.cs b/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42FieldInfosWriter.cs
deleted file mode 100644
index acdae7b..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42FieldInfosWriter.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-using System.Diagnostics;
-
-namespace Lucene.Net.Codecs.Lucene42
-{
- using Directory = Lucene.Net.Store.Directory;
-
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- using DocValuesType = Lucene.Net.Index.DocValuesType;
- using FieldInfo = Lucene.Net.Index.FieldInfo;
- using FieldInfos = Lucene.Net.Index.FieldInfos;
- using IndexFileNames = Lucene.Net.Index.IndexFileNames;
- using IndexOutput = Lucene.Net.Store.IndexOutput;
- using IndexOptions = Lucene.Net.Index.IndexOptions;
- using IOContext = Lucene.Net.Store.IOContext;
- using IOUtils = Lucene.Net.Util.IOUtils;
-
- /// <summary>
- /// Lucene 4.2 FieldInfos writer.
- /// </summary>
- /// <seealso> cref= Lucene42FieldInfosFormat
- /// @lucene.experimental </seealso>
- [Obsolete]
- public sealed class Lucene42FieldInfosWriter : FieldInfosWriter
- {
- /// <summary>
- /// Sole constructor. </summary>
- public Lucene42FieldInfosWriter()
- {
- }
-
- public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context)
- {
- string fileName = IndexFileNames.SegmentFileName(segmentName, "", Lucene42FieldInfosFormat.EXTENSION);
- IndexOutput output = directory.CreateOutput(fileName, context);
- bool success = false;
- try
- {
- CodecUtil.WriteHeader(output, Lucene42FieldInfosFormat.CODEC_NAME, Lucene42FieldInfosFormat.FORMAT_CURRENT);
- output.WriteVInt32(infos.Count);
- foreach (FieldInfo fi in infos)
- {
- IndexOptions? indexOptions = fi.IndexOptions;
- sbyte bits = 0x0;
- if (fi.HasVectors)
- {
- bits |= Lucene42FieldInfosFormat.STORE_TERMVECTOR;
- }
- if (fi.OmitsNorms)
- {
- bits |= Lucene42FieldInfosFormat.OMIT_NORMS;
- }
- if (fi.HasPayloads)
- {
- bits |= Lucene42FieldInfosFormat.STORE_PAYLOADS;
- }
- if (fi.IsIndexed)
- {
- bits |= Lucene42FieldInfosFormat.IS_INDEXED;
- Debug.Assert(indexOptions >= IndexOptions.DOCS_AND_FREQS_AND_POSITIONS || !fi.HasPayloads);
- if (indexOptions == IndexOptions.DOCS_ONLY)
- {
- bits |= Lucene42FieldInfosFormat.OMIT_TERM_FREQ_AND_POSITIONS;
- }
- else if (indexOptions == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS)
- {
- bits |= Lucene42FieldInfosFormat.STORE_OFFSETS_IN_POSTINGS;
- }
- else if (indexOptions == IndexOptions.DOCS_AND_FREQS)
- {
- bits |= Lucene42FieldInfosFormat.OMIT_POSITIONS;
- }
- }
- output.WriteString(fi.Name);
- output.WriteVInt32(fi.Number);
- output.WriteByte((byte)bits);
-
- // pack the DV types in one byte
- var dv = DocValuesByte(fi.DocValuesType);
- var nrm = DocValuesByte(fi.NormType);
- Debug.Assert((dv & (~0xF)) == 0 && (nrm & (~0x0F)) == 0);
- var val = unchecked((sbyte)(0xff & ((nrm << 4) | dv)));
- output.WriteByte((byte)val);
- output.WriteStringStringMap(fi.Attributes);
- }
- success = true;
- }
- finally
- {
- if (success)
- {
- output.Dispose();
- }
- else
- {
- IOUtils.CloseWhileHandlingException(output);
- }
- }
- }
-
- private static sbyte DocValuesByte(DocValuesType? type)
- {
- if (type == null)
- {
- return 0;
- }
- else if (type == DocValuesType.NUMERIC)
- {
- return 1;
- }
- else if (type == DocValuesType.BINARY)
- {
- return 2;
- }
- else if (type == DocValuesType.SORTED)
- {
- return 3;
- }
- else if (type == DocValuesType.SORTED_SET)
- {
- return 4;
- }
- else
- {
- throw new InvalidOperationException();
- }
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42RWCodec.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42RWCodec.cs b/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42RWCodec.cs
deleted file mode 100644
index 39e3b66..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42RWCodec.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-namespace Lucene.Net.Codecs.Lucene42
-{
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
-
- /// <summary>
- /// Read-write version of <seealso cref="Lucene42Codec"/> for testing.
- /// </summary>
-#pragma warning disable 612, 618
- public class Lucene42RWCodec : Lucene42Codec
- {
- private readonly DocValuesFormat Dv;
- private readonly NormsFormat Norms = new Lucene42NormsFormat();
- private readonly FieldInfosFormat fieldInfosFormat;
-
- /// <summary>
- /// LUCENENET specific
- /// Creates the codec with OldFormatImpersonationIsActive = true.
- /// </summary>
- /// <remarks>
- /// Added so that SPIClassIterator can locate this Codec. The iterator
- /// only recognises classes that have empty constructors.
- /// </remarks>
- public Lucene42RWCodec()
- : this(true)
- { }
-
- /// <param name="oldFormatImpersonationIsActive">
- /// LUCENENET specific
- /// Added to remove dependency on then-static <see cref="LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE"/>
- /// </param>
- public Lucene42RWCodec(bool oldFormatImpersonationIsActive) : base()
- {
- Dv = new Lucene42RWDocValuesFormat(oldFormatImpersonationIsActive);
- fieldInfosFormat = new Lucene42FieldInfosFormatAnonymousInnerClassHelper(oldFormatImpersonationIsActive);
- }
-
- private class Lucene42FieldInfosFormatAnonymousInnerClassHelper : Lucene42FieldInfosFormat
- {
- private readonly bool _oldFormatImpersonationIsActive;
-
- /// <param name="oldFormatImpersonationIsActive">
- /// LUCENENET specific
- /// Added to remove dependency on then-static <see cref="LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE"/>
- /// </param>
- public Lucene42FieldInfosFormatAnonymousInnerClassHelper(bool oldFormatImpersonationIsActive) : base()
- {
- _oldFormatImpersonationIsActive = oldFormatImpersonationIsActive;
- }
-
- public override FieldInfosWriter FieldInfosWriter
- {
- get
- {
- if (!_oldFormatImpersonationIsActive)
- {
- return base.FieldInfosWriter;
- }
- else
- {
- return new Lucene42FieldInfosWriter();
- }
- }
- }
- }
-
- public override DocValuesFormat GetDocValuesFormatForField(string field)
- {
- return Dv;
- }
-
- public override NormsFormat NormsFormat
- {
- get { return Norms; }
- }
-
- public override FieldInfosFormat FieldInfosFormat
- {
- get { return fieldInfosFormat; }
- }
- }
-#pragma warning restore 612, 618
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42RWDocValuesFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42RWDocValuesFormat.cs b/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42RWDocValuesFormat.cs
deleted file mode 100644
index 1a29fe6..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/lucene42/Lucene42RWDocValuesFormat.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-namespace Lucene.Net.Codecs.Lucene42
-{
- using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
-
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
-
- /// <summary>
- /// Read-write version of <seealso cref="Lucene42DocValuesFormat"/> for testing.
- /// </summary>
-#pragma warning disable 612, 618
- public class Lucene42RWDocValuesFormat : Lucene42DocValuesFormat
- {
- private readonly bool _oldFormatImpersonationIsActive;
-
- /// <summary>
- /// LUCENENET specific
- /// Creates the codec with OldFormatImpersonationIsActive = true.
- /// </summary>
- /// <remarks>
- /// Added so that SPIClassIterator can locate this Codec. The iterator
- /// only recognises classes that have empty constructors.
- /// </remarks>
- public Lucene42RWDocValuesFormat()
- : this(true)
- { }
-
- /// <param name="oldFormatImpersonationIsActive">
- /// LUCENENET specific
- /// Added to remove dependency on then-static <see cref="LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE"/>
- /// </param>
- public Lucene42RWDocValuesFormat(bool oldFormatImpersonationIsActive) : base()
- {
- _oldFormatImpersonationIsActive = oldFormatImpersonationIsActive;
- }
-
- public override DocValuesConsumer FieldsConsumer(SegmentWriteState state)
- {
- if (!_oldFormatImpersonationIsActive)
- {
- return base.FieldsConsumer(state);
- }
- else
- {
- // note: we choose DEFAULT here (its reasonably fast, and for small bpv has tiny waste)
- return new Lucene42DocValuesConsumer(state, DATA_CODEC, DATA_EXTENSION, METADATA_CODEC, METADATA_EXTENSION, m_acceptableOverheadRatio);
- }
- }
- }
-#pragma warning restore 612, 618
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e2f4c5b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
index 64cf3e5..c7ac221 100644
--- a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
+++ b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
@@ -232,16 +232,16 @@
<Compile Include="Codecs\Lucene41\Lucene41RWCodec.cs">
<SubType>Code</SubType>
</Compile>
- <Compile Include="Codecs\lucene42\Lucene42DocValuesConsumer.cs">
+ <Compile Include="Codecs\Lucene42\Lucene42DocValuesConsumer.cs">
<SubType>Code</SubType>
</Compile>
- <Compile Include="Codecs\lucene42\Lucene42FieldInfosWriter.cs">
+ <Compile Include="Codecs\Lucene42\Lucene42FieldInfosWriter.cs">
<SubType>Code</SubType>
</Compile>
- <Compile Include="Codecs\lucene42\Lucene42RWCodec.cs">
+ <Compile Include="Codecs\Lucene42\Lucene42RWCodec.cs">
<SubType>Code</SubType>
</Compile>
- <Compile Include="Codecs\lucene42\Lucene42RWDocValuesFormat.cs">
+ <Compile Include="Codecs\Lucene42\Lucene42RWDocValuesFormat.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Codecs\lucene45\Lucene45RWCodec.cs">