예제 #1
0
        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);
            }
        }
예제 #2
0
        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();
            }
        }
예제 #3
0
        // Запись кода по строке
        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);
        }