コード例 #1
0
ファイル: WaveletTree.cs プロジェクト: Pako125/natix
 WaveletNode LoadNode(BinaryReader Input, WaveletInner parent)
 {
     // Console.WriteLine ("xxxxxxxxx LoadNode");
     var isInner = Input.ReadBoolean ();
     if (isInner) {
         var node = new WaveletInner (parent, false);
         node.B = RankSelectGenericIO.Load (Input);
         var hasLeft = Input.ReadBoolean ();
         if (hasLeft) {
             node.Left = this.LoadNode (Input, node);
         }
         var hasRight = Input.ReadBoolean ();
         if (hasRight) {
             node.Right = this.LoadNode (Input, node);
         }
         return node;
     } else {
         var count = Input.ReadInt32 ();
         var symbol = Input.ReadInt32 ();
         // Console.WriteLine ("--leaf> count: {0}, symbol: {1}", count, symbol);
         var leaf = new WaveletLeaf (parent, symbol, count);
         this.Alphabet[symbol] = leaf;
         return leaf;
     }
 }
コード例 #2
0
ファイル: WaveletTree.cs プロジェクト: Pako125/natix
 protected void Add(int symbol)
 {
     var coderstream = new BitStream32 ();
     coderstream.Clear ();
     this.Coder.Encode(coderstream, symbol);
     var ctx = new BitStreamCtx (0);
     // this.CoderStream.Seek (0);
     int numbits = (int)coderstream.CountBits;
     var node = this.Root;
     for (int b = 0; b < numbits; b++) {
         var bitcode = coderstream.Read (ctx);
         (node.B as FakeBitmap).Write (bitcode);
         if (bitcode) {
             if (numbits == b + 1) {
                 if (node.Right == null) {
                     var leaf = new WaveletLeaf (node, symbol);
                     // this.Alphabet.Add (leaf);
                     this.Alphabet [symbol] = leaf;
                     node.Right = leaf;
                 } else {
                     (node.Right as WaveletLeaf).Increment ();
                 }
             } else {
                 if (node.Right == null) {
                     node.Right = new WaveletInner (node, true);
                 }
                 node = node.Right as WaveletInner;
             }
         } else {
             if (numbits == b + 1) {
                 if (node.Left == null) {
                     var leaf = new WaveletLeaf (node, symbol);
                     // this.Alphabet.Add (leaf);
                     this.Alphabet [symbol] = leaf;
                     node.Left = leaf;
                 } else {
                     (node.Left as WaveletLeaf).Increment ();
                 }
             } else {
                 if (node.Left == null) {
                     node.Left = new WaveletInner (node, true);
                 }
                 node = node.Left as WaveletInner;
             }
         }
     }
 }