h5cpp 0.7
A modern C++ wrapper for the HDF5 C library
Loading...
Searching...
No Matches
hyperslab.hpp
Go to the documentation of this file.
1//
2// (c) Copyright 2017 DESY,ESS
3//
4// This file is part of h5cpp.
5//
6// This library is free software; you can redistribute it and/or modify it
7// under the terms of the GNU Lesser General Public License as published
8// by the Free Software Foundation; either version 2.1 of the License, or
9// (at your option) any later version.
10//
11// This library is distributed in the hope that it will be useful, but
12// WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY
13// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14// License for more details.
15//
16// You should have received a copy of the GNU Lesser General Public License
17// along with this library; if not, write to the
18// Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor
19// Boston, MA 02110-1301 USA
20// ===========================================================================
21//
22// Authors:
23// Eugen Wintersberger <eugen.wintersberger@desy.de>
24// Martin Shetty <martin.shetty@esss.se>
25// Created on: Aug 25, 2017
26//
27#pragma once
28
30#include <h5cpp/core/types.hpp>
32#include <memory>
33#include <list>
34#include <sstream>
35
36namespace hdf5 {
37namespace dataspace {
38
53 public:
67
71 ~Hyperslab() override;
72
78 Hyperslab(const Hyperslab &) = default;
79
92 Hyperslab(size_t rank);
93
105 Hyperslab(const Dimensions &offset,
106 const Dimensions &block,
107 const Dimensions &count,
108 const Dimensions &stride);
109
119 Hyperslab(const Dimensions &offset,
120 const Dimensions &block);
121
131 //1
132 Hyperslab(const Dimensions &offset,
133 const Dimensions &count,
134 const Dimensions &stride);
135
140 size_t rank() const noexcept;
141
153 void offset(size_t index, size_t value);
154
164 void offset(const Dimensions &values);
165
171 const Dimensions &offset() const;
172
180 void stride(size_t index, size_t value);
181
188 void stride(const Dimensions &values);
189
195 const Dimensions &stride() const;
196
204 void count(size_t index, size_t value);
205
211 void count(const Dimensions &values);
212
222 const Dimensions &count() const;
223
230 //1
231 void block(size_t index, size_t value);
232
240 void block(const Dimensions &values);
241
249 const Dimensions &block() const;
250
251 virtual void apply(const Dataspace &space,
252 SelectionOperation ops) const override;
253
264 virtual Dimensions dimensions() const override;
265
275 virtual size_t size() const override;
276
284 virtual SelectionType type() const override;
285
286 private:
287 inline void check_dimension_index(size_t index, const std::string &what) const {
288 if (index >= rank()) {
289 std::stringstream ss;
290 ss << "Cannot set " << what << " value at dimension " << index << " for a Hyperslab"
291 << " of rank " << rank() << "!";
292 throw std::runtime_error(ss.str());
293 }
294 }
295
296 inline void check_container_size(const Dimensions &container, const std::string &what) const {
297 if (container.size() != rank()) {
298 std::stringstream ss;
299 ss << "Cannot assign " << container.size() << " " << what << " values to a Hyperslab"
300 << " of rank " << rank() << "!";
301 throw std::runtime_error(ss.str());
302 }
303 }
304
305#ifdef _MSC_VER
306#pragma warning(push)
307#pragma warning(disable:4251)
308#endif
309 Dimensions start_;
310 Dimensions stride_;
311 Dimensions count_;
312 Dimensions block_;
313#ifdef _MSC_VER
314#pragma warning(pop)
315#endif
316
317};
318
319DLL_EXPORT Dataspace operator||(const Dataspace &space, const Hyperslab &selection);
320
322
324
325} // namespace dataspace
326} // namespace hdf5
dataspace base class
Definition dataspace.hpp:41
hyperslab selection class
Definition hyperslab.hpp:52
Hyperslab(const Dimensions &offset, const Dimensions &count, const Dimensions &stride)
constructor
size_t rank() const noexcept
get rank
Hyperslab(const Dimensions &offset, const Dimensions &block, const Dimensions &count, const Dimensions &stride)
constructor
~Hyperslab() override
destructor
Hyperslab(const Hyperslab &)=default
copy constructor
Hyperslab()
default constructor
Hyperslab(size_t rank)
constructor
Hyperslab(const Dimensions &offset, const Dimensions &block)
constructor
selection base class
Definition selection.hpp:42
Dataspace operator||(const Dataspace &space, const Hyperslab &selection)
std::list< OperationWithSelection > SelectionList
Definition selection.hpp:130
SelectionOperation
selection operator
Definition type.hpp:95
SelectionList operator|(const Hyperslab &a, const Hyperslab &b)
SelectionType
selection type
Definition type.hpp:71
top-level namespace of the entire library
Definition attribute.hpp:45
std::vector< hsize_t > Dimensions
Definition types.hpp:32
#define DLL_EXPORT
Definition windows.hpp:29