Exemple #1
0
        // look for a key on given page
        public Tuple <bool, long, long> FindInFilePage(long page, long key)
        {
            FilePage filePage = MainReader.ReadPage(page);
            long     tmp      = 0;
            bool     flag     = false;

            for (int i = filePage.Entries.Count; i >= 0; i--)
            {
                if (filePage.Entries[i].Item1.Key == key)
                {
                    return(new Tuple <bool, long, long>(true, filePage.Address, i));
                }
                if (filePage.Entries[i].Item1.Key < key && filePage.Entries[i].Item2 != -1)
                {
                    tmp  = filePage.Entries[i].Item2;
                    flag = true;
                    break;
                }
            }
            if (flag)
            {
                while (tmp != -1)
                {
                    Tuple <Record, long> rec = MainReader.ReadEntry(tmp);
                    if (rec.Item1.Key == key)
                    {
                        return(new Tuple <bool, long, long>(true, MainReader.LastPage.Address,
                                                            MainReader.LastRecordNumber));
                    }
                    if (rec.Item1.Key < key && rec.Item2 != -1)
                    {
                        tmp = rec.Item2;
                    }
                }
            }
            return(new Tuple <bool, long, long>(false, -1, -1));
        }
Exemple #2
0
        private void FollowChain(long address, ref MainReader mr)
        {
            long   tmp     = address;
            string spacing = " ";

            while (tmp != -1)
            {
                Tuple <Record, long> i = mr.ReadEntry(tmp);
                Console.WriteLine(spacing + (i.Item1.Key == long.MaxValue
                    ? "-"
                    : i.Item1 + " | " +
                                             (i.Item2 == -1 ? "-" : "#" + i.Item2)) + (i.Item1.Deleted ? " [X]" : ""));
                spacing += " ";
                tmp      = i.Item2;
            }
        }
Exemple #3
0
 public void PrintAllMainFile()
 {
     using (var mr = new MainReader(_filePath, MainPageSize, Mode.Read, false))
     {
         Console.WriteLine("Entries per page: " + MainPageSize);
         long entry = 0L;
         Tuple <Record, long> i;
         bool flag = true;
         while ((i = mr.ReadEntry(entry)) != null)
         {
             if (mr.LastPage.Address >= MainReader.PageNumberFromAddress(OverflowAddress) && flag)
             {
                 flag = false;
                 Console.WriteLine("\n###OVERFLOW###\n");
             }
             Console.WriteLine(EntryToString(i));
             entry++;
         }
     }
 }
Exemple #4
0
        public void PrintMainFile()
        {
            var mr = new MainReader(_filePath, MainPageSize, Mode.Read, false);

            {
                Console.WriteLine("Entries per page: " + MainPageSize);
                long entry     = 0L;
                long countRecs = 0;
                Tuple <Record, long> i;
                while ((i = mr.ReadEntry(entry)) != null)
                {
                    if (mr.LastPage.Count <= 0)
                    {
                        break;
                    }
                    if (mr.LastPage.Address >= MainReader.PageNumberFromAddress(OverflowAddress))
                    {
                        break;
                    }
                    if (countRecs >= MainPageSize)
                    {
                        countRecs = 1;
                        Console.WriteLine();
                    }
                    else
                    {
                        countRecs++;
                    }
                    Console.WriteLine(EntryToString(i));

                    if (i.Item2 != -1)
                    {
                        FollowChain(i.Item2, ref mr);
                    }

                    entry++;
                }
            }
            mr.Dispose();
        }