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_view> // for string_view
20#include <vector> // for vector
21
22namespace sen
23{
24
27
29class UnitRegistry final
30{
31 SEN_NOCOPY_NOMOVE(UnitRegistry)
32
33public:
34 using UnitList = std::vector<Unit*>;
35 using UnitStorage = std::vector<std::unique_ptr<Unit>>;
37
38public:
39 static const UnitRegistry& get();
40
41public:
44 [[nodiscard]] UnitRange getUnits() const noexcept;
45
48 [[nodiscard]] UnitList getUnitsByCategory(UnitCategory category) const;
49
53 [[nodiscard]] std::optional<const Unit*> searchUnitByName(std::string_view name) const;
54
58 [[nodiscard]] std::optional<const Unit*> searchUnitByAbbreviation(std::string_view abbrev) const;
59
60private:
61 UnitRegistry();
62 ~UnitRegistry() = default;
63
64private:
65 UnitStorage units_;
66};
67
69
70} // namespace sen
71
72#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:78
std::vector< Unit * > UnitList
Definition unit_registry.h:34
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:36
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:35
UnitCategory
Type of measurement.
Definition unit.h:30
Definition assert.h:17
STL namespace.
Basic range abstraction to form a minimal range around two iterators.
Definition iterator_adapters.h:25