Flecs v4.1
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
os_api.h
Go to the documentation of this file.
1
13#ifndef FLECS_OS_API_H
14#define FLECS_OS_API_H
15
24#if defined(ECS_TARGET_WINDOWS)
25#include <malloc.h>
26#elif defined(ECS_TARGET_FREEBSD)
27#include <stdlib.h>
28#else
29#include <alloca.h>
30#endif
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
37typedef struct ecs_time_t {
38 uint32_t sec;
39 uint32_t nanosec;
41
43extern int64_t ecs_os_api_malloc_count;
44extern int64_t ecs_os_api_realloc_count;
45extern int64_t ecs_os_api_calloc_count;
46extern int64_t ecs_os_api_free_count;
48/* Enabling this flag will add a header to each allocation that allows the code
49 * to track exactly how much memory has been allocated. Increases memory
50 * utilization by 16 bytes per allocation, and is not thread-safe. */
51// #define FLECS_TRACK_OS_ALLOC
52#ifdef FLECS_TRACK_OS_ALLOC
53FLECS_API extern ecs_size_t ecs_os_allocated_bytes;
54#endif
55
57typedef uintptr_t ecs_os_thread_t;
58typedef uintptr_t ecs_os_cond_t;
59typedef uintptr_t ecs_os_mutex_t;
60typedef uintptr_t ecs_os_dl_t;
61typedef uintptr_t ecs_os_sock_t;
64typedef uint64_t ecs_os_thread_id_t;
65
67typedef void (*ecs_os_proc_t)(void);
68
70typedef
71void (*ecs_os_api_init_t)(void);
72
74typedef
75void (*ecs_os_api_fini_t)(void);
76
78typedef
79void* (*ecs_os_api_malloc_t)(
80 ecs_size_t size);
81
83typedef
85 void *ptr);
86
88typedef
89void* (*ecs_os_api_realloc_t)(
90 void *ptr,
91 ecs_size_t size);
92
94typedef
95void* (*ecs_os_api_calloc_t)(
96 ecs_size_t size);
97
99typedef
100char* (*ecs_os_api_strdup_t)(
101 const char *str);
102
104typedef
105void* (*ecs_os_thread_callback_t)(
106 void*);
107
109typedef
112 void *param);
113
115typedef
116void* (*ecs_os_api_thread_join_t)(
117 ecs_os_thread_t thread);
118
120typedef
122
124typedef
127 void *param);
128
130typedef
131void* (*ecs_os_api_task_join_t)(
132 ecs_os_thread_t thread);
133
136typedef
138 int32_t *value);
139
141typedef
143 int64_t *value);
144
147typedef
149 void);
150
152typedef
154 ecs_os_mutex_t mutex);
155
157typedef
159 ecs_os_mutex_t mutex);
160
162typedef
164 ecs_os_mutex_t mutex);
165
168typedef
170 void);
171
173typedef
175 ecs_os_cond_t cond);
176
178typedef
180 ecs_os_cond_t cond);
181
183typedef
185 ecs_os_cond_t cond);
186
188typedef
190 ecs_os_cond_t cond,
191 ecs_os_mutex_t mutex);
192
194typedef
196 int32_t sec,
197 int32_t nanosec);
198
200typedef
202 bool enable);
203
205typedef
207 ecs_time_t *time_out);
208
210typedef
211uint64_t (*ecs_os_api_now_t)(void);
212
220typedef
222 int32_t level,
223 const char *file,
224 int32_t line,
225 const char *msg);
226
228typedef
230 void);
231
233typedef
235 const char *libname);
236
238typedef
240 ecs_os_dl_t lib,
241 const char *procname);
242
244typedef
246 ecs_os_dl_t lib);
247
249typedef
250char* (*ecs_os_api_module_to_path_t)(
251 const char *module_id);
252
260 const char *filename,
261 size_t line,
262 const char *name);
263
264/* Prefix members of the struct with 'ecs_' as some system headers may define
265 * macros for functions like "strdup", "log", or "_free". */
266
268typedef struct ecs_os_api_t {
269 /* API init and deinit */
273 /* Memory management */
279 /* Strings */
282 /* Threads */
287 /* Tasks */
291 /* Atomic increment and decrement */
297 /* Mutex */
303 /* Condition variable */
310 /* Time */
315 /* Logging */
324 /* Application termination */
327 /* Dynamic library loading */
332 /* Overridable function that translates from a logical module ID to a
333 * shared library filename. */
336 /* Overridable function that translates from a logical module ID to a
337 * path that contains module-specific resources or assets. */
340 /* Performance tracing */
344 int32_t log_level_;
345 int32_t log_indent_;
349 ecs_flags32_t flags_;
351 void *log_out_;
354
356FLECS_API
358
370FLECS_API
371void ecs_os_init(void);
372
376FLECS_API
377void ecs_os_fini(void);
378
385FLECS_API
387 ecs_os_api_t *os_api);
388
394FLECS_API
396
403FLECS_API
405
410/* Memory management */
411#ifndef ecs_os_malloc
412#define ecs_os_malloc(size) ecs_os_api.malloc_(size)
413#endif
414#ifndef ecs_os_free
415#define ecs_os_free(ptr) ecs_os_api.free_(ptr)
416#endif
417#ifndef ecs_os_realloc
418#define ecs_os_realloc(ptr, size) ecs_os_api.realloc_(ptr, size)
419#endif
420#ifndef ecs_os_calloc
421#define ecs_os_calloc(size) ecs_os_api.calloc_(size)
422#endif
423#if defined(ECS_TARGET_WINDOWS)
424#define ecs_os_alloca(size) _alloca((size_t)(size))
425#else
426#define ecs_os_alloca(size) alloca((size_t)(size))
427#endif
428
429#define ecs_os_malloc_t(T) ECS_CAST(T*, ecs_os_malloc(ECS_SIZEOF(T)))
430#define ecs_os_malloc_n(T, count) ECS_CAST(T*, ecs_os_malloc(ECS_SIZEOF(T) * (count)))
431#define ecs_os_calloc_t(T) ECS_CAST(T*, ecs_os_calloc(ECS_SIZEOF(T)))
432#define ecs_os_calloc_n(T, count) ECS_CAST(T*, ecs_os_calloc(ECS_SIZEOF(T) * (count)))
433
434#define ecs_os_realloc_t(ptr, T) ECS_CAST(T*, ecs_os_realloc(ptr, ECS_SIZEOF(T)))
435#define ecs_os_realloc_n(ptr, T, count) ECS_CAST(T*, ecs_os_realloc(ptr, ECS_SIZEOF(T) * (count)))
436#define ecs_os_alloca_t(T) ECS_CAST(T*, ecs_os_alloca(ECS_SIZEOF(T)))
437#define ecs_os_alloca_n(T, count) ECS_CAST(T*, ecs_os_alloca(ECS_SIZEOF(T) * (count)))
438
439/* Strings */
440#ifndef ecs_os_strdup
441#define ecs_os_strdup(str) ecs_os_api.strdup_(str)
442#endif
443
444#ifdef __cplusplus
445#define ecs_os_strlen(str) static_cast<ecs_size_t>(strlen(str))
446#define ecs_os_strncmp(str1, str2, num) strncmp(str1, str2, static_cast<size_t>(num))
447#define ecs_os_memcmp(ptr1, ptr2, num) memcmp(ptr1, ptr2, static_cast<size_t>(num))
448#define ecs_os_memcpy(ptr1, ptr2, num) memcpy(ptr1, ptr2, static_cast<size_t>(num))
449#define ecs_os_memset(ptr, value, num) memset(ptr, value, static_cast<size_t>(num))
450#define ecs_os_memmove(dst, src, size) memmove(dst, src, static_cast<size_t>(size))
451#else
452#define ecs_os_strlen(str) (ecs_size_t)strlen(str)
453#define ecs_os_strncmp(str1, str2, num) strncmp(str1, str2, (size_t)(num))
454#define ecs_os_memcmp(ptr1, ptr2, num) memcmp(ptr1, ptr2, (size_t)(num))
455#define ecs_os_memcpy(ptr1, ptr2, num) memcpy(ptr1, ptr2, (size_t)(num))
456#define ecs_os_memset(ptr, value, num) memset(ptr, value, (size_t)(num))
457#define ecs_os_memmove(dst, src, size) memmove(dst, src, (size_t)(size))
458#endif
459
460#define ecs_os_memcpy_t(ptr1, ptr2, T) ecs_os_memcpy(ptr1, ptr2, ECS_SIZEOF(T))
461#define ecs_os_memcpy_n(ptr1, ptr2, T, count) ecs_os_memcpy(ptr1, ptr2, ECS_SIZEOF(T) * (size_t)count)
462#define ecs_os_memcmp_t(ptr1, ptr2, T) ecs_os_memcmp(ptr1, ptr2, ECS_SIZEOF(T))
463
464#define ecs_os_memmove_t(ptr1, ptr2, T) ecs_os_memmove(ptr1, ptr2, ECS_SIZEOF(T))
465#define ecs_os_memmove_n(ptr1, ptr2, T, count) ecs_os_memmove(ptr1, ptr2, ECS_SIZEOF(T) * (size_t)count)
466
467#define ecs_os_strcmp(str1, str2) strcmp(str1, str2)
468#define ecs_os_memset_t(ptr, value, T) ecs_os_memset(ptr, value, ECS_SIZEOF(T))
469#define ecs_os_memset_n(ptr, value, T, count) ecs_os_memset(ptr, value, ECS_SIZEOF(T) * (size_t)count)
470#define ecs_os_zeromem(ptr) ecs_os_memset(ptr, 0, ECS_SIZEOF(*ptr))
471
472#define ecs_os_memdup_t(ptr, T) ecs_os_memdup(ptr, ECS_SIZEOF(T))
473#define ecs_os_memdup_n(ptr, T, count) ecs_os_memdup(ptr, ECS_SIZEOF(T) * count)
474
475#define ecs_offset(ptr, T, index)\
476 ECS_CAST(T*, ECS_OFFSET(ptr, ECS_SIZEOF(T) * index))
477
478#if !defined(ECS_TARGET_POSIX) && !defined(ECS_TARGET_MINGW)
479#define ecs_os_strcat(str1, str2) strcat_s(str1, INT_MAX, str2)
480#define ecs_os_snprintf(ptr, len, ...) sprintf_s(ptr, ECS_CAST(size_t, len), __VA_ARGS__)
481#define ecs_os_vsnprintf(ptr, len, fmt, args) vsnprintf(ptr, ECS_CAST(size_t, len), fmt, args)
482#define ecs_os_strcpy(str1, str2) strcpy_s(str1, INT_MAX, str2)
483#define ecs_os_strncpy(str1, str2, len) strncpy_s(str1, INT_MAX, str2, ECS_CAST(size_t, len))
484#else
485#define ecs_os_strcat(str1, str2) strcat(str1, str2)
486#define ecs_os_snprintf(ptr, len, ...) snprintf(ptr, ECS_CAST(size_t, len), __VA_ARGS__)
487#define ecs_os_vsnprintf(ptr, len, fmt, args) vsnprintf(ptr, ECS_CAST(size_t, len), fmt, args)
488#define ecs_os_strcpy(str1, str2) strcpy(str1, str2)
489#define ecs_os_strncpy(str1, str2, len) strncpy(str1, str2, ECS_CAST(size_t, len))
490#endif
491
492/* Files */
493#ifndef ECS_TARGET_POSIX
494#define ecs_os_fopen(result, file, mode) fopen_s(result, file, mode)
495#else
496#define ecs_os_fopen(result, file, mode) (*(result)) = fopen(file, mode)
497#endif
498
499/* Threads */
500#define ecs_os_thread_new(callback, param) ecs_os_api.thread_new_(callback, param)
501#define ecs_os_thread_join(thread) ecs_os_api.thread_join_(thread)
502#define ecs_os_thread_self() ecs_os_api.thread_self_()
503
504/* Tasks */
505#define ecs_os_task_new(callback, param) ecs_os_api.task_new_(callback, param)
506#define ecs_os_task_join(thread) ecs_os_api.task_join_(thread)
507
508/* Atomic increment and decrement */
509#define ecs_os_ainc(value) ecs_os_api.ainc_(value)
510#define ecs_os_adec(value) ecs_os_api.adec_(value)
511#define ecs_os_lainc(value) ecs_os_api.lainc_(value)
512#define ecs_os_ladec(value) ecs_os_api.ladec_(value)
513
514/* Mutex */
515#define ecs_os_mutex_new() ecs_os_api.mutex_new_()
516#define ecs_os_mutex_free(mutex) ecs_os_api.mutex_free_(mutex)
517#define ecs_os_mutex_lock(mutex) ecs_os_api.mutex_lock_(mutex)
518#define ecs_os_mutex_unlock(mutex) ecs_os_api.mutex_unlock_(mutex)
519
520/* Condition variable */
521#define ecs_os_cond_new() ecs_os_api.cond_new_()
522#define ecs_os_cond_free(cond) ecs_os_api.cond_free_(cond)
523#define ecs_os_cond_signal(cond) ecs_os_api.cond_signal_(cond)
524#define ecs_os_cond_broadcast(cond) ecs_os_api.cond_broadcast_(cond)
525#define ecs_os_cond_wait(cond, mutex) ecs_os_api.cond_wait_(cond, mutex)
526
527/* Time */
528#define ecs_os_sleep(sec, nanosec) ecs_os_api.sleep_(sec, nanosec)
529#define ecs_os_now() ecs_os_api.now_()
530#define ecs_os_get_time(time_out) ecs_os_api.get_time_(time_out)
531
532#ifndef FLECS_DISABLE_COUNTERS
533#ifdef FLECS_ACCURATE_COUNTERS
534#define ecs_os_inc(v) (ecs_os_ainc(v))
535#define ecs_os_linc(v) (ecs_os_lainc(v))
536#define ecs_os_dec(v) (ecs_os_adec(v))
537#define ecs_os_ldec(v) (ecs_os_ladec(v))
538#else
539#define ecs_os_inc(v) (++(*v))
540#define ecs_os_linc(v) (++(*v))
541#define ecs_os_dec(v) (--(*v))
542#define ecs_os_ldec(v) (--(*v))
543#endif
544#else
545#define ecs_os_inc(v)
546#define ecs_os_linc(v)
547#define ecs_os_dec(v)
548#define ecs_os_ldec(v)
549#endif
550
551
552#ifdef ECS_TARGET_MINGW
553/* mingw bug: without this, a conversion error is thrown, but isnan/isinf should
554 * accept float, double, and long double. */
555#define ecs_os_isnan(val) (isnan((float)val))
556#define ecs_os_isinf(val) (isinf((float)val))
557#else
558#define ecs_os_isnan(val) (isnan(val))
559#define ecs_os_isinf(val) (isinf(val))
560#endif
561
562/* Application termination */
563#define ecs_os_abort() ecs_os_api.abort_()
564
565/* Dynamic libraries */
566#define ecs_os_dlopen(libname) ecs_os_api.dlopen_(libname)
567#define ecs_os_dlproc(lib, procname) ecs_os_api.dlproc_(lib, procname)
568#define ecs_os_dlclose(lib) ecs_os_api.dlclose_(lib)
569
570/* Module ID translation */
571#define ecs_os_module_to_dl(lib) ecs_os_api.module_to_dl_(lib)
572#define ecs_os_module_to_etc(lib) ecs_os_api.module_to_etc_(lib)
573
579/* Logging */
580
587FLECS_API
589 const char *file,
590 int32_t line,
591 const char *msg);
592
599FLECS_API
601 const char *file,
602 int32_t line,
603 const char *msg);
604
611FLECS_API
613 const char *file,
614 int32_t line,
615 const char *msg);
616
623FLECS_API
625 const char *file,
626 int32_t line,
627 const char *msg);
628
635FLECS_API
637 const char *file,
638 int32_t line,
639 const char *msg);
640
646FLECS_API
647const char* ecs_os_strerror(
648 int err);
649
656FLECS_API
658 char **str,
659 const char *value);
660
661/* Profile tracing */
662#ifdef FLECS_PERF_TRACE
663#define ecs_os_perf_trace_push(name) ecs_os_perf_trace_push_(__FILE__, __LINE__, name)
664#define ecs_os_perf_trace_pop(name) ecs_os_perf_trace_pop_(__FILE__, __LINE__, name)
665#else
666#define ecs_os_perf_trace_push(name)
667#define ecs_os_perf_trace_pop(name)
668#endif
669
677 const char *file,
678 size_t line,
679 const char *name);
680
688 const char *file,
689 size_t line,
690 const char *name);
691
696FLECS_API
698 double t);
699
715FLECS_API
717 ecs_time_t *start);
718
725FLECS_API
727 ecs_time_t t1,
728 ecs_time_t t2);
729
735FLECS_API
737 ecs_time_t t);
738
745FLECS_API
747 const void *src,
748 ecs_size_t size);
749
751FLECS_API
753
755FLECS_API
757
759FLECS_API
761
763FLECS_API
765
767FLECS_API
769
771FLECS_API
772bool ecs_os_has_dl(void);
773
775FLECS_API
777
778#ifdef __cplusplus
779}
780#endif
781
784#endif
ecs_os_thread_t(* ecs_os_api_task_new_t)(ecs_os_thread_callback_t callback, void *param)
OS API task_new function type.
Definition os_api.h:125
void *(* ecs_os_api_calloc_t)(ecs_size_t size)
OS API calloc function type.
Definition os_api.h:95
void(* ecs_os_api_cond_signal_t)(ecs_os_cond_t cond)
OS API cond_signal function type.
Definition os_api.h:179
FLECS_API void ecs_os_err(const char *file, int32_t line, const char *msg)
Log at error level.
void(* ecs_os_api_cond_free_t)(ecs_os_cond_t cond)
OS API cond_free function type.
Definition os_api.h:174
void *(* ecs_os_api_thread_join_t)(ecs_os_thread_t thread)
OS API thread_join function type.
Definition os_api.h:116
ecs_os_dl_t(* ecs_os_api_dlopen_t)(const char *libname)
OS API dlopen function type.
Definition os_api.h:234
uintptr_t ecs_os_dl_t
OS dynamic library.
Definition os_api.h:60
uint64_t ecs_os_thread_id_t
64-bit thread ID.
Definition os_api.h:64
FLECS_API ecs_os_api_t ecs_os_api
Static OS API variable with configured callbacks.
void(* ecs_os_api_get_time_t)(ecs_time_t *time_out)
OS API get_time function type.
Definition os_api.h:206
int64_t ecs_os_api_realloc_count
realloc count.
int64_t ecs_os_api_free_count
free count.
ecs_os_thread_t(* ecs_os_api_thread_new_t)(ecs_os_thread_callback_t callback, void *param)
OS API thread_new function type.
Definition os_api.h:110
void *(* ecs_os_thread_callback_t)(void *)
OS API thread_callback function type.
Definition os_api.h:105
FLECS_API double ecs_time_measure(ecs_time_t *start)
Measure time since the provided timestamp.
FLECS_API bool ecs_os_has_time(void)
Are time functions available?
FLECS_API bool ecs_os_has_dl(void)
Are dynamic library functions available?
ecs_os_thread_id_t(* ecs_os_api_thread_self_t)(void)
OS API thread_self function type.
Definition os_api.h:121
FLECS_API bool ecs_os_has_logging(void)
Are logging functions available?
FLECS_API bool ecs_os_has_modules(void)
Are module path functions available?
uintptr_t ecs_os_thread_t
Use handle types that at least can store pointers.
Definition os_api.h:57
void(* ecs_os_api_mutex_free_t)(ecs_os_mutex_t mutex)
OS API mutex_free function type.
Definition os_api.h:163
uintptr_t ecs_os_sock_t
OS socket.
Definition os_api.h:61
FLECS_API void ecs_os_set_api(ecs_os_api_t *os_api)
Override the OS API.
char *(* ecs_os_api_module_to_path_t)(const char *module_id)
OS API module_to_path function type.
Definition os_api.h:250
void(* ecs_os_api_mutex_lock_t)(ecs_os_mutex_t mutex)
OS API mutex_lock function type.
Definition os_api.h:153
void(* ecs_os_api_init_t)(void)
OS API init.
Definition os_api.h:71
FLECS_API void ecs_os_warn(const char *file, int32_t line, const char *msg)
Log at warning level.
FLECS_API void ecs_os_trace(const char *file, int32_t line, const char *msg)
Log at trace level.
ecs_os_proc_t(* ecs_os_api_dlproc_t)(ecs_os_dl_t lib, const char *procname)
OS API dlproc function type.
Definition os_api.h:239
FLECS_API bool ecs_os_has_task_support(void)
Are task functions available?
FLECS_API ecs_os_api_t ecs_os_get_api(void)
Get the OS API.
void(* ecs_os_api_dlclose_t)(ecs_os_dl_t lib)
OS API dlclose function type.
Definition os_api.h:245
ecs_os_mutex_t(* ecs_os_api_mutex_new_t)(void)
Mutex.
Definition os_api.h:148
void(* ecs_os_api_enable_high_timer_resolution_t)(bool enable)
OS API enable_high_timer_resolution function type.
Definition os_api.h:201
FLECS_API double ecs_time_to_double(ecs_time_t t)
Convert a time value to a double.
uint64_t(* ecs_os_api_now_t)(void)
OS API now function type.
Definition os_api.h:211
ecs_os_cond_t(* ecs_os_api_cond_new_t)(void)
Condition variable.
Definition os_api.h:169
void(* ecs_os_api_cond_broadcast_t)(ecs_os_cond_t cond)
OS API cond_broadcast function type.
Definition os_api.h:184
void *(* ecs_os_api_realloc_t)(void *ptr, ecs_size_t size)
OS API realloc function type.
Definition os_api.h:89
FLECS_API void ecs_os_strset(char **str, const char *value)
A utility for assigning strings.
int32_t(* ecs_os_api_ainc_t)(int32_t *value)
Atomic increment and decrement.
Definition os_api.h:137
FLECS_API void ecs_os_dbg(const char *file, int32_t line, const char *msg)
Macro utilities.
void ecs_os_perf_trace_push_(const char *file, size_t line, const char *name)
Push a performance trace region.
void(* ecs_os_proc_t)(void)
Generic function pointer type.
Definition os_api.h:67
char *(* ecs_os_api_strdup_t)(const char *str)
OS API strdup function type.
Definition os_api.h:100
uintptr_t ecs_os_mutex_t
OS mutex.
Definition os_api.h:59
FLECS_API ecs_time_t ecs_time_sub(ecs_time_t t1, ecs_time_t t2)
Calculate the difference between two timestamps.
void(* ecs_os_api_mutex_unlock_t)(ecs_os_mutex_t mutex)
OS API mutex_unlock function type.
Definition os_api.h:158
void(* ecs_os_api_fini_t)(void)
OS API deinit.
Definition os_api.h:75
void(* ecs_os_api_sleep_t)(int32_t sec, int32_t nanosec)
OS API sleep function type.
Definition os_api.h:195
uintptr_t ecs_os_cond_t
OS cond.
Definition os_api.h:58
void(* ecs_os_api_free_t)(void *ptr)
OS API free function type.
Definition os_api.h:84
struct ecs_time_t ecs_time_t
Time type.
int64_t ecs_os_api_malloc_count
Allocation counters.
FLECS_API bool ecs_os_has_threading(void)
Are threading functions available?
void(* ecs_os_api_perf_trace_t)(const char *filename, size_t line, const char *name)
OS API performance tracing function type.
Definition os_api.h:259
FLECS_API void * ecs_os_memdup(const void *src, ecs_size_t size)
Return newly allocated memory that contains a copy of src.
void(* ecs_os_api_cond_wait_t)(ecs_os_cond_t cond, ecs_os_mutex_t mutex)
OS API cond_wait function type.
Definition os_api.h:189
struct ecs_os_api_t ecs_os_api_t
OS API interface.
FLECS_API void ecs_os_set_api_defaults(void)
Set default values for the OS API.
FLECS_API void ecs_os_fatal(const char *file, int32_t line, const char *msg)
Log at fatal level.
void(* ecs_os_api_abort_t)(void)
OS API abort function type.
Definition os_api.h:229
int64_t(* ecs_os_api_lainc_t)(int64_t *value)
OS API lainc function type.
Definition os_api.h:142
FLECS_API void ecs_os_init(void)
Initialize the OS API.
FLECS_API bool ecs_os_has_heap(void)
Are heap functions available?
void(* ecs_os_api_log_t)(int32_t level, const char *file, int32_t line, const char *msg)
OS API log function type.
Definition os_api.h:221
int64_t ecs_os_api_calloc_count
calloc count.
FLECS_API void ecs_os_fini(void)
Deinitialize the OS API.
void ecs_os_perf_trace_pop_(const char *file, size_t line, const char *name)
Pop a performance trace region.
FLECS_API const char * ecs_os_strerror(int err)
Convert errno to a string.
FLECS_API void ecs_sleepf(double t)
Sleep with floating-point time.
void *(* ecs_os_api_malloc_t)(ecs_size_t size)
OS API malloc function type.
Definition os_api.h:79
OS API interface.
Definition os_api.h:268
ecs_os_api_cond_wait_t cond_wait_
cond_wait callback.
Definition os_api.h:308
ecs_os_api_thread_new_t thread_new_
thread_new callback.
Definition os_api.h:283
ecs_os_api_free_t free_
free callback.
Definition os_api.h:277
int32_t log_last_error_
Last logged error code.
Definition os_api.h:346
ecs_os_api_sleep_t sleep_
sleep callback.
Definition os_api.h:311
ecs_os_api_realloc_t realloc_
realloc callback.
Definition os_api.h:275
ecs_os_api_mutex_lock_t mutex_unlock_
mutex_unlock callback.
Definition os_api.h:301
ecs_os_api_abort_t abort_
abort callback.
Definition os_api.h:325
ecs_os_api_lainc_t lainc_
lainc callback.
Definition os_api.h:294
ecs_os_api_init_t init_
init callback.
Definition os_api.h:270
ecs_os_api_get_time_t get_time_
get_time callback.
Definition os_api.h:313
ecs_os_api_cond_broadcast_t cond_broadcast_
cond_broadcast callback.
Definition os_api.h:307
ecs_os_api_calloc_t calloc_
calloc callback.
Definition os_api.h:276
ecs_os_api_dlopen_t dlopen_
dlopen callback.
Definition os_api.h:328
ecs_os_api_perf_trace_t perf_trace_push_
perf_trace_push callback.
Definition os_api.h:341
ecs_os_api_thread_self_t thread_self_
thread_self callback.
Definition os_api.h:285
ecs_os_api_thread_join_t thread_join_
thread_join callback.
Definition os_api.h:284
ecs_os_api_module_to_path_t module_to_dl_
module_to_dl callback.
Definition os_api.h:334
int32_t log_indent_
Tracing indentation level.
Definition os_api.h:345
ecs_os_api_malloc_t malloc_
malloc callback.
Definition os_api.h:274
ecs_os_api_log_t log_
log callback.
Definition os_api.h:316
ecs_os_api_thread_join_t task_join_
task_join callback.
Definition os_api.h:289
int64_t log_last_timestamp_
Last logged timestamp.
Definition os_api.h:347
ecs_os_api_mutex_new_t mutex_new_
mutex_new callback.
Definition os_api.h:298
ecs_os_api_lainc_t ladec_
ladec callback.
Definition os_api.h:295
void * log_out_
File used for logging output (type is FILE*) (hint: log_ decides where to write).
Definition os_api.h:351
ecs_os_api_cond_new_t cond_new_
cond_new callback.
Definition os_api.h:304
ecs_os_api_perf_trace_t perf_trace_pop_
perf_trace_pop callback.
Definition os_api.h:342
ecs_os_api_thread_new_t task_new_
task_new callback.
Definition os_api.h:288
int32_t log_level_
Tracing level.
Definition os_api.h:344
ecs_os_api_fini_t fini_
fini callback.
Definition os_api.h:271
ecs_os_api_cond_signal_t cond_signal_
cond_signal callback.
Definition os_api.h:306
ecs_os_api_cond_free_t cond_free_
cond_free callback.
Definition os_api.h:305
ecs_os_api_strdup_t strdup_
strdup callback.
Definition os_api.h:280
ecs_os_api_mutex_free_t mutex_free_
mutex_free callback.
Definition os_api.h:299
ecs_os_api_module_to_path_t module_to_etc_
module_to_etc callback.
Definition os_api.h:338
ecs_flags32_t flags_
OS API flags.
Definition os_api.h:349
ecs_os_api_now_t now_
now callback.
Definition os_api.h:312
ecs_os_api_mutex_lock_t mutex_lock_
mutex_lock callback.
Definition os_api.h:300
ecs_os_api_ainc_t ainc_
ainc callback.
Definition os_api.h:292
ecs_os_api_ainc_t adec_
adec callback.
Definition os_api.h:293
ecs_os_api_dlproc_t dlproc_
dlproc callback.
Definition os_api.h:329
ecs_os_api_dlclose_t dlclose_
dlclose callback.
Definition os_api.h:330
Time type.
Definition os_api.h:37
uint32_t sec
Second part.
Definition os_api.h:38
uint32_t nanosec
Nanosecond part.
Definition os_api.h:39