X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=incbwt%2Fbits%2Fbitbuffer.h;fp=incbwt%2Fbits%2Fbitbuffer.h;h=1579622cc9d1cfbcb6ca7a51158823258e23a352;hb=f3f5b4a7e58ca81c9542ac50f0103af37f13f662;hp=1da3fab7b5189996217c517df7da3a973b8d3078;hpb=5d74bc076c9d15d607d183c16ff8468ea961a0f9;p=SXSI%2FTextCollection.git diff --git a/incbwt/bits/bitbuffer.h b/incbwt/bits/bitbuffer.h index 1da3fab..1579622 100644 --- a/incbwt/bits/bitbuffer.h +++ b/incbwt/bits/bitbuffer.h @@ -22,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); @@ -388,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), @@ -433,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)