Mercurial > octave
comparison libinterp/octave-value/ov-int16.cc @ 24224:ff81c6772664
avoid issue with link-time optimization
With link-time optimization, the value used for the HDF5 save type was
not working correctly for Octave int types. It seems that the
templated load and save functions were recognized as duplicates and
only one version was used, even though they needed to be different.
This patch attempts to avoid that.
* ov-base-int.h, ov-base-int.cc
(octave_base_int<T>::load_hdf5_internal): Rename from
octave_base_int<T>::load_hdf5. Pass HDF5 save type as arg.
(octave_base_int<T>::save_hdf5_internal): Rename from
octave_base_int<T>::save_hdf5. Pass HDF5 save type as arg.
* ov-intx.h (OCTAVE_VALUE_INT_MATRIX_T::load_hdf5,
OCTAVE_VALUE_INT_MATRIX_T::save_hdf5,
OCTAVE_VALUE_INT_SCALAR_T:load_hdf5,
OCTAVE_VALUE_INT_SCALAR_T:save_hdf5): New declarations.
* ov-int16.cc, ov-int32.cc, ov-int64.cc, ov-int8.cc, ov-uint16.cc,
ov-uint32.cc, ov-uint64.cc, ov-uint8.cc: Define load_hdf5 and
save_hdf5 functions.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 09 Nov 2017 18:20:19 -0500 |
parents | 092078913d54 |
children | b8cb5a05955e |
comparison
equal
deleted
inserted
replaced
24223:629858e122f1 | 24224:ff81c6772664 |
---|---|
38 #include "ops.h" | 38 #include "ops.h" |
39 #include "ov-base.h" | 39 #include "ov-base.h" |
40 | 40 |
41 #if defined (HAVE_HDF5) | 41 #if defined (HAVE_HDF5) |
42 # define HDF5_SAVE_TYPE H5T_NATIVE_INT16 | 42 # define HDF5_SAVE_TYPE H5T_NATIVE_INT16 |
43 #else | |
44 // This value will not be used. | |
45 # define HDF5_SAVE_TYPE 0 | |
43 #endif | 46 #endif |
44 | 47 |
45 #include "ov-base-int.h" | 48 #include "ov-base-int.h" |
46 #include "ov-base-int.cc" | 49 #include "ov-base-int.cc" |
47 #include "ov-int16.h" | 50 #include "ov-int16.h" |
63 template class octave_base_int_matrix<int16NDArray>; | 66 template class octave_base_int_matrix<int16NDArray>; |
64 | 67 |
65 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_int16_matrix, | 68 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_int16_matrix, |
66 "int16 matrix", "int16"); | 69 "int16 matrix", "int16"); |
67 | 70 |
71 | |
72 bool | |
73 octave_int16_matrix::save_hdf5 (octave_hdf5_id loc_id, const char *name, | |
74 bool flag) | |
75 { | |
76 return save_hdf5_internal (loc_id, HDF5_SAVE_TYPE, name, flag); | |
77 } | |
78 | |
79 bool | |
80 octave_int16_matrix::load_hdf5 (octave_hdf5_id loc_id, const char *name) | |
81 { | |
82 return load_hdf5_internal (loc_id, HDF5_SAVE_TYPE, name); | |
83 } | |
84 | |
68 template class octave_base_scalar<octave_int16>; | 85 template class octave_base_scalar<octave_int16>; |
69 | 86 |
70 template class octave_base_int_scalar<octave_int16>; | 87 template class octave_base_int_scalar<octave_int16>; |
71 | 88 |
72 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_int16_scalar, | 89 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_int16_scalar, |
73 "int16 scalar", "int16"); | 90 "int16 scalar", "int16"); |
91 | |
92 bool | |
93 octave_int16_scalar::save_hdf5 (octave_hdf5_id loc_id, const char *name, | |
94 bool flag) | |
95 { | |
96 return save_hdf5_internal (loc_id, HDF5_SAVE_TYPE, name, flag); | |
97 } | |
98 | |
99 bool | |
100 octave_int16_scalar::load_hdf5 (octave_hdf5_id loc_id, const char *name) | |
101 { | |
102 return load_hdf5_internal (loc_id, HDF5_SAVE_TYPE, name); | |
103 } |