30
30
#include <algorithm> // for max, min
31
31
#include <cmath> // for sqrt, fabs, isfinite
32
32
#include <cstdint> // for int32_t
33
- #include <cstdio> // for fread, fwrite, FILE
33
+ #include <cstdio> // for FILE
34
34
#include <cstring> // for memcpy
35
35
#include "errcode.h" // for ASSERT_HOST
36
36
#include "helpers.h" // for ReverseN, ClipToRange
@@ -143,40 +143,38 @@ class GENERIC_2D_ARRAY {
143
143
// Only works with bitwise-serializeable types!
144
144
bool Serialize (FILE * fp ) const {
145
145
if (!SerializeSize (fp )) return false;
146
- if (fwrite ( & empty_ , sizeof ( empty_ ), 1 , fp ) != 1 ) return false;
146
+ if (! tesseract :: Serialize ( fp , & empty_ )) return false;
147
147
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 );
150
149
}
150
+
151
151
bool Serialize (tesseract ::TFile * fp ) const {
152
152
if (!SerializeSize (fp )) return false;
153
- if (fp -> FWrite (& empty_ , sizeof ( empty_ ), 1 ) != 1 ) return false;
153
+ if (! fp -> Serialize (& empty_ ) ) return false;
154
154
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 );
157
156
}
158
157
159
158
// Reads from the given file. Returns false in case of error.
160
159
// Only works with bitwise-serializeable types!
161
160
// If swap is true, assumes a big/little-endian swap is needed.
162
161
bool DeSerialize (bool swap , FILE * fp ) {
163
162
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;
165
164
if (swap ) ReverseN (& empty_ , sizeof (empty_ ));
166
165
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;
168
167
if (swap ) {
169
168
for (int i = 0 ; i < size ; ++ i )
170
169
ReverseN (& array_ [i ], sizeof (array_ [i ]));
171
170
}
172
171
return true;
173
172
}
173
+
174
174
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 ());
180
178
}
181
179
182
180
// Writes to the given file. Returns false in case of error.
@@ -466,25 +464,23 @@ class GENERIC_2D_ARRAY {
466
464
protected :
467
465
// Factored helper to serialize the size.
468
466
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;
471
469
size = dim2_ ;
472
- if (fwrite (& size , sizeof (size ), 1 , fp ) != 1 ) return false;
473
- return true;
470
+ return tesseract ::Serialize (fp , & size );
474
471
}
475
472
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;
478
475
size = dim2_ ;
479
- if (fp -> FWrite (& size , sizeof (size ), 1 ) != 1 ) return false;
480
- return true;
476
+ return fp -> Serialize (& size );
481
477
}
482
478
// Factored helper to deserialize the size.
483
479
// If swap is true, assumes a big/little-endian swap is needed.
484
480
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;
488
484
if (swap ) {
489
485
ReverseN (& size1 , sizeof (size1 ));
490
486
ReverseN (& size2 , sizeof (size2 ));
@@ -497,8 +493,8 @@ class GENERIC_2D_ARRAY {
497
493
}
498
494
bool DeSerializeSize (tesseract ::TFile * fp ) {
499
495
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;
502
498
// Arbitrarily limit the number of elements to protect against bad data.
503
499
if (size1 > UINT16_MAX ) return false;
504
500
if (size2 > UINT16_MAX ) return false;
0 commit comments