Esempio n. 1
0
        private void Compact(CharVector kx, TernaryTree map, char p)
        {
            int k;

            if (p == 0)
            {
                return;
            }
            if (sc[p] == 0xFFFF)
            {
                k = map.Find(kv.Arr, lo[p]);
                if (k < 0)
                {
                    k = kx.Alloc(Strlen(kv.Arr, lo[p]) + 1);
                    Strcpy(kx.Arr, k, kv.Arr, lo[p]);
                    map.Insert(kx.Arr, k, (char)k);
                }
                lo[p] = (char)k;
            }
            else
            {
                Compact(kx, map, lo[p]);
                if (sc[p] != 0)
                {
                    Compact(kx, map, eq[p]);
                }
                Compact(kx, map, hi[p]);
            }
        }
Esempio n. 2
0
        public Object Clone()
        {
            CharVector cv = new CharVector((char[])array.Clone(), BLOCK_SIZE);

            cv.n = this.n;
            return(cv);
        }
Esempio n. 3
0
 protected void Init()
 {
     root     = (char)0;
     freenode = (char)1;
     length   = 0;
     lo       = new char[BLOCK_SIZE];
     hi       = new char[BLOCK_SIZE];
     eq       = new char[BLOCK_SIZE];
     sc       = new char[BLOCK_SIZE];
     kv       = new CharVector();
 }
Esempio n. 4
0
        /**
         * Each node stores a character (splitchar) which is part of
         * some Key(s). In a compressed branch (one that only contain
         * a single string key) the trailer of the key which is not
         * already in nodes is stored  externally in the kv array.
         * As items are inserted, key substrings decrease.
         * Some substrings may completely  disappear when the whole
         * branch is totally decompressed.
         * The tree is traversed to find the key substrings actually
         * used. In addition, duplicate substrings are removed using
         * a map (implemented with a TernaryTree!).
         *
         */
        public void TrimToSize()
        {
            // first balance the tree for best performance
            Balance();

            // redimension the node arrays
            RedimNodeArrays(freenode);

            // ok, compact kv array
            CharVector kx = new CharVector();

            kx.Alloc(1);
            TernaryTree map = new TernaryTree();

            Compact(kx, map, root);
            kv = kx;
            kv.TrimToSize();
        }
Esempio n. 5
0
 private void Compact(CharVector kx, TernaryTree map, char p)
 {
     int k;
     if (p == 0)
         return;
     if (sc[p] == 0xFFFF) {
         k = map.Find(kv.Arr, lo[p]);
         if (k < 0) {
             k = kx.Alloc(Strlen(kv.Arr, lo[p]) + 1);
             Strcpy(kx.Arr, k, kv.Arr, lo[p]);
             map.Insert(kx.Arr, k, (char)k);
         }
         lo[p] = (char)k;
     } else {
         Compact(kx, map, lo[p]);
         if (sc[p] != 0)
             Compact(kx, map, eq[p]);
         Compact(kx, map, hi[p]);
     }
 }
Esempio n. 6
0
 protected void Init()
 {
     root = (char)0;
     freenode = (char)1;
     length = 0;
     lo = new char[BLOCK_SIZE];
     hi = new char[BLOCK_SIZE];
     eq = new char[BLOCK_SIZE];
     sc = new char[BLOCK_SIZE];
     kv = new CharVector();
 }
Esempio n. 7
0
        /**
         * Each node stores a character (splitchar) which is part of
         * some Key(s). In a compressed branch (one that only contain
         * a single string key) the trailer of the key which is not
         * already in nodes is stored  externally in the kv array.
         * As items are inserted, key substrings decrease.
         * Some substrings may completely  disappear when the whole
         * branch is totally decompressed.
         * The tree is traversed to find the key substrings actually
         * used. In addition, duplicate substrings are removed using
         * a map (implemented with a TernaryTree!).
         *
         */
        public void TrimToSize()
        {
            // first balance the tree for best performance
            Balance();

            // redimension the node arrays
            RedimNodeArrays(freenode);

            // ok, compact kv array
            CharVector kx = new CharVector();
            kx.Alloc(1);
            TernaryTree map = new TernaryTree();
            Compact(kx, map, root);
            kv = kx;
            kv.TrimToSize();
        }
Esempio n. 8
0
 public Object Clone()
 {
     CharVector cv = new CharVector((char[])array.Clone(), BLOCK_SIZE);
     cv.n = this.n;
     return cv;
 }