public IrbisRecord[] ReadAllRecordVersions
        (
            int mfn
        )
        {
            List <IrbisRecord> result      = new List <IrbisRecord>();
            IrbisRecord        lastVersion = ReadRecord(mfn);

            if (lastVersion != null)
            {
                result.Add(lastVersion);
                while (true)
                {
                    long offset = lastVersion.PreviousOffset;
                    if (offset == 0)
                    {
                        break;
                    }
                    MstRecord32 mstRecord       = Mst.ReadRecord2(offset);
                    IrbisRecord previousVersion = mstRecord.DecodeRecord();
                    if (previousVersion != null)
                    {
                        result.Add(previousVersion);
                        lastVersion = previousVersion;
                    }
                }
            }

            return(result.ToArray());
        }
        /// <summary>
        /// Search and read found records.
        /// </summary>
        public IrbisRecord[] SearchReadSimple
        (
            string key
        )
        {
            int[] mfns = InvertedFile.SearchSimple(key);
            List <IrbisRecord> result = new List <IrbisRecord>();

            foreach (int mfn in mfns)
            {
                try
                {
                    XrfRecord32 xrfRecord = Xrf.ReadRecord(mfn);
                    if (!xrfRecord.Deleted)
                    {
                        MstRecord32 mstRecord = Mst.ReadRecord2(xrfRecord.AbsoluteOffset);
                        if (!mstRecord.Deleted)
                        {
                            IrbisRecord irbisRecord = mstRecord.DecodeRecord();
                            irbisRecord.Database = Database;
                            result.Add(irbisRecord);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }

            return(result.ToArray());
        }
        public IrbisRecord ReadRecord
        (
            int mfn
        )
        {
            XrfRecord32 xrfRecord = Xrf.ReadRecord(mfn);

            if ((xrfRecord.Status & RecordStatus.PhysicallyDeleted) != 0)
            {
                return(null);
            }

            MstRecord32 mstRecord = Mst.ReadRecord2
                                    (
                xrfRecord.AbsoluteOffset
                                    );
            IrbisRecord result = mstRecord.DecodeRecord();

            result.Database = Database;

            return(result);
        }