summaryrefslogtreecommitdiff
path: root/include/fixed_point.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/fixed_point.h')
-rw-r--r--include/fixed_point.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/include/fixed_point.h b/include/fixed_point.h
new file mode 100644
index 0000000..254bc91
--- /dev/null
+++ b/include/fixed_point.h
@@ -0,0 +1,20 @@
+#ifndef FIXED_POINT_H
+#define FIXED_POINT_H
+
+#include <cstdint>
+#include <type_traits>
+
+struct fp_t {
+ std::int32_t raw;
+
+ static constexpr fp_t from_raw(std::int32_t r) { return fp_t{r}; }
+ static constexpr fp_t from_int(std::int32_t i) { return fp_t{i << 16}; }
+
+ fp_t operator+(const fp_t& other) const;
+ bool operator==(const fp_t& other) const;
+};
+
+static_assert(std::is_trivially_copyable_v<fp_t>, "fp_t must remain trivially copyable for rollback determinism");
+static_assert(sizeof(fp_t) == 4, "fp_t must stay 4 bytes — check for unexpected padding");
+
+#endif // !FIXED_POINT_H