Skip to content

Commit 08f0018

Browse files
committed
Added Infinity; Level constants
1 parent 06e5f37 commit 08f0018

File tree

8 files changed

+169
-3
lines changed

8 files changed

+169
-3
lines changed

include/Math/Number.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
///
88
#pragma once
99
#include "../../source/Numbers/TNumber.inl"
10+
#include "../../source/Numbers/Infinity.hpp"

source/Numbers/Infinity.hpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
///
2+
/// Langulus::Math
3+
/// Copyright (c) 2014 Dimo Markov <[email protected]>
4+
/// Part of the Langulus framework, see https://langulus.com
5+
///
6+
/// SPDX-License-Identifier: GPL-3.0-or-later
7+
///
8+
#pragma once
9+
#include "TNumber.hpp"
10+
11+
12+
namespace Langulus::Math
13+
{
14+
15+
///
16+
/// Infinity representation for use in descriptors
17+
///
18+
struct Infinity {
19+
int mOrder;
20+
};
21+
22+
} // namespace Langulus::Math
23+
24+
LANGULUS_DEFINE_CONSTANT(Infinity, ::Langulus::Math::Infinity {1},
25+
"Infinity", "First order of infinity")

source/Numbers/Level.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,4 @@ namespace Langulus::Math
122122
constexpr Offset GetOffsetInt() const noexcept;
123123
};
124124

125-
} // namespace Langulus::Math
125+
} // namespace Langulus::Math

source/Numbers/Level.inl

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,84 @@ namespace Langulus::Math
9494
}
9595

9696
} // namespace Langulus::Math
97+
98+
99+
LANGULUS_DEFINE_CONSTANT(LevelHuman,
100+
::Langulus::Math::Level {::Langulus::Math::Level::Human},
101+
"Level::Human", "A canonical human level"
102+
)
103+
104+
LANGULUS_DEFINE_CONSTANT(LevelAsteroid,
105+
::Langulus::Math::Level {::Langulus::Math::Level::Asteroid},
106+
"Level::Asteroid", "A canonical asteroid level"
107+
)
108+
109+
LANGULUS_DEFINE_CONSTANT(LevelPlanet,
110+
::Langulus::Math::Level {::Langulus::Math::Level::Planet},
111+
"Level::Planet", "A canonical planet level"
112+
)
113+
114+
LANGULUS_DEFINE_CONSTANT(LevelSystem,
115+
::Langulus::Math::Level {::Langulus::Math::Level::System},
116+
"Level::System", "A canonical system level"
117+
)
118+
119+
LANGULUS_DEFINE_CONSTANT(LevelGalaxy,
120+
::Langulus::Math::Level {::Langulus::Math::Level::Galaxy},
121+
"Level::Galaxy", "A canonical galaxy level"
122+
)
123+
124+
LANGULUS_DEFINE_CONSTANT(LevelUniverse,
125+
::Langulus::Math::Level {::Langulus::Math::Level::Universe},
126+
"Level::Universe", "A canonical universe level"
127+
)
128+
129+
LANGULUS_DEFINE_CONSTANT(LevelCell,
130+
::Langulus::Math::Level {::Langulus::Math::Level::Cell},
131+
"Level::Cell", "A canonical cell level"
132+
)
133+
134+
LANGULUS_DEFINE_CONSTANT(LevelVirus,
135+
::Langulus::Math::Level {::Langulus::Math::Level::Virus},
136+
"Level::Virus", "A canonical virus level"
137+
)
138+
139+
LANGULUS_DEFINE_CONSTANT(LevelAtom,
140+
::Langulus::Math::Level {::Langulus::Math::Level::Atom},
141+
"Level::Atom", "A canonical atom level"
142+
)
143+
144+
LANGULUS_DEFINE_CONSTANT(LevelNeutron,
145+
::Langulus::Math::Level {::Langulus::Math::Level::Neutron},
146+
"Level::Neutron", "A canonical neutron level"
147+
)
148+
149+
LANGULUS_DEFINE_CONSTANT(LevelQuark,
150+
::Langulus::Math::Level {::Langulus::Math::Level::Quark},
151+
"Level::Quark", "A canonical quark level"
152+
)
153+
154+
LANGULUS_DEFINE_CONSTANT(LevelNeutrino,
155+
::Langulus::Math::Level {::Langulus::Math::Level::Neutrino},
156+
"Level::Neutrino", "A canonical neutrino level"
157+
)
158+
159+
LANGULUS_DEFINE_CONSTANT(LevelPlanck,
160+
::Langulus::Math::Level {::Langulus::Math::Level::Planck},
161+
"Level::Planck", "A canonical Planck level"
162+
)
163+
164+
LANGULUS_DEFINE_CONSTANT(LevelMax,
165+
::Langulus::Math::Level {::Langulus::Math::Level::Max},
166+
"Level::Max", "A canonical max level"
167+
)
168+
169+
LANGULUS_DEFINE_CONSTANT(LevelMin,
170+
::Langulus::Math::Level {::Langulus::Math::Level::Min},
171+
"Level::Min", "A canonical min level"
172+
)
173+
174+
LANGULUS_DEFINE_CONSTANT(LevelDefault,
175+
::Langulus::Math::Level {::Langulus::Math::Level::Default},
176+
"Level::Default", "The default level"
177+
)

