knowL: Knowledge Libraries
Loading...
Searching...
No Matches
knowl
src
knowCore
Unit.h
1
#pragma once
2
3
#include <QExplicitlySharedDataPointer>
4
5
#include "Forward.h"
6
7
namespace
knowCore
8
{
9
class
UnitRegistration;
15
class
Unit
16
{
17
friend
class
UnitRegistration
;
18
public
:
19
enum class
Prefix
20
{
21
Yotta, Zetta, Exa, Peta, Tera, Giga, Mega, Kilo, Hecto, Deca, Base, Deci, Centi, Milli, Micro, Nano, Pico, Femto, Atto, Zepto, Yocto
22
};
23
public
:
24
static
Unit
empty();
25
Unit
();
26
Unit
(
const
Unit
& _unit);
27
Unit
& operator=(
const
Unit
& _unit);
28
~Unit
();
32
QString
symbol
()
const
;
36
QString
name
()
const
;
40
knowCore::Uri
uri
()
const
;
44
Unit
base
()
const
;
48
QList<Unit>
derivedUnits
()
const
;
52
bool
operator==
(
const
Unit
& _unit)
const
;
56
bool
isValid
()
const
;
60
ReturnValue<Unit>
operator/
(
const
Unit
& _unit)
const
;
64
ReturnValue<Unit>
operator*
(
const
Unit
& _unit)
const
;
69
qreal
scale
()
const
;
70
public
:
74
static
QString
prefixSymbol
(Prefix p);
78
static
QString
prefixName
(Prefix p);
82
static
qreal
prefixScale
(Prefix p);
83
public
:
87
static
QList<Unit>
baseUnits
();
91
static
ReturnValue<Unit>
bySymbol
(
const
QString& _symbol);
95
static
ReturnValue<Unit>
byName
(
const
QString& _name);
99
static
ReturnValue<Unit>
byUri
(
const
knowCore::Uri
& _symbol);
100
private
:
101
struct
Private
;
102
QExplicitlySharedDataPointer<const Private> d;
103
Unit
(
const
QExplicitlySharedDataPointer<const Private>& _d);
104
};
110
class
UnitRegistration
111
{
112
public
:
113
using
PrefixToScale = std::function<double(Unit::Prefix)>;
114
using
PrefixesToScale = std::function<double(
const
QList<Unit::Prefix>
&)>;
115
using
PrefixToString = std::function<QString(Unit::Prefix)>;
116
public
:
117
UnitRegistration
(
const
QString& _symbol,
const
QString& _name,
const
QString& _uri,
const
QList<Unit::Prefix>
& _prefixes,
const
PrefixToScale& _scale,
const
PrefixToString& _to_uri);
118
UnitRegistration
(
const
QString& _symbol,
const
QString& _name,
const
QString& _uri,
const
QList
<
QList<Unit::Prefix>
>& _prefixes,
const
PrefixesToScale& _scale,
const
PrefixToString& _to_uri);
119
~UnitRegistration
();
120
};
121
122
}
123
124
#define __KNOWCORE_UNIT_ADD_PREFIX(X, I) knowCore::Unit::Prefix:: X,
125
126
#define KNOWCORE_UNIT_PREFIX_LIST(...) \
127
KNOWCORE_FOREACH(__KNOWCORE_UNIT_ADD_PREFIX, __VA_ARGS__)
128
142
#define KNOWCORE_DEFINE_UNIT(_CPP_SYMBOL_, _SYMBOL_, _NAME_, _URI_, _SCALE_F_, _TO_URI_F_, ...) \
143
knowCore::UnitRegistration __KNOWCORE_UNIQUE_STATIC_NAME(_CPP_SYMBOL_)(_SYMBOL_, _NAME_, _URI_, { KNOWCORE_UNIT_PREFIX_LIST(__VA_ARGS__) }, _SCALE_F_, _TO_URI_F_)
144
158
#define KNOWCORE_DEFINE_COMPOSITE_UNIT(_CPP_SYMBOL_, _SYMBOL_, _NAME_, _URI_, _SCALE_F_, _TO_URI_F_, ...) \
159
knowCore::UnitRegistration __KNOWCORE_UNIQUE_STATIC_NAME(_CPP_SYMBOL_)(_SYMBOL_, _NAME_, _URI_, {__VA_ARGS__}, _SCALE_F_, _TO_URI_F_)
160
161
162
#include "Formatter.h"
163
164
KNOWCORE_CORE_DECLARE_FORMATTER(
knowCore::Unit
)
165
{
166
return
forward(p.symbol(), ctx);
167
}
QList
Definition
Forward.h:12
knowCore::ReturnValue
Definition
ReturnValue.h:29
knowCore::UnitRegistration
Definition
Unit.h:111
knowCore::Unit
Definition
Unit.h:16
knowCore::Unit::prefixScale
static qreal prefixScale(Prefix p)
Definition
Unit.cpp:370
knowCore::Unit::baseUnits
static QList< Unit > baseUnits()
Definition
Unit.cpp:399
knowCore::Unit::bySymbol
static ReturnValue< Unit > bySymbol(const QString &_symbol)
Definition
Unit.cpp:404
knowCore::Unit::operator==
bool operator==(const Unit &_unit) const
Definition
Unit.cpp:274
knowCore::Unit::scale
qreal scale() const
Definition
Unit.cpp:269
knowCore::Unit::byUri
static ReturnValue< Unit > byUri(const knowCore::Uri &_symbol)
Definition
Unit.cpp:424
knowCore::Unit::operator*
ReturnValue< Unit > operator*(const Unit &_unit) const
Definition
Unit.cpp:289
knowCore::Unit::base
Unit base() const
Definition
Unit.cpp:259
knowCore::Unit::prefixName
static QString prefixName(Prefix p)
Definition
Unit.cpp:299
knowCore::Unit::byName
static ReturnValue< Unit > byName(const QString &_name)
Definition
Unit.cpp:414
knowCore::Unit::prefixSymbol
static QString prefixSymbol(Prefix p)
Definition
Unit.cpp:333
knowCore::Unit::name
QString name() const
Definition
Unit.cpp:249
knowCore::Unit::derivedUnits
QList< Unit > derivedUnits() const
Definition
Unit.cpp:264
knowCore::Unit::symbol
QString symbol() const
Definition
Unit.cpp:244
knowCore::Unit::isValid
bool isValid() const
Definition
Unit.cpp:279
knowCore::Unit::operator/
ReturnValue< Unit > operator/(const Unit &_unit) const
Definition
Unit.cpp:284
knowCore::Unit::uri
knowCore::Uri uri() const
Definition
Unit.cpp:254
knowCore::Uri
Definition
Uri.h:14
knowCore::Unit::Private
Definition
Unit.cpp:17
Generated by
1.12.0