Program Listing for File HDF5Utils.hpp

↰ Return to documentation for file (src/utils/HDF5Utils.hpp)

#ifndef HDF5UTILS_HPP
#define HDF5UTILS_HPP

// Suppress clang-tidy warnings caused by just including hdf5.h, instead of
// the individual HDF5 headers, since this is the paradigm that HDF5 wants
// NOLINTBEGIN(misc-include-cleaner)
#include "hdf5.h"
#include <array>
#include <cstddef>
#include <optional>
#include <string>
#include <utility>
#include <vector>

namespace utils
{
    auto readScalarAttrIfPresent(hid_t obj, const std::string& name) -> std::optional<double>;

    auto readRequiredScalarAttr(hid_t obj, const std::string& name,
        const std::string& context) -> double;

    auto readDataset1D(hid_t grp, const std::string& name,
        const std::string& context) -> std::vector<double>;

    auto datasetRank(hid_t grp, const std::string& name, const std::string& context) -> int;

    auto dataset2DShape(hid_t grp, const std::string& name,
        const std::string& context) -> std::pair<size_t, size_t>;

    auto readDataset2D(hid_t grp, const std::string& name, const std::string& context)
        -> std::pair<std::vector<double>, std::pair<size_t, size_t>>;

    auto readStringDataset1D(hid_t grp, const std::string& name,
        const std::string& context) -> std::vector<std::string>;

    auto readDataset3D(hid_t grp, const std::string& name, const std::string& context)
        -> std::pair<std::vector<double>, std::array<hsize_t, 3>>;

    auto readFieldNames(hid_t grp, const std::string& context) -> std::vector<std::string>;

    auto listGroupDatasetNames(hid_t grp) -> std::vector<std::string>;

    auto vlenStrType() -> hid_t;

    auto fixedStrType(size_t size) -> hid_t;

    void writeStringAttr(hid_t loc, const std::string& name, const std::string& value);

    void writeULongAttr(hid_t loc, const std::string& name, unsigned long value);

    void writeBoolAttr(hid_t loc, const std::string& name, bool value);

    auto readULongAttr(hid_t loc, const std::string& name) -> unsigned long;

    void overwriteULongAttr(hid_t loc, const std::string& name, unsigned long value);

    void writeStringDataset(hid_t loc, const std::string& name, const std::string& value);

    void writeStringArrayAttr(hid_t loc, const std::string& name,
        const std::vector<std::string>& values);

    auto createExtensible1dDataset(hid_t loc, const std::string& name, hid_t type) -> hid_t;

    auto createExtensible2dDataset(hid_t loc, const std::string& name, hid_t type,
        hsize_t nCols) -> hid_t;

    void writeFixed1dDataset(hid_t loc, const std::string& name, hid_t type,
        const void* data, hsize_t len, const std::string& units);

    void appendToDataset(hid_t loc, const std::string& name, hid_t memType, const void* value);

    void appendRowToDataset2d(hid_t loc, const std::string& name, hid_t memType,
        const void* rowData);

    auto childNameByIdx(hid_t loc, hsize_t idx) -> std::string;

    auto isExtensibleDataset(hid_t dset) -> bool;

    void appendDatasetContents(hid_t srcDset, hid_t dstDset);

    void appendFileContents(hid_t srcFile, hid_t dstFile);

} // namespace utils
// NOLINTEND(misc-include-cleaner)

#endif // HDF5UTILS_HPP