lucenenet-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nightowl...@apache.org
Subject [31/62] [abbrv] [partial] lucenenet git commit: Renamed Lucene.Net.Core folder Lucene.Net because the dotnet.exe pack command doesn't allow creating a NuGet package with a different name than its folder. Working around it with the script was much more co
Date Tue, 04 Apr 2017 17:19:37 GMT
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/a5dc68d0/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesConsumer.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesConsumer.cs b/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesConsumer.cs
deleted file mode 100644
index 76ebffa..0000000
--- a/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesConsumer.cs
+++ /dev/null
@@ -1,684 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-
-namespace Lucene.Net.Codecs.Lucene45
-{
-    /*
-     * 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 BlockPackedWriter = Lucene.Net.Util.Packed.BlockPackedWriter;
-    using BytesRef = Lucene.Net.Util.BytesRef;
-    using FieldInfo = Lucene.Net.Index.FieldInfo;
-    using IndexFileNames = Lucene.Net.Index.IndexFileNames;
-    using IndexOutput = Lucene.Net.Store.IndexOutput;
-    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 RAMOutputStream = Lucene.Net.Store.RAMOutputStream;
-    using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
-    using StringHelper = Lucene.Net.Util.StringHelper;
-
-    /// <summary>
-    /// writer for <seealso cref="Lucene45DocValuesFormat"/> </summary>
-    public class Lucene45DocValuesConsumer : DocValuesConsumer, IDisposable
-    {
-        internal static readonly int BLOCK_SIZE = 16384;
-        internal static readonly int ADDRESS_INTERVAL = 16;
-        internal static readonly long MISSING_ORD = BitConverter.DoubleToInt64Bits(-1);
-
-        /// <summary>
-        /// Compressed using packed blocks of ints. </summary>
-        public const int DELTA_COMPRESSED = 0;
-
-        /// <summary>
-        /// Compressed by computing the GCD. </summary>
-        public const int GCD_COMPRESSED = 1;
-
-        /// <summary>
-        /// Compressed by giving IDs to unique values. </summary>
-        public const int TABLE_COMPRESSED = 2;
-
-        /// <summary>
-        /// Uncompressed binary, written directly (fixed length). </summary>
-        public const int BINARY_FIXED_UNCOMPRESSED = 0;
-
-        /// <summary>
-        /// Uncompressed binary, written directly (variable length). </summary>
-        public const int BINARY_VARIABLE_UNCOMPRESSED = 1;
-
-        /// <summary>
-        /// Compressed binary with shared prefixes </summary>
-        public const int BINARY_PREFIX_COMPRESSED = 2;
-
-        /// <summary>
-        /// Standard storage for sorted set values with 1 level of indirection:
-        ///  docId -> address -> ord.
-        /// </summary>
-        public static readonly int SORTED_SET_WITH_ADDRESSES = 0;
-
-        /// <summary>
-        /// Single-valued sorted set values, encoded as sorted values, so no level
-        ///  of indirection: docId -> ord.
-        /// </summary>
-        public static readonly int SORTED_SET_SINGLE_VALUED_SORTED = 1;
-
-        internal IndexOutput data, meta;
-        internal readonly int maxDoc;
-
-        /// <summary>
-        /// expert: Creates a new writer </summary>
-        public Lucene45DocValuesConsumer(SegmentWriteState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension)
-        {
-            bool success = false;
-            try
-            {
-                string dataName = IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, dataExtension);
-                data = state.Directory.CreateOutput(dataName, state.Context);
-                CodecUtil.WriteHeader(data, dataCodec, Lucene45DocValuesFormat.VERSION_CURRENT);
-                string metaName = IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, metaExtension);
-                meta = state.Directory.CreateOutput(metaName, state.Context);
-                CodecUtil.WriteHeader(meta, metaCodec, Lucene45DocValuesFormat.VERSION_CURRENT);
-                maxDoc = state.SegmentInfo.DocCount;
-                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)
-        {
-            long count = 0;
-            long minValue = long.MaxValue;
-            long maxValue = long.MinValue;
-            long gcd = 0;
-            bool missing = false;
-            // TODO: more efficient?
-            HashSet<long> uniqueValues = null;
-            
-            if (optimizeStorage)
-            {
-                uniqueValues = new HashSet<long>();
-
-                foreach (long? nv in values)
-                {
-                    long v;
-                    if (nv == null)
-                    {
-                        v = 0;
-                        missing = true;
-                    }
-                    else
-                    {
-                        v = nv.Value;
-                    }
-
-                    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;
-                }
-            }
-            else
-            {
-                foreach (var nv in values)
-                {
-                    ++count;
-                }
-            }
-
-            long delta = maxValue - minValue;
-
-            int format;
-            if (uniqueValues != null && (delta < 0L || PackedInt32s.BitsRequired(uniqueValues.Count - 1) < PackedInt32s.BitsRequired(delta)) && count <= int.MaxValue)
-            {
-                format = TABLE_COMPRESSED;
-            }
-            else if (gcd != 0 && gcd != 1)
-            {
-                format = GCD_COMPRESSED;
-            }
-            else
-            {
-                format = DELTA_COMPRESSED;
-            }
-            meta.WriteVInt32(field.Number);
-            meta.WriteByte((byte)Lucene45DocValuesFormat.NUMERIC);
-            meta.WriteVInt32(format);
-            if (missing)
-            {
-                meta.WriteInt64(data.GetFilePointer());
-                WriteMissingBitset(values);
-            }
-            else
-            {
-                meta.WriteInt64(-1L);
-            }
-            meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
-            meta.WriteInt64(data.GetFilePointer());
-            meta.WriteVInt64(count);
-            meta.WriteVInt32(BLOCK_SIZE);
-
-            switch (format)
-            {
-                case GCD_COMPRESSED:
-                    meta.WriteInt64(minValue);
-                    meta.WriteInt64(gcd);
-                    BlockPackedWriter quotientWriter = new BlockPackedWriter(data, BLOCK_SIZE);
-                    foreach (long? nv in values)
-                    {
-                        quotientWriter.Add((nv.GetValueOrDefault() - minValue) / gcd);
-                    }
-                    quotientWriter.Finish();
-                    break;
-
-                case DELTA_COMPRESSED:
-                    BlockPackedWriter writer = new BlockPackedWriter(data, BLOCK_SIZE);
-                    foreach (long? nv in values)
-                    {
-                        writer.Add(nv.GetValueOrDefault());
-                    }
-                    writer.Finish();
-                    break;
-
-                case TABLE_COMPRESSED:
-                    // LUCENENET NOTE: diming an array and then using .CopyTo() for better efficiency than LINQ .ToArray()
-                    long[] decode = new long[uniqueValues.Count];
-                    uniqueValues.CopyTo(decode, 0);
-                    Dictionary<long, int> encode = new Dictionary<long, int>();
-                    meta.WriteVInt32(decode.Length);
-                    for (int i = 0; i < decode.Length; i++)
-                    {
-                        meta.WriteInt64(decode[i]);
-                        encode[decode[i]] = i;
-                    }
-                    int bitsRequired = PackedInt32s.BitsRequired(uniqueValues.Count - 1);
-                    PackedInt32s.Writer ordsWriter = PackedInt32s.GetWriterNoHeader(data, PackedInt32s.Format.PACKED, (int)count, bitsRequired, PackedInt32s.DEFAULT_BUFFER_SIZE);
-                    foreach (long? nv in values)
-                    {
-                        ordsWriter.Add(encode[nv.GetValueOrDefault()]);
-                    }
-                    ordsWriter.Finish();
-                    break;
-
-                default:
-                    throw new InvalidOperationException();
-            }
-        }
-
-        // TODO: in some cases representing missing with minValue-1 wouldn't take up additional space and so on,
-        // but this is very simple, and algorithms only check this for values of 0 anyway (doesnt slow down normal decode)
-        internal virtual void WriteMissingBitset(IEnumerable values)
-        {
-            sbyte bits = 0;
-            int count = 0;
-            foreach (object v in values)
-            {
-                if (count == 8)
-                {
-                    data.WriteByte((byte)bits);
-                    count = 0;
-                    bits = 0;
-                }
-                if (v != null)
-                {
-                    bits |= (sbyte)(1 << (count & 7));
-                }
-                count++;
-            }
-            if (count > 0)
-            {
-                data.WriteByte((byte)bits);
-            }
-        }
-
-        public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values)
-        {
-            // write the byte[] data
-            meta.WriteVInt32(field.Number);
-            meta.WriteByte((byte)Lucene45DocValuesFormat.BINARY);
-            int minLength = int.MaxValue;
-            int maxLength = int.MinValue;
-            long startFP = data.GetFilePointer();
-            long count = 0;
-            bool missing = false;
-            foreach (BytesRef v in values)
-            {
-                int length;
-                if (v == null)
-                {
-                    length = 0;
-                    missing = true;
-                }
-                else
-                {
-                    length = v.Length;
-                }
-                minLength = Math.Min(minLength, length);
-                maxLength = Math.Max(maxLength, length);
-                if (v != null)
-                {
-                    data.WriteBytes(v.Bytes, v.Offset, v.Length);
-                }
-                count++;
-            }
-            meta.WriteVInt32(minLength == maxLength ? BINARY_FIXED_UNCOMPRESSED : BINARY_VARIABLE_UNCOMPRESSED);
-            if (missing)
-            {
-                meta.WriteInt64(data.GetFilePointer());
-                WriteMissingBitset(values);
-            }
-            else
-            {
-                meta.WriteInt64(-1L);
-            }
-            meta.WriteVInt32(minLength);
-            meta.WriteVInt32(maxLength);
-            meta.WriteVInt64(count);
-            meta.WriteInt64(startFP);
-
-            // 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.WriteInt64(data.GetFilePointer());
-                meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
-                meta.WriteVInt32(BLOCK_SIZE);
-
-                MonotonicBlockPackedWriter writer = new MonotonicBlockPackedWriter(data, BLOCK_SIZE);
-                long addr = 0;
-                foreach (BytesRef v in values)
-                {
-                    if (v != null)
-                    {
-                        addr += v.Length;
-                    }
-                    writer.Add(addr);
-                }
-                writer.Finish();
-            }
-        }
-
-        /// <summary>
-        /// expert: writes a value dictionary for a sorted/sortedset field </summary>
-        protected internal virtual void AddTermsDict(FieldInfo field, IEnumerable<BytesRef> values)
-        {
-            // first check if its a "fixed-length" terms dict
-            int minLength = int.MaxValue;
-            int maxLength = int.MinValue;
-            foreach (BytesRef v in values)
-            {
-                minLength = Math.Min(minLength, v.Length);
-                maxLength = Math.Max(maxLength, v.Length);
-            }
-            if (minLength == maxLength)
-            {
-                // no index needed: direct addressing by mult
-                AddBinaryField(field, values);
-            }
-            else
-            {
-                // header
-                meta.WriteVInt32(field.Number);
-                meta.WriteByte((byte)Lucene45DocValuesFormat.BINARY);
-                meta.WriteVInt32(BINARY_PREFIX_COMPRESSED);
-                meta.WriteInt64(-1L);
-                // now write the bytes: sharing prefixes within a block
-                long startFP = data.GetFilePointer();
-                // currently, we have to store the delta from expected for every 1/nth term
-                // we could avoid this, but its not much and less overall RAM than the previous approach!
-                RAMOutputStream addressBuffer = new RAMOutputStream();
-                MonotonicBlockPackedWriter termAddresses = new MonotonicBlockPackedWriter(addressBuffer, BLOCK_SIZE);
-                BytesRef lastTerm = new BytesRef();
-                long count = 0;
-                foreach (BytesRef v in values)
-                {
-                    if (count % ADDRESS_INTERVAL == 0)
-                    {
-                        termAddresses.Add(data.GetFilePointer() - startFP);
-                        // force the first term in a block to be abs-encoded
-                        lastTerm.Length = 0;
-                    }
-
-                    // prefix-code
-                    int sharedPrefix = StringHelper.BytesDifference(lastTerm, v);
-                    data.WriteVInt32(sharedPrefix);
-                    data.WriteVInt32(v.Length - sharedPrefix);
-                    data.WriteBytes(v.Bytes, v.Offset + sharedPrefix, v.Length - sharedPrefix);
-                    lastTerm.CopyBytes(v);
-                    count++;
-                }
-                long indexStartFP = data.GetFilePointer();
-                // write addresses of indexed terms
-                termAddresses.Finish();
-                addressBuffer.WriteTo(data);
-                addressBuffer = null;
-                termAddresses = null;
-                meta.WriteVInt32(minLength);
-                meta.WriteVInt32(maxLength);
-                meta.WriteVInt64(count);
-                meta.WriteInt64(startFP);
-                meta.WriteVInt32(ADDRESS_INTERVAL);
-                meta.WriteInt64(indexStartFP);
-                meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
-                meta.WriteVInt32(BLOCK_SIZE);
-            }
-        }
-
-        public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd)
-        {
-            meta.WriteVInt32(field.Number);
-            meta.WriteByte((byte)Lucene45DocValuesFormat.SORTED);
-            AddTermsDict(field, values);
-            AddNumericField(field, docToOrd, false);
-        }
-
-        private static bool IsSingleValued(IEnumerable<long?> docToOrdCount)
-        {
-            return docToOrdCount.All(ordCount => ordCount <= 1);
-        }
-
-        public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
-        {
-            meta.WriteVInt32(field.Number);
-            meta.WriteByte((byte)Lucene45DocValuesFormat.SORTED_SET);
-
-            if (IsSingleValued(docToOrdCount))
-            {
-                meta.WriteVInt32(SORTED_SET_SINGLE_VALUED_SORTED);
-                // The field is single-valued, we can encode it as SORTED
-                AddSortedField(field, values, GetSortedSetEnumerable(docToOrdCount, ords));
-                return;
-            }
-
-            meta.WriteVInt32(SORTED_SET_WITH_ADDRESSES);
-
-            // write the ord -> byte[] as a binary field
-            AddTermsDict(field, values);
-
-            // write the stream of ords as a numeric field
-            // NOTE: we could return an iterator that delta-encodes these within a doc
-            AddNumericField(field, ords, false);
-
-            // write the doc -> ord count as a absolute index to the stream
-            meta.WriteVInt32(field.Number);
-            meta.WriteByte((byte)Lucene45DocValuesFormat.NUMERIC);
-            meta.WriteVInt32(DELTA_COMPRESSED);
-            meta.WriteInt64(-1L);
-            meta.WriteVInt32(PackedInt32s.VERSION_CURRENT);
-            meta.WriteInt64(data.GetFilePointer());
-            meta.WriteVInt64(maxDoc);
-            meta.WriteVInt32(BLOCK_SIZE);
-
-            var writer = new MonotonicBlockPackedWriter(data, BLOCK_SIZE);
-            long addr = 0;
-            foreach (long? v in docToOrdCount)
-            {
-                addr += v.Value;
-                writer.Add(addr);
-            }
-            writer.Finish();
-        }
-
-        private IEnumerable<long?> GetSortedSetEnumerable(IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
-        {
-            IEnumerator<long?> docToOrdCountIter = docToOrdCount.GetEnumerator();
-            IEnumerator<long?> ordsIter = ords.GetEnumerator();
-
-            const long MISSING_ORD = -1;
-
-            while (docToOrdCountIter.MoveNext())
-            {
-                long current = docToOrdCountIter.Current.Value;
-                if (current == 0)
-                {
-                    yield return MISSING_ORD;
-                }
-                else
-                {
-                    Debug.Assert(current == 1);
-                    ordsIter.MoveNext();
-                    yield return ordsIter.Current;
-                }
-            }
-
-            Debug.Assert(!ordsIter.MoveNext());
-        }
-
-        /*
-      private class IterableAnonymousInnerClassHelper : IEnumerable<int>
-	  {
-		  private readonly Lucene45DocValuesConsumer OuterInstance;
-
-		  private IEnumerable<int> DocToOrdCount;
-		  private IEnumerable<long> Ords;
-
-		  public IterableAnonymousInnerClassHelper(IEnumerable<int> docToOrdCount, IEnumerable<long> ords)
-		  {
-			  //this.OuterInstance = outerInstance;
-			  this.DocToOrdCount = docToOrdCount;
-			  this.Ords = ords;
-		  }
-
-          public virtual IEnumerator<BytesRef> GetEnumerator()
-		  {
-			*/
-        /*IEnumerator<Number> docToOrdCountIt = DocToOrdCount.GetEnumerator();
-      IEnumerator<Number> ordsIt = Ords.GetEnumerator();
-      return new IteratorAnonymousInnerClassHelper(this, docToOrdCountIt, ordsIt);*/
-        /*
-return new SortedSetIterator(DocToOrdCount.GetEnumerator(), Ords.GetEnumerator());
-}
-
-System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
-{
-return GetEnumerator();
-}
-
-private class SortedSetIterator : IEnumerator<BytesRef>
-{
-internal byte[] buffer = new byte[10]; //Initial size, will grow if needed
-internal ByteArrayDataOutput output = new ByteArrayDataOutput();
-internal BytesRef bytesRef = new BytesRef();
-
-internal IEnumerator<int> counts;
-internal IEnumerator<long> ords;
-
-internal SortedSetIterator(IEnumerator<int> counts, IEnumerator<long> ords)
-{
-this.counts = counts;
-this.ords = ords;
-}
-
-public BytesRef Current
-{
-get
-{
-return bytesRef;
-}
-}
-
-public void Dispose()
-{
-counts.Dispose();
-ords.Dispose();
-}
-
-object System.Collections.IEnumerator.Current
-{
-get { return bytesRef;  }
-}
-
-public bool MoveNext()
-{
-if (!counts.MoveNext())
-return false;
-
-int count = counts.Current;
-int maxSize = count * 9;//worst case
-if (maxSize > buffer.Length)
-buffer = ArrayUtil.Grow(buffer, maxSize);
-
-try
-{
-EncodeValues(count);
-}
-catch (System.IO.IOException)
-{
-throw;
-}
-
-bytesRef.Bytes = buffer;
-bytesRef.Offset = 0;
-bytesRef.Length = output.Position;
-
-return true;
-}
-
-private void EncodeValues(int count)
-{
-output.Reset(buffer);
-long lastOrd = 0;
-for (int i = 0; i < count; i++)
-{
-ords.MoveNext();
-long ord = ords.Current;
-output.WriteVLong(ord - lastOrd);
-lastOrd = ord;
-}
-}
-
-public void Reset()
-{
-throw new NotImplementedException();
-}
-}*/
-
-        /*private class IteratorAnonymousInnerClassHelper : IEnumerator<Number>
-        {
-            private readonly IterableAnonymousInnerClassHelper OuterInstance;
-
-            private IEnumerator<Number> DocToOrdCountIt;
-            private IEnumerator<Number> OrdsIt;
-
-            public IteratorAnonymousInnerClassHelper(IterableAnonymousInnerClassHelper outerInstance, IEnumerator<Number> docToOrdCountIt, IEnumerator<Number> ordsIt)
-            {
-                this.OuterInstance = outerInstance;
-                this.DocToOrdCountIt = docToOrdCountIt;
-                this.OrdsIt = ordsIt;
-            }
-
-            public virtual bool HasNext()
-            {
-              return DocToOrdCountIt.HasNext();
-            }
-
-            public virtual Number Next()
-            {
-              Number ordCount = DocToOrdCountIt.next();
-              if ((long)ordCount == 0)
-              {
-                return MISSING_ORD;
-              }
-              else
-              {
-                Debug.Assert((long)ordCount == 1);
-                return OrdsIt.next();
-              }
-            }
-
-            public virtual void Remove()
-            {
-              throw new System.NotSupportedException();
-            }
-        }*/
-
-        //}
-
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                bool success = false;
-                try
-                {
-                    if (meta != null)
-                    {
-                        meta.WriteVInt32(-1); // write EOF marker
-                        CodecUtil.WriteFooter(meta); // write checksum
-                    }
-                    if (data != null)
-                    {
-                        CodecUtil.WriteFooter(data); // write checksum
-                    }
-                    success = true;
-                }
-                finally
-                {
-                    if (success)
-                    {
-                        IOUtils.Close(data, meta);
-                    }
-                    else
-                    {
-                        IOUtils.CloseWhileHandlingException(data, meta);
-                    }
-                    meta = data = null;
-                }
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/a5dc68d0/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesFormat.cs b/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesFormat.cs
deleted file mode 100644
index 30cae45..0000000
--- a/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesFormat.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-namespace Lucene.Net.Codecs.Lucene45
-{
-    /*
-     * 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 SegmentReadState = Lucene.Net.Index.SegmentReadState;
-    using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
-
-    /// <summary>
-    /// Lucene 4.5 DocValues format.
-    /// <p>
-    /// Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with these strategies:
-    /// <p>
-    /// <seealso cref="DocValuesType#NUMERIC NUMERIC"/>:
-    /// <ul>
-    ///    <li>Delta-compressed: per-document integers written in blocks of 16k. For each block
-    ///        the minimum value in that block is encoded, and each entry is a delta from that
-    ///        minimum value. Each block of deltas is compressed with bitpacking. For more
-    ///        information, see <seealso cref="BlockPackedWriter"/>.
-    ///    <li>Table-compressed: when the number of unique values is very small (&lt; 256), and
-    ///        when there are unused "gaps" in the range of values used (such as <seealso cref="SmallFloat"/>),
-    ///        a lookup table is written instead. Each per-document entry is instead the ordinal
-    ///        to this table, and those ordinals are compressed with bitpacking (<seealso cref="PackedInts"/>).
-    ///    <li>GCD-compressed: when all numbers share a common divisor, such as dates, the greatest
-    ///        common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics.
-    /// </ul>
-    /// <p>
-    /// <seealso cref="DocValuesType#BINARY BINARY"/>:
-    /// <ul>
-    ///    <li>Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length.
-    ///        Each document's value can be addressed directly with multiplication ({@code docID * length}).
-    ///    <li>Variable-width Binary: one large concatenated byte[] is written, along with end addresses
-    ///        for each document. The addresses are written in blocks of 16k, with the current absolute
-    ///        start for the block, and the average (expected) delta per entry. For each document the
-    ///        deviation from the delta (actual - expected) is written.
-    ///    <li>Prefix-compressed Binary: values are written in chunks of 16, with the first value written
-    ///        completely and other values sharing prefixes. chunk addresses are written in blocks of 16k,
-    ///        with the current absolute start for the block, and the average (expected) delta per entry.
-    ///        For each chunk the deviation from the delta (actual - expected) is written.
-    /// </ul>
-    /// <p>
-    /// <seealso cref="DocValuesType#SORTED SORTED"/>:
-    /// <ul>
-    ///    <li>Sorted: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary,
-    ///        along with the per-document ordinals written using one of the numeric strategies above.
-    /// </ul>
-    /// <p>
-    /// <seealso cref="DocValuesType#SORTED_SET SORTED_SET"/>:
-    /// <ul>
-    ///    <li>SortedSet: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary,
-    ///        an ordinal list and per-document index into this list are written using the numeric strategies
-    ///        above.
-    /// </ul>
-    /// <p>
-    /// Files:
-    /// <ol>
-    ///   <li><tt>.dvd</tt>: DocValues data</li>
-    ///   <li><tt>.dvm</tt>: DocValues metadata</li>
-    /// </ol>
-    /// <ol>
-    ///   <li><a name="dvm" id="dvm"></a>
-    ///   <p>The DocValues metadata or .dvm file.</p>
-    ///   <p>For DocValues field, this stores metadata, such as the offset into the
-    ///      DocValues data (.dvd)</p>
-    ///   <p>DocValues metadata (.dvm) --&gt; Header,&lt;Entry&gt;<sup>NumFields</sup>,Footer</p>
-    ///   <ul>
-    ///     <li>Entry --&gt; NumericEntry | BinaryEntry | SortedEntry | SortedSetEntry</li>
-    ///     <li>NumericEntry --&gt; GCDNumericEntry | TableNumericEntry | DeltaNumericEntry</li>
-    ///     <li>GCDNumericEntry --&gt; NumericHeader,MinValue,GCD</li>
-    ///     <li>TableNumericEntry --&gt; NumericHeader,TableSize,<seealso cref="DataOutput#writeLong Int64"/><sup>TableSize</sup></li>
-    ///     <li>DeltaNumericEntry --&gt; NumericHeader</li>
-    ///     <li>NumericHeader --&gt; FieldNumber,EntryType,NumericType,MissingOffset,PackedVersion,DataOffset,Count,BlockSize</li>
-    ///     <li>BinaryEntry --&gt; FixedBinaryEntry | VariableBinaryEntry | PrefixBinaryEntry</li>
-    ///     <li>FixedBinaryEntry --&gt; BinaryHeader</li>
-    ///     <li>VariableBinaryEntry --&gt; BinaryHeader,AddressOffset,PackedVersion,BlockSize</li>
-    ///     <li>PrefixBinaryEntry --&gt; BinaryHeader,AddressInterval,AddressOffset,PackedVersion,BlockSize</li>
-    ///     <li>BinaryHeader --&gt; FieldNumber,EntryType,BinaryType,MissingOffset,MinLength,MaxLength,DataOffset</li>
-    ///     <li>SortedEntry --&gt; FieldNumber,EntryType,BinaryEntry,NumericEntry</li>
-    ///     <li>SortedSetEntry --&gt; EntryType,BinaryEntry,NumericEntry,NumericEntry</li>
-    ///     <li>FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --&gt; <seealso cref="DataOutput#writeVInt VInt"/></li>
-    ///     <li>EntryType,CompressionType --&gt; <seealso cref="DataOutput#writeByte Byte"/></li>
-    ///     <li>Header --&gt; <seealso cref="CodecUtil#writeHeader CodecHeader"/></li>
-    ///     <li>MinValue,GCD,MissingOffset,AddressOffset,DataOffset --&gt; <seealso cref="DataOutput#writeLong Int64"/></li>
-    ///     <li>TableSize --&gt; <seealso cref="DataOutput#writeVInt vInt"/></li>
-    ///     <li>Footer --&gt; <seealso cref="CodecUtil#writeFooter CodecFooter"/></li>
-    ///   </ul>
-    ///   <p>Sorted fields have two entries: a BinaryEntry with the value metadata,
-    ///      and an ordinary NumericEntry for the document-to-ord metadata.</p>
-    ///   <p>SortedSet fields have three entries: a BinaryEntry with the value metadata,
-    ///      and two NumericEntries for the document-to-ord-index and ordinal list metadata.</p>
-    ///   <p>FieldNumber of -1 indicates the end of metadata.</p>
-    ///   <p>EntryType is a 0 (NumericEntry) or 1 (BinaryEntry)</p>
-    ///   <p>DataOffset is the pointer to the start of the data in the DocValues data (.dvd)</p>
-    ///   <p>NumericType indicates how Numeric values will be compressed:
-    ///      <ul>
-    ///         <li>0 --&gt; delta-compressed. For each block of 16k integers, every integer is delta-encoded
-    ///             from the minimum value within the block.
-    ///         <li>1 --&gt, gcd-compressed. When all integers share a common divisor, only quotients are stored
-    ///             using blocks of delta-encoded ints.
-    ///         <li>2 --&gt; table-compressed. When the number of unique numeric values is small and it would save space,
-    ///             a lookup table of unique values is written, followed by the ordinal for each document.
-    ///      </ul>
-    ///   <p>BinaryType indicates how Binary values will be stored:
-    ///      <ul>
-    ///         <li>0 --&gt; fixed-width. All values have the same length, addressing by multiplication.
-    ///         <li>1 --&gt, variable-width. An address for each value is stored.
-    ///         <li>2 --&gt; prefix-compressed. An address to the start of every interval'th value is stored.
-    ///      </ul>
-    ///   <p>MinLength and MaxLength represent the min and max byte[] value lengths for Binary values.
-    ///      If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length).
-    ///      Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize)
-    ///      is written for the addresses.
-    ///   <p>MissingOffset points to a byte[] containing a bitset of all documents that had a value for the field.
-    ///      If its -1, then there are no missing values.
-    ///   <p>Checksum contains the CRC32 checksum of all bytes in the .dvm file up
-    ///      until the checksum. this is used to verify integrity of the file on opening the
-    ///      index.
-    ///   <li><a name="dvd" id="dvd"></a>
-    ///   <p>The DocValues data or .dvd file.</p>
-    ///   <p>For DocValues field, this stores the actual per-document data (the heavy-lifting)</p>
-    ///   <p>DocValues data (.dvd) --&gt; Header,&lt;NumericData | BinaryData | SortedData&gt;<sup>NumFields</sup>,Footer</p>
-    ///   <ul>
-    ///     <li>NumericData --&gt; DeltaCompressedNumerics | TableCompressedNumerics | GCDCompressedNumerics</li>
-    ///     <li>BinaryData --&gt;  <seealso cref="DataOutput#writeByte Byte"/><sup>DataLength</sup>,Addresses</li>
-    ///     <li>SortedData --&gt; <seealso cref="FST FST&lt;Int64&gt;"/></li>
-    ///     <li>DeltaCompressedNumerics --&gt; <seealso cref="BlockPackedWriter BlockPackedInts(blockSize=16k)"/></li>
-    ///     <li>TableCompressedNumerics --&gt; <seealso cref="PackedInts PackedInts"/></li>
-    ///     <li>GCDCompressedNumerics --&gt; <seealso cref="BlockPackedWriter BlockPackedInts(blockSize=16k)"/></li>
-    ///     <li>Addresses --&gt; <seealso cref="MonotonicBlockPackedWriter MonotonicBlockPackedInts(blockSize=16k)"/></li>
-    ///     <li>Footer --&gt; <seealso cref="CodecUtil#writeFooter CodecFooter"/></li>
-    ///   </ul>
-    ///   <p>SortedSet entries store the list of ordinals in their BinaryData as a
-    ///      sequences of increasing <seealso cref="DataOutput#writeVLong vLong"/>s, delta-encoded.</p>
-    /// </ol>
-    /// @lucene.experimental
-    /// </summary>
-    [DocValuesFormatName("Lucene45")] // LUCENENET specific - using DocValuesFormatName attribute to ensure the default name passed from subclasses is the same as this class name
-    public sealed class Lucene45DocValuesFormat : DocValuesFormat
-    {
-        /// <summary>
-        /// Sole Constructor </summary>
-        public Lucene45DocValuesFormat()
-            : base()
-        {
-        }
-
-        public override DocValuesConsumer FieldsConsumer(SegmentWriteState state)
-        {
-            return new Lucene45DocValuesConsumer(state, DATA_CODEC, DATA_EXTENSION, META_CODEC, META_EXTENSION);
-        }
-
-        public override DocValuesProducer FieldsProducer(SegmentReadState state)
-        {
-            return new Lucene45DocValuesProducer(state, DATA_CODEC, DATA_EXTENSION, META_CODEC, META_EXTENSION);
-        }
-
-        internal const string DATA_CODEC = "Lucene45DocValuesData";
-        internal const string DATA_EXTENSION = "dvd";
-        internal const string META_CODEC = "Lucene45ValuesMetadata";
-        internal const string META_EXTENSION = "dvm";
-        internal const int VERSION_START = 0;
-        internal const int VERSION_SORTED_SET_SINGLE_VALUE_OPTIMIZED = 1;
-        internal const int VERSION_CHECKSUM = 2;
-        internal const int VERSION_CURRENT = VERSION_CHECKSUM;
-        internal const sbyte NUMERIC = 0;
-        internal const sbyte BINARY = 1;
-        internal const sbyte SORTED = 2;
-        internal const sbyte SORTED_SET = 3;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/a5dc68d0/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesProducer.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesProducer.cs b/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesProducer.cs
deleted file mode 100644
index 871517d..0000000
--- a/src/Lucene.Net.Core/Codecs/Lucene45/Lucene45DocValuesProducer.cs
+++ /dev/null
@@ -1,1269 +0,0 @@
-using Lucene.Net.Index;
-using Lucene.Net.Support;
-using Lucene.Net.Util;
-using System;
-using System.Collections.Generic;
-
-namespace Lucene.Net.Codecs.Lucene45
-{
-    /*
-     * 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 BinaryDocValues = Lucene.Net.Index.BinaryDocValues;
-    using IBits = Lucene.Net.Util.IBits;
-    using BlockPackedReader = Lucene.Net.Util.Packed.BlockPackedReader;
-    using BytesRef = Lucene.Net.Util.BytesRef;
-    using ChecksumIndexInput = Lucene.Net.Store.ChecksumIndexInput;
-    using DocsAndPositionsEnum = Lucene.Net.Index.DocsAndPositionsEnum;
-    using DocsEnum = Lucene.Net.Index.DocsEnum;
-    using DocValues = Lucene.Net.Index.DocValues;
-    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 IndexInput = Lucene.Net.Store.IndexInput;
-    using IOUtils = Lucene.Net.Util.IOUtils;
-    using Int64Values = Lucene.Net.Util.Int64Values;
-    using MonotonicBlockPackedReader = Lucene.Net.Util.Packed.MonotonicBlockPackedReader;
-    using NumericDocValues = Lucene.Net.Index.NumericDocValues;
-    using PackedInt32s = Lucene.Net.Util.Packed.PackedInt32s;
-    using RamUsageEstimator = Lucene.Net.Util.RamUsageEstimator;
-    using RandomAccessOrds = Lucene.Net.Index.RandomAccessOrds;
-    using SegmentReadState = Lucene.Net.Index.SegmentReadState;
-    using SortedDocValues = Lucene.Net.Index.SortedDocValues;
-    using SortedSetDocValues = Lucene.Net.Index.SortedSetDocValues;
-    using TermsEnum = Lucene.Net.Index.TermsEnum;
-
-    /// <summary>
-    /// reader for <seealso cref="Lucene45DocValuesFormat"/> </summary>
-    public class Lucene45DocValuesProducer : DocValuesProducer, IDisposable
-    {
-        private readonly IDictionary<int, NumericEntry> numerics;
-        private readonly IDictionary<int, BinaryEntry> binaries;
-        private readonly IDictionary<int, SortedSetEntry> sortedSets;
-        private readonly IDictionary<int, NumericEntry> ords;
-        private readonly IDictionary<int, NumericEntry> ordIndexes;
-        private readonly AtomicInt64 ramBytesUsed;
-        private readonly IndexInput data;
-        private readonly int maxDoc;
-        private readonly int version;
-
-        // memory-resident structures
-        private readonly IDictionary<int, MonotonicBlockPackedReader> addressInstances = new Dictionary<int, MonotonicBlockPackedReader>();
-
-        private readonly IDictionary<int, MonotonicBlockPackedReader> ordIndexInstances = new Dictionary<int, MonotonicBlockPackedReader>();
-
-        /// <summary>
-        /// expert: instantiates a new reader </summary>
-        protected internal Lucene45DocValuesProducer(SegmentReadState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension)
-        {
-            string metaName = IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, metaExtension);
-            // read in the entries from the metadata file.
-            ChecksumIndexInput @in = state.Directory.OpenChecksumInput(metaName, state.Context);
-            this.maxDoc = state.SegmentInfo.DocCount;
-            bool success = false;
-            try
-            {
-                version = CodecUtil.CheckHeader(@in, metaCodec, Lucene45DocValuesFormat.VERSION_START, Lucene45DocValuesFormat.VERSION_CURRENT);
-                numerics = new Dictionary<int, NumericEntry>();
-                ords = new Dictionary<int, NumericEntry>();
-                ordIndexes = new Dictionary<int, NumericEntry>();
-                binaries = new Dictionary<int, BinaryEntry>();
-                sortedSets = new Dictionary<int, SortedSetEntry>();
-                ReadFields(@in, state.FieldInfos);
-
-                if (version >= Lucene45DocValuesFormat.VERSION_CHECKSUM)
-                {
-                    CodecUtil.CheckFooter(@in);
-                }
-                else
-                {
-#pragma warning disable 612, 618
-                    CodecUtil.CheckEOF(@in);
-#pragma warning restore 612, 618
-                }
-
-                success = true;
-            }
-            finally
-            {
-                if (success)
-                {
-                    IOUtils.Close(@in);
-                }
-                else
-                {
-                    IOUtils.CloseWhileHandlingException(@in);
-                }
-            }
-
-            success = false;
-            try
-            {
-                string dataName = IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, dataExtension);
-                data = state.Directory.OpenInput(dataName, state.Context);
-                int version2 = CodecUtil.CheckHeader(data, dataCodec, Lucene45DocValuesFormat.VERSION_START, Lucene45DocValuesFormat.VERSION_CURRENT);
-                if (version != version2)
-                {
-                    throw new Exception("Format versions mismatch");
-                }
-
-                success = true;
-            }
-            finally
-            {
-                if (!success)
-                {
-                    IOUtils.CloseWhileHandlingException(this.data);
-                }
-            }
-
-            ramBytesUsed = new AtomicInt64(RamUsageEstimator.ShallowSizeOfInstance(this.GetType()));
-        }
-
-        private void ReadSortedField(int fieldNumber, IndexInput meta, FieldInfos infos)
-        {
-            // sorted = binary + numeric
-            if (meta.ReadVInt32() != fieldNumber)
-            {
-                throw new Exception("sorted entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            if (meta.ReadByte() != Lucene45DocValuesFormat.BINARY)
-            {
-                throw new Exception("sorted entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            BinaryEntry b = ReadBinaryEntry(meta);
-            binaries[fieldNumber] = b;
-
-            if (meta.ReadVInt32() != fieldNumber)
-            {
-                throw new Exception("sorted entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            if (meta.ReadByte() != Lucene45DocValuesFormat.NUMERIC)
-            {
-                throw new Exception("sorted entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            NumericEntry n = ReadNumericEntry(meta);
-            ords[fieldNumber] = n;
-        }
-
-        private void ReadSortedSetFieldWithAddresses(int fieldNumber, IndexInput meta, FieldInfos infos)
-        {
-            // sortedset = binary + numeric (addresses) + ordIndex
-            if (meta.ReadVInt32() != fieldNumber)
-            {
-                throw new Exception("sortedset entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            if (meta.ReadByte() != Lucene45DocValuesFormat.BINARY)
-            {
-                throw new Exception("sortedset entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            BinaryEntry b = ReadBinaryEntry(meta);
-            binaries[fieldNumber] = b;
-
-            if (meta.ReadVInt32() != fieldNumber)
-            {
-                throw new Exception("sortedset entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            if (meta.ReadByte() != Lucene45DocValuesFormat.NUMERIC)
-            {
-                throw new Exception("sortedset entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            NumericEntry n1 = ReadNumericEntry(meta);
-            ords[fieldNumber] = n1;
-
-            if (meta.ReadVInt32() != fieldNumber)
-            {
-                throw new Exception("sortedset entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            if (meta.ReadByte() != Lucene45DocValuesFormat.NUMERIC)
-            {
-                throw new Exception("sortedset entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-            }
-            NumericEntry n2 = ReadNumericEntry(meta);
-            ordIndexes[fieldNumber] = n2;
-        }
-
-        private void ReadFields(IndexInput meta, FieldInfos infos)
-        {
-            int fieldNumber = meta.ReadVInt32();
-            while (fieldNumber != -1)
-            {
-                // check should be: infos.fieldInfo(fieldNumber) != null, which incorporates negative check
-                // but docvalues updates are currently buggy here (loading extra stuff, etc): LUCENE-5616
-                if (fieldNumber < 0)
-                {
-                    // trickier to validate more: because we re-use for norms, because we use multiple entries
-                    // for "composite" types like sortedset, etc.
-                    throw new Exception("Invalid field number: " + fieldNumber + " (resource=" + meta + ")");
-                }
-                byte type = meta.ReadByte();
-                if (type == Lucene45DocValuesFormat.NUMERIC)
-                {
-                    numerics[fieldNumber] = ReadNumericEntry(meta);
-                }
-                else if (type == Lucene45DocValuesFormat.BINARY)
-                {
-                    BinaryEntry b = ReadBinaryEntry(meta);
-                    binaries[fieldNumber] = b;
-                }
-                else if (type == Lucene45DocValuesFormat.SORTED)
-                {
-                    ReadSortedField(fieldNumber, meta, infos);
-                }
-                else if (type == Lucene45DocValuesFormat.SORTED_SET)
-                {
-                    SortedSetEntry ss = ReadSortedSetEntry(meta);
-                    sortedSets[fieldNumber] = ss;
-                    if (ss.Format == Lucene45DocValuesConsumer.SORTED_SET_WITH_ADDRESSES)
-                    {
-                        ReadSortedSetFieldWithAddresses(fieldNumber, meta, infos);
-                    }
-                    else if (ss.Format == Lucene45DocValuesConsumer.SORTED_SET_SINGLE_VALUED_SORTED)
-                    {
-                        if (meta.ReadVInt32() != fieldNumber)
-                        {
-                            throw new Exception("sortedset entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-                        }
-                        if (meta.ReadByte() != Lucene45DocValuesFormat.SORTED)
-                        {
-                            throw new Exception("sortedset entry for field: " + fieldNumber + " is corrupt (resource=" + meta + ")");
-                        }
-                        ReadSortedField(fieldNumber, meta, infos);
-                    }
-                    else
-                    {
-                        throw new Exception();
-                    }
-                }
-                else
-                {
-                    throw new Exception("invalid type: " + type + ", resource=" + meta);
-                }
-                fieldNumber = meta.ReadVInt32();
-            }
-        }
-
-        internal static NumericEntry ReadNumericEntry(IndexInput meta)
-        {
-            NumericEntry entry = new NumericEntry();
-            entry.format = meta.ReadVInt32();
-            entry.missingOffset = meta.ReadInt64();
-            entry.PackedInt32sVersion = meta.ReadVInt32();
-            entry.Offset = meta.ReadInt64();
-            entry.Count = meta.ReadVInt64();
-            entry.BlockSize = meta.ReadVInt32();
-            switch (entry.format)
-            {
-                case Lucene45DocValuesConsumer.GCD_COMPRESSED:
-                    entry.minValue = meta.ReadInt64();
-                    entry.gcd = meta.ReadInt64();
-                    break;
-
-                case Lucene45DocValuesConsumer.TABLE_COMPRESSED:
-                    if (entry.Count > int.MaxValue)
-                    {
-                        throw new Exception("Cannot use TABLE_COMPRESSED with more than MAX_VALUE values, input=" + meta);
-                    }
-                    int uniqueValues = meta.ReadVInt32();
-                    if (uniqueValues > 256)
-                    {
-                        throw new Exception("TABLE_COMPRESSED cannot have more than 256 distinct values, input=" + meta);
-                    }
-                    entry.table = new long[uniqueValues];
-                    for (int i = 0; i < uniqueValues; ++i)
-                    {
-                        entry.table[i] = meta.ReadInt64();
-                    }
-                    break;
-
-                case Lucene45DocValuesConsumer.DELTA_COMPRESSED:
-                    break;
-
-                default:
-                    throw new Exception("Unknown format: " + entry.format + ", input=" + meta);
-            }
-            return entry;
-        }
-
-        internal static BinaryEntry ReadBinaryEntry(IndexInput meta)
-        {
-            BinaryEntry entry = new BinaryEntry();
-            entry.format = meta.ReadVInt32();
-            entry.missingOffset = meta.ReadInt64();
-            entry.minLength = meta.ReadVInt32();
-            entry.maxLength = meta.ReadVInt32();
-            entry.Count = meta.ReadVInt64();
-            entry.offset = meta.ReadInt64();
-            switch (entry.format)
-            {
-                case Lucene45DocValuesConsumer.BINARY_FIXED_UNCOMPRESSED:
-                    break;
-
-                case Lucene45DocValuesConsumer.BINARY_PREFIX_COMPRESSED:
-                    entry.AddressInterval = meta.ReadVInt32();
-                    entry.AddressesOffset = meta.ReadInt64();
-                    entry.PackedInt32sVersion = meta.ReadVInt32();
-                    entry.BlockSize = meta.ReadVInt32();
-                    break;
-
-                case Lucene45DocValuesConsumer.BINARY_VARIABLE_UNCOMPRESSED:
-                    entry.AddressesOffset = meta.ReadInt64();
-                    entry.PackedInt32sVersion = meta.ReadVInt32();
-                    entry.BlockSize = meta.ReadVInt32();
-                    break;
-
-                default:
-                    throw new Exception("Unknown format: " + entry.format + ", input=" + meta);
-            }
-            return entry;
-        }
-
-        internal virtual SortedSetEntry ReadSortedSetEntry(IndexInput meta)
-        {
-            SortedSetEntry entry = new SortedSetEntry();
-            if (version >= Lucene45DocValuesFormat.VERSION_SORTED_SET_SINGLE_VALUE_OPTIMIZED)
-            {
-                entry.Format = meta.ReadVInt32();
-            }
-            else
-            {
-                entry.Format = Lucene45DocValuesConsumer.SORTED_SET_WITH_ADDRESSES;
-            }
-            if (entry.Format != Lucene45DocValuesConsumer.SORTED_SET_SINGLE_VALUED_SORTED && entry.Format != Lucene45DocValuesConsumer.SORTED_SET_WITH_ADDRESSES)
-            {
-                throw new Exception("Unknown format: " + entry.Format + ", input=" + meta);
-            }
-            return entry;
-        }
-
-        public override NumericDocValues GetNumeric(FieldInfo field)
-        {
-            NumericEntry entry = numerics[field.Number];
-            return GetNumeric(entry);
-        }
-
-        public override long RamBytesUsed()
-        {
-            return ramBytesUsed.Get();
-        }
-
-        public override void CheckIntegrity()
-        {
-            if (version >= Lucene45DocValuesFormat.VERSION_CHECKSUM)
-            {
-                CodecUtil.ChecksumEntireFile(data);
-            }
-        }
-
-        internal virtual Int64Values GetNumeric(NumericEntry entry)
-        {
-            IndexInput data = (IndexInput)this.data.Clone();
-            data.Seek(entry.Offset);
-
-            switch (entry.format)
-            {
-                case Lucene45DocValuesConsumer.DELTA_COMPRESSED:
-                    BlockPackedReader reader = new BlockPackedReader(data, entry.PackedInt32sVersion, entry.BlockSize, entry.Count, true);
-                    return reader;
-
-                case Lucene45DocValuesConsumer.GCD_COMPRESSED:
-                    long min = entry.minValue;
-                    long mult = entry.gcd;
-                    BlockPackedReader quotientReader = new BlockPackedReader(data, entry.PackedInt32sVersion, entry.BlockSize, entry.Count, true);
-                    return new Int64ValuesAnonymousInnerClassHelper(this, min, mult, quotientReader);
-
-                case Lucene45DocValuesConsumer.TABLE_COMPRESSED:
-                    long[] table = entry.table;
-                    int bitsRequired = PackedInt32s.BitsRequired(table.Length - 1);
-                    PackedInt32s.Reader ords = PackedInt32s.GetDirectReaderNoHeader(data, PackedInt32s.Format.PACKED, entry.PackedInt32sVersion, (int)entry.Count, bitsRequired);
-                    return new Int64ValuesAnonymousInnerClassHelper2(this, table, ords);
-
-                default:
-                    throw new Exception();
-            }
-        }
-
-        private class Int64ValuesAnonymousInnerClassHelper : Int64Values
-        {
-            private readonly Lucene45DocValuesProducer outerInstance;
-
-            private long min;
-            private long mult;
-            private BlockPackedReader quotientReader;
-
-            public Int64ValuesAnonymousInnerClassHelper(Lucene45DocValuesProducer outerInstance, long min, long mult, BlockPackedReader quotientReader)
-            {
-                this.outerInstance = outerInstance;
-                this.min = min;
-                this.mult = mult;
-                this.quotientReader = quotientReader;
-            }
-
-            public override long Get(long id)
-            {
-                return min + mult * quotientReader.Get(id);
-            }
-        }
-
-        private class Int64ValuesAnonymousInnerClassHelper2 : Int64Values
-        {
-            private readonly Lucene45DocValuesProducer outerInstance;
-
-            private long[] table;
-            private PackedInt32s.Reader ords;
-
-            public Int64ValuesAnonymousInnerClassHelper2(Lucene45DocValuesProducer outerInstance, long[] table, PackedInt32s.Reader ords)
-            {
-                this.outerInstance = outerInstance;
-                this.table = table;
-                this.ords = ords;
-            }
-
-            public override long Get(long id)
-            {
-                return table[(int)ords.Get((int)id)];
-            }
-        }
-
-        public override BinaryDocValues GetBinary(FieldInfo field)
-        {
-            BinaryEntry bytes = binaries[field.Number];
-            switch (bytes.format)
-            {
-                case Lucene45DocValuesConsumer.BINARY_FIXED_UNCOMPRESSED:
-                    return GetFixedBinary(field, bytes);
-
-                case Lucene45DocValuesConsumer.BINARY_VARIABLE_UNCOMPRESSED:
-                    return GetVariableBinary(field, bytes);
-
-                case Lucene45DocValuesConsumer.BINARY_PREFIX_COMPRESSED:
-                    return GetCompressedBinary(field, bytes);
-
-                default:
-                    throw new Exception();
-            }
-        }
-
-        private BinaryDocValues GetFixedBinary(FieldInfo field, BinaryEntry bytes)
-        {
-            IndexInput data = (IndexInput)this.data.Clone();
-
-            return new Int64BinaryDocValuesAnonymousInnerClassHelper(this, bytes, data);
-        }
-
-        private class Int64BinaryDocValuesAnonymousInnerClassHelper : Int64BinaryDocValues
-        {
-            private readonly Lucene45DocValuesProducer outerInstance;
-
-            private Lucene45DocValuesProducer.BinaryEntry bytes;
-            private IndexInput data;
-
-            public Int64BinaryDocValuesAnonymousInnerClassHelper(Lucene45DocValuesProducer outerInstance, Lucene45DocValuesProducer.BinaryEntry bytes, IndexInput data)
-            {
-                this.outerInstance = outerInstance;
-                this.bytes = bytes;
-                this.data = data;
-            }
-
-            public override void Get(long id, BytesRef result)
-            {
-                long address = bytes.offset + id * bytes.maxLength;
-                try
-                {
-                    data.Seek(address);
-                    // NOTE: we could have one buffer, but various consumers (e.g. FieldComparerSource)
-                    // assume "they" own the bytes after calling this!
-                    var buffer = new byte[bytes.maxLength];
-                    data.ReadBytes(buffer, 0, buffer.Length);
-                    result.Bytes = buffer;
-                    result.Offset = 0;
-                    result.Length = buffer.Length;
-                }
-                catch (System.IO.IOException e)
-                {
-                    throw new Exception(e.ToString(), e);
-                }
-            }
-        }
-
-        /// <summary>
-        /// returns an address instance for variable-length binary values.
-        ///  @lucene.internal
-        /// </summary>
-        protected internal virtual MonotonicBlockPackedReader GetAddressInstance(IndexInput data, FieldInfo field, BinaryEntry bytes)
-        {
-            MonotonicBlockPackedReader addresses;
-            lock (addressInstances)
-            {
-                MonotonicBlockPackedReader addrInstance;
-                if (!addressInstances.TryGetValue(field.Number, out addrInstance))
-                {
-                    data.Seek(bytes.AddressesOffset);
-                    addrInstance = new MonotonicBlockPackedReader(data, bytes.PackedInt32sVersion, bytes.BlockSize, bytes.Count, false);
-                    addressInstances[field.Number] = addrInstance;
-                    ramBytesUsed.AddAndGet(addrInstance.RamBytesUsed() + RamUsageEstimator.NUM_BYTES_INT32);
-                }
-                addresses = addrInstance;
-            }
-            return addresses;
-        }
-
-        private BinaryDocValues GetVariableBinary(FieldInfo field, BinaryEntry bytes)
-        {
-            IndexInput data = (IndexInput)this.data.Clone();
-
-            MonotonicBlockPackedReader addresses = GetAddressInstance(data, field, bytes);
-
-            return new Int64BinaryDocValuesAnonymousInnerClassHelper2(this, bytes, data, addresses);
-        }
-
-        private class Int64BinaryDocValuesAnonymousInnerClassHelper2 : Int64BinaryDocValues
-        {
-            private readonly Lucene45DocValuesProducer outerInstance;
-
-            private Lucene45DocValuesProducer.BinaryEntry bytes;
-            private IndexInput data;
-            private MonotonicBlockPackedReader addresses;
-
-            public Int64BinaryDocValuesAnonymousInnerClassHelper2(Lucene45DocValuesProducer outerInstance, Lucene45DocValuesProducer.BinaryEntry bytes, IndexInput data, MonotonicBlockPackedReader addresses)
-            {
-                this.outerInstance = outerInstance;
-                this.bytes = bytes;
-                this.data = data;
-                this.addresses = addresses;
-            }
-
-            public override void Get(long id, BytesRef result)
-            {
-                long startAddress = bytes.offset + (id == 0 ? 0 : addresses.Get(id - 1));
-                long endAddress = bytes.offset + addresses.Get(id);
-                int length = (int)(endAddress - startAddress);
-                try
-                {
-                    data.Seek(startAddress);
-                    // NOTE: we could have one buffer, but various consumers (e.g. FieldComparerSource)
-                    // assume "they" own the bytes after calling this!
-                    var buffer = new byte[length];
-                    data.ReadBytes(buffer, 0, buffer.Length);
-                    result.Bytes = buffer;
-                    result.Offset = 0;
-                    result.Length = length;
-                }
-                catch (System.IO.IOException e)
-                {
-                    throw new Exception(e.ToString(), e);
-                }
-            }
-        }
-
-        /// <summary>
-        /// returns an address instance for prefix-compressed binary values.
-        /// @lucene.internal
-        /// </summary>
-        protected internal virtual MonotonicBlockPackedReader GetIntervalInstance(IndexInput data, FieldInfo field, BinaryEntry bytes)
-        {
-            MonotonicBlockPackedReader addresses;
-            long interval = bytes.AddressInterval;
-            lock (addressInstances)
-            {
-                MonotonicBlockPackedReader addrInstance;
-                if (!addressInstances.TryGetValue(field.Number, out addrInstance))
-                {
-                    data.Seek(bytes.AddressesOffset);
-                    long size;
-                    if (bytes.Count % interval == 0)
-                    {
-                        size = bytes.Count / interval;
-                    }
-                    else
-                    {
-                        size = 1L + bytes.Count / interval;
-                    }
-                    addrInstance = new MonotonicBlockPackedReader(data, bytes.PackedInt32sVersion, bytes.BlockSize, size, false);
-                    addressInstances[field.Number] = addrInstance;
-                    ramBytesUsed.AddAndGet(addrInstance.RamBytesUsed() + RamUsageEstimator.NUM_BYTES_INT32);
-                }
-                addresses = addrInstance;
-            }
-            return addresses;
-        }
-
-        private BinaryDocValues GetCompressedBinary(FieldInfo field, BinaryEntry bytes)
-        {
-            IndexInput data = (IndexInput)this.data.Clone();
-
-            MonotonicBlockPackedReader addresses = GetIntervalInstance(data, field, bytes);
-
-            return new CompressedBinaryDocValues(bytes, addresses, data);
-        }
-
-        public override SortedDocValues GetSorted(FieldInfo field)
-        {
-            int valueCount = (int)binaries[field.Number].Count;
-            BinaryDocValues binary = GetBinary(field);
-            NumericEntry entry = ords[field.Number];
-            IndexInput data = (IndexInput)this.data.Clone();
-            data.Seek(entry.Offset);
-            BlockPackedReader ordinals = new BlockPackedReader(data, entry.PackedInt32sVersion, entry.BlockSize, entry.Count, true);
-
-            return new SortedDocValuesAnonymousInnerClassHelper(this, valueCount, binary, ordinals);
-        }
-
-        private class SortedDocValuesAnonymousInnerClassHelper : SortedDocValues
-        {
-            private readonly Lucene45DocValuesProducer outerInstance;
-
-            private int valueCount;
-            private BinaryDocValues binary;
-            private BlockPackedReader ordinals;
-
-            public SortedDocValuesAnonymousInnerClassHelper(Lucene45DocValuesProducer outerInstance, int valueCount, BinaryDocValues binary, BlockPackedReader ordinals)
-            {
-                this.outerInstance = outerInstance;
-                this.valueCount = valueCount;
-                this.binary = binary;
-                this.ordinals = ordinals;
-            }
-
-            public override int GetOrd(int docID)
-            {
-                return (int)ordinals.Get(docID);
-            }
-
-            public override void LookupOrd(int ord, BytesRef result)
-            {
-                binary.Get(ord, result);
-            }
-
-            public override int ValueCount
-            {
-                get
-                {
-                    return valueCount;
-                }
-            }
-
-            public override int LookupTerm(BytesRef key)
-            {
-                if (binary is CompressedBinaryDocValues)
-                {
-                    return (int)((CompressedBinaryDocValues)binary).LookupTerm(key);
-                }
-                else
-                {
-                    return base.LookupTerm(key);
-                }
-            }
-
-            public override TermsEnum GetTermsEnum()
-            {
-                if (binary is CompressedBinaryDocValues)
-                {
-                    return ((CompressedBinaryDocValues)binary).GetTermsEnum();
-                }
-                else
-                {
-                    return base.GetTermsEnum();
-                }
-            }
-        }
-
-        /// <summary>
-        /// returns an address instance for sortedset ordinal lists
-        /// @lucene.internal
-        /// </summary>
-        protected internal virtual MonotonicBlockPackedReader GetOrdIndexInstance(IndexInput data, FieldInfo field, NumericEntry entry)
-        {
-            MonotonicBlockPackedReader ordIndex;
-            lock (ordIndexInstances)
-            {
-                MonotonicBlockPackedReader ordIndexInstance;
-                if (!ordIndexInstances.TryGetValue(field.Number, out ordIndexInstance))
-                {
-                    data.Seek(entry.Offset);
-                    ordIndexInstance = new MonotonicBlockPackedReader(data, entry.PackedInt32sVersion, entry.BlockSize, entry.Count, false);
-                    ordIndexInstances[field.Number] = ordIndexInstance;
-                    ramBytesUsed.AddAndGet(ordIndexInstance.RamBytesUsed() + RamUsageEstimator.NUM_BYTES_INT32);
-                }
-                ordIndex = ordIndexInstance;
-            }
-            return ordIndex;
-        }
-
-        public override SortedSetDocValues GetSortedSet(FieldInfo field)
-        {
-            SortedSetEntry ss = sortedSets[field.Number];
-            if (ss.Format == Lucene45DocValuesConsumer.SORTED_SET_SINGLE_VALUED_SORTED)
-            {
-                SortedDocValues values = GetSorted(field);
-                return DocValues.Singleton(values);
-            }
-            else if (ss.Format != Lucene45DocValuesConsumer.SORTED_SET_WITH_ADDRESSES)
-            {
-                throw new Exception();
-            }
-
-            IndexInput data = (IndexInput)this.data.Clone();
-            long valueCount = binaries[field.Number].Count;
-            // we keep the byte[]s and list of ords on disk, these could be large
-            Int64BinaryDocValues binary = (Int64BinaryDocValues)GetBinary(field);
-            Int64Values ordinals = GetNumeric(ords[field.Number]);
-            // but the addresses to the ord stream are in RAM
-            MonotonicBlockPackedReader ordIndex = GetOrdIndexInstance(data, field, ordIndexes[field.Number]);
-
-            return new RandomAccessOrdsAnonymousInnerClassHelper(this, valueCount, binary, ordinals, ordIndex);
-        }
-
-        private class RandomAccessOrdsAnonymousInnerClassHelper : RandomAccessOrds
-        {
-            private readonly Lucene45DocValuesProducer outerInstance;
-
-            private long valueCount;
-            private Lucene45DocValuesProducer.Int64BinaryDocValues binary;
-            private Int64Values ordinals;
-            private MonotonicBlockPackedReader ordIndex;
-
-            public RandomAccessOrdsAnonymousInnerClassHelper(Lucene45DocValuesProducer outerInstance, long valueCount, Lucene45DocValuesProducer.Int64BinaryDocValues binary, Int64Values ordinals, MonotonicBlockPackedReader ordIndex)
-            {
-                this.outerInstance = outerInstance;
-                this.valueCount = valueCount;
-                this.binary = binary;
-                this.ordinals = ordinals;
-                this.ordIndex = ordIndex;
-            }
-
-            internal long startOffset;
-            internal long offset;
-            internal long endOffset;
-
-            public override long NextOrd()
-            {
-                if (offset == endOffset)
-                {
-                    return NO_MORE_ORDS;
-                }
-                else
-                {
-                    long ord = ordinals.Get(offset);
-                    offset++;
-                    return ord;
-                }
-            }
-
-            public override void SetDocument(int docID)
-            {
-                startOffset = offset = (docID == 0 ? 0 : ordIndex.Get(docID - 1));
-                endOffset = ordIndex.Get(docID);
-            }
-
-            public override void LookupOrd(long ord, BytesRef result)
-            {
-                binary.Get(ord, result);
-            }
-
-            public override long ValueCount
-            {
-                get
-                {
-                    return valueCount;
-                }
-            }
-
-            public override long LookupTerm(BytesRef key)
-            {
-                if (binary is CompressedBinaryDocValues)
-                {
-                    return ((CompressedBinaryDocValues)binary).LookupTerm(key);
-                }
-                else
-                {
-                    return base.LookupTerm(key);
-                }
-            }
-
-            public override TermsEnum GetTermsEnum()
-            {
-                if (binary is CompressedBinaryDocValues)
-                {
-                    return ((CompressedBinaryDocValues)binary).GetTermsEnum();
-                }
-                else
-                {
-                    return base.GetTermsEnum();
-                }
-            }
-
-            public override long OrdAt(int index)
-            {
-                return ordinals.Get(startOffset + index);
-            }
-
-            public override int Cardinality()
-            {
-                return (int)(endOffset - startOffset);
-            }
-        }
-
-        private IBits GetMissingBits(long offset)
-        {
-            if (offset == -1)
-            {
-                return new Bits.MatchAllBits(maxDoc);
-            }
-            else
-            {
-                IndexInput @in = (IndexInput)data.Clone();
-                return new BitsAnonymousInnerClassHelper(this, offset, @in);
-            }
-        }
-
-        private class BitsAnonymousInnerClassHelper : IBits
-        {
-            private readonly Lucene45DocValuesProducer outerInstance;
-
-            private long offset;
-            private IndexInput @in;
-
-            public BitsAnonymousInnerClassHelper(Lucene45DocValuesProducer outerInstance, long offset, IndexInput @in)
-            {
-                this.outerInstance = outerInstance;
-                this.offset = offset;
-                this.@in = @in;
-            }
-
-            public virtual bool Get(int index)
-            {
-                try
-                {
-                    @in.Seek(offset + (index >> 3));
-                    return (@in.ReadByte() & (1 << (index & 7))) != 0;
-                }
-                catch (System.IO.IOException e)
-                {
-                    throw new Exception(e.ToString(), e);
-                }
-            }
-
-            public virtual int Length
-            {
-                get { return outerInstance.maxDoc; }
-            }
-        }
-
-        public override IBits GetDocsWithField(FieldInfo field)
-        {
-            switch (field.DocValuesType)
-            {
-                case DocValuesType.SORTED_SET:
-                    return DocValues.DocsWithValue(GetSortedSet(field), maxDoc);
-
-                case DocValuesType.SORTED:
-                    return DocValues.DocsWithValue(GetSorted(field), maxDoc);
-
-                case DocValuesType.BINARY:
-                    BinaryEntry be = binaries[field.Number];
-                    return GetMissingBits(be.missingOffset);
-
-                case DocValuesType.NUMERIC:
-                    NumericEntry ne = numerics[field.Number];
-                    return GetMissingBits(ne.missingOffset);
-
-                default:
-                    throw new InvalidOperationException();
-            }
-        }
-
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing)
-                data.Dispose();
-        }
-
-        /// <summary>
-        /// metadata entry for a numeric docvalues field </summary>
-        protected internal class NumericEntry
-        {
-            internal NumericEntry()
-            {
-            }
-
-            /// <summary>
-            /// offset to the bitset representing docsWithField, or -1 if no documents have missing values </summary>
-            internal long missingOffset;
-
-            /// <summary>
-            /// offset to the actual numeric values </summary>
-            public long Offset { get; set; }
-
-            internal int format;
-
-            /// <summary>
-            /// packed ints version used to encode these numerics 
-            /// <para/>
-            /// NOTE: This was packedIntsVersion (field) in Lucene
-            /// </summary>
-            public int PackedInt32sVersion { get; set; }
-
-            /// <summary>
-            /// count of values written </summary>
-            public long Count { get; set; }
-
-            /// <summary>
-            /// packed ints blocksize </summary>
-            public int BlockSize { get; set; }
-
-            internal long minValue;
-            internal long gcd;
-            internal long[] table;
-        }
-
-        /// <summary>
-        /// metadata entry for a binary docvalues field </summary>
-        protected internal class BinaryEntry
-        {
-            internal BinaryEntry()
-            {
-            }
-
-            /// <summary>
-            /// offset to the bitset representing docsWithField, or -1 if no documents have missing values </summary>
-            internal long missingOffset;
-
-            /// <summary>
-            /// offset to the actual binary values </summary>
-            internal long offset;
-
-            internal int format;
-
-            /// <summary>
-            /// count of values written </summary>
-            public long Count { get; set; }
-
-            internal int minLength;
-            internal int maxLength;
-
-            /// <summary>
-            /// offset to the addressing data that maps a value to its slice of the byte[] </summary>
-            public long AddressesOffset { get; set; }
-
-            /// <summary>
-            /// interval of shared prefix chunks (when using prefix-compressed binary) </summary>
-            public long AddressInterval { get; set; }
-
-            /// <summary>
-            /// packed ints version used to encode addressing information 
-            /// <para/>
-            /// NOTE: This was packedIntsVersion (field) in Lucene
-            /// </summary>
-            public int PackedInt32sVersion { get; set; }
-
-            /// <summary>
-            /// packed ints blocksize </summary>
-            public int BlockSize { get; set; }
-        }
-
-        /// <summary>
-        /// metadata entry for a sorted-set docvalues field </summary>
-        protected internal class SortedSetEntry
-        {
-            internal SortedSetEntry()
-            {
-            }
-
-            internal int Format { get; set; }
-        }
-
-        // internally we compose complex dv (sorted/sortedset) from other ones
-        /// <summary>
-        /// NOTE: This was LongBinaryDocValues in Lucene
-        /// </summary>
-        internal abstract class Int64BinaryDocValues : BinaryDocValues
-        {
-            public override sealed void Get(int docID, BytesRef result)
-            {
-                Get((long)docID, result);
-            }
-
-            public abstract void Get(long id, BytesRef result);
-        }
-
-        // in the compressed case, we add a few additional operations for
-        // more efficient reverse lookup and enumeration
-        internal class CompressedBinaryDocValues : Int64BinaryDocValues
-        {
-            internal readonly BinaryEntry bytes;
-            internal readonly long interval;
-            internal readonly long numValues;
-            internal readonly long numIndexValues;
-            internal readonly MonotonicBlockPackedReader addresses;
-            internal readonly IndexInput data;
-            internal readonly TermsEnum termsEnum;
-
-            public CompressedBinaryDocValues(BinaryEntry bytes, MonotonicBlockPackedReader addresses, IndexInput data)
-            {
-                this.bytes = bytes;
-                this.interval = bytes.AddressInterval;
-                this.addresses = addresses;
-                this.data = data;
-                this.numValues = bytes.Count;
-                this.numIndexValues = addresses.Count;
-                this.termsEnum = GetTermsEnum(data);
-            }
-
-            public override void Get(long id, BytesRef result)
-            {
-                try
-                {
-                    termsEnum.SeekExact(id);
-                    BytesRef term = termsEnum.Term;
-                    result.Bytes = term.Bytes;
-                    result.Offset = term.Offset;
-                    result.Length = term.Length;
-                }
-                catch (System.IO.IOException e)
-                {
-                    throw new Exception(e.ToString(), e);
-                }
-            }
-
-            internal virtual long LookupTerm(BytesRef key)
-            {
-                try
-                {
-                    TermsEnum.SeekStatus status = termsEnum.SeekCeil(key);
-                    if (status == TermsEnum.SeekStatus.END)
-                    {
-                        return -numValues - 1;
-                    }
-                    else if (status == TermsEnum.SeekStatus.FOUND)
-                    {
-                        return termsEnum.Ord;
-                    }
-                    else
-                    {
-                        return -termsEnum.Ord - 1;
-                    }
-                }
-                catch (System.IO.IOException bogus)
-                {
-                    throw new Exception(bogus.ToString(), bogus);
-                }
-            }
-
-            internal virtual TermsEnum GetTermsEnum()
-            {
-                try
-                {
-                    return GetTermsEnum((IndexInput)data.Clone());
-                }
-                catch (System.IO.IOException e)
-                {
-                    throw new Exception(e.ToString(), e);
-                }
-            }
-
-            internal virtual TermsEnum GetTermsEnum(IndexInput input)
-            {
-                input.Seek(bytes.offset);
-
-                return new TermsEnumAnonymousInnerClassHelper(this, input);
-            }
-
-            private class TermsEnumAnonymousInnerClassHelper : TermsEnum
-            {
-                private readonly CompressedBinaryDocValues outerInstance;
-
-                private IndexInput input;
-
-                public TermsEnumAnonymousInnerClassHelper(CompressedBinaryDocValues outerInstance, IndexInput input)
-                {
-                    this.outerInstance = outerInstance;
-                    this.input = input;
-                    currentOrd = -1;
-                    termBuffer = new BytesRef(outerInstance.bytes.maxLength < 0 ? 0 : outerInstance.bytes.maxLength);
-                    term = new BytesRef();
-                }
-
-                private long currentOrd;
-
-                // TODO: maxLength is negative when all terms are merged away...
-                private readonly BytesRef termBuffer;
-
-                private readonly BytesRef term;
-
-                public override BytesRef Next()
-                {
-                    if (DoNext() == null)
-                    {
-                        return null;
-                    }
-                    else
-                    {
-                        SetTerm();
-                        return term;
-                    }
-                }
-
-                private BytesRef DoNext()
-                {
-                    if (++currentOrd >= outerInstance.numValues)
-                    {
-                        return null;
-                    }
-                    else
-                    {
-                        int start = input.ReadVInt32();
-                        int suffix = input.ReadVInt32();
-                        input.ReadBytes(termBuffer.Bytes, start, suffix);
-                        termBuffer.Length = start + suffix;
-                        return termBuffer;
-                    }
-                }
-
-                public override TermsEnum.SeekStatus SeekCeil(BytesRef text)
-                {
-                    // binary-search just the index values to find the block,
-                    // then scan within the block
-                    long low = 0;
-                    long high = outerInstance.numIndexValues - 1;
-
-                    while (low <= high)
-                    {
-                        long mid = (int)((uint)(low + high) >> 1);
-                        DoSeek(mid * outerInstance.interval);
-                        int cmp = termBuffer.CompareTo(text);
-
-                        if (cmp < 0)
-                        {
-                            low = mid + 1;
-                        }
-                        else if (cmp > 0)
-                        {
-                            high = mid - 1;
-                        }
-                        else
-                        {
-                            // we got lucky, found an indexed term
-                            SetTerm();
-                            return TermsEnum.SeekStatus.FOUND;
-                        }
-                    }
-
-                    if (outerInstance.numIndexValues == 0)
-                    {
-                        return TermsEnum.SeekStatus.END;
-                    }
-
-                    // block before insertion point
-                    long block = low - 1;
-                    DoSeek(block < 0 ? -1 : block * outerInstance.interval);
-
-                    while (DoNext() != null)
-                    {
-                        int cmp = termBuffer.CompareTo(text);
-                        if (cmp == 0)
-                        {
-                            SetTerm();
-                            return TermsEnum.SeekStatus.FOUND;
-                        }
-                        else if (cmp > 0)
-                        {
-                            SetTerm();
-                            return TermsEnum.SeekStatus.NOT_FOUND;
-                        }
-                    }
-
-                    return TermsEnum.SeekStatus.END;
-                }
-
-                public override void SeekExact(long ord)
-                {
-                    DoSeek(ord);
-                    SetTerm();
-                }
-
-                private void DoSeek(long ord)
-                {
-                    long block = ord / outerInstance.interval;
-
-                    if (ord >= currentOrd && block == currentOrd / outerInstance.interval)
-                    {
-                        // seek within current block
-                    }
-                    else
-                    {
-                        // position before start of block
-                        currentOrd = ord - ord % outerInstance.interval - 1;
-                        input.Seek(outerInstance.bytes.offset + outerInstance.addresses.Get(block));
-                    }
-
-                    while (currentOrd < ord)
-                    {
-                        DoNext();
-                    }
-                }
-
-                private void SetTerm()
-                {
-                    // TODO: is there a cleaner way
-                    term.Bytes = new byte[termBuffer.Length];
-                    term.Offset = 0;
-                    term.CopyBytes(termBuffer);
-                }
-
-                public override BytesRef Term
-                {
-                    get { return term; }
-                }
-
-                public override long Ord
-                {
-                    get { return currentOrd; }
-                }
-
-                public override IComparer<BytesRef> Comparer
-                {
-                    get
-                    {
-                        return BytesRef.UTF8SortedAsUnicodeComparer;
-                    }
-                }
-
-                public override int DocFreq
-                {
-                    get { throw new System.NotSupportedException(); }
-                }
-
-                public override long TotalTermFreq
-                {
-                    get { return -1; }
-                }
-
-                public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags)
-                {
-                    throw new System.NotSupportedException();
-                }
-
-                public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags)
-                {
-                    throw new System.NotSupportedException();
-                }
-            }
-        }
-    }
-}
\ No newline at end of file


Mime
View raw message