public void CalculateDynamicIndex() { dic1 = new Dictionary <int, long>(); //keyvalue_seq.Root.Scan((off, obj) => //{ // int key = (int)((object[])obj)[0]; // dic1.Add(key, off); // return true; //}); int n = (int)keyvalue_seq.Count(); for (int i = 0; i < n; i++) { long off = i == 0 ? 0L : keyvalue_seq.ElementOffset(); object[] v = (object[])(i == 0? keyvalue_seq.GetElement(0L) : keyvalue_seq.GetElement()); int key = (int)v[0]; dic1.Add(key, off); } }
private Ndx[] exindexes = null; // Дополнительные индексы для внешних ключей internal KVSequencePortion(Polar.PagedStreams.StreamStorage ss, PType tp_element, object[] stream_numbers) { //this.tp_element = tp_element; //PType tp_sequ = new PTypeSequence( // tp_element // ); // Создадим базу данных, состоящую из последовательности и двух индексных массивов: массива ключей и массива офсетов Stream stream1 = ss[(int)stream_numbers[0]]; keyvalue_seq = new UniversalSequence <int>(tp_element, stream1); Stream stream2 = ss[(int)stream_numbers[1]]; keys = new UniversalSequence <int>(new PType(PTypeEnumeration.integer), stream2); Stream stream3 = ss[(int)stream_numbers[2]]; offsets = new UniversalSequence <long>(new PType(PTypeEnumeration.longinteger), stream3); // Addition - обработка дополнительных индексов внешних ключей if (stream_numbers.Length > 3) { // По 2 на индекс int nadd_streams = stream_numbers.Length - 3; if (nadd_streams % 2 != 0) { throw new Exception("Err: 22378829"); } int nadditions = nadd_streams / 2; exindexes = new Ndx[nadditions]; for (int i = 0; i < nadditions; i++) { Stream stream4 = ss[(int)stream_numbers[i * 2 + 3]]; //UniversalSequence<int> exkey = new UniversalSequence<int>(new PType(PTypeEnumeration.integer), stream4); //Stream stream5 = ss[(int)stream_numbers[i * 2 + 4]]; //UniversalSequence<int> prikey = new UniversalSequence<int>(new PType(PTypeEnumeration.integer), stream5); //exindexes[i] = new Ndx() { exkeys = exkey, prikeys = prikey }; UniversalSequence <int> exprikeys = new UniversalSequence <int>(new PTypeRecord( new NamedType("exkey", new PType(PTypeEnumeration.integer)), new NamedType("prikey", new PType(PTypeEnumeration.integer))), stream4); exindexes[i] = new Ndx() { exprikeys = exprikeys }; } } // Если базовая последовательность пустая - чистить все if (keyvalue_seq.Count() == 0) { Clear(); } }
// Запись кода по строке public int GetSetCode(string s) { int nom; if (dic.TryGetValue(s, out nom)) { } else { nom = (int)ids.Count(); long off = ids.AppendElement(s); offs.AppendElement(off); dic.Add(s, nom); } return(nom); }