#include <cstdlib>
#include <fstream>
#include <iostream>
+#include <cstring> // defines std::memset, added by Kim
#include "../misc/definitions.h"
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);
file.read((char*)this->data, this->size * sizeof(Data));
}
+template<class Data>
+GenericBitBuffer<Data>::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<class Data>
GenericBitBuffer<Data>::GenericBitBuffer(Data* buffer, usint words) :
size(words),
this->reset(erase);
}
+template<class Data>
+void
+GenericBitBuffer<Data>::writeBuffer(std::FILE* file, bool erase)
+{
+ std::fwrite(this->data, sizeof(Data), this->size, file);
+ this->reset(erase);
+}
+
template<class Data>
void
GenericBitBuffer<Data>::readBuffer(std::ifstream& file, usint words, bool erase)