ExaTN
space_register.hpp
1 
18 #ifndef EXATN_NUMERICS_SPACE_REGISTER_HPP_
19 #define EXATN_NUMERICS_SPACE_REGISTER_HPP_
20 
21 #include "tensor_basic.hpp"
22 #include "spaces.hpp"
23 
24 #include <memory>
25 #include <string>
26 #include <vector>
27 #include <unordered_map>
28 
29 namespace exatn{
30 
31 namespace numerics{
32 
34 public:
35 
36  SubspaceRegEntry(std::shared_ptr<Subspace> subspace);
37 
38  SubspaceRegEntry(const SubspaceRegEntry &) = default;
39  SubspaceRegEntry & operator=(const SubspaceRegEntry &) = default;
40  SubspaceRegEntry(SubspaceRegEntry &&) noexcept = default;
41  SubspaceRegEntry & operator=(SubspaceRegEntry &&) noexcept = default;
42  ~SubspaceRegEntry() = default;
43 
44  friend class SubspaceRegister;
45 
46 private:
47 
48  std::shared_ptr<Subspace> subspace_; //registered subspace of a vector space (owned by RegEntry)
49 };
50 
51 
53 public:
54 
55  SubspaceRegister() = default;
56 
57  SubspaceRegister(const SubspaceRegister &) = delete;
58  SubspaceRegister & operator=(const SubspaceRegister &) = delete;
59  SubspaceRegister(SubspaceRegister &&) noexcept = default;
60  SubspaceRegister & operator=(SubspaceRegister &&) noexcept = default;
61  ~SubspaceRegister() = default;
62 
67  SubspaceId registerSubspace(std::shared_ptr<Subspace> subspace);
68 
70  const Subspace * getSubspace(SubspaceId id) const;
72  const Subspace * getSubspace(const std::string & name) const;
73 
74 private:
75 
76  std::vector<SubspaceRegEntry> subspaces_; //registered subspaces of some vector space
77  std::unordered_map<std::string,SubspaceId> name2id_; //maps subspace names to their integer ids
78 };
79 
80 
82 public:
83 
84  SpaceRegEntry(std::shared_ptr<VectorSpace> space);
85 
86  SpaceRegEntry(const SpaceRegEntry &) = delete;
87  SpaceRegEntry & operator=(const SpaceRegEntry &) = delete;
88  SpaceRegEntry(SpaceRegEntry &&) noexcept = default;
89  SpaceRegEntry & operator=(SpaceRegEntry &&) noexcept = default;
90  ~SpaceRegEntry() = default;
91 
92  friend class SpaceRegister;
93 
94 private:
95 
96  std::shared_ptr<VectorSpace> space_; //registered vector space (owned by RegEntry)
97  SubspaceRegister subspaces_; //subspace register for this vector space
98 };
99 
100 
102 public:
103 
104  SpaceRegister();
105 
106  SpaceRegister(const SpaceRegister &) = delete;
107  SpaceRegister & operator=(const SpaceRegister &) = delete;
108  SpaceRegister(SpaceRegister &&) noexcept = default;
109  SpaceRegister & operator=(SpaceRegister &&) noexcept = default;
110  ~SpaceRegister() = default;
111 
117  SpaceId registerSpace(std::shared_ptr<VectorSpace> space);
118 
120  const VectorSpace * getSpace(SpaceId id) const;
122  const VectorSpace * getSpace(const std::string & name) const;
123 
128  SubspaceId registerSubspace(std::shared_ptr<Subspace> subspace);
129 
131  const Subspace * getSubspace(const std::string & space_name,
132  const std::string & subspace_name) const;
133 
134 private:
135 
136  std::vector<SpaceRegEntry> spaces_; //registered vector spaces
137  std::unordered_map<std::string,SpaceId> name2id_; //maps vector space names to their integer ids
138 };
139 
140 } //namespace numerics
141 
142 } //namespace exatn
143 
144 #endif //EXATN_NUMERICS_SPACE_REGISTER_HPP_
exatn::numerics::SubspaceRegEntry
Definition: space_register.hpp:33
exatn::numerics::SpaceRegister::registerSubspace
SubspaceId registerSubspace(std::shared_ptr< Subspace > subspace)
Definition: space_register.cpp:111
exatn::numerics::Subspace
Definition: spaces.hpp:84
exatn::numerics::SpaceRegEntry
Definition: space_register.hpp:81
exatn::numerics::SpaceRegister::getSubspace
const Subspace * getSubspace(const std::string &space_name, const std::string &subspace_name) const
Definition: space_register.cpp:121
exatn
Definition: DriverClient.hpp:10
exatn::numerics::SubspaceRegister::getSubspace
const Subspace * getSubspace(SubspaceId id) const
Definition: space_register.cpp:42
exatn::numerics::SpaceRegister
Definition: space_register.hpp:101
exatn::numerics::SubspaceRegister::registerSubspace
SubspaceId registerSubspace(std::shared_ptr< Subspace > subspace)
Definition: space_register.cpp:23
exatn::numerics::SpaceRegister::getSpace
const VectorSpace * getSpace(SpaceId id) const
Definition: space_register.cpp:94
exatn::numerics::SpaceRegister::registerSpace
SpaceId registerSpace(std::shared_ptr< VectorSpace > space)
Definition: space_register.cpp:75
exatn::numerics::VectorSpace
Definition: spaces.hpp:32
exatn::numerics::SubspaceRegister
Definition: space_register.hpp:52