OGS
SpatialPosition.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <bitset>
7#include <optional>
8
9#include "MathLib/Point3d.h"
10
11namespace ParameterLib
12{
21{
22public:
23 SpatialPosition() = default;
24
25 SpatialPosition(std::optional<std::size_t> const& node_id,
26 std::optional<std::size_t> const& element_id,
27 std::optional<MathLib::Point3d> const& coordinates)
28 {
29 if (node_id)
30 {
31 _node_id = *node_id;
32 flags.set(node_bit);
33 }
34
35 if (element_id)
36 {
37 _element_id = *element_id;
38 flags.set(element_bit);
39 }
40 if (coordinates)
41 {
42 _coordinates = *coordinates;
44 }
45 }
46
47 std::optional<std::size_t> getNodeID() const
48 {
49 return flags[node_bit] ? std::make_optional(_node_id) : std::nullopt;
50 }
51 std::optional<std::size_t> getElementID() const
52 {
53 return flags[element_bit] ? std::make_optional(_element_id)
54 : std::nullopt;
55 }
56 std::optional<MathLib::Point3d> const getCoordinates() const
57 {
58 return flags[coordinates_bit] ? std::make_optional(_coordinates)
59 : std::nullopt;
60 }
61
62 void setNodeID(std::size_t node_id)
63 {
64 flags.reset();
65 flags.set(node_bit);
66 _node_id = node_id;
67 }
68
69 void setElementID(std::size_t element_id)
70 {
71 flags.reset();
72 flags.set(element_bit);
73 _element_id = element_id;
74 }
75
76 void setCoordinates(MathLib::Point3d const& coordinates)
77 {
78 _coordinates = coordinates;
80 }
81
82private:
83 std::size_t _node_id = 0;
84 std::size_t _element_id = 0;
86
87 std::bitset<3> flags{};
88 static constexpr std::size_t node_bit = 0;
89 static constexpr std::size_t element_bit = 1;
90 static constexpr std::size_t coordinates_bit = 2;
91};
92
93} // namespace ParameterLib
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