29 return fread(data,
sizeof(*data), n, fp) == n;
33 return fread(data,
sizeof(*data), n, fp) == n;
37 return fread(data,
sizeof(*data), n, fp) == n;
41 return fread(data,
sizeof(*data), n, fp) == n;
45 return fread(data,
sizeof(*data), n, fp) == n;
49 return fread(data,
sizeof(*data), n, fp) == n;
53 return fread(data,
sizeof(*data), n, fp) == n;
57 return fread(data,
sizeof(*data), n, fp) == n;
60 bool Serialize(FILE* fp,
const char* data,
size_t n) {
61 return fwrite(data,
sizeof(*data), n, fp) == n;
64 bool Serialize(FILE* fp,
const float* data,
size_t n) {
65 return fwrite(data,
sizeof(*data), n, fp) == n;
68 bool Serialize(FILE* fp,
const int8_t* data,
size_t n) {
69 return fwrite(data,
sizeof(*data), n, fp) == n;
72 bool Serialize(FILE* fp,
const int16_t* data,
size_t n) {
73 return fwrite(data,
sizeof(*data), n, fp) == n;
76 bool Serialize(FILE* fp,
const int32_t* data,
size_t n) {
77 return fwrite(data,
sizeof(*data), n, fp) == n;
80 bool Serialize(FILE* fp,
const uint8_t* data,
size_t n) {
81 return fwrite(data,
sizeof(*data), n, fp) == n;
84 bool Serialize(FILE* fp,
const uint16_t* data,
size_t n) {
85 return fwrite(data,
sizeof(*data), n, fp) == n;
88 bool Serialize(FILE* fp,
const uint32_t* data,
size_t n) {
89 return fwrite(data,
sizeof(*data), n, fp) == n;
95 data_is_owned_(false),
198 if (!data_is_owned_) {
200 data_is_owned_ =
true;
205 if (reader ==
nullptr)
208 return (*reader)(filename, data_);
213 if (!data_is_owned_) {
215 data_is_owned_ =
true;
220 memcpy(&(*data_)[0], data, size);
226 auto current_pos = std::ftell(fp);
227 if (current_pos < 0) {
231 if (end_offset < 0) {
232 if (fseek(fp, 0, SEEK_END))
234 end_offset = ftell(fp);
235 if (fseek(fp, current_pos, SEEK_SET))
238 int size = end_offset - current_pos;
241 if (!data_is_owned_) {
243 data_is_owned_ =
true;
246 return static_cast<int>(fread(&(*data_)[0], 1, size, fp)) == size;
252 while (size + 1 < buffer_size && offset_ < data_->size()) {
253 buffer[size++] = (*data_)[offset_++];
254 if ((*data_)[offset_ - 1] ==
'\n')
break;
256 if (size < buffer_size) buffer[size] =
'\0';
257 return size > 0 ? buffer :
nullptr;
263 char* char_buffer =
static_cast<char*
>(buffer);
264 for (
int i = 0; i < num_read; ++i, char_buffer += size) {
275 size_t required_size;
276 if (SIZE_MAX / size <=
count) {
278 required_size = data_->
size() - offset_;
280 required_size = size *
count;
281 if (data_->
size() - offset_ < required_size) {
282 required_size = data_->
size() - offset_;
285 if (required_size > 0 && buffer !=
nullptr)
286 memcpy(buffer, &(*data_)[offset_], required_size);
287 offset_ += required_size;
288 return required_size / size;
298 if (data !=
nullptr) {
299 if (data_is_owned_)
delete data_;
301 data_is_owned_ =
false;
302 }
else if (!data_is_owned_) {
304 data_is_owned_ =
true;
313 if (writer ==
nullptr)
316 return (*writer)(*data_, filename);
324 size_t total = size *
count;
325 const char* buf =
static_cast<const char*
>(buffer);
328 for (
size_t i = 0; i < total; ++i)
void ReverseN(void *ptr, int num_bytes)
bool(*)(const STRING &, GenericVector< char > *) FileReader
bool DeSerialize(FILE *fp, char *data, size_t n)
bool(*)(const GenericVector< char > &, const STRING &) FileWriter
bool SaveDataToFile(const GenericVector< char > &data, const STRING &filename)
bool Serialize(FILE *fp, const char *data, size_t n)
bool LoadDataFromFile(const char *filename, GenericVector< char > *data)
void resize_no_init(int size)
void OpenWrite(GenericVector< char > *data)
int FWrite(const void *buffer, size_t size, int count)
int FReadEndian(void *buffer, size_t size, int count)
int FRead(void *buffer, size_t size, int count)
char * FGets(char *buffer, int buffer_size)
bool Open(const STRING &filename, FileReader reader)
bool Serialize(const char *data, size_t count=1)
bool DeSerialize(char *data, size_t count=1)
bool CloseWrite(const STRING &filename, FileWriter writer)
const char * c_str() const