Skip to content

Commit 98496f4

Browse files
author
kazuho
committed
use itererator for sending output from the encoder (typically a back_insert_iterator should be passed)
git-svn-id: http://svn.coderepos.org/share/lang/cplusplus/range_coder@7058 d0d07461-0603-4401-acd4-de1884942a52
1 parent c5b1694 commit 98496f4

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

range_coder.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ struct rc_type_t {
1212
typedef unsigned char byte;
1313
};
1414

15-
template <class Store> class rc_encoder_t : public rc_type_t {
15+
template <class Iter> class rc_encoder_t : public rc_type_t {
1616
public:
17-
rc_encoder_t(Store *_store) : store(_store) {
17+
rc_encoder_t(const Iter &i) : iter(i) {
1818
L = 0;
1919
R = 0xFFFFFFFF;
2020
buffer = 0;
@@ -35,7 +35,7 @@ template <class Store> class rc_encoder_t : public rc_type_t {
3535
//buffer FF FF .. FF -> buffer+1 00 00 .. 00
3636
buffer++;
3737
for (;carryN > 0; carryN--) {
38-
store->push_back(buffer);
38+
*iter++ = buffer;
3939
buffer = 0;
4040
}
4141
}
@@ -48,9 +48,9 @@ template <class Store> class rc_encoder_t : public rc_type_t {
4848
} else if (newBuffer == 0xFF) {
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;
5656
}
@@ -60,14 +60,14 @@ template <class Store> class rc_encoder_t : public rc_type_t {
6060
counter++;
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;
7373
}
@@ -81,7 +81,7 @@ template <class Store> class rc_encoder_t : public rc_type_t {
8181
bool start;
8282
byte buffer;
8383
uint carryN;
84-
Store* store;
84+
Iter iter;
8585
uint counter;
8686
};
8787

0 commit comments

Comments
 (0)