private void ReadField(StoredFieldVisitor visitor, FieldInfo info, int bits) { int numeric = bits & Lucene40StoredFieldsWriter.FIELD_IS_NUMERIC_MASK; if (numeric != 0) { switch (numeric) { case Lucene40StoredFieldsWriter.FIELD_IS_NUMERIC_INT: visitor.IntField(info, FieldsStream.ReadInt()); return; case Lucene40StoredFieldsWriter.FIELD_IS_NUMERIC_LONG: visitor.LongField(info, FieldsStream.ReadLong()); return; case Lucene40StoredFieldsWriter.FIELD_IS_NUMERIC_FLOAT: visitor.FloatField(info, Number.IntBitsToFloat(FieldsStream.ReadInt())); return; case Lucene40StoredFieldsWriter.FIELD_IS_NUMERIC_DOUBLE: visitor.DoubleField(info, BitConverter.Int64BitsToDouble(FieldsStream.ReadLong())); return; default: throw new CorruptIndexException("Invalid numeric type: " + numeric.ToString("x")); } } else { int length = FieldsStream.ReadVInt(); var bytes = new byte[length]; FieldsStream.ReadBytes(bytes, 0, length); if ((bits & Lucene40StoredFieldsWriter.FIELD_IS_BINARY) != 0) { visitor.BinaryField(info, bytes); } else { visitor.StringField(info, IOUtils.CHARSET_UTF_8.GetString((byte[])(Array)bytes)); } } }
public override void VisitDocument(int n, StoredFieldVisitor visitor) { Debug.Assert(n >= 0 && n < MaxDoc); @in.VisitDocument(n, visitor); }
public override void VisitDocument(int n, StoredFieldVisitor visitor) { SeekIndex(n); FieldsStream.Seek(IndexStream.ReadLong()); int numFields = FieldsStream.ReadVInt(); for (int fieldIDX = 0; fieldIDX < numFields; fieldIDX++) { int fieldNumber = FieldsStream.ReadVInt(); FieldInfo fieldInfo = FieldInfos.FieldInfo(fieldNumber); int bits = FieldsStream.ReadByte() & 0xFF; Debug.Assert(bits <= (Lucene40StoredFieldsWriter.FIELD_IS_NUMERIC_MASK | Lucene40StoredFieldsWriter.FIELD_IS_BINARY), "bits=" + bits.ToString("x")); switch (visitor.NeedsField(fieldInfo)) { case StoredFieldVisitor.Status.YES: ReadField(visitor, fieldInfo, bits); break; case StoredFieldVisitor.Status.NO: SkipField(bits); break; case StoredFieldVisitor.Status.STOP: return; } } }