public SimpleTextDocValuesReader(SegmentReadState state, string ext)
{
DATA = state.Directory.OpenInput(
IndexFileNames.SegmentFileName(state.SegmentInfo.Name, state.SegmentSuffix, ext), state.Context);
MAX_DOC = state.SegmentInfo.DocCount;
while (true)
{
ReadLine();
if (SCRATCH.Equals(SimpleTextDocValuesWriter.END))
{
break;
}
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.FIELD), SCRATCH.Utf8ToString());
var fieldName = StripPrefix(SimpleTextDocValuesWriter.FIELD);
var field = new OneField();
FIELDS[fieldName] = field;
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.TYPE), SCRATCH.Utf8ToString());
var dvType =
(FieldInfo.DocValuesType_e)
Enum.Parse(typeof (FieldInfo.DocValuesType_e), StripPrefix(SimpleTextDocValuesWriter.TYPE));
if (dvType == FieldInfo.DocValuesType_e.NUMERIC)
{
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.MINVALUE),
"got " + SCRATCH.Utf8ToString() + " field=" + fieldName + " ext=" + ext);
field.MinValue = Convert.ToInt64(StripPrefix(SimpleTextDocValuesWriter.MINVALUE));
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.PATTERN));
field.Pattern = StripPrefix(SimpleTextDocValuesWriter.PATTERN);
field.DataStartFilePointer = DATA.FilePointer;
DATA.Seek(DATA.FilePointer + (1 + field.Pattern.Length + 2)*MAX_DOC);
}
else if (dvType == FieldInfo.DocValuesType_e.BINARY)
{
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.MAXLENGTH));
field.MaxLength = Convert.ToInt32(StripPrefix(SimpleTextDocValuesWriter.MAXLENGTH));
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.PATTERN));
field.Pattern = StripPrefix(SimpleTextDocValuesWriter.PATTERN);
field.DataStartFilePointer = DATA.FilePointer;
DATA.Seek(DATA.FilePointer + (9 + field.Pattern.Length + field.MaxLength + 2)*MAX_DOC);
}
else if (dvType == FieldInfo.DocValuesType_e.SORTED || dvType == FieldInfo.DocValuesType_e.SORTED_SET)
{
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.NUMVALUES));
field.NumValues = Convert.ToInt64(StripPrefix(SimpleTextDocValuesWriter.NUMVALUES));
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.MAXLENGTH));
field.MaxLength = Convert.ToInt32(StripPrefix(SimpleTextDocValuesWriter.MAXLENGTH));
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.PATTERN));
field.Pattern = StripPrefix(SimpleTextDocValuesWriter.PATTERN);
ReadLine();
Debug.Assert(StartsWith(SimpleTextDocValuesWriter.ORDPATTERN));
field.OrdPattern = StripPrefix(SimpleTextDocValuesWriter.ORDPATTERN);
field.DataStartFilePointer = DATA.FilePointer;
DATA.Seek(DATA.FilePointer + (9 + field.Pattern.Length + field.MaxLength)*field.NumValues +
(1 + field.OrdPattern.Length)*MAX_DOC);
}
else
{
throw new InvalidEnumArgumentException();
}
}
// We should only be called from above if at least one
// field has DVs:
Debug.Assert(FIELDS.Count > 0);
}