summaryrefslogtreecommitdiff
path: root/include/fixed_point.h
blob: 254bc91f298a742c92f6955df6d18df125f1b96b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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