NGen
Loading...
Searching...
No Matches
dimension.hpp
1#ifndef NGEN_IO_MDFRAME_DIMENSION_HPP
2#define NGEN_IO_MDFRAME_DIMENSION_HPP
3
4#include <boost/optional.hpp>
5#include <utility>
6
7namespace ngen {
8
9class mdframe;
10
11namespace detail {
12
19struct dimension {
20
21 struct hash
22 {
23 std::size_t operator()(const dimension& d) const noexcept
24 {
25 return std::hash<std::string>{}(d.m_name);
26 }
27
28 static std::size_t apply(const dimension& d) noexcept
29 {
30 return dimension::hash{}(d);
31 }
32 };
33
34 dimension() = default;
35
36 dimension(const dimension& d) = default;
37 dimension& operator=(const dimension& d) = default;
38
39 dimension(dimension&& d) = default;
40 dimension& operator=(dimension&& d) = default;
41
42 ~dimension() = default;
43
44 dimension(const std::string& name)
45 : m_name(name)
46 , m_size(static_cast<std::size_t>(-1)) {};
47
48 dimension(const std::string& name, std::size_t size)
49 : m_name(name)
50 , m_size(size) {};
51
52 bool operator==(const dimension& rhs) const
53 {
54 return this->m_name == rhs.m_name;
55 }
56
57 auto size() const noexcept { return this->m_size; }
58 const std::string& name() const noexcept { return this->m_name; }
59
60 private:
61 friend mdframe;
62
63 std::string m_name;
64
65 // we declare m_size as mutable so that
66 // its size can be updated during construction
67 mutable std::size_t m_size;
68};
69
70} // namespace detail
71} // namespace ngen
72
73#endif // NGEN_IO_MDFRAME_DIMENSION_HPP
Definition DomainLayer.hpp:9
Definition dimension.hpp:22
static std::size_t apply(const dimension &d) noexcept
Definition dimension.hpp:28
std::size_t operator()(const dimension &d) const noexcept
Definition dimension.hpp:23
Dimension Key.
Definition dimension.hpp:19
dimension(const std::string &name, std::size_t size)
Definition dimension.hpp:48
std::size_t m_size
Definition dimension.hpp:67
dimension(const dimension &d)=default
friend mdframe
Definition dimension.hpp:61
bool operator==(const dimension &rhs) const
Definition dimension.hpp:52
const std::string & name() const noexcept
Definition dimension.hpp:58
auto size() const noexcept
Definition dimension.hpp:57
dimension & operator=(dimension &&d)=default
dimension(dimension &&d)=default
dimension(const std::string &name)
Definition dimension.hpp:44
dimension & operator=(const dimension &d)=default
std::string m_name
Definition dimension.hpp:63