Index: mlpack-1.0.3/src/mlpack/core/arma_extend/traits.hpp =================================================================== --- mlpack-1.0.3/src/mlpack/core/arma_extend/traits.hpp (revision 13920) +++ mlpack-1.0.3/src/mlpack/core/arma_extend/traits.hpp (working copy) @@ -15,7 +15,25 @@ // This isn't necessary if Armadillo was compiled with 64-bit support. #ifndef ARMA_64BIT_WORD +template +struct is_u64 + { static const bool value = false; }; + template<> +struct is_u64 + { static const bool value = true; }; + + +template +struct is_s64 + { static const bool value = false; }; + +template<> +struct is_s64 + { static const bool value = true; }; + + +template<> struct is_supported_elem_type { static const bool value = true; @@ -26,6 +44,13 @@ { static const bool value = true; }; + + +template<> +struct is_signed + { + static const bool value = false; + }; #endif #endif Index: mlpack-1.0.3/src/mlpack/core/arma_extend/restrictors.hpp =================================================================== --- mlpack-1.0.3/src/mlpack/core/arma_extend/restrictors.hpp (revision 0) +++ mlpack-1.0.3/src/mlpack/core/arma_extend/restrictors.hpp (working copy) @@ -0,0 +1,17 @@ +// Modifications to allow u64/s64 in Armadillo when ARMA_64BIT_WORD is not +// defined. +#ifndef ARMA_64BIT_WORD + +template<> struct arma_scalar_only { typedef u64 result; }; +template<> struct arma_scalar_only { typedef s64 result; }; + +template<> struct arma_integral_only { typedef u64 result; }; +template<> struct arma_integral_only { typedef s64 result; }; + +template<> struct arma_unsigned_integral_only { typedef u64 result; }; + +template<> struct arma_signed_integral_only { typedef s64 result; }; + +template<> struct arma_signed_only { typedef s64 result; }; + +#endif Index: mlpack-1.0.3/src/mlpack/core/arma_extend/arma_extend.hpp =================================================================== --- mlpack-1.0.3/src/mlpack/core/arma_extend/arma_extend.hpp (revision 13920) +++ mlpack-1.0.3/src/mlpack/core/arma_extend/arma_extend.hpp (working copy) @@ -21,10 +21,12 @@ #endif namespace arma { - // u64 + // u64/s64 #include "typedef.hpp" #include "traits.hpp" #include "promote_type.hpp" + #include "restrictors.hpp" + #include "hdf5_misc.hpp" // ccov() #include "op_ccov_proto.hpp" Index: mlpack-1.0.3/src/mlpack/core/arma_extend/typedef.hpp =================================================================== --- mlpack-1.0.3/src/mlpack/core/arma_extend/typedef.hpp (revision 13920) +++ mlpack-1.0.3/src/mlpack/core/arma_extend/typedef.hpp (working copy) @@ -42,17 +42,28 @@ #endif }; - typedef deduce_u64<(sizeof(std::size_t) >= 8)>::u64 u64; -#endif - // We only need to typedef s64. #if ULONG_MAX >= 0xffffffffffffffff typedef long s64; #elif ULLONG_MAX >= 0xffffffffffffffff - typedef long s64; + typedef long long s64; #else #error "don't know how to typedef 's64' on this system" #endif + + typedef deduce_u64<(sizeof(std::size_t) >= 8)>::u64 u64; + + namespace junk + { + struct arma_64_elem_size_test + { + arma_static_check( (sizeof(u64) != 8), ERROR___TYPE_U64_HAS_UNSUPPORTED_SIZE ); + arma_static_check( (sizeof(s64) != 8), ERROR___TYPE_S64_HAS_UNSUPPORTED_SIZE ); + }; + } + +#endif + #else // We must typedef both u64 and s64. Index: mlpack-1.0.3/src/mlpack/core/arma_extend/hdf5_misc.hpp =================================================================== --- mlpack-1.0.3/src/mlpack/core/arma_extend/hdf5_misc.hpp (revision 0) +++ mlpack-1.0.3/src/mlpack/core/arma_extend/hdf5_misc.hpp (working copy) @@ -0,0 +1,21 @@ +// To hack in u64/s64 support to Armadillo when it is not compiled with +// ARMA_64BIT_WORD. +#ifdef ARMA_USE_HDF5 + +template<> +inline +hid_t +get_hdf5_type< long long >() + { + return H5Tcopy(H5T_NATIVE_LLONG); + } + +template<> +inline +hid_t +get_hdf5_type< unsigned long long >() + { + return H5Tcopy(H5T_NATIVE_ULLONG); + } + +#endif