Program Listing for File h5ppTypeCompound.h

Return to documentation for file (/home/david/GitProjects/h5pp/h5pp/include/h5pp/details/h5ppTypeCompound.h)

#pragma once
#include "h5ppHid.h"
#include <complex>
#include <hdf5.h>
namespace h5pp::type::compound {

    inline hid::h5t H5T_COMPLEX_SHORT;
    inline hid::h5t H5T_COMPLEX_INT;
    inline hid::h5t H5T_COMPLEX_LONG;
    inline hid::h5t H5T_COMPLEX_LLONG;
    inline hid::h5t H5T_COMPLEX_USHORT;
    inline hid::h5t H5T_COMPLEX_UINT;
    inline hid::h5t H5T_COMPLEX_ULONG;
    inline hid::h5t H5T_COMPLEX_ULLONG;
    inline hid::h5t H5T_COMPLEX_DOUBLE;
    inline hid::h5t H5T_COMPLEX_LDOUBLE;
    inline hid::h5t H5T_COMPLEX_FLOAT;
    inline hid::h5t H5T_SCALAR2_SHORT;
    inline hid::h5t H5T_SCALAR2_INT;
    inline hid::h5t H5T_SCALAR2_LONG;
    inline hid::h5t H5T_SCALAR2_LLONG;
    inline hid::h5t H5T_SCALAR2_USHORT;
    inline hid::h5t H5T_SCALAR2_UINT;
    inline hid::h5t H5T_SCALAR2_ULONG;
    inline hid::h5t H5T_SCALAR2_ULLONG;
    inline hid::h5t H5T_SCALAR2_DOUBLE;
    inline hid::h5t H5T_SCALAR2_LDOUBLE;
    inline hid::h5t H5T_SCALAR2_FLOAT;
    inline hid::h5t H5T_SCALAR3_SHORT;
    inline hid::h5t H5T_SCALAR3_INT;
    inline hid::h5t H5T_SCALAR3_LONG;
    inline hid::h5t H5T_SCALAR3_LLONG;
    inline hid::h5t H5T_SCALAR3_USHORT;
    inline hid::h5t H5T_SCALAR3_UINT;
    inline hid::h5t H5T_SCALAR3_ULONG;
    inline hid::h5t H5T_SCALAR3_ULLONG;
    inline hid::h5t H5T_SCALAR3_DOUBLE;
    inline hid::h5t H5T_SCALAR3_LDOUBLE;
    inline hid::h5t H5T_SCALAR3_FLOAT;

    template<typename T>
    struct H5T_COMPLEX_STRUCT {
        T real, imag; // real,imag parts
        using value_type     = T;
        using Scalar         = T;
        H5T_COMPLEX_STRUCT() = default;
        explicit H5T_COMPLEX_STRUCT(const std::complex<T> &in) {
            real = in.real();
            imag = in.imag();
        }
        H5T_COMPLEX_STRUCT &operator=(const std::complex<T> &rhs) {
            real = rhs.real();
            imag = rhs.imag();
            return *this;
        }
    };

    template<typename T>
    struct H5T_SCALAR2 {
        T x, y;
        using value_type = T;
        using Scalar     = T;
        H5T_SCALAR2()    = default;
        template<typename Scalar2Type>
        explicit H5T_SCALAR2(const Scalar2Type &in) {
            static_assert(std::is_same_v<T, decltype(in.x)>);
            static_assert(std::is_same_v<T, decltype(in.y)>);
            x = in.x;
            y = in.y;
        }
        template<typename Scalar2Type>
        H5T_SCALAR2 &operator=(const Scalar2Type &rhs) {
            static_assert(std::is_same_v<T, decltype(rhs.x)>);
            static_assert(std::is_same_v<T, decltype(rhs.y)>);
            x = rhs.x;
            y = rhs.y;
            return *this;
        }
    };

    template<typename T>
    struct H5T_SCALAR3 {
        T x, y, z;
        using value_type = T;
        using Scalar     = T;
        H5T_SCALAR3()    = default;
        template<typename Scalar3Type>
        explicit H5T_SCALAR3(const Scalar3Type &in) {
            static_assert(std::is_same_v<T, decltype(in.x)>);
            static_assert(std::is_same_v<T, decltype(in.y)>);
            static_assert(std::is_same_v<T, decltype(in.z)>);
            x = in.x;
            y = in.y;
            z = in.z;
        }
        template<typename Scalar3Type>
        H5T_SCALAR3 &operator=(const Scalar3Type &rhs) {
            static_assert(std::is_same_v<T, decltype(rhs.x)>);
            static_assert(std::is_same_v<T, decltype(rhs.y)>);
            static_assert(std::is_same_v<T, decltype(rhs.z)>);
            x = rhs.x;
            y = rhs.y;
            z = rhs.z;
            return *this;
        }
    };

}