33template <
typename T,
size_t N>
34constexpr size_t countof(T
const (&)[N])
noexcept {
40using FileWriter = bool (*)(
const std::vector<char> &data,
const char *filename);
45bool SaveDataToFile(
const std::vector<char> &data,
const char *filename);
50 return fread(data,
sizeof(T), n, fp) == n;
55bool Serialize(FILE *fp,
const T *data,
size_t n = 1) {
56 return fwrite(data,
sizeof(T), n, fp) == n;
69 bool Open(
const char *filename,
FileReader reader);
71 bool Open(
const char *data,
size_t size);
73 bool Open(FILE *fp, int64_t end_offset);
80 bool DeSerializeSize(int32_t *data);
81 bool DeSerializeSkip(
size_t size = 1);
87 return FReadEndian(data,
sizeof(T),
count) ==
count;
94 }
else if (size == 0) {
96 }
else if (size > 50000000) {
103 for (
auto &item : data) {
112 for (
auto &item : data) {
113 if (!item.DeSerialize(
this)) {
121 for (uint32_t
i = 0;
i < size;
i++) {
129 if (!item->DeSerialize(
this)) {
147 bool Serialize(
const std::vector<char> &data);
148 template <
typename T>
150 return FWrite(data,
sizeof(T),
count) ==
count;
152 template <
typename T>
155 uint32_t size = data.size();
160 for (
auto &&
string : data) {
167 for (
auto &item : data) {
168 if (!item.Serialize(
this)) {
174 for (
auto &item : data) {
175 uint8_t non_null = (item !=
nullptr);
180 if (!item->Serialize(
this)) {
185 }
else if (size > 0) {
193 bool Skip(
size_t count);
198 char *FGets(
char *buffer,
int buffer_size);
202 size_t FReadEndian(
void *buffer,
size_t size,
size_t count);
204 size_t FRead(
void *buffer,
size_t size,
size_t count);
212 void OpenWrite(std::vector<char> *data);
213 bool CloseWrite(
const char *filename,
FileWriter writer);
217 size_t FWrite(
const void *buffer,
size_t size,
size_t count);
221 std::vector<char> *data_ =
nullptr;
223 unsigned offset_ = 0;
225 bool data_is_owned_ =
false;
227 bool is_writing_ =
false;
bool(*)(const std::vector< char > &data, const char *filename) FileWriter
bool DeSerialize(bool swap, FILE *fp, std::vector< T > &data)
bool Serialize(FILE *fp, const std::vector< T > &data)
constexpr size_t countof(T const (&)[N]) noexcept
bool SaveDataToFile(const GenericVector< char > &data, const char *filename)
bool(*)(const char *filename, std::vector< char > *data) FileReader
bool LoadDataFromFile(const char *filename, GenericVector< char > *data)
bool Serialize(const T *data, size_t count=1)
bool DeSerialize(T *data, size_t count=1)
bool DeSerialize(std::vector< T > &data)
void set_swap(bool value)
bool Serialize(const std::vector< T > &data)