Beispiel #1
0
        public Index(string fileName, string indexName, int mainPageSize = 0, Mode mode = Mode.Read)
        {
            MainPageSize = mainPageSize;
            _indexPath   = indexName;
            _filePath    = fileName;

            IndexUnit.Path = indexName;

            MainReader = new MainReader(fileName, MainPageSize, mode);
            MainWriter = new MainWriter(fileName, MainPageSize, mode);

            FilePage.PageSize = mainPageSize;

            if (mode == Mode.New)
            {
                Initialize();
            }
            if (mode == Mode.Read)
            {
                MetaData.Read();
                IndexUnit.Init(false);
                IndexUnit.ReadIndex();
                FilePage.PageSize = MainPageSize;
                MainReader        = new MainReader(fileName, MainPageSize, mode);
                MainWriter        = new MainWriter(fileName, MainPageSize, mode);
                IndexUnit.WriteIndex();
            }
            MetaData.Save();
        }
Beispiel #2
0
        private void Initialize()
        {
            //fill primary area with empty pages
            //set overflow area address
            long addrI = 0L, addrM = 0L;

            try
            {
                File.Delete("meta");
            }
            catch
            {
            }

            IndexUnit.Init(true);
            var firstMainPage = new FilePage {
                Address = addrM++, Count = 1
            };

            firstMainPage.Entries[0] = new Tuple <Record, long>(new Record(), -1);
            MainWriter.WritePage(firstMainPage);
            MainPages       = 1;
            MainRecordCount = 1;

            OverflowAddress         = MainWriter.Writer.Position;
            OverflowFirstPageNumber = MainReader.PageNumberFromAddress(MainWriter.Writer.Position);

            var newPage = new FilePage {
                Address = addrM
            };

            MainWriter.WritePage(newPage);

            OverflowEndAddress = MainWriter.Writer.Position;
            OverflowPages      = 1;
            MainWriter.Reset();

            Program.MainWrites = 0L;
            MetaData.Save();
            IndexUnit.WriteIndex();
        }