示例#1
0
文件: Page.cs 项目: erlGreen/BTree
        public void SetParentsChildrenPageNumber(int lastPageNumber, DiskFunctionality df)
        {
            if (parentPageNumber == -1)
            {
                return;
            }
            Page ancestorPage = df.ReadPage(parentPageNumber);

            List <TreeItem> .Enumerator e = ancestorPage.itemList.GetEnumerator();
            TreeItem iterator;

            while (e.MoveNext())
            {
                iterator = e.Current;
                if (iterator.leftChildNumber == lastPageNumber)
                {
                    iterator.leftChildNumber = currentPageNumber;
                }
                if (iterator.rightChildNumber == lastPageNumber)
                {
                    iterator.rightChildNumber = currentPageNumber;
                }
            }
            df.SavePage(ancestorPage);
        }
示例#2
0
文件: Page.cs 项目: erlGreen/BTree
        public void SetChildrensParentPageNumber(DiskFunctionality df)
        {
            TreeItem treeItem1;
            TreeItem treeItem2;

            List <TreeItem> .Enumerator enumerator = itemList.GetEnumerator();
            enumerator.MoveNext();
            treeItem1 = enumerator.Current;
            if (treeItem1.leftChildNumber == -1)
            {
                return;
            }
            Page child = df.ReadPage(treeItem1.leftChildNumber);

            child.parentPageNumber = currentPageNumber;
            df.SavePage(child);
            while (enumerator.MoveNext())
            {
                treeItem2 = enumerator.Current;
                child     = df.ReadPage(treeItem2.leftChildNumber);
                child.parentPageNumber = currentPageNumber;
                df.SavePage(child);
                treeItem1 = treeItem2;
            }
            child = df.ReadPage(treeItem1.rightChildNumber);
            child.parentPageNumber = currentPageNumber;
            df.SavePage(child);
        }
示例#3
0
文件: Program.cs 项目: erlGreen/BTree
        static void Main(string[] args)
        {
            int    order = 2;
            int    key;
            int    offset;
            int    max;
            int    amount;
            string answear;

            string[]          parts;
            Random            random = new Random();
            DiskFunctionality df     = new DiskFunctionality(order);

            Console.WriteLine("i key value    insert value");
            Console.WriteLine("ii amount max  insert random keys");
            Console.WriteLine("d key          delete key");
            Console.WriteLine("dd amount max  remove random keys");
            Console.WriteLine("u key value    update value");
            Console.WriteLine("v              view data file");
            Console.WriteLine("x              destroy tree");
            Console.WriteLine("f key          find key");
            Console.WriteLine("c              check");
            Console.WriteLine("q              quit");
            Console.WriteLine("o f            operations from file");
            Console.WriteLine("rw             display number of operations");
            Console.WriteLine("z              zero rw data");
            while (true)
            {
                answear = Console.ReadLine();
                parts   = answear.Split(' ');
                if (parts[0] == "i")
                {
                    try
                    {
                        key = Int32.Parse(parts[1]);
                        if (parts.Length == 2)
                        {
                            offset = Int32.Parse(parts[1]);
                        }
                        else
                        {
                            offset = Int32.Parse(parts[2]);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    df.InsertIntoTree(key);
                }
                else if (parts[0] == "rw")
                {
                    df.DisplayDiskIOinfo();
                }
                else if (parts[0] == "z")
                {
                    df.ZeroIOdata();
                }
                else if (parts[0] == "ii")
                {
                    try
                    {
                        amount = Int32.Parse(parts[1]);
                        max    = Int32.Parse(parts[2]);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    for (int i = 0, tryNr = 0; i < amount; i++, tryNr++)
                    {
                        if (tryNr == 5 * amount)
                        {
                            break;
                        }
                        key = random.Next(0, max);
                        //Console.WriteLine("Inserting " + key);
                        if (!df.InsertIntoTree(key))
                        {
                            i--;
                        }
                    }
                }
                else if (parts[0] == "v")
                {
                    df.ViewDataFile();
                }
                else if (parts[0] == "dd")
                {
                    try
                    {
                        amount = Int32.Parse(parts[1]);
                        max    = Int32.Parse(parts[2]);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    for (int i = 0, tryNr = 0; i < amount; i++, tryNr++)
                    {
                        if (tryNr == 5 * amount)
                        {
                            break;
                        }
                        key = random.Next(0, max);
                        Console.WriteLine("Deleting " + key);
                        if (!df.Delete(key))
                        {
                            i--;
                        }
                    }
                }
                else if (parts[0] == "x")
                {
                    Console.WriteLine("Are you sure? y/n");
                    answear = Console.ReadLine();
                    if (answear == "y")
                    {
                        df.DestroyTree();
                    }
                }
                else if (parts[0] == "o")
                {
                    try
                    {
                        df.ExecuteOperations(parts[1]);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
                else if (parts[0] == "u")
                {
                    try
                    {
                        key    = Int32.Parse(parts[1]);
                        offset = Int32.Parse(parts[2]);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    df.Update(key, offset);
                }
                else if (parts[0] == "f")
                {
                    try
                    {
                        key = Int32.Parse(parts[1]);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    Page page = df.FindInTree(key, Constants.FIND);
                    if (page is null)
                    {
                        Console.WriteLine("Key doesnt exist");
                    }
                    else
                    {
                        TreeItem item = page.GetItem(key);
                        df.dataStream.Position = item.valueOffset;
                        byte[] data = new byte[4];
                        df.dataStream.Read(data, 0, 4);
                        Console.WriteLine("Key " + key + " found. Offset is " + item.valueOffset + ". Value is " + BitConverter.ToInt32(data));
                    }
                }
                else if (parts[0] == "q")
                {
                    break;
                }
                else if (parts[0] == "s")
                {
                    try
                    {
                        key = Int32.Parse(parts[1]);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    df.ShowPage(key);
                }
                else if (parts[0] == "c")
                {
                    try
                    {
                        df.CheckUp();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    Console.WriteLine("OK");
                }
                else if (parts[0] == "d")
                {
                    try
                    {
                        key = Int32.Parse(parts[1]);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    df.Delete(key);
                }
            }
        }