Loading src/AllocatorCpu.h +7 −4 Original line number Diff line number Diff line Loading @@ -43,10 +43,13 @@ typedef unsigned int SizeType; namespace PsimagLite { template <typename T, bool B = std::is_enum<T>::value> struct IsEnumClass : std::false_type {}; template <typename T> struct IsEnum { enum {True = __is_enum(T)}; }; struct IsEnumClass<T, true> : std::integral_constant<bool, !std::is_convertible<T, typename std::underlying_type<T>::type>::value> {}; inline div_t div(int a, int b) { return std::div(a, b); } Loading src/Io/IoNg.h +2 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,8 @@ struct IsRootUnDelegated { IsVectorLike<T>::True || IsStackLike<T>::True || IsPairLike<T>::True || IsEnum<T>::True || std::is_enum<T>::value || IsEnumClass<T>::value || IsStringLike<T>::True}; }; // PSIDOC_CODE_END Loading src/Io/IoNgSerializer.h +35 −6 Original line number Diff line number Diff line Loading @@ -138,7 +138,8 @@ public: void write(String name2, const T& what, WriteMode allowOverwrite = NO_OVERWRITE, typename EnableIf<Loki::TypeTraits<T>::isArith || IsEnum<T>::True, int*>::Type = 0) typename EnableIf<Loki::TypeTraits<T>::isArith || std::is_enum<T>::value, int*>::Type = 0) { String name = "Def/" + name2; const void* ptr = static_cast<const T*>(&what); Loading Loading @@ -303,9 +304,9 @@ public: template<typename T> void write(String name2, const std::vector<T>& what, WriteMode allowOverwrite = NO_OVERWRITE, WriteMode = NO_OVERWRITE, typename EnableIf<!Loki::TypeTraits<typename Real<T>::Type>::isArith && !IsPairLike<T>::True, int*>::Type = 0) && !IsPairLike<T>::True && !IsEnumClass<T>::value, int*>::Type = 0) { SizeType n = what.size(); createGroup(name2); Loading @@ -314,6 +315,20 @@ public: what[i].write(name2 + "/" + typeToString(i), *this); } template<typename T> void write(String name2, const std::vector<T>& what, WriteMode allowOverwrite = NO_OVERWRITE, typename EnableIf<IsEnumClass<T>::value, int*>::Type = 0) { overwriteNotSupported(allowOverwrite); SizeType n = what.size(); createGroup(name2); write(name2 + "/Size", n); for (SizeType i = 0; i < n; ++i) write(name2 + "/" + typeToString(i), what[i]); } template<typename T> void overwrite(String name2, const std::vector<T>& what, Loading Loading @@ -376,7 +391,8 @@ public: template<typename SomeType> void read(SomeType& value, String name, typename EnableIf<Loki::TypeTraits<SomeType>::isArith, int*>::Type = 0) typename EnableIf<Loki::TypeTraits<SomeType>::isArith && !std::is_enum<SomeType>::value, int*>::Type = 0) { void* ptr = static_cast<void *>(&value); H5::DataSet* dataset = new H5::DataSet(hdf5file_->openDataSet("Def/" + name)); Loading Loading @@ -432,7 +448,8 @@ public: template<typename SomeType> void read(SomeType& value, String name, typename EnableIf<IsEnum<SomeType>::True, int*>::Type = 0) typename EnableIf<std::is_enum<SomeType>::value || IsEnumClass<SomeType>::value, int*>::Type = 0) { SizeType x = 0; read(x, name); Loading Loading @@ -473,7 +490,7 @@ public: void read(std::vector<T>& what, String name, typename EnableIf<!Loki::TypeTraits<typename Real<T>::Type>::isArith && !IsPairLike<T>::True, int*>::Type = 0) && !IsPairLike<T>::True && !IsEnumClass<T>::value, int*>::Type = 0) { SizeType size = 0; read(size, name + "/Size"); Loading @@ -495,6 +512,18 @@ public: read(what[i], name + "/" + ttos(i)); } template<typename T> void read(std::vector<T>& what, String name, typename EnableIf<IsEnumClass<T>::value, int*>::Type = 0) { SizeType size = 0; read(size, name + "/Size"); what.resize(size); for (SizeType i = 0; i < size; ++i) read(what[i], name + "/" + ttos(i)); } template<typename T> void read(std::vector<std::vector<T> >& what, String name) Loading src/Io/IoSimple.h +1 −1 Original line number Diff line number Diff line Loading @@ -95,7 +95,7 @@ class IoSimple { template<typename T> struct PrintWithEqualSign { enum { True = Loki::TypeTraits<T>::isArith ||IsEnum<T>::True }; enum { True = Loki::TypeTraits<T>::isArith || std::is_enum<T>::value }; }; public: Loading src/Io/TypeToH5.h +2 −2 Original line number Diff line number Diff line Loading @@ -6,10 +6,10 @@ namespace PsimagLite { template<typename T> typename EnableIf<!IsEnum<T>::True, H5::PredType>::Type typeToH5(); typename EnableIf<!std::is_enum<T>::value, H5::PredType>::Type typeToH5(); template<typename T> typename EnableIf<IsEnum<T>::True, H5::PredType>::Type typeToH5() typename EnableIf<std::is_enum<T>::value, H5::PredType>::Type typeToH5() { return H5::PredType::NATIVE_UINT8; } Loading Loading
src/AllocatorCpu.h +7 −4 Original line number Diff line number Diff line Loading @@ -43,10 +43,13 @@ typedef unsigned int SizeType; namespace PsimagLite { template <typename T, bool B = std::is_enum<T>::value> struct IsEnumClass : std::false_type {}; template <typename T> struct IsEnum { enum {True = __is_enum(T)}; }; struct IsEnumClass<T, true> : std::integral_constant<bool, !std::is_convertible<T, typename std::underlying_type<T>::type>::value> {}; inline div_t div(int a, int b) { return std::div(a, b); } Loading
src/Io/IoNg.h +2 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,8 @@ struct IsRootUnDelegated { IsVectorLike<T>::True || IsStackLike<T>::True || IsPairLike<T>::True || IsEnum<T>::True || std::is_enum<T>::value || IsEnumClass<T>::value || IsStringLike<T>::True}; }; // PSIDOC_CODE_END Loading
src/Io/IoNgSerializer.h +35 −6 Original line number Diff line number Diff line Loading @@ -138,7 +138,8 @@ public: void write(String name2, const T& what, WriteMode allowOverwrite = NO_OVERWRITE, typename EnableIf<Loki::TypeTraits<T>::isArith || IsEnum<T>::True, int*>::Type = 0) typename EnableIf<Loki::TypeTraits<T>::isArith || std::is_enum<T>::value, int*>::Type = 0) { String name = "Def/" + name2; const void* ptr = static_cast<const T*>(&what); Loading Loading @@ -303,9 +304,9 @@ public: template<typename T> void write(String name2, const std::vector<T>& what, WriteMode allowOverwrite = NO_OVERWRITE, WriteMode = NO_OVERWRITE, typename EnableIf<!Loki::TypeTraits<typename Real<T>::Type>::isArith && !IsPairLike<T>::True, int*>::Type = 0) && !IsPairLike<T>::True && !IsEnumClass<T>::value, int*>::Type = 0) { SizeType n = what.size(); createGroup(name2); Loading @@ -314,6 +315,20 @@ public: what[i].write(name2 + "/" + typeToString(i), *this); } template<typename T> void write(String name2, const std::vector<T>& what, WriteMode allowOverwrite = NO_OVERWRITE, typename EnableIf<IsEnumClass<T>::value, int*>::Type = 0) { overwriteNotSupported(allowOverwrite); SizeType n = what.size(); createGroup(name2); write(name2 + "/Size", n); for (SizeType i = 0; i < n; ++i) write(name2 + "/" + typeToString(i), what[i]); } template<typename T> void overwrite(String name2, const std::vector<T>& what, Loading Loading @@ -376,7 +391,8 @@ public: template<typename SomeType> void read(SomeType& value, String name, typename EnableIf<Loki::TypeTraits<SomeType>::isArith, int*>::Type = 0) typename EnableIf<Loki::TypeTraits<SomeType>::isArith && !std::is_enum<SomeType>::value, int*>::Type = 0) { void* ptr = static_cast<void *>(&value); H5::DataSet* dataset = new H5::DataSet(hdf5file_->openDataSet("Def/" + name)); Loading Loading @@ -432,7 +448,8 @@ public: template<typename SomeType> void read(SomeType& value, String name, typename EnableIf<IsEnum<SomeType>::True, int*>::Type = 0) typename EnableIf<std::is_enum<SomeType>::value || IsEnumClass<SomeType>::value, int*>::Type = 0) { SizeType x = 0; read(x, name); Loading Loading @@ -473,7 +490,7 @@ public: void read(std::vector<T>& what, String name, typename EnableIf<!Loki::TypeTraits<typename Real<T>::Type>::isArith && !IsPairLike<T>::True, int*>::Type = 0) && !IsPairLike<T>::True && !IsEnumClass<T>::value, int*>::Type = 0) { SizeType size = 0; read(size, name + "/Size"); Loading @@ -495,6 +512,18 @@ public: read(what[i], name + "/" + ttos(i)); } template<typename T> void read(std::vector<T>& what, String name, typename EnableIf<IsEnumClass<T>::value, int*>::Type = 0) { SizeType size = 0; read(size, name + "/Size"); what.resize(size); for (SizeType i = 0; i < size; ++i) read(what[i], name + "/" + ttos(i)); } template<typename T> void read(std::vector<std::vector<T> >& what, String name) Loading
src/Io/IoSimple.h +1 −1 Original line number Diff line number Diff line Loading @@ -95,7 +95,7 @@ class IoSimple { template<typename T> struct PrintWithEqualSign { enum { True = Loki::TypeTraits<T>::isArith ||IsEnum<T>::True }; enum { True = Loki::TypeTraits<T>::isArith || std::is_enum<T>::value }; }; public: Loading
src/Io/TypeToH5.h +2 −2 Original line number Diff line number Diff line Loading @@ -6,10 +6,10 @@ namespace PsimagLite { template<typename T> typename EnableIf<!IsEnum<T>::True, H5::PredType>::Type typeToH5(); typename EnableIf<!std::is_enum<T>::value, H5::PredType>::Type typeToH5(); template<typename T> typename EnableIf<IsEnum<T>::True, H5::PredType>::Type typeToH5() typename EnableIf<std::is_enum<T>::value, H5::PredType>::Type typeToH5() { return H5::PredType::NATIVE_UINT8; } Loading