Sen API
Sen Libraries
Loading...
Searching...
No Matches
unit_registry.h
Go to the documentation of this file.
1// === unit_registry.h =================================================================================================
2// Sen Infrastructure
3// Released under the Apache License v2.0 (SPDX-License-Identifier Apache-2.0).
4// See the LICENSE.txt file for more information.
5// © Airbus SAS, Airbus Helicopters, and Airbus Defence and Space SAU/GmbH/SAS.
6// =====================================================================================================================
7
8#ifndef SEN_CORE_META_UNIT_REGISTRY_H
9#define SEN_CORE_META_UNIT_REGISTRY_H
10
11// sen
12#include "sen/core/base/class_helpers.h" // for SEN_NOCOPY_NOMOVE
14#include "sen/core/meta/unit.h" // for Unit, UnitCategory
15
16// std
17#include <memory>
18#include <optional>
19#include <string>
20#include <string_view> // for string_view
21#include <vector> // for vector
22
23namespace sen
24{
25
28
30class UnitRegistry final
31{
32 SEN_NOCOPY_NOMOVE(UnitRegistry)
33
34public:
35 using UnitList = std::vector<Unit*>;
36 using UnitStorage = std::vector<std::unique_ptr<Unit>>;
38
39public:
40 static const UnitRegistry& get();
41
42public:
45 [[nodiscard]] UnitRange getUnits() const noexcept;
46
49 [[nodiscard]] UnitList getUnitsByCategory(UnitCategory category) const;
50
54 [[nodiscard]] std::optional<const Unit*> searchUnitByName(std::string_view name) const;
55
59 [[nodiscard]] std::optional<const Unit*> searchUnitByAbbreviation(std::string_view abbrev) const;
60
61private:
62 UnitRegistry();
63 ~UnitRegistry() = default;
64
65private:
66 struct DeprecatedAbbreviation
67 {
68 std::string abbreviation;
69 const Unit* targetUnit;
70 };
71
72 UnitStorage units_;
73 std::vector<DeprecatedAbbreviation> deprecatedAbbreviations_;
74};
75
77
78} // namespace sen
79
80#endif // SEN_CORE_META_UNIT_REGISTRY_H
Here we define a set of template meta-programming helpers to let the compiler take some decisions bas...
Represents the definition of a unit.
Definition unit.h:80
std::vector< Unit * > UnitList
Definition unit_registry.h:35
std::optional< const Unit * > searchUnitByAbbreviation(std::string_view abbrev) const
Tries to find a unit with a specific abbreviation (case sensitive). It also searches in the built-in ...
sen::util::IteratorRange< util::SmartPtrIteratorAdapter< UnitStorage::const_iterator > > UnitRange
Definition unit_registry.h:37
std::optional< const Unit * > searchUnitByName(std::string_view name) const
Tries to find a unit with a specific name (case sensitive) It also searches in the built-in units....
static const UnitRegistry & get()
UnitRange getUnits() const noexcept
The currently registered units. Does not include the builtin units.
UnitList getUnitsByCategory(UnitCategory category) const
Returns all registered units that belong to a given category. It also searches in the built-in units.
std::vector< std::unique_ptr< Unit > > UnitStorage
Definition unit_registry.h:36
UnitCategory
Type of measurement.
Definition unit.h:30
Definition assert.h:19
STL namespace.
Basic range abstraction to form a minimal range around two iterators.
Definition iterator_adapters.h:25