protected void ReadNode(BitStream bs, HuffmanNode node) { int flag = bs.ReadBit(); if (flag == 0) { /* it's a leaf */ ReadValue(bs, node); } else { /* it's a node */ node.branch_0 = new HuffmanNode(); ReadNode(bs, node.branch_0); node.branch_1 = new HuffmanNode(); ReadNode(bs, node.branch_1); } }
protected void Read (BitStream bs) { root = new HuffmanNode (); ReadNode (bs, Root); }
protected virtual void ReadValue (BitStream bs, HuffmanNode node) { node.value = (uint)bs.ReadByte(); }
public void Reset () { currentNode = tree.Root; }
public void ProcessBit (BitStream bs) { currentNode = bs.ReadBit() == 0 ? currentNode.branch_0 : currentNode.branch_1; if (currentNode == null) throw new Exception ("can't advance to child nodes from a leaf node"); }
public HuffIter (HuffmanTree tree) { this.tree = tree; this.currentNode = tree.Root; }
public override uint ReturnNodeValue (HuffmanNode node) { if (node.value == -1) { /* it's a marker */ throw new Exception (); } else return (uint)node.value; }
protected override void ReadValue (BitStream bs, HuffmanNode node) { uint value = DecodeValue (bs); Console.WriteLine ("Read Value {0:x}", value); if (value == markers[0]) { Console.WriteLine ("found marker1"); shortest[0] = node; node.value = -1; } else if (value == markers[1]) { Console.WriteLine ("found marker2"); shortest[1] = node; node.value = -1; } else if (value == markers[2]) { Console.WriteLine ("found marker3"); shortest[2] = node; node.value = -1; } else node.value = value; }
public virtual uint ReturnNodeValue (HuffmanNode node) { return (uint)node.value; }
protected void ReadNode (BitStream bs, HuffmanNode node) { int flag = bs.ReadBit(); if (flag == 0) { /* it's a leaf */ ReadValue (bs, node); } else { /* it's a node */ node.branch_0 = new HuffmanNode (); ReadNode (bs, node.branch_0); node.branch_1 = new HuffmanNode (); ReadNode (bs, node.branch_1); } }
public virtual uint ReturnNodeValue(HuffmanNode node) { return((uint)node.value); }
protected void Read(BitStream bs) { root = new HuffmanNode(); ReadNode(bs, Root); }
protected virtual void ReadValue(BitStream bs, HuffmanNode node) { node.value = (uint)bs.ReadByte(); }
public void Reset() { currentNode = tree.Root; }
public HuffIter(HuffmanTree tree) { this.tree = tree; this.currentNode = tree.Root; }