diff options
| author | Andre Weissflog <floooh@gmail.com> | 2018-10-18 11:31:43 +0200 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2018-10-18 11:31:43 +0200 |
| commit | 6f76ff0389d03604b3b72d1b494e2181eb5d039f (patch) | |
| tree | 4b48be6e2666c9a8ca22973279726b9f7b9974ed | |
| parent | 55ab9f768aadabdc9d8389793b313fb5e23d9fc0 (diff) | |
sokol_time.h: SOKOL_API_DECL and SOKOL_API_IMPL macros
| -rw-r--r-- | sokol_time.h | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/sokol_time.h b/sokol_time.h index ef1b0692..735ae4ac 100644 --- a/sokol_time.h +++ b/sokol_time.h @@ -9,6 +9,8 @@ Optionally provide the following defines with your own implementations: SOKOL_ASSERT(c) - your own assert macro (default: assert(c)) + SOKOL_API_DECL - public function declaration prefix (default: extern) + SOKOL_API_IMPL - public function implementation prefix (default: -) void stm_setup(); Call once before any other functions to initialize sokol_time @@ -79,19 +81,23 @@ */ #include <stdint.h> +#ifndef SOKOL_API_DECL + #define SOKOL_API_DECL extern +#endif + #ifdef __cplusplus extern "C" { #endif -extern void stm_setup(void); -extern uint64_t stm_now(void); -extern uint64_t stm_diff(uint64_t new_ticks, uint64_t old_ticks); -extern uint64_t stm_since(uint64_t start_ticks); -extern uint64_t stm_laptime(uint64_t* last_time); -extern double stm_sec(uint64_t ticks); -extern double stm_ms(uint64_t ticks); -extern double stm_us(uint64_t ticks); -extern double stm_ns(uint64_t ticks); +SOKOL_API_DECL void stm_setup(void); +SOKOL_API_DECL uint64_t stm_now(void); +SOKOL_API_DECL uint64_t stm_diff(uint64_t new_ticks, uint64_t old_ticks); +SOKOL_API_DECL uint64_t stm_since(uint64_t start_ticks); +SOKOL_API_DECL uint64_t stm_laptime(uint64_t* last_time); +SOKOL_API_DECL double stm_sec(uint64_t ticks); +SOKOL_API_DECL double stm_ms(uint64_t ticks); +SOKOL_API_DECL double stm_us(uint64_t ticks); +SOKOL_API_DECL double stm_ns(uint64_t ticks); #ifdef __cplusplus } /* extern "C" */ @@ -99,10 +105,21 @@ extern double stm_ns(uint64_t ticks); /*-- IMPLEMENTATION ----------------------------------------------------------*/ #ifdef SOKOL_IMPL + +#ifndef SOKOL_API_IMPL + #define SOKOL_API_IMPL +#endif #ifndef SOKOL_ASSERT #include <assert.h> #define SOKOL_ASSERT(c) assert(c) #endif +#ifndef _SOKOL_PRIVATE + #if defined(__GNUC__) + #define _SOKOL_PRIVATE __attribute__((unused)) static + #else + #define _SOKOL_PRIVATE static + #endif +#endif static int _stm_initialized; #if defined(_WIN32) @@ -125,7 +142,7 @@ static uint64_t _stm_posix_start; see https://gist.github.com/jspohr/3dc4f00033d79ec5bdaf67bc46c813e3 */ #if defined(_WIN32) || (defined(__APPLE__) && defined(__MACH__)) -static int64_t int64_muldiv(int64_t value, int64_t numer, int64_t denom) { +_SOKOL_PRIVATE int64_t int64_muldiv(int64_t value, int64_t numer, int64_t denom) { int64_t q = value / denom; int64_t r = value % denom; return q * numer + r * numer / denom; @@ -133,7 +150,7 @@ static int64_t int64_muldiv(int64_t value, int64_t numer, int64_t denom) { #endif -void stm_setup(void) { +SOKOL_API_IMPL void stm_setup(void) { SOKOL_ASSERT(0 == _stm_initialized); _stm_initialized = 1; #if defined(_WIN32) @@ -149,7 +166,7 @@ void stm_setup(void) { #endif } -uint64_t stm_now(void) { +SOKOL_API_IMPL uint64_t stm_now(void) { SOKOL_ASSERT(_stm_initialized); uint64_t now; #if defined(_WIN32) @@ -167,7 +184,7 @@ uint64_t stm_now(void) { return now; } -uint64_t stm_diff(uint64_t new_ticks, uint64_t old_ticks) { +SOKOL_API_IMPL uint64_t stm_diff(uint64_t new_ticks, uint64_t old_ticks) { if (new_ticks > old_ticks) { return new_ticks - old_ticks; } @@ -177,11 +194,11 @@ uint64_t stm_diff(uint64_t new_ticks, uint64_t old_ticks) { } } -uint64_t stm_since(uint64_t start_ticks) { +SOKOL_API_IMPL uint64_t stm_since(uint64_t start_ticks) { return stm_diff(stm_now(), start_ticks); } -uint64_t stm_laptime(uint64_t* last_time) { +SOKOL_API_IMPL uint64_t stm_laptime(uint64_t* last_time) { SOKOL_ASSERT(last_time); uint64_t dt = 0; uint64_t now = stm_now(); @@ -192,19 +209,19 @@ uint64_t stm_laptime(uint64_t* last_time) { return dt; } -double stm_sec(uint64_t ticks) { +SOKOL_API_IMPL double stm_sec(uint64_t ticks) { return (double)ticks / 1000000000.0; } -double stm_ms(uint64_t ticks) { +SOKOL_API_IMPL double stm_ms(uint64_t ticks) { return (double)ticks / 1000000.0; } -double stm_us(uint64_t ticks) { +SOKOL_API_IMPL double stm_us(uint64_t ticks) { return (double)ticks / 1000.0; } -double stm_ns(uint64_t ticks) { +SOKOL_API_IMPL double stm_ns(uint64_t ticks) { return (double)ticks; } #endif /* SOKOL_IMPL */ |