File: BufferedHDFArray.cpp

package info (click to toggle)
pbseqlib 5.3.5%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 7,020 kB
  • sloc: cpp: 77,250; python: 331; sh: 103; makefile: 41
file content (97 lines) | stat: -rw-r--r-- 4,961 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <hdf/BufferedHDFArray.hpp>

/*
 *
 * Implementation of a 1-D array for IO from an HDF array.
 * This is templated, but specialized for a few data types, so that
 * the HDF data types do not need to be specified by anybody.
 *
 *  Two examples of the usage of this class follow:
 *
 *	HDFArray<int> nElemArray;
 * 	nElemArray.Initialize(hdfFile, "PulseData/BaseCalls/ZMW/NumEvent");
 *  nElemArray.Read(i, i+1, &nElem);
 *
 * 	HDFArray<unsigned char> qualArray;
 *	qualArray.Initialize(hdfFile, "PulseData/BaseCalls/QualityValue");
 *  qualArray.Read(cur, cur + nElem, qual);
 *
 */

//
// Type specializations for some standard types. Use the macro for
// vanilla specializations (that only require the HDF type ID to be
// specified).
//
#define DEFINE_TYPED_READ_ARRAY(T, Pred)                                  \
    template <>                                                           \
    void BufferedHDFArray<T>::Read(DSLength start, DSLength end, T *dest) \
    {                                                                     \
        Read(start, end, Pred, dest);                                     \
    }

DEFINE_TYPED_READ_ARRAY(int, H5::PredType::NATIVE_INT)
DEFINE_TYPED_READ_ARRAY(char, H5::PredType::NATIVE_INT8)
DEFINE_TYPED_READ_ARRAY(unsigned char, H5::PredType::NATIVE_UINT8)
DEFINE_TYPED_READ_ARRAY(unsigned int, H5::PredType::NATIVE_UINT)
DEFINE_TYPED_READ_ARRAY(uint16_t, H5::PredType::NATIVE_UINT16)
DEFINE_TYPED_READ_ARRAY(float, H5::PredType::NATIVE_FLOAT)
DEFINE_TYPED_READ_ARRAY(char *, H5::PredType::C_S1)

#define DEFINE_TYPED_READ_DATASET(T, Pred)                      \
    template <>                                                 \
    void BufferedHDFArray<T>::ReadDataset(std::vector<T> &dest) \
    {                                                           \
        dest.resize(arrayLength);                               \
        Read(0, arrayLength, Pred, &dest[0]);                   \
    }

DEFINE_TYPED_READ_DATASET(int, H5::PredType::NATIVE_INT)
DEFINE_TYPED_READ_DATASET(char, H5::PredType::NATIVE_INT8)
DEFINE_TYPED_READ_DATASET(unsigned char, H5::PredType::NATIVE_UINT8)
DEFINE_TYPED_READ_DATASET(unsigned int, H5::PredType::NATIVE_UINT)
DEFINE_TYPED_READ_DATASET(uint16_t, H5::PredType::NATIVE_UINT16)
DEFINE_TYPED_READ_DATASET(float, H5::PredType::NATIVE_FLOAT)
DEFINE_TYPED_READ_DATASET(char *, H5::PredType::C_S1)

#define DEFINE_TYPED_CREATE_ARRAY(T, Pred)                                                         \
    template <>                                                                                    \
    void BufferedHDFArray<T>::TypedCreate(H5::DataSpace &fileSpace, H5::DSetCreatPropList &cparms) \
    {                                                                                              \
        T zero;                                                                                    \
        zero = 0;                                                                                  \
        cparms.setFillValue(Pred, &zero);                                                          \
        dataset = container->createDataSet(datasetName.c_str(), Pred, fileSpace, cparms);          \
    }

DEFINE_TYPED_CREATE_ARRAY(int, H5::PredType::NATIVE_INT)
DEFINE_TYPED_CREATE_ARRAY(char, H5::PredType::NATIVE_INT8)
DEFINE_TYPED_CREATE_ARRAY(char *, H5::StrType(0, H5T_VARIABLE))
DEFINE_TYPED_CREATE_ARRAY(unsigned char, H5::PredType::NATIVE_UINT8)
DEFINE_TYPED_CREATE_ARRAY(unsigned int, H5::PredType::NATIVE_UINT)
DEFINE_TYPED_CREATE_ARRAY(float, H5::PredType::NATIVE_FLOAT)
DEFINE_TYPED_CREATE_ARRAY(uint16_t, H5::PredType::NATIVE_UINT16)

template <>
void BufferedHDFArray<std::string>::TypedCreate(H5::DataSpace &space, H5::DSetCreatPropList &cparms)
{
    H5::StrType varStrType(0, H5T_VARIABLE);
    dataset = container->createDataSet(datasetName.c_str(), varStrType, space, cparms);
}

#define DEFINE_TYPED_WRITE_ARRAY(T, Pred)                                                 \
    template <>                                                                           \
    void BufferedHDFArray<T>::TypedWrite(const T *data, const H5::DataSpace &memorySpace, \
                                         const H5::DataSpace &fileSpace)                  \
    {                                                                                     \
        dataset.write(data, Pred, memorySpace, fileSpace);                                \
    }

DEFINE_TYPED_WRITE_ARRAY(int, H5::PredType::NATIVE_INT)
DEFINE_TYPED_WRITE_ARRAY(unsigned int, H5::PredType::NATIVE_UINT)
DEFINE_TYPED_WRITE_ARRAY(unsigned char, H5::PredType::NATIVE_UINT8)
DEFINE_TYPED_WRITE_ARRAY(char, H5::PredType::NATIVE_INT8)
DEFINE_TYPED_WRITE_ARRAY(float, H5::PredType::NATIVE_FLOAT)
DEFINE_TYPED_WRITE_ARRAY(uint16_t, H5::PredType::NATIVE_UINT16)
DEFINE_TYPED_WRITE_ARRAY(char *, H5::StrType(0, H5T_VARIABLE))
DEFINE_TYPED_WRITE_ARRAY(std::string, H5::StrType(0, H5T_VARIABLE))