acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
timespec.h
1// Created by camilo on 2022-11-27 20:44 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5#include <time.h>
6
7
8constexpr struct ::timespec& copy(struct ::timespec& timespec, const class ::time& time)
9{
10
11 timespec.tv_sec = (decltype(timespec.tv_sec))time.m_iSecond;
12 timespec.tv_nsec = (decltype(timespec.tv_nsec))time.m_iNanosecond;
13
14 return timespec;
15
16}
17
18
19constexpr struct ::timespec& operator +=(struct ::timespec& timespec1, const struct ::timespec& timespec2)
20{
21
22 add_second_nanosecond(timespec1.tv_sec, timespec1.tv_nsec, timespec2.tv_sec, timespec2.tv_nsec);
23
24 return timespec1;
25
26}
27
28
29constexpr struct ::timespec operator +(const struct ::timespec& timespec1, const struct ::timespec& timespec2)
30{
31
32 timespec timespec = timespec1;
33
34 add_second_nanosecond(timespec.tv_sec, timespec.tv_nsec, timespec2.tv_sec, timespec2.tv_nsec);
35
36 return timespec;
37
38}
39
40
41constexpr struct ::timespec& operator -=(struct ::timespec& timespec1, const struct ::timespec& timespec2)
42{
43
44 subtract_second_nanosecond(timespec1.tv_sec, timespec1.tv_nsec, timespec2.tv_sec, timespec2.tv_nsec);
45
46 return timespec1;
47
48}
49
50
51constexpr struct ::timespec operator -(const struct ::timespec& timespec1, const struct ::timespec& timespec2)
52{
53
54 timespec timespec = timespec1;
55
56 return timespec -= timespec2;
57
58}
59
60
61constexpr bool operator >(const struct ::timespec& timespec1, const struct ::timespec& timespec2)
62{
63
64 return timespec1.tv_sec > timespec2.tv_sec || (timespec1.tv_sec == timespec2.tv_sec && timespec1.tv_nsec > timespec2.tv_nsec);
65
66}
67
68
69constexpr timespec& normalize(timespec& timespec)
70{
71
72 timespec.tv_sec += timespec.tv_nsec / 1'000'000'000;
73
74 timespec.tv_nsec %= 1'000'000'000;
75
76 return timespec;
77
78}
79
80
81inline timespec& operator +=(timespec& timespec, const class time& time)
82{
83
84 return timespec += ::timespec
85 {
86 .tv_sec = (decltype(::timespec::tv_sec)) time.m_iSecond,
87 .tv_nsec = (decltype(::timespec::tv_nsec)) time.m_iNanosecond
88 };
89
90}
91
Definition aaa_time.h:13