Пример #1
0
        public static void Main(string[] args)
        {
            DateTime tt0 = DateTime.Now;

            string path = @"..\..\..\Databases\";

            //"C:\home\FactographDatabases"
            Console.WriteLine("Start.");

            Func <object, PxEntry, int> edepth = (object v1, PxEntry en2) =>
            {
                string s1 = (string)(((object[])v1)[0]);
                return(String.Compare(s1, (string)(en2.Field(0).Get()), StringComparison.Ordinal));
            };
            // Инициируем типы
            // Создадим фиксированную ячейку
            PTypeRecord ptElement = new PTypeRecord(
                new NamedType("name", new PType(PTypeEnumeration.sstring)),
                new NamedType("id", new PType(PTypeEnumeration.sstring)));
            BTree cell = new BTree(ptElement,
                                   edepth,
                                   path + "btree.pxc", readOnly: false);

            cell.Clear();

            //// Проверим существует ли пустое значение

            // Console.WriteLine(r1.Type.Interpret(r1.Value));

            // сделаем пробное заполнение вручную
            object[] valu =
            {
                1,                       new object[]
                {
                    new object[] { "name1","333L"                          },
                    new object[]
                    {
                        1,               new object[]
                        {
                            new object[] { "name0","444L"                          },
                            BTree.Empty,
                            BTree.Empty,                   0
                        }
                    },
                    BTree.Empty, 1
                }
            };
            cell.Fill2(valu);
            cell.Root.UElementUnchecked(1).Field(0).Set(new object[] { "", "" });

            // проверяем содержимое
            var res = cell.Root.GetValue();

            //  Console.WriteLine(res.Type.Interpret(res.Value));


            // Пробно добавим пару элементов через метод расширения, описанный в ExtensionMethods
            cell.Clear();

            cell.Add(new object[] { "1", "333L" });
            cell.Add(new object[] { "2", "444L" });
            cell.Add(new object[] { "3", "555L" });
            cell.Add(new object[] { "4", "666L" });
            // Получается 444(333(), 555(, 666()))
            var res2 = cell.Root.GetValue();

            Console.WriteLine(res2.Type.Interpret(res2.Value));
            Console.WriteLine();
            // Повернем дерево, чтобы стало 555(444(333(),), 666())
            // Для этого, сначала выделим корневой узел 444 и узел 555
            var h444 = cell.Root.GetHead();
            var h555 = cell.Root.UElement().Field(2).GetHead();

            // Теперь 555 запишем в корень
            cell.Root.SetHead(h555);
            // Левое поддерево у нас пустое, поэтому просто перепишем этот вход
            cell.Root.UElement().Field(1).SetHead(h444);
            // а в h444 заменим правое поддерево на пустое
            cell.Root.UElement().Field(1).UElement().Field(2).Set(BTree.Empty);

            var res3 = cell.Root.GetValue();

            Console.WriteLine(res3.Type.Interpret(res3.Value));

            // Теперь попробуем загрузить реальные данные
            tt0 = DateTime.Now;
            XElement db       = XElement.Load(path + "0001.xml");
            XName    rdfabout = "{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about";
            var      query    = db.Elements()
                                .Where(el => el.Attribute(rdfabout) != null)
                                .SelectMany(el => el.Elements())
                                .Where(prop => prop.Name.LocalName == "name")
                                .Select(prop => new[] { (object)prop.Value, (object)prop.Parent.Attribute(rdfabout).Value })
                                .ToArray();

            // Замерим время выборки данных из XML
            Console.WriteLine(query.Count());
            Console.WriteLine("======Count() ok. duration=" + (DateTime.Now - tt0).Ticks / 10000L); tt0 = DateTime.Now;

            //         var addTree = TestQueryInput(query, ptElement, edepth, path);

            //     BTree toBTree =TestToBTree(query, ptElement, path, edepth);

            //    var treeFromFill = TestBTreeFill(query, ptElement, path, edepth);
            Func <object, object, bool> elementsComparer = (o1, o2) => (string)(((object[])o1)[0]) == (string)((object[])o2)[0];

            //    Console.WriteLine("tree sequantialy add == tree fill - " + treeFromFill.Equals(addTree, elementsComparer));
            //   Console.WriteLine("tree sequantialy add == query to BTree  - " + toBTree.Equals(addTree, elementsComparer));


            //   treeFromFill.Close();
            //   addTree.Close();
            //   toBTree.Close();
            //    Console.WriteLine("======Total ok. duration=" + (DateTime.Now - tt0).Ticks / 10000L); tt0 = DateTime.Now;
            cell.Close();
            File.Delete(path + "btree.pxc");
            //  GetOverflow(path);

            //    TestTreeOfInt(query, path);
            SimpleTreeInt(path);
        }
Пример #2
0
        static void Main(string[] args)
        {
            BTree tree = new BTree();
            Node node = new Node(); ;

            for (int i = 1; i < 10; i++)
                node = tree.insert(node, i);

            tree.inorder(node);
            Console.ReadLine();
        }