/// <summary> /// NOTE: This was loadShortField() in Lucene. /// </summary> private NumericDocValues LoadInt16Field(/*FieldInfo field, // LUCENENET: Never read */ IndexInput input) { CodecUtil.CheckHeader(input, Lucene40DocValuesFormat.INTS_CODEC_NAME, Lucene40DocValuesFormat.INTS_VERSION_START, Lucene40DocValuesFormat.INTS_VERSION_CURRENT); int valueSize = input.ReadInt32(); if (valueSize != 2) { throw new CorruptIndexException("invalid valueSize: " + valueSize); } int maxDoc = state.SegmentInfo.DocCount; short[] values = new short[maxDoc]; for (int i = 0; i < values.Length; i++) { values[i] = input.ReadInt16(); } ramBytesUsed.AddAndGet(RamUsageEstimator.SizeOf(values)); return(new NumericDocValuesAnonymousClass4(values)); }
public override long Get(int index) { long majorBitPos = (long)index * m_bitsPerValue; long elementPos = (long)((ulong)majorBitPos >> 3); try { @in.Seek(startPointer + elementPos); int bitPos = (int)(majorBitPos & 7); // round up bits to a multiple of 8 to find total bytes needed to read int roundedBits = ((bitPos + m_bitsPerValue + 7) & ~7); // the number of extra bits read at the end to shift out int shiftRightBits = roundedBits - bitPos - m_bitsPerValue; long rawValue; switch ((int)((uint)roundedBits >> 3)) { case 1: rawValue = @in.ReadByte(); break; case 2: rawValue = @in.ReadInt16(); break; case 3: rawValue = ((long)@in.ReadInt16() << 8) | (@in.ReadByte() & 0xFFL); break; case 4: rawValue = @in.ReadInt32(); break; case 5: rawValue = ((long)@in.ReadInt32() << 8) | (@in.ReadByte() & 0xFFL); break; case 6: rawValue = ((long)@in.ReadInt32() << 16) | (@in.ReadInt16() & 0xFFFFL); break; case 7: rawValue = ((long)@in.ReadInt32() << 24) | ((@in.ReadInt16() & 0xFFFFL) << 8) | (@in.ReadByte() & 0xFFL); break; case 8: rawValue = @in.ReadInt64(); break; case 9: // We must be very careful not to shift out relevant bits. So we account for right shift // we would normally do on return here, and reset it. rawValue = (@in.ReadInt64() << (8 - shiftRightBits)) | (((uint)(@in.ReadByte() & 0xFFL) >> shiftRightBits)); shiftRightBits = 0; break; default: throw new InvalidOperationException("bitsPerValue too large: " + m_bitsPerValue); } return(((long)((ulong)rawValue >> shiftRightBits)) & valueMask); } catch (IOException ioe) { throw new InvalidOperationException("failed", ioe); } }