This commit is contained in:
glenux 2005-10-29 20:17:39 +00:00
parent 3f109798a4
commit 2bc1ad8c20
5 changed files with 35 additions and 14 deletions

View file

@ -24,6 +24,10 @@ namespace EydLib {
} }
} }
bool BitGroup::operator!=(const BitGroup &original){
return ((*this)==original)?false:true;
}
bool BitGroup::operator==(const BitGroup &original){ bool BitGroup::operator==(const BitGroup &original){
bool identity = true; bool identity = true;
if (this->_group_size == original._group_size){ if (this->_group_size == original._group_size){
@ -118,9 +122,22 @@ namespace EydLib {
} }
void BitGroup::setValue(unsigned long int value){ void BitGroup::setValue(unsigned long int value){
unsigned long int val;
val = value;
if (val > this->maxValue()){
throw eBitGroupOutOfRangeValue();
} else {
int position = (this->_group_size -1);
while (val>0){
this->setBitAt(position, val%2);
val = val >> 1;
position--;
}
}
}
unsigned long int BitGroup::maxValue(){
return ((1 << this->_group_size)-1);
} }
unsigned long int BitGroup::getValue(){ unsigned long int BitGroup::getValue(){
} }

View file

@ -7,6 +7,7 @@
namespace EydLib { namespace EydLib {
class eBitGroupOutOfBound : public std::exception { }; class eBitGroupOutOfBound : public std::exception { };
class eBitGroupOutOfRangeValue : public std::exception { };
class BitGroup { class BitGroup {
private: private:
@ -25,6 +26,7 @@ namespace EydLib {
bool getBitAt(int pos); bool getBitAt(int pos);
void setValue(unsigned long value); void setValue(unsigned long value);
unsigned long maxValue();
unsigned long getValue(); unsigned long getValue();
int size(); int size();
@ -33,6 +35,7 @@ namespace EydLib {
BitGroup operator=(BitGroup &original); BitGroup operator=(BitGroup &original);
BitGroup operator=(const BitGroup &original); BitGroup operator=(const BitGroup &original);
bool operator==(const BitGroup &original); bool operator==(const BitGroup &original);
bool operator!=(const BitGroup &original);
// comparer les groupes // comparer les groupes
}; };

View file

@ -55,7 +55,7 @@ namespace EydLib {
reader = this->_read_buffer[index_of_char]; reader = this->_read_buffer[index_of_char];
if (shift_of_char > 0){ reader = reader << shift_of_char; reader = reader >> shift_of_char; } if (shift_of_char > 0){ reader = reader << shift_of_char; reader = reader >> shift_of_char; }
reader = reader >> (size_of_char - shift_of_char - 1 ); reader = reader >> (size_of_char - shift_of_char - 1 );
printf("->%c<- shift %d = %d\n",this->_read_buffer[index_of_char], shift_of_char, reader); pDEBUG("BitReader::getBitAt","->%c<- shift %d = %d\n",this->_read_buffer[index_of_char], shift_of_char, reader);
} }
return reader; return reader;
} }
@ -72,8 +72,8 @@ namespace EydLib {
if (this->_current_bit_position >= (this->_wanted_buffer_size * 8)){ if (this->_current_bit_position >= (this->_wanted_buffer_size * 8)){
// on charge un nouveau bout de fichier // on charge un nouveau bout de fichier
this->_real_buffer_size = ::read(this->_file_desc, this->_read_buffer, this->_wanted_buffer_size); this->_real_buffer_size = ::read(this->_file_desc, this->_read_buffer, this->_wanted_buffer_size);
printf("BitReader::read / read() -> buffer()\n"); pDEBUG("BitReader::read","read() -> buffer()\n");
printf("READ BUFFER(%d): %s\n",this->_real_buffer_size, this->_read_buffer); pDEBUG("BitReader::read","READ BUFFER(%d): %s\n",this->_real_buffer_size, this->_read_buffer);
this->_current_bit_position = 0; this->_current_bit_position = 0;
} }
if (this->_current_bit_position < this->_real_buffer_size * 8){ if (this->_current_bit_position < this->_real_buffer_size * 8){
@ -87,19 +87,16 @@ namespace EydLib {
throw eBitReaderEndOfFile(); throw eBitReaderEndOfFile();
} else { } else {
BitGroup eof_bg(i); BitGroup eof_bg(i);
printf("SMALLER BITGROUP ! (%d)\n",i); pDEBUG("BitReader::read","SMALLER BITGROUP ! (%d)\n",i);
for (int j=0; j<i; j++){ for (int j=0; j<i; j++){
eof_bg.setBitAt(j, result.getBitAt(j)); eof_bg.setBitAt(j, result.getBitAt(j));
} }
printf("pre-copy\n");
result = eof_bg; result = eof_bg;
printf("post-copy\n");
break; break;
} }
} }
this->_current_bit_position += 1; this->_current_bit_position += 1;
} }
printf("END result = %s",result.toString().c_str());
return result; return result;
} }

