Skip to content

Commit 7133a6f

Browse files
committed
GENERIC_2D_ARRAY: Use new serialization API
Signed-off-by: Stefan Weil <[email protected]>
1 parent ea660f8 commit 7133a6f

File tree

1 file changed

+23
-27
lines changed

1 file changed

+23
-27
lines changed

src/ccstruct/matrix.h

+23-27
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include <algorithm> // for max, min
3131
#include <cmath> // for sqrt, fabs, isfinite
3232
#include <cstdint> // for int32_t
33-
#include <cstdio> // for fread, fwrite, FILE
33+
#include <cstdio> // for FILE
3434
#include <cstring> // for memcpy
3535
#include "errcode.h" // for ASSERT_HOST
3636
#include "helpers.h" // for ReverseN, ClipToRange
@@ -143,40 +143,38 @@ class GENERIC_2D_ARRAY {
143143
// Only works with bitwise-serializeable types!
144144
bool Serialize(FILE* fp) const {
145145
if (!SerializeSize(fp)) return false;
146-
if (fwrite(&empty_, sizeof(empty_), 1, fp) != 1) return false;
146+
if (!tesseract::Serialize(fp, &empty_)) return false;
147147
int size = num_elements();
148-
if (fwrite(array_, sizeof(*array_), size, fp) != size) return false;
149-
return true;
148+
return tesseract::Serialize(fp, &array_[0], size);
150149
}
150+
151151
bool Serialize(tesseract::TFile* fp) const {
152152
if (!SerializeSize(fp)) return false;
153-
if (fp->FWrite(&empty_, sizeof(empty_), 1) != 1) return false;
153+
if (!fp->Serialize(&empty_)) return false;
154154
int size = num_elements();
155-
if (fp->FWrite(array_, sizeof(*array_), size) != size) return false;
156-
return true;
155+
return fp->Serialize(&array_[0], size);
157156
}
158157

159158
// Reads from the given file. Returns false in case of error.
160159
// Only works with bitwise-serializeable types!
161160
// If swap is true, assumes a big/little-endian swap is needed.
162161
bool DeSerialize(bool swap, FILE* fp) {
163162
if (!DeSerializeSize(swap, fp)) return false;
164-
if (fread(&empty_, sizeof(empty_), 1, fp) != 1) return false;
163+
if (!tesseract::DeSerialize(fp, &empty_)) return false;
165164
if (swap) ReverseN(&empty_, sizeof(empty_));
166165
int size = num_elements();
167-
if (fread(array_, sizeof(*array_), size, fp) != size) return false;
166+
if (!tesseract::DeSerialize(fp, &array_[0], size)) return false;
168167
if (swap) {
169168
for (int i = 0; i < size; ++i)
170169
ReverseN(&array_[i], sizeof(array_[i]));
171170
}
172171
return true;
173172
}
173+
174174
bool DeSerialize(tesseract::TFile* fp) {
175-
if (!DeSerializeSize(fp)) return false;
176-
if (fp->FReadEndian(&empty_, sizeof(empty_), 1) != 1) return false;
177-
int size = num_elements();
178-
if (fp->FReadEndian(array_, sizeof(*array_), size) != size) return false;
179-
return true;
175+
return DeSerializeSize(fp) &&
176+
fp->DeSerialize(&empty_) &&
177+
fp->DeSerialize(&array_[0], num_elements());
180178
}
181179

182180
// Writes to the given file. Returns false in case of error.
@@ -466,25 +464,23 @@ class GENERIC_2D_ARRAY {
466464
protected:
467465
// Factored helper to serialize the size.
468466
bool SerializeSize(FILE* fp) const {
469-
int32_t size = dim1_;
470-
if (fwrite(&size, sizeof(size), 1, fp) != 1) return false;
467+
uint32_t size = dim1_;
468+
if (!tesseract::Serialize(fp, &size)) return false;
471469
size = dim2_;
472-
if (fwrite(&size, sizeof(size), 1, fp) != 1) return false;
473-
return true;
470+
return tesseract::Serialize(fp, &size);
474471
}
475472
bool SerializeSize(tesseract::TFile* fp) const {
476-
int32_t size = dim1_;
477-
if (fp->FWrite(&size, sizeof(size), 1) != 1) return false;
473+
uint32_t size = dim1_;
474+
if (!fp->Serialize(&size)) return false;
478475
size = dim2_;
479-
if (fp->FWrite(&size, sizeof(size), 1) != 1) return false;
480-
return true;
476+
return fp->Serialize(&size);
481477
}
482478
// Factored helper to deserialize the size.
483479
// If swap is true, assumes a big/little-endian swap is needed.
484480
bool DeSerializeSize(bool swap, FILE* fp) {
485-
int32_t size1, size2;
486-
if (fread(&size1, sizeof(size1), 1, fp) != 1) return false;
487-
if (fread(&size2, sizeof(size2), 1, fp) != 1) return false;
481+
uint32_t size1, size2;
482+
if (!tesseract::DeSerialize(fp, &size1)) return false;
483+
if (!tesseract::DeSerialize(fp, &size2)) return false;
488484
if (swap) {
489485
ReverseN(&size1, sizeof(size1));
490486
ReverseN(&size2, sizeof(size2));
@@ -497,8 +493,8 @@ class GENERIC_2D_ARRAY {
497493
}
498494
bool DeSerializeSize(tesseract::TFile* fp) {
499495
int32_t size1, size2;
500-
if (fp->FReadEndian(&size1, sizeof(size1), 1) != 1) return false;
501-
if (fp->FReadEndian(&size2, sizeof(size2), 1) != 1) return false;
496+
if (!fp->DeSerialize(&size1)) return false;
497+
if (!fp->DeSerialize(&size2)) return false;
502498
// Arbitrarily limit the number of elements to protect against bad data.
503499
if (size1 > UINT16_MAX) return false;
504500
if (size2 > UINT16_MAX) return false;

0 commit comments

Comments
 (0)