41
41
# include <zlib.h>
42
42
#endif
43
43
44
+ #if !defined(READ_BLOCK_SIZE )
45
+ #define READ_BLOCK_SIZE (256)
46
+ #endif
47
+
48
+ #define Mat_uint8Swap (x ) (*x)
49
+ #define Mat_int8Swap (x ) (*x)
50
+
44
51
#define READ_DATA (SwapFunc ) \
45
52
do { \
46
53
if ( mat->byteswap ) { \
47
- for ( i = 0; i < len; i++ ) { \
48
- bytesread += fread(&v,data_size,1,(FILE*)mat->fp); \
49
- data[i] = SwapFunc(&v); \
54
+ if ( len <= READ_BLOCK_SIZE ) { \
55
+ bytesread += fread(v,data_size,len,(FILE*)mat->fp); \
56
+ for (j = 0; j < len; j++) { \
57
+ data[j] = SwapFunc(&v[j]); \
58
+ } \
59
+ } else { \
60
+ for ( i = 0; i < len-READ_BLOCK_SIZE; i+=READ_BLOCK_SIZE ) { \
61
+ bytesread += fread(v,data_size,READ_BLOCK_SIZE,(FILE*)mat->fp); \
62
+ for (j = 0; j < READ_BLOCK_SIZE; j++) { \
63
+ data[i+j] = SwapFunc(&v[j]); \
64
+ } \
65
+ } \
66
+ if ( len > i ) { \
67
+ bytesread += fread(v,data_size,len-i,(FILE*)mat->fp); \
68
+ for (j = 0; j < len-i; j++) { \
69
+ data[i+j] = SwapFunc(&v[j]); \
70
+ } \
71
+ }\
50
72
} \
51
73
} else { \
52
- for ( i = 0; i < len; i++ ) { \
53
- bytesread += fread(&v,data_size,1,(FILE*)mat->fp); \
54
- data[i] = v; \
74
+ if ( len <= READ_BLOCK_SIZE ) { \
75
+ bytesread += fread(v,data_size,len,(FILE*)mat->fp); \
76
+ for (j = 0; j < len; j++) { \
77
+ data[j] = v[j]; \
78
+ } \
79
+ } else { \
80
+ for ( i = 0; i < len-READ_BLOCK_SIZE; i+=READ_BLOCK_SIZE ) { \
81
+ bytesread += fread(v,data_size,READ_BLOCK_SIZE,(FILE*)mat->fp); \
82
+ for (j = 0; j < READ_BLOCK_SIZE; j++) { \
83
+ data[i+j] = v[j]; \
84
+ } \
85
+ } \
86
+ if ( len > i ) { \
87
+ bytesread += fread(v,data_size,len-i,(FILE*)mat->fp); \
88
+ for (j = 0; j < len-i; j++) { \
89
+ data[i+j] = v[j]; \
90
+ } \
91
+ }\
55
92
} \
56
93
} \
57
94
} while (0)
60
97
#define READ_DATA_INT64 \
61
98
do { \
62
99
if ( MAT_T_INT64 == data_type ) { \
63
- mat_int64_t v; \
100
+ mat_int64_t v[READ_BLOCK_SIZE] ; \
64
101
READ_DATA(Mat_int64Swap); \
65
102
} \
66
103
} while (0)
72
109
#define READ_DATA_UINT64 \
73
110
do { \
74
111
if ( MAT_T_UINT64 == data_type ) { \
75
- mat_uint64_t v; \
112
+ mat_uint64_t v[READ_BLOCK_SIZE] ; \
76
113
READ_DATA(Mat_uint64Swap); \
77
114
} \
78
115
} while (0)
85
122
switch ( data_type ) { \
86
123
case MAT_T_DOUBLE: \
87
124
{ \
88
- double v; \
125
+ double v[READ_BLOCK_SIZE] ; \
89
126
READ_DATA(Mat_doubleSwap); \
90
127
break; \
91
128
} \
92
129
case MAT_T_SINGLE: \
93
130
{ \
94
- float v; \
131
+ float v[READ_BLOCK_SIZE] ; \
95
132
READ_DATA(Mat_floatSwap); \
96
133
break; \
97
134
} \
98
135
case MAT_T_INT32: \
99
136
{ \
100
- mat_int32_t v; \
137
+ mat_int32_t v[READ_BLOCK_SIZE] ; \
101
138
READ_DATA(Mat_int32Swap); \
102
139
break; \
103
140
} \
104
141
case MAT_T_UINT32: \
105
142
{ \
106
- mat_uint32_t v; \
143
+ mat_uint32_t v[READ_BLOCK_SIZE] ; \
107
144
READ_DATA(Mat_uint32Swap); \
108
145
break; \
109
146
} \
110
147
case MAT_T_INT16: \
111
148
{ \
112
- mat_int16_t v; \
149
+ mat_int16_t v[READ_BLOCK_SIZE] ; \
113
150
READ_DATA(Mat_int16Swap); \
114
151
break; \
115
152
} \
116
153
case MAT_T_UINT16: \
117
154
{ \
118
- mat_uint16_t v; \
155
+ mat_uint16_t v[READ_BLOCK_SIZE] ; \
119
156
READ_DATA(Mat_uint16Swap); \
120
157
break; \
121
158
} \
122
159
case MAT_T_INT8: \
123
160
{ \
124
- mat_int8_t v; \
125
- for ( i = 0; i < len; i++ ) { \
126
- bytesread += fread(&v,data_size,1,(FILE*)mat->fp); \
127
- data[i] = v; \
128
- } \
161
+ mat_int8_t v[READ_BLOCK_SIZE]; \
162
+ READ_DATA(Mat_int8Swap); \
129
163
break; \
130
164
} \
131
165
case MAT_T_UINT8: \
132
166
{ \
133
- mat_uint8_t v; \
134
- for ( i = 0; i < len; i++ ) { \
135
- bytesread += fread(&v,data_size,1,(FILE*)mat->fp); \
136
- data[i] = v; \
137
- } \
167
+ mat_uint8_t v[READ_BLOCK_SIZE]; \
168
+ READ_DATA(Mat_uint8Swap); \
138
169
break; \
139
170
} \
140
171
default: \
272
303
int
273
304
ReadDoubleData (mat_t * mat ,double * data ,enum matio_types data_type ,int len )
274
305
{
275
- int bytesread = 0 , data_size , i ;
306
+ int bytesread = 0 , data_size , i , j ;
276
307
277
308
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
278
309
return 0 ;
@@ -294,67 +325,60 @@ ReadDoubleData(mat_t *mat,double *data,enum matio_types data_type,int len)
294
325
}
295
326
case MAT_T_SINGLE :
296
327
{
297
- float v ;
328
+ float v [ READ_BLOCK_SIZE ] ;
298
329
READ_DATA (Mat_floatSwap );
299
330
break ;
300
331
}
301
332
#ifdef HAVE_MAT_INT64_T
302
333
case MAT_T_INT64 :
303
334
{
304
- mat_int64_t v ;
335
+ mat_int64_t v [ READ_BLOCK_SIZE ] ;
305
336
READ_DATA (Mat_int64Swap );
306
337
break ;
307
338
}
308
339
#endif
309
340
#ifdef HAVE_MAT_UINT64_T
310
341
case MAT_T_UINT64 :
311
342
{
312
- mat_uint64_t v ;
343
+ mat_uint64_t v [ READ_BLOCK_SIZE ] ;
313
344
READ_DATA (Mat_uint64Swap );
314
345
break ;
315
346
}
316
347
#endif
317
348
case MAT_T_INT32 :
318
349
{
319
- mat_int32_t v ;
350
+ mat_int32_t v [ READ_BLOCK_SIZE ] ;
320
351
READ_DATA (Mat_int32Swap );
321
352
break ;
322
353
}
323
354
case MAT_T_UINT32 :
324
355
{
325
- mat_uint32_t v ;
356
+ mat_uint32_t v [ READ_BLOCK_SIZE ] ;
326
357
READ_DATA (Mat_uint32Swap );
327
358
break ;
328
359
}
329
360
case MAT_T_INT16 :
330
361
{
331
- mat_int16_t v ;
362
+ mat_int16_t v [ READ_BLOCK_SIZE ] ;
332
363
READ_DATA (Mat_int16Swap );
333
364
break ;
334
365
}
335
366
case MAT_T_UINT16 :
336
367
{
337
- mat_uint16_t v ;
368
+ mat_uint16_t v [ READ_BLOCK_SIZE ] ;
338
369
READ_DATA (Mat_uint16Swap );
339
370
break ;
340
371
}
341
372
case MAT_T_INT8 :
342
373
{
343
- mat_int8_t v ;
344
- for ( i = 0 ; i < len ; i ++ ) {
345
- bytesread += fread (& v ,data_size ,1 ,(FILE * )mat -> fp );
346
- data [i ] = v ;
347
- }
374
+ mat_int8_t v [READ_BLOCK_SIZE ];
375
+ READ_DATA (Mat_int8Swap );
348
376
break ;
349
377
}
350
378
case MAT_T_UINT8 :
351
379
{
352
- mat_uint8_t v ;
353
-
354
- for ( i = 0 ; i < len ; i ++ ) {
355
- bytesread += fread (& v ,data_size ,1 ,(FILE * )mat -> fp );
356
- data [i ] = v ;
357
- }
380
+ mat_uint8_t v [READ_BLOCK_SIZE ];
381
+ READ_DATA (Mat_uint8Swap );
358
382
break ;
359
383
}
360
384
default :
@@ -769,7 +793,7 @@ ReadCompressedDoubleData(mat_t *mat,z_streamp z,double *data,
769
793
int
770
794
ReadSingleData (mat_t * mat ,float * data ,enum matio_types data_type ,int len )
771
795
{
772
- int bytesread = 0 , data_size , i ;
796
+ int bytesread = 0 , data_size , i , j ;
773
797
774
798
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
775
799
return 0 ;
@@ -827,7 +851,7 @@ ReadCompressedSingleData(mat_t *mat,z_streamp z,float *data,
827
851
int
828
852
ReadInt64Data (mat_t * mat ,mat_int64_t * data ,enum matio_types data_type ,int len )
829
853
{
830
- int bytesread = 0 , data_size , i ;
854
+ int bytesread = 0 , data_size , i , j ;
831
855
832
856
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
833
857
return 0 ;
@@ -887,7 +911,7 @@ ReadCompressedInt64Data(mat_t *mat,z_streamp z,mat_int64_t *data,
887
911
int
888
912
ReadUInt64Data (mat_t * mat ,mat_uint64_t * data ,enum matio_types data_type ,int len )
889
913
{
890
- int bytesread = 0 , data_size , i ;
914
+ int bytesread = 0 , data_size , i , j ;
891
915
892
916
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
893
917
return 0 ;
@@ -947,7 +971,7 @@ ReadCompressedUInt64Data(mat_t *mat,z_streamp z,mat_uint64_t *data,
947
971
int
948
972
ReadInt32Data (mat_t * mat ,mat_int32_t * data ,enum matio_types data_type ,int len )
949
973
{
950
- int bytesread = 0 , data_size , i ;
974
+ int bytesread = 0 , data_size , i , j ;
951
975
952
976
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
953
977
return 0 ;
@@ -1005,7 +1029,7 @@ ReadCompressedInt32Data(mat_t *mat,z_streamp z,mat_int32_t *data,
1005
1029
int
1006
1030
ReadUInt32Data (mat_t * mat ,mat_uint32_t * data ,enum matio_types data_type ,int len )
1007
1031
{
1008
- int bytesread = 0 , data_size , i ;
1032
+ int bytesread = 0 , data_size , i , j ;
1009
1033
1010
1034
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
1011
1035
return 0 ;
@@ -1063,7 +1087,7 @@ ReadCompressedUInt32Data(mat_t *mat,z_streamp z,mat_uint32_t *data,
1063
1087
int
1064
1088
ReadInt16Data (mat_t * mat ,mat_int16_t * data ,enum matio_types data_type ,int len )
1065
1089
{
1066
- int bytesread = 0 , data_size , i ;
1090
+ int bytesread = 0 , data_size , i , j ;
1067
1091
1068
1092
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
1069
1093
return 0 ;
@@ -1121,7 +1145,7 @@ ReadCompressedInt16Data(mat_t *mat,z_streamp z,mat_int16_t *data,
1121
1145
int
1122
1146
ReadUInt16Data (mat_t * mat ,mat_uint16_t * data ,enum matio_types data_type ,int len )
1123
1147
{
1124
- int bytesread = 0 , data_size , i ;
1148
+ int bytesread = 0 , data_size , i , j ;
1125
1149
1126
1150
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
1127
1151
return 0 ;
@@ -1179,7 +1203,7 @@ ReadCompressedUInt16Data(mat_t *mat,z_streamp z,mat_uint16_t *data,
1179
1203
int
1180
1204
ReadInt8Data (mat_t * mat ,mat_int8_t * data ,enum matio_types data_type ,int len )
1181
1205
{
1182
- int bytesread = 0 , data_size , i ;
1206
+ int bytesread = 0 , data_size , i , j ;
1183
1207
1184
1208
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
1185
1209
return 0 ;
@@ -1237,7 +1261,7 @@ ReadCompressedInt8Data(mat_t *mat,z_streamp z,mat_int8_t *data,
1237
1261
int
1238
1262
ReadUInt8Data (mat_t * mat ,mat_uint8_t * data ,enum matio_types data_type ,int len )
1239
1263
{
1240
- int bytesread = 0 , data_size , i ;
1264
+ int bytesread = 0 , data_size , i , j ;
1241
1265
1242
1266
if ( (mat == NULL ) || (data == NULL ) || (mat -> fp == NULL ) )
1243
1267
return 0 ;
0 commit comments