View file

@ -44,7 +44,7 @@ namespace EydLib {
int shift_of_char = position % size_of_char; int shift_of_char = position % size_of_char;
char writer; char writer;
printf("BitWriter::setBitAt / pos %d - size %d\n", position, this->_real_buffer_size_in_bits ); pDEBUG("BitWriter::setBitAt","pos %d - size %d\n", position, this->_real_buffer_size_in_bits );
if (position >= this->_real_buffer_size_in_bits){ if (position >= this->_real_buffer_size_in_bits){
throw eBitWriterOutOfBound(); throw eBitWriterOutOfBound();
@ -87,8 +87,8 @@ namespace EydLib {
if ((this->_real_buffer_size_in_bits - 1) > this->_bitgroup_size) { if ((this->_real_buffer_size_in_bits - 1) > this->_bitgroup_size) {
// on flush seulement si on a écrit + de 1 bitgroup dans le nouveau // on flush seulement si on a écrit + de 1 bitgroup dans le nouveau
// buffer // buffer
printf("BitWriter::write / buffer() -> write()\n"); pDEBUG("BitWriter::flush","buffer() -> write()\n");
printf("WRITE_BUFFER(%d chars) = %s\n",nb_chars, this->_write_buffer); pDEBUG("BitWriter::flush","WRITE_BUFFER(%d chars) = %s\n",nb_chars, this->_write_buffer);
::write(this->_file_desc, this->_write_buffer, nb_chars); ::write(this->_file_desc, this->_write_buffer, nb_chars);
} }
@ -121,7 +121,7 @@ namespace EydLib {
void BitWriter::close(){ void BitWriter::close(){
// on vide le dernier buffer jusqu'a la position réelle... // on vide le dernier buffer jusqu'a la position réelle...
printf("Remaining %d\n",this->_real_buffer_size_in_bits); pDEBUG("BitWriter::close","Remaining %d\n",this->_real_buffer_size_in_bits);
this->flush(); this->flush();
::close(this->_file_desc); ::close(this->_file_desc);
} }

View file

@ -2,7 +2,7 @@
SUBDIRS = . SUBDIRS = .
bin_PROGRAMS = eyd bittest bitcopy bin_PROGRAMS = eyd bittest bitcopy bitcompress
eyd_SOURCES = eyd_console.cpp eyd_init.cpp eyd_SOURCES = eyd_console.cpp eyd_init.cpp
eyd_LDADD = -leyd eyd_LDADD = -leyd
@ -33,3 +33,7 @@ bitcopy_SOURCES = bitcopy.cpp
bitcopy_LDADD = -leyd bitcopy_LDADD = -leyd
bitcopy_LDFLAGS = @LDFLAGS@ -L../lib -L../lib/.libs bitcopy_LDFLAGS = @LDFLAGS@ -L../lib -L../lib/.libs
bitcompress_SOURCES = bitcompress.cpp
bitcompress_LDADD = -leyd
bitcompress_LDFLAGS = @LDFLAGS@ -L../lib -L../lib/.libs