Changeset 7058 for lang/cplusplus

Show
Ignore:
Timestamp:
02/23/08 07:51:21 (5 years ago)
Author:
kazuho
Message:

use itererator for sending output from the encoder (typically a back_insert_iterator should be passed)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/cplusplus/range_coder/range_coder.hpp

    r7043 r7058  
    1313}; 
    1414 
    15 template <class Store> class rc_encoder_t : public rc_type_t { 
     15template <class Iter> class rc_encoder_t : public rc_type_t { 
    1616public: 
    17   rc_encoder_t(Store *_store) : store(_store) { 
     17  rc_encoder_t(const Iter &i) : iter(i) { 
    1818    L      = 0; 
    1919    R      = 0xFFFFFFFF; 
     
    3636      buffer++; 
    3737      for (;carryN > 0; carryN--) { 
    38         store->push_back(buffer); 
     38        *iter++ = buffer; 
    3939        buffer = 0; 
    4040      } 
     
    4949        carryN++; 
    5050      } else { 
    51         store->push_back(buffer); 
     51        *iter++ = buffer; 
    5252        for (; carryN != 0; carryN--) { 
    53           store->push_back(0xFF); 
     53          *iter++ = 0xFF; 
    5454        } 
    5555        buffer = newBuffer; 
     
    6161  } 
    6262  void final() { 
    63     store->push_back(buffer); 
     63    *iter++ = buffer; 
    6464    for (; carryN != 0; carryN--) { 
    65       store->push_back(0xFF); 
     65      *iter++ = 0xFF; 
    6666    } 
    6767    uint t = L + R; 
    6868    while (1) { 
    6969      uint t8 = t >> 24, l8 = L >> 24; 
    70       store->push_back(l8); 
     70      *iter++ = l8; 
    7171      if (t8 != l8) { 
    7272        break; 
     
    8282  byte buffer; 
    8383  uint carryN; 
    84   Store* store; 
     84  Iter iter; 
    8585  uint counter; 
    8686};