public int[] SearchSimple ( string key ) { if (string.IsNullOrEmpty(key)) { return(new int[0]); } TermLink[] result = new TermLink[0]; if (key.EndsWith("$")) { key = key.Substring(0, key.Length - 1); if (!string.IsNullOrEmpty(key)) { result = SearchStart(key); } } else { result = SearchExact(key); } return(result .Select(link => link.Mfn) .Distinct() .ToArray()); }
/// <summary> /// Read the record. /// </summary> public static IfpRecord Read ( [NotNull] Stream stream, long offset ) { stream.Position = offset; IfpRecord result = new IfpRecord { LowOffset = stream.ReadInt32Network(), HighOffset = stream.ReadInt32Network(), TotalLinkCount = stream.ReadInt32Network(), BlockLinkCount = stream.ReadInt32Network(), Capacity = stream.ReadInt32Network() }; // ibatrak чтение вложенных записей в спец блоке // Специальный формат записи .ifp // В этом случае первой записью является специальный блок, // который представляет собой заголовок (обыкновенного формата), // в котором смещения имеют специальные значения = -1001 if (result.LowOffset == -1001 && result.HighOffset == -1001) { // irbis64.dll делает так // читает первые 24 байта блока спец ссылок // (это 2 записи) // записи с реальными адресами идут через одну // берет вторую запись, адрес из нее в файле // и читает записеи IFP // по количеству result.BlockLinkCount // первую запись спец блока просто пропускаем, // читаем сразу вторую stream.Position += 12; SpecialPostingBlockEntry entry = new SpecialPostingBlockEntry { Posting = stream.ReadInt32Network(), Low = stream.ReadInt32Network(), High = stream.ReadInt32Network() }; stream.Position = entry.Offset; IfpRecord[] nestedRecords = new IfpRecord[result.BlockLinkCount]; for (int i = 0; i < result.BlockLinkCount; i++) { var nestedRecord = Read(stream, stream.Position); nestedRecords[i] = nestedRecord; // Last record in the list must have // negative offset values if (nestedRecord.LowOffset == -1 && nestedRecord.HighOffset == -1) { if (i != result.BlockLinkCount - 1) { throw new InvalidOperationException ( "IFP reading error" ); } break; } if (nestedRecord.FullOffset < 0) { throw new InvalidOperationException ( "IFP reading error" ); } stream.Position = nestedRecord.FullOffset; } TermLink[] links = nestedRecords .SelectMany(r => r.Links) .ToArray(); if (links.Length != result.TotalLinkCount) { throw new InvalidOperationException ( "IFP reading error" ); } result.Links.AddRange(links); return(result); } //ibatrak до сюда for (int i = 0; i < result.BlockLinkCount; i++) { TermLink link = TermLink.Read(stream); result.Links.Add(link); } return(result); }
//queue the new visualization (since creating a new visualization directly from output is broken) //returns success public bool VisualizeNewTermLink(Statement statement) { string statementKey = GetInheritanceString(statement.subjectPredicate); if (!conceptTable.ContainsKey(statementKey)) { return(false); } Concept statementConcept = conceptTable[statementKey]; if (conceptTable.ContainsKey(statement.subjectPredicate._subject) && conceptTable.ContainsKey(statement.subjectPredicate._predicate)) { Concept subjectConcept = conceptTable[statement.subjectPredicate._subject]; Concept predicateConcept = conceptTable[statement.subjectPredicate._predicate]; if (!termLinkTable.ContainsKey(statementConcept)) { Queue <Concept> links = new Queue <Concept>(); termLinkTable.Add(statementConcept, links); } if (!termLinkTable.ContainsKey(subjectConcept)) { Queue <Concept> links = new Queue <Concept>(); termLinkTable.Add(subjectConcept, links); } if (!termLinkTable.ContainsKey(predicateConcept)) { Queue <Concept> links = new Queue <Concept>(); termLinkTable.Add(predicateConcept, links); } if (!termLinkTable[statementConcept].Contains(subjectConcept)) { termLinkTable[statementConcept].Enqueue(subjectConcept); } if (!termLinkTable[subjectConcept].Contains(statementConcept)) { termLinkTable[subjectConcept].Enqueue(statementConcept); } if (!termLinkTable[statementConcept].Contains(predicateConcept)) { termLinkTable[statementConcept].Enqueue(predicateConcept); } if (!termLinkTable[predicateConcept].Contains(statementConcept)) { termLinkTable[predicateConcept].Enqueue(statementConcept); } GameObject newTermLinkGO = Instantiate(termLinkPrefab); TermLink termLink = newTermLinkGO.GetComponent <TermLink>(); termLink.Init(statementConcept, subjectConcept); GameObject newTermLinkGO2 = Instantiate(termLinkPrefab); TermLink termLink2 = newTermLinkGO2.GetComponent <TermLink>(); termLink2.Init(statementConcept, predicateConcept); return(true); } return(false); }