summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2018-10-18 11:31:43 +0200
committerAndre Weissflog <floooh@gmail.com>2018-10-18 11:31:43 +0200
commit6f76ff0389d03604b3b72d1b494e2181eb5d039f (patch)
tree4b48be6e2666c9a8ca22973279726b9f7b9974ed
parent55ab9f768aadabdc9d8389793b313fb5e23d9fc0 (diff)
sokol_time.h: SOKOL_API_DECL and SOKOL_API_IMPL macros
-rw-r--r--sokol_time.h55
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 */