82 lines
1.8 KiB
C++
82 lines
1.8 KiB
C++
|
|
#include "eyd_compressor_rle2.hh"
|
|
|
|
namespace EydLib {
|
|
|
|
BitCompressorRle2::BitCompressorRle2(int size) : _rle(size) {
|
|
// la taille des donnees enregistrees dépend de size
|
|
_last_count = 0;
|
|
_compressed.clear();
|
|
|
|
_input_size = 0;
|
|
_output_size = 0;
|
|
}
|
|
|
|
void BitCompressorRle2::clear(){
|
|
// we clear everything
|
|
_last_count = 0;
|
|
_compressed.clear();
|
|
_input_size = 0;
|
|
_output_size = 0;
|
|
}
|
|
|
|
void BitCompressorRle2::forceFlush(){
|
|
if (_last_count > 0){
|
|
printf(" -> flushing %d",_last_count);
|
|
BitGroup result(_rle.size());
|
|
result.setValue(_last_count);
|
|
printf("(=> %s)\n",result.toString().c_str());
|
|
_compressed.push_back(result);
|
|
_output_size += result.size();
|
|
} else {
|
|
printf(" -> no flush %d\n",_last_count);
|
|
}
|
|
}
|
|
|
|
void BitCompressorRle2::appendBit(bool bit){
|
|
printf("%d",bit);
|
|
fflush(stdout);
|
|
if (!bit){
|
|
_last_count++;
|
|
} else {
|
|
printf(" -> flushing %d",_last_count);
|
|
// on écrit _last_count sur la sortie
|
|
BitGroup result(_rle.size());
|
|
result.setValue(_last_count);
|
|
printf("(=> %s)\n",result.toString().c_str());
|
|
_compressed.push_back(result);
|
|
_output_size += result.size();
|
|
_last_count=0;
|
|
}
|
|
}
|
|
|
|
void BitCompressorRle2::append(BitGroup data){
|
|
_input_size += data.size();
|
|
// 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());
|
|
}
|
|
|
|
float BitCompressorRle2::getRatio(){
|
|
float ratio = 1000 * (float)_output_size / (float)_input_size;
|
|
int ratio2 = (int)ratio;
|
|
return (((float)ratio2) / 10.0);
|
|
}
|
|
|
|
}
|
|
|