Пример #1
0
        /// <summary> Construct a new SegmentInfo instance by reading a
        /// previously saved SegmentInfo from input.
        /// 
        /// </summary>
        /// <param name="dir">directory to load from
        /// </param>
        /// <param name="format">format of the segments info file
        /// </param>
        /// <param name="input">input handle to read segment info from
        /// </param>
        internal SegmentInfo(Directory dir, int format, IndexInput input)
        {
            this.dir = dir;
            name = input.ReadString();
            docCount = input.ReadInt();
            if (format <= SegmentInfos.FORMAT_LOCKLESS)
            {
                delGen = input.ReadLong();
                if (format <= SegmentInfos.FORMAT_SHARED_DOC_STORE)
                {
                    docStoreOffset = input.ReadInt();
                    if (docStoreOffset != - 1)
                    {
                        docStoreSegment = input.ReadString();
                        docStoreIsCompoundFile = (1 == input.ReadByte());
                    }
                    else
                    {
                        docStoreSegment = name;
                        docStoreIsCompoundFile = false;
                    }
                }
                else
                {
                    docStoreOffset = - 1;
                    docStoreSegment = name;
                    docStoreIsCompoundFile = false;
                }
                if (format <= SegmentInfos.FORMAT_SINGLE_NORM_FILE)
                {
                    hasSingleNormFile = (1 == input.ReadByte());
                }
                else
                {
                    hasSingleNormFile = false;
                }
                int numNormGen = input.ReadInt();
                if (numNormGen == NO)
                {
                    normGen = null;
                }
                else
                {
                    normGen = new long[numNormGen];
                    for (int j = 0; j < numNormGen; j++)
                    {
                        normGen[j] = input.ReadLong();
                    }
                }
                isCompoundFile = (sbyte) input.ReadByte();
                preLockless = (isCompoundFile == CHECK_DIR);
                if (format <= SegmentInfos.FORMAT_DEL_COUNT)
                {
                    delCount = input.ReadInt();
                    System.Diagnostics.Debug.Assert(delCount <= docCount);
                }
                else
                    delCount = - 1;
                if (format <= SegmentInfos.FORMAT_HAS_PROX)
                    hasProx = input.ReadByte() == 1;
                else
                    hasProx = true;

                if (format <= SegmentInfos.FORMAT_DIAGNOSTICS)
                {
                    diagnostics = input.readStringStringMap();
                }
                else
                {
                    diagnostics = (System.Collections.IDictionary) new System.Collections.Hashtable();
                }
            }
            else
            {
                delGen = CHECK_DIR;
                normGen = null;
                isCompoundFile = (sbyte) (CHECK_DIR);
                preLockless = true;
                hasSingleNormFile = false;
                docStoreOffset = - 1;
                docStoreIsCompoundFile = false;
                docStoreSegment = null;
                delCount = - 1;
                hasProx = true;
                diagnostics = (System.Collections.IDictionary) new System.Collections.Hashtable();
            }
        }