public RDFGraph(string path) { Path = path; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } PType tp_triple = new PTypeRecord( new NamedType("subj", new PType(PTypeEnumeration.integer)), new NamedType("pred", new PType(PTypeEnumeration.integer)), new NamedType("obj", ObjectVariantsPolarType.ObjectVariantPolarType)); table = new TableView(path + "triples", tp_triple); ps_index = new IndexCascadingDynamic <int>(path + "ps_index", (IBearingTableImmutable)table, ob => (int)((object[])((object[])ob)[1])[1], ob => (int)((object[])((object[])ob)[1])[0], i => i); po_index = new IndexCascadingDynamic <ObjectVariants>(path + "po_index", (IBearingTableImmutable)table, ob => (int)((object[])((object[])ob)[1])[1], ob => ((object[])((object[])ob)[1])[2].ToOVariant(NodeGenerator), ov => ov.GetHashCode()); textObjectIndex = new TextObjectIndex((ulong)(table.TableCell.IsEmpty ? 10 : table.TableCell.Root.Count() / 3 + 1), this); OnAddPortion += po_index.index_arr.FillPortion; OnAddPortion += ps_index.index_arr.FillPortion; OnAddPortion += textObjectIndex.FillPortion; NodeGenerator = NodeGeneratorInt.Create(new NameTableDictionaryRam(path)); //new NametableLinearBuffered(path)); _ng = NodeGenerator as NodeGeneratorInt; ((NameTableDictionaryRam)_ng.coding_table).Expand((int)10000 / 3 + 1, Enumerable.Repeat(SpecialTypesClass.RdfType, 1)); Start(); }
public FirstIntGraph(string path) { PType tp_tabelement = new PTypeRecord( new NamedType("subject", new PType(PTypeEnumeration.integer)), new NamedType("predicate", new PType(PTypeEnumeration.integer)), new NamedType("obj", ObjectVariantsPolarType.ObjectVariantPolarType)); Func <object, SPO_Troyka> spokeyproducer = v => { object[] va = (object[])((object[])v)[1]; return(new SPO_Troyka((int)va[0], (int)va[1], va[2].ToOVariant(ng.coding_table.GetStringByCode))); //.ToComparable() }; Func <object, PO_Pair> pokeyproducer = v => { object[] va = (object[])((object[])v)[1]; return(new PO_Pair((int)va[1], va[2].ToOVariant(ng.coding_table.GetStringByCode))); }; Func <object, PO_Pair> oskeyproducer = v => { object[] va = (object[])((object[])v)[1]; return(new PO_Pair((int)va[0], va[2].ToOVariant(ng.coding_table.GetStringByCode))); }; Func <object, SP_Pair> spkeyproducer = v => { object[] va = (object[])((object[])v)[1]; return(new SP_Pair((int)va[0], (int)va[1])); }; Func <object, int> skeyproducer = v => { object[] va = (object[])((object[])v)[1]; return((int)va[0]); }; Func <object, int> pkeyproducer = v => { object[] va = (object[])((object[])v)[1]; return((int)va[1]); }; Func <object, ObjectVariants> okeyproducer = v => { object[] va = (object[])((object[])v)[1]; return(va[2].ToOVariant(ng.coding_table.GetStringByCode)); }; // Опорная таблица table = new TableView(path + "stable", tp_tabelement); if (table.Count() == 0) { table.Fill(new object[0]); } ng = new NodeGeneratorInt(path + "coding", table.Count() == 0); // Индекс spo spo_ind = new IndexDynamic <SPO_Troyka, IndexHalfkeyImmutable <SPO_Troyka> >(false) { Table = table, IndexArray = new IndexHalfkeyImmutable <SPO_Troyka>(path + "spo_ind") { Table = table, KeyProducer = spokeyproducer, HalfProducer = sp => sp.GetHashCode() }, KeyProducer = spokeyproducer, }; po_ind = new IndexDynamic <PO_Pair, IndexHalfkeyImmutable <PO_Pair> >(false) { Table = table, IndexArray = new IndexHalfkeyImmutable <PO_Pair>(path + "po_ind") { Table = table, KeyProducer = pokeyproducer, HalfProducer = sp => sp.GetHashCode() }, KeyProducer = pokeyproducer }; so_ind = new IndexDynamic <PO_Pair, IndexHalfkeyImmutable <PO_Pair> >(false) { Table = table, IndexArray = new IndexHalfkeyImmutable <PO_Pair>(path + "so_ind") { Table = table, KeyProducer = oskeyproducer, HalfProducer = sp => sp.GetHashCode() }, KeyProducer = pokeyproducer }; sp_ind = new IndexDynamic <SP_Pair, IndexHalfkeyImmutable <SP_Pair> >(false) { Table = table, IndexArray = new IndexHalfkeyImmutable <SP_Pair>(path + "sp_ind") { Table = table, KeyProducer = spkeyproducer, HalfProducer = sp => sp.GetHashCode() }, KeyProducer = spkeyproducer }; s_ind = new IndexDynamic <int, IndexKeyImmutable <int> >(false) { Table = table, IndexArray = new IndexKeyImmutable <int>(path + "s_ind") { Table = table, KeyProducer = skeyproducer, }, KeyProducer = skeyproducer }; p_ind = new IndexDynamic <int, IndexKeyImmutable <int> >(false) { Table = table, IndexArray = new IndexKeyImmutable <int>(path + "p_ind") { Table = table, KeyProducer = pkeyproducer, }, KeyProducer = pkeyproducer }; o_ind = new IndexDynamic <ObjectVariants, IndexHalfkeyImmutable <ObjectVariants> >(false) { Table = table, IndexArray = new IndexHalfkeyImmutable <ObjectVariants>(path + "o_ind") { Table = table, KeyProducer = okeyproducer, HalfProducer = sp => sp.GetHashCode() }, KeyProducer = okeyproducer }; }