lzw_encoder.tpp

Go to the documentation of this file.
00001 
00006 #include <map>
00007 
00008 /*----------------------------------------------------------------------------*/
00014 template<typename InputBuffer, typename OutputBuffer>
00015 void claw::lzw_encoder<InputBuffer, OutputBuffer>::encode
00016 ( input_buffer_type& input, output_buffer_type& output ) const
00017 {
00018   typedef std::pair<unsigned int, unsigned int> word;
00019 
00020   if ( !input.end_of_data() )
00021     {
00022       std::map<word, unsigned int> table;
00023       
00024       unsigned int symbol = input.get_next();
00025       unsigned int prefix_code = symbol;
00026       unsigned int next_code = input.symbols_count();
00027 
00028       while ( !input.end_of_data() && (next_code != output.max_code()) )
00029         {
00030           symbol = input.get_next();
00031 
00032           word new_word(prefix_code, symbol);
00033 
00034           if ( table.find(new_word) != table.end() )
00035             prefix_code = table[new_word];
00036           else
00037             {
00038               output.write(prefix_code);
00039               output.new_code(next_code);
00040               table[new_word] = next_code;
00041               prefix_code = symbol;
00042 
00043               ++next_code;
00044             }
00045         }
00046 
00047       output.write(prefix_code);
00048     }
00049 } // lzw_encoder::encode()

Generated on 9 Nov 2009 for CLAW Library (a C++ Library Absolutely Wonderful) by  doxygen 1.6.1