HighFive 2.3.1
HighFive - Header-only C++ HDF5 interface
Loading...
Searching...
No Matches
H5Easy_vector.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c), 2017, Adrien Devresse <adrien.devresse@epfl.ch>
3 *
4 * Distributed under the Boost Software License, Version 1.0.
5 * (See accompanying file LICENSE_1_0.txt or copy at
6 * http://www.boost.org/LICENSE_1_0.txt)
7 *
8 */
9#ifndef H5EASY_BITS_VECTOR_HPP
10#define H5EASY_BITS_VECTOR_HPP
11
12#include "../H5Easy.hpp"
13#include "H5Easy_misc.hpp"
14#include "H5Easy_scalar.hpp"
15
16namespace H5Easy {
17
18namespace detail {
19
20template <class T>
21struct is_vector : std::false_type {};
22template <class T>
23struct is_vector<std::vector<T>> : std::true_type {};
24
25using HighFive::details::inspector;
26
27template <typename T>
28struct io_impl<T, typename std::enable_if<is_vector<T>::value>::type> {
29
30 inline static DataSet dump(File& file,
31 const std::string& path,
32 const T& data,
33 const DumpOptions& options) {
34 using value_type = typename inspector<T>::base_type;
35 auto dims = inspector<T>::getDimensions(data);
36 DataSet dataset = initDataset<value_type>(file, path, std::vector<size_t>(dims.begin(), dims.end()), options);
37 dataset.write(data);
38 if (options.flush()) {
39 file.flush();
40 }
41 return dataset;
42 }
43
44 inline static T load(const File& file, const std::string& path) {
45 DataSet dataset = file.getDataSet(path);
46 T data;
47 dataset.read(data);
48 return data;
49 }
50
51 inline static Attribute dumpAttribute(File& file,
52 const std::string& path,
53 const std::string& key,
54 const T& data,
55 const DumpOptions& options) {
56 using value_type = typename inspector<T>::base_type;
57 auto dims = inspector<T>::getDimensions(data);
58 std::vector<size_t> shape(dims.begin(), dims.end());
59 Attribute attribute = initAttribute<value_type>(file, path, key, shape, options);
60 attribute.write(data);
61 if (options.flush()) {
62 file.flush();
63 }
64 return attribute;
65 }
66
67 inline static T loadAttribute(const File& file,
68 const std::string& path,
69 const std::string& key) {
70 DataSet dataset = file.getDataSet(path);
71 Attribute attribute = dataset.getAttribute(key);
72 T data;
73 attribute.read(data);
74 return data;
75 }
76};
77
78} // namespace detail
79} // namespace H5Easy
80
81#endif // H5EASY_BITS_VECTOR_HPP
Read/dump DataSets or Attribute using a minimalistic syntax. To this end, the functions are templated...
Definition: H5Easy.hpp:60
DataSet dump(File &file, const std::string &path, const T &data, DumpMode mode=DumpMode::Create)
Write object (templated) to a (new) DataSet in an open HDF5 file.
Definition: H5Easy_public.hpp:115
T loadAttribute(const File &file, const std::string &path, const std::string &key)
Load a Attribute in an open HDF5 file to an object (templated).
Definition: H5Easy_public.hpp:185
Attribute dumpAttribute(File &file, const std::string &path, const std::string &key, const T &data, DumpMode mode=DumpMode::Create)
Write object (templated) to a (new) Attribute in an open HDF5 file.
Definition: H5Easy_public.hpp:167
T load(const File &file, const std::string &path, const std::vector< size_t > &idx)
Load entry {i, j, ...} from a DataSet in an open HDF5 file to a scalar.
Definition: H5Easy_public.hpp:157