68 lines
1.3 KiB
C++
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());
|
|
}
|
|
}
|
|
|