JacksEscape/types.h

81 lines
1.6 KiB
C
Raw Normal View History

2024-02-29 11:22:52 +08:00
#pragma once
#include <stdint.h>
#include <stdbool.h>
2024-03-04 16:13:43 +08:00
#include <stdlib.h>
#include <string.h>
2024-02-29 11:22:52 +08:00
#ifdef __cplusplus
extern "C" {
#endif
2024-03-04 16:13:43 +08:00
static inline void *zero_malloc(size_t size) {
void *d = malloc(size);
memset(d, 0, size);
return d;
}
2024-02-29 11:22:52 +08:00
// A 2d vector of double.
typedef struct {
double x, y;
} Vec2;
static inline Vec2 vec2(double x, double y) {
2024-03-01 14:37:59 +08:00
Vec2 v = {.x = x, .y = y};
return v;
}
2024-02-29 11:22:52 +08:00
Vec2 vec2_Add(Vec2 x, Vec2 y);
2024-03-08 14:51:29 +08:00
Vec2 vec2_Minus(Vec2 pos, Vec2 neg);
2024-02-29 11:22:52 +08:00
Vec2 vec2_Scale(Vec2 v, double scale);
// A 2d box of double.
typedef struct {
Vec2 lefttop;
Vec2 size;
} Box2;
// Intersection test.
bool box2_Intersects(const Box2 x, const Box2 y, Box2 *out_intersection);
2024-03-07 09:55:36 +08:00
Vec2 box2_Center(Box2 box);
2024-03-08 14:51:29 +08:00
Box2 box2_FromCenter(Vec2 center, Vec2 size);
2024-03-07 09:55:36 +08:00
2024-02-29 16:51:46 +08:00
Box2 box2_Offset(Box2 box, Vec2 offset);
Box2 box2_OffsetX(Box2 box, double offsetX);
Box2 box2_OffsetY(Box2 box, double offsetY);
2024-02-29 11:22:52 +08:00
2024-03-01 14:37:59 +08:00
// Time duration.
2024-02-29 16:17:55 +08:00
typedef struct {
2024-03-01 15:06:58 +08:00
int64_t microseconds;
2024-02-29 16:17:55 +08:00
} Duration;
2024-03-04 15:05:21 +08:00
static inline double duration_Seconds(const Duration t) { return ((double)t.microseconds) / 1000000.0; }
2024-02-29 16:17:55 +08:00
static inline double duration_Milliseconds(const Duration t) { return ((double)t.microseconds) / 1000.0; }
2024-03-04 15:05:21 +08:00
// This function has a precision of at most 1ms under Windows. Sad
void duration_Sleep(const Duration t);
2024-02-29 16:17:55 +08:00
2024-03-04 15:05:21 +08:00
// A Time point, counted since a fixed point in the past.
2024-03-01 15:06:58 +08:00
typedef struct {
int64_t microseconds;
} TimePoint;
TimePoint time_Now();
Duration time_Since(TimePoint prev);
Duration time_Difference(TimePoint now, TimePoint prev);
2024-03-04 15:05:21 +08:00
Duration time_Reset(TimePoint *prev);
2024-03-01 14:37:59 +08:00
2024-03-01 17:09:24 +08:00
// 1e-6
extern const double EPS;
2024-02-29 16:17:55 +08:00
2024-02-29 11:22:52 +08:00
#ifdef __cplusplus
}
#endif