X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=incbwt%2Fbits%2Fbitbuffer.h;h=1579622cc9d1cfbcb6ca7a51158823258e23a352;hb=4bae924993abf1aa9107fe916dd9eb2ee2fea956;hp=572fa8a72a41c435f760ee1bf8b49b77dc6913ab;hpb=40ddf9aca842bdc081b6350a4ebfe36b066c94c9;p=SXSI%2FTextCollection.git diff --git a/incbwt/bits/bitbuffer.h b/incbwt/bits/bitbuffer.h index 572fa8a..1579622 100644 --- a/incbwt/bits/bitbuffer.h +++ b/incbwt/bits/bitbuffer.h @@ -5,6 +5,7 @@ #include #include #include +#include // defines std::memset, added by Kim #include "../misc/definitions.h" @@ -21,11 +22,13 @@ class GenericBitBuffer GenericBitBuffer(usint _items, usint item_size); GenericBitBuffer(std::ifstream& file, usint words); GenericBitBuffer(std::ifstream& file, usint _items, usint item_size); + GenericBitBuffer(std::FILE* file, usint _items, usint item_size); GenericBitBuffer(Data* buffer, usint words); GenericBitBuffer(Data* buffer, usint _items, usint item_size); ~GenericBitBuffer(); void writeBuffer(std::ofstream& file, bool erase = true); + void writeBuffer(std::FILE * file, bool erase = true); void readBuffer(std::ifstream& file, usint words, bool erase = true); void setBuffer(Data* buffer, usint words); @@ -387,6 +390,21 @@ GenericBitBuffer::GenericBitBuffer(std::ifstream& file, usint _items, usin file.read((char*)this->data, this->size * sizeof(Data)); } +template +GenericBitBuffer::GenericBitBuffer(std::FILE* file, usint _items, usint item_size) : + size(BITS_TO_WORDS(_items * item_size)), + pos(0), + bits(DATA_BITS), + item_bits(item_size), + items(_items), + current(0), + free_buffer(true) +{ + this->data = new Data[this->size]; + memset(this->data, 0, this->size * sizeof(Data)); + std::fread(this->data, sizeof(Data), this->size, file); +} + template GenericBitBuffer::GenericBitBuffer(Data* buffer, usint words) : size(words), @@ -432,6 +450,14 @@ GenericBitBuffer::writeBuffer(std::ofstream& file, bool erase) this->reset(erase); } +template +void +GenericBitBuffer::writeBuffer(std::FILE* file, bool erase) +{ + std::fwrite(this->data, sizeof(Data), this->size, file); + this->reset(erase); +} + template void GenericBitBuffer::readBuffer(std::ifstream& file, usint words, bool erase)