source/Numbers/TNumber.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
///
2+
/// Langulus::Math
3+
/// Copyright (c) 2014 Dimo Markov <[email protected]>
4+
/// Part of the Langulus framework, see https://langulus.com
5+
///
6+
/// SPDX-License-Identifier: GPL-3.0-or-later
7+
///
8+
#include "TAngle.hpp"
9+
#include "Level.inl"
10+
#include "Infinity.hpp"
11+
12+
13+
namespace Langulus::Math
14+
{
15+
16+
/// Register number types
17+
void RegisterNumbers() {
18+
RegisterAngles();
19+
20+
(void) MetaOf<Constants::Infinity>();
21+
22+
(void) MetaOf<Constants::LevelHuman>();
23+
(void) MetaOf<Constants::LevelAsteroid>();
24+
(void) MetaOf<Constants::LevelPlanet>();
25+
(void) MetaOf<Constants::LevelSystem>();
26+
(void) MetaOf<Constants::LevelGalaxy>();
27+
(void) MetaOf<Constants::LevelUniverse>();
28+
(void) MetaOf<Constants::LevelCell>();
29+
(void) MetaOf<Constants::LevelVirus>();
30+
(void) MetaOf<Constants::LevelAtom>();
31+
(void) MetaOf<Constants::LevelNeutron>();
32+
(void) MetaOf<Constants::LevelQuark>();
33+
(void) MetaOf<Constants::LevelNeutrino>();
34+
(void) MetaOf<Constants::LevelPlanck>();
35+
(void) MetaOf<Constants::LevelMax>();
36+
(void) MetaOf<Constants::LevelMin>();
37+
(void) MetaOf<Constants::LevelDefault>();
38+
}
39+
40+
} // namespace Langulus::Math

source/Numbers/TNumber.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
namespace Langulus::Math
1313
{
1414

15+
LANGULUS_API(MATH) extern void RegisterNumbers();
16+
17+
1518
///
1619
/// Templated number
1720
///
@@ -44,7 +47,10 @@ namespace Langulus::Math
4447
, A::Real
4548
, Conditional<CT::Signed<T>
4649
, A::SignedInteger
47-
, A::UnsignedInteger>>);
50+
, A::UnsignedInteger
51+
>
52+
>
53+
);
4854
LANGULUS_CONVERTS_TO(Flow::Code);
4955

5056
static constexpr Count MemberCount = 1;

source/Vectors/TVector.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ namespace Langulus::Math
2121
}
2222
};
2323

24-
2524
/// Register all commonly used vector types and constants, so they can be
2625
/// instantiated from scripts
2726
void RegisterVectors() {

source/Verbs/Add.inl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#pragma once
99
#include "Add.hpp"
1010
#include "Arithmetic.inl"
11+
#include "../Numbers/Infinity.hpp"
1112

1213
#if 0
1314
#define VERBOSE_ADD(...) Logger::Verbose(__VA_ARGS__)
@@ -180,6 +181,19 @@ namespace Langulus::Verbs
180181
return true;
181182
}
182183
}
184+
else if (verb.CastsTo<Math::Infinity>()) {
185+
if (verb.GetMass() < 0) {
186+
// Negate infinity
187+
verb.ForEach([&](Math::Infinity i) {
188+
verb << Math::Infinity {-i.mOrder};
189+
});
190+
}
191+
else {
192+
// Don't do anything
193+
verb << verb.GetArgument();
194+
return true;
195+
}
196+
}
183197

184198
return false;
185199
}

0 commit comments

Comments
 (0)