OGS
SpatialPosition.h
Go to the documentation of this file.
1
11#pragma once
12
13#include <bitset>
14#include <optional>
15
16#include "MathLib/Point3d.h"
17
18namespace ParameterLib
19{
28{
29public:
30 SpatialPosition() = default;
31
32 SpatialPosition(std::optional<std::size_t> const& node_id,
33 std::optional<std::size_t> const& element_id,
34 std::optional<MathLib::Point3d> const& coordinates)
35 {
36 if (node_id)
37 {
38 _node_id = *node_id;
39 flags.set(node_bit);
40 }
41
42 if (element_id)
43 {
44 _element_id = *element_id;
45 flags.set(element_bit);
46 }
47 if (coordinates)
48 {
49 _coordinates = *coordinates;
51 }
52 }
53
54 std::optional<std::size_t> getNodeID() const
55 {
56 return flags[node_bit] ? std::make_optional(_node_id) : std::nullopt;
57 }
58 std::optional<std::size_t> getElementID() const
59 {
60 return flags[element_bit] ? std::make_optional(_element_id)
61 : std::nullopt;
62 }
63 std::optional<MathLib::Point3d> const getCoordinates() const
64 {
65 return flags[coordinates_bit] ? std::make_optional(_coordinates)
66 : std::nullopt;
67 }
68
69 void setNodeID(std::size_t node_id)
70 {
71 flags.reset();
72 flags.set(node_bit);
73 _node_id = node_id;
74 }
75
76 void setElementID(std::size_t element_id)
77 {
78 flags.reset();
79 flags.set(element_bit);
80 _element_id = element_id;
81 }
82
83 void setCoordinates(MathLib::Point3d const& coordinates)
84 {
85 _coordinates = coordinates;
87 }
88
89private:
90 std::size_t _node_id = 0;
91 std::size_t _element_id = 0;
93
94 std::bitset<3> flags{};
95 static constexpr std::size_t node_bit = 0;
96 static constexpr std::size_t element_bit = 1;
97 static constexpr std::size_t coordinates_bit = 2;
98};
99
100} // namespace ParameterLib
Definition of the Point3d class.
std::optional< std::size_t > getNodeID() const
SpatialPosition(std::optional< std::size_t > const &node_id, std::optional< std::size_t > const &element_id, std::optional< MathLib::Point3d > const &coordinates)
static constexpr std::size_t element_bit
void setNodeID(std::size_t node_id)
std::optional< std::size_t > getElementID() const
void setCoordinates(MathLib::Point3d const &coordinates)
static constexpr std::size_t coordinates_bit
void setElementID(std::size_t element_id)
static constexpr std::size_t node_bit
std::optional< MathLib::Point3d > const getCoordinates() const