Ejemplo n.º 1
0
void test_streamWriteBit_2time_given_input_1_0_byteToWrite_should_contain_01_and_increment_bitIndex_to_2()
{
    OutStream *out = initOutStream();
    
    TEST_ASSERT_EQUAL(0,out->byteToWrite);
    TEST_ASSERT_EQUAL(0,out->bitIndex);
    
    streamWriteBit(out,1);
    
    TEST_ASSERT_EQUAL(1,out->byteToWrite);
    TEST_ASSERT_EQUAL(1,out->bitIndex);
    
    streamWriteBit(out,0);
    
    TEST_ASSERT_EQUAL(1,out->byteToWrite);
    TEST_ASSERT_EQUAL(2,out->bitIndex);
    
    freeOutStream(out);
}
Ejemplo n.º 2
0
void test_streamWriteBit_1time_given_input_1_should_write_1_to_byteToWrite_and_increment_bitIndex_to_1()
{
    OutStream *out = initOutStream();
    
    TEST_ASSERT_EQUAL(0,out->byteToWrite);
    TEST_ASSERT_EQUAL(0,out->bitIndex);
    
    streamWriteBit(out,1);
    
    TEST_ASSERT_EQUAL(1,out->byteToWrite);
    TEST_ASSERT_EQUAL(1,out->bitIndex);
    
    freeOutStream(out);
}
HuffmanNode *huffmanCompress(InStream *in, OutStream *out){
  HuffmanNode *returnedNewNode;
  HuffmanNode *NodeForCase = NULL;
  root = adaptiveHuffmanTreeInit();
  root->order = Symbol;
  uint32 Symb = 0;
  HuffmanNode *arraySymbol[Symbol];
  clearArraySymbol(arraySymbol);
  fflush(stdout);
  while(!feof(in->file)){
    Symb = streamReadBits(in);
    if(!arraySymbol[Symb]){
      if (!Symb){ //EOF, object file
        break;
      }
      if(!NodeForCase){ // First Unseen Symbol
        returnedNewNode = buildAndAddNewHuffmanTree(out,root,arraySymbol,Symb);
        fflush(out->file);
        NodeForCase = returnedNewNode;
      }
      else{ // Following Unseen Symbol
        returnedNewNode = buildAndAddNewHuffmanTree(out,returnedNewNode,arraySymbol,Symb);
        fflush(out->file);
      }
    }
    else{ // Symbol Seen before
      emitPathCode(out,arraySymbol[Symb]);
      huffmanUpdateAndRestructure(arraySymbol[Symb]);
      fflush(out->file);
    }
  }
  while (streamOut.bitIndex != 7){ //fill remaining with 0
    streamWriteBit(out , 0);
    fflush(out->file);
  }
  clearArraySymbol(arraySymbol);
  fflush(stdout);
  fflush(out->file);
  fflush(in->file);
  return returnedNewNode;
  freeNodes(root);
  root = NULL;
}