-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.cpp
More file actions
73 lines (64 loc) · 1.69 KB
/
utils.cpp
File metadata and controls
73 lines (64 loc) · 1.69 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "utils.hpp"
#include <assert.h>
bool operator == (SDL_Rect l, SDL_Rect r)
{
return l.x == r.x && l.y == r.y &&
l.w == r.w && l.h == r.h;
}
bool is_hitting_rect(SDL_Rect rect, Sint32 x, Sint32 y)
{
return x >= rect.x &&
x <= rect.x + rect.w &&
y >= rect.y &&
y <= rect.y + rect.h;
}
void print_rect(SDL_Rect r)
{
printf("r.x=%d, r.y=%d, r.w=%d, r.h=%d.\n",
r.x, r.y, r.w, r.h);
}
uint64_t to_uint64(struct timespec t)
{
return t.tv_sec * 1000000000 + t.tv_nsec;
}
struct timespec operator - (struct timespec l, struct timespec r)
{
assert(l.tv_sec > r.tv_sec ||
(l.tv_sec == r.tv_sec && l.tv_nsec > r.tv_nsec));
assert(l.tv_nsec < 1000000000);
assert(r.tv_nsec < 1000000000);
// printf("l.tv_sec=%" PRIu64 ", r.tv_sec=%" PRIu64 ".\n", l.tv_sec, r.tv_sec);
timespec result;
if(l.tv_sec == r.tv_sec)
{
result.tv_sec = 0;
result.tv_nsec = l.tv_nsec - r.tv_nsec;
}
else
{
assert(l.tv_sec > r.tv_sec);
result.tv_sec = l.tv_sec - r.tv_sec - 1;
result.tv_nsec = l.tv_nsec;
result.tv_nsec += (1000000000 - r.tv_nsec);
if(result.tv_nsec >= 1000000000)
{
result.tv_sec++;
result.tv_nsec -= 1000000000;
}
}
assert(result.tv_nsec <= 1000000000);
return result;
}
struct timespec operator + (struct timespec l, struct timespec r)
{
struct timespec result;
result.tv_sec = l.tv_sec+r.tv_sec;
result.tv_nsec = l.tv_nsec+r.tv_nsec;
if(result.tv_nsec >= 1000000000)
{
result.tv_sec++;
result.tv_nsec -= 1000000000;
}
assert(result.tv_nsec < 1000000000);
return result;
}