ExaTN
src
numerics
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
33
class
SubspaceRegEntry
{
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
52
class
SubspaceRegister
{
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
81
class
SpaceRegEntry
{
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
101
class
SpaceRegister
{
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
Generated by
1.8.16