aboutsummaryrefslogtreecommitdiff
path: root/src/atomic_time_point.cc
blob: 4aaef7ff8aa6c2a3145158385aebd696c20fb796 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "atomic_time_point.hh"

#include <cassert>

namespace low_latency {

AtomicTimePoint::AtomicTimePoint() {}

AtomicTimePoint::~AtomicTimePoint() {}

bool AtomicTimePoint::has_value() const {
    return this->count.load(std::memory_order_relaxed);
}

std::chrono::steady_clock::time_point AtomicTimePoint::get() const {
    const auto result = this->count.load(std::memory_order_relaxed);
    assert(result);
    using namespace std::chrono;
    return steady_clock::time_point{steady_clock::duration{result}};
}

void AtomicTimePoint::set(const std::chrono::steady_clock::time_point target) {
    this->count.store(target.time_since_epoch().count(),
                      std::memory_order_relaxed);
}

} // namespace low_latency