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 }