Example #1
0
 public HyphenationTree()
 {
     stoplist = new Hashtable(23);    // usually a small table
     classmap = new TernaryTree();
     vspace = new ByteVector();
     vspace.Alloc(1);    // this reserves index 0, which we don't use
 }
Example #2
0
 public Iterator(TernaryTree parent)
 {
     this.parent = parent;
     cur         = -1;
     ns          = new Stack();
     ks          = new StringBuilder();
     Rewind();
 }
Example #3
0
        public Object Clone()
        {
            TernaryTree t = new TernaryTree();

            t.lo       = (char[])this.lo.Clone();
            t.hi       = (char[])this.hi.Clone();
            t.eq       = (char[])this.eq.Clone();
            t.sc       = (char[])this.sc.Clone();
            t.kv       = (CharVector)this.kv.Clone();
            t.root     = this.root;
            t.freenode = this.freenode;
            t.length   = this.length;

            return(t);
        }
Example #4
0
        public void LoadSimplePatterns(Stream stream)
        {
            SimplePatternParser pp = new SimplePatternParser();

            ivalues = new TernaryTree();

            pp.Parse(stream, this);

            // patterns/values should be now in the tree
            // let's optimize a bit
            TrimToSize();
            vspace.TrimToSize();
            classmap.TrimToSize();

            // get rid of the auxiliary map
            ivalues = null;
        }
Example #5
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();
        }
Example #6
0
 public Iterator(TernaryTree parent)
 {
     this.parent = parent;
     cur = -1;
     ns = new Stack();
     ks = new StringBuilder();
     Rewind();
 }
Example #7
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]);
     }
 }
Example #8
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();
        }
Example #9
0
        public Object Clone()
        {
            TernaryTree t = new TernaryTree();
            t.lo = (char[])this.lo.Clone();
            t.hi = (char[])this.hi.Clone();
            t.eq = (char[])this.eq.Clone();
            t.sc = (char[])this.sc.Clone();
            t.kv = (CharVector)this.kv.Clone();
            t.root = this.root;
            t.freenode = this.freenode;
            t.length = this.length;

            return t;
        }
Example #10
0
        public void LoadSimplePatterns(Stream stream)
        {
            SimplePatternParser pp = new SimplePatternParser();
            ivalues = new TernaryTree();

            pp.Parse(stream, this);

            // patterns/values should be now in the tree
            // let's optimize a bit
            TrimToSize();
            vspace.TrimToSize();
            classmap.TrimToSize();

            // get rid of the auxiliary map
            ivalues = null;
        }