m2.enlarge-your-data/src/lib/eyd_compressor_rle2.cpp
2005-10-31 07:42:04 +00:00

68 lines
1.3 KiB
C++

#include "eyd_compressor_rle2.hh"
namespace EydLib {
/*
class BitCompressorRle2 {
private:
int _last_count;
std::list<BitGroup> _compressed;
public:
BitCompressorRle2();
void clear();
void append(BitGroup bg);
std::list<BitGroup> flush();
bool hasContent();
};
*/
BitCompressorRle2::BitCompressorRle2(int size) : _rle(size) {
_last_count = 0;
_compressed.clear();
}
void BitCompressorRle2::clear(){
// we clear everything
_last_count = 0;
_compressed.clear();
}
void BitCompressorRle2::appendBit(bool bit){
if (!bit){
_last_count++;
} else {
// on écrit _last_count sur la sortie
if (_last_count > 0){
BitGroup result(_rle.size());
result.setValue(_last_count);
_compressed.push_back(result);
}
_last_count=0;
}
}
void BitCompressorRle2::append(BitGroup data){
// take the data and make it smaller...
// foreach bit of data, append it...
for (int i=0; i<data.size(); i++){
this->appendBit(data.getBitAt(i));
}
}
std::list<BitGroup> BitCompressorRle2::flush(){
// we add the data from _last* to the outlist
std::list<BitGroup> result;
result = _compressed;
_compressed.clear();
return result;
}
bool BitCompressorRle2::hasContent(){
return (!_compressed.empty());
}
}