#include <cstdint>

constexpr uint32_t ticksPerSecond = 100000;

struct timemeasure {
    constexpr explicit timemeasure(uint64_t c) : ticks(c) { }
    uint64_t ticks;
    constexpr timemeasure() : ticks(0) { }
};

struct time : timemeasure {
    static volatile time now;

    constexpr time() : timemeasure() { }
    explicit time(uint64_t c) : timemeasure(c) { }

    // Needed for `x = time::now`
    explicit time(const volatile time &t) : timemeasure(t.ticks) { }
    time& operator=(volatile time t) { ticks = t.ticks; return *this; }
};

inline time foo(const time& t) { return time(t.ticks + 1); }
