summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/ParseUtil.inl.h
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2024-03-26 01:45:33 +0100
committerAki <please@ignore.pl>2024-03-26 01:49:16 +0100
commitea4c0557d0b7c2317e03d3d3aaefd6063c99f091 (patch)
treedad4634faf3c17f3642d736f62350df88c117a59 /StarsEx/ParseUtil.inl.h
parent38332f77dc1e7bb03776631101eff6e8ad8bcaef (diff)
downloadstarshatter-ea4c0557d0b7c2317e03d3d3aaefd6063c99f091.zip
starshatter-ea4c0557d0b7c2317e03d3d3aaefd6063c99f091.tar.gz
starshatter-ea4c0557d0b7c2317e03d3d3aaefd6063c99f091.tar.bz2
DWORD replaced with std::uint32_t in non-Win32-related parts
With the exception of some netcode. This brings some important questions and solidifies me in pursuing better abstract over definitions. It might also be a good idea to have distinct aliases or compound types for time and (net) identifiers.
Diffstat (limited to 'StarsEx/ParseUtil.inl.h')
-rw-r--r--StarsEx/ParseUtil.inl.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/StarsEx/ParseUtil.inl.h b/StarsEx/ParseUtil.inl.h
new file mode 100644
index 0000000..f59489b
--- /dev/null
+++ b/StarsEx/ParseUtil.inl.h
@@ -0,0 +1,30 @@
+/* Starshatter: The Open Source Project
+ Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
+ Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
+ Copyright (c) 1997-2006, Destroyer Studios LLC.
+*/
+
+#include <type_traits>
+
+#include <starshatter/definition.h>
+#include <Utils.h>
+
+
+template <typename Number>
+bool
+GetDefNumber(Number& dst, TermDef* def, const char* file)
+{
+ static_assert(std::is_convertible<long double, Number>::value);
+ if (!def || !def->term()) {
+ Print("WARNING: missing NUMBER TermDef in '%s'\n", file);
+ return false;
+ }
+ TermNumber* tr = def->term()->isNumber();
+ if (tr) {
+ dst = static_cast<Number>(tr->value());
+ return true;
+ }
+ else
+ Print("WARNING: invalid NUMBER %s in '%s'\n", def->name()->value().data(), file);
+ return false;
+}