108#define ecs_deprecated_(file, line, msg)\
113#define ecs_log_push_(level)
114#define ecs_log_pop_(level)
115#define ecs_should_log(level) false
117#define ecs_strerror(error_code)\
215 const char *condition_str,
291#define ecs_print(level, ...)\
292 ecs_print_(level, __FILE__, __LINE__, __VA_ARGS__)
295#define ecs_printv(level, fmt, args)\
296 ecs_printv_(level, __FILE__, __LINE__, fmt, args)
299#define ecs_log(level, ...)\
300 ecs_log_(level, __FILE__, __LINE__, __VA_ARGS__)
303#define ecs_logv(level, fmt, args)\
304 ecs_logv_(level, __FILE__, __LINE__, fmt, args)
307#define ecs_trace_(file, line, ...) ecs_log_(0, file, line, __VA_ARGS__)
309#define ecs_trace(...) ecs_trace_(__FILE__, __LINE__, __VA_ARGS__)
312#define ecs_warn_(file, line, ...) ecs_log_(-2, file, line, __VA_ARGS__)
314#define ecs_warn(...) ecs_warn_(__FILE__, __LINE__, __VA_ARGS__)
317#define ecs_err_(file, line, ...) ecs_log_(-3, file, line, __VA_ARGS__)
319#define ecs_err(...) ecs_err_(__FILE__, __LINE__, __VA_ARGS__)
322#define ecs_fatal_(file, line, ...) ecs_log_(-4, file, line, __VA_ARGS__)
324#define ecs_fatal(...) ecs_fatal_(__FILE__, __LINE__, __VA_ARGS__)
327#ifndef FLECS_NO_DEPRECATED_WARNINGS
329#define ecs_deprecated(...)\
330 ecs_deprecated_(__FILE__, __LINE__, __VA_ARGS__)
332#define ecs_deprecated(...)
336#if !(defined(FLECS_LOG_0) || defined(FLECS_LOG_1) || defined(FLECS_LOG_2) || defined(FLECS_LOG_3))
337#if !defined(FLECS_NDEBUG)
348#if defined(FLECS_LOG_3)
350#define ecs_dbg_1(...) ecs_log(1, __VA_ARGS__);
352#define ecs_dbg_2(...) ecs_log(2, __VA_ARGS__);
354#define ecs_dbg_3(...) ecs_log(3, __VA_ARGS__);
357#define ecs_log_push_1() ecs_log_push_(1);
359#define ecs_log_push_2() ecs_log_push_(2);
361#define ecs_log_push_3() ecs_log_push_(3);
364#define ecs_log_pop_1() ecs_log_pop_(1);
366#define ecs_log_pop_2() ecs_log_pop_(2);
368#define ecs_log_pop_3() ecs_log_pop_(3);
371#define ecs_should_log_1() ecs_should_log(1)
373#define ecs_should_log_2() ecs_should_log(2)
375#define ecs_should_log_3() ecs_should_log(3)
381#elif defined(FLECS_LOG_2)
382#define ecs_dbg_1(...) ecs_log(1, __VA_ARGS__);
383#define ecs_dbg_2(...) ecs_log(2, __VA_ARGS__);
384#define ecs_dbg_3(...)
386#define ecs_log_push_1() ecs_log_push_(1);
387#define ecs_log_push_2() ecs_log_push_(2);
388#define ecs_log_push_3()
390#define ecs_log_pop_1() ecs_log_pop_(1);
391#define ecs_log_pop_2() ecs_log_pop_(2);
392#define ecs_log_pop_3()
394#define ecs_should_log_1() ecs_should_log(1)
395#define ecs_should_log_2() ecs_should_log(2)
396#define ecs_should_log_3() false
401#elif defined(FLECS_LOG_1)
402#define ecs_dbg_1(...) ecs_log(1, __VA_ARGS__);
403#define ecs_dbg_2(...)
404#define ecs_dbg_3(...)
406#define ecs_log_push_1() ecs_log_push_(1);
407#define ecs_log_push_2()
408#define ecs_log_push_3()
410#define ecs_log_pop_1() ecs_log_pop_(1);
411#define ecs_log_pop_2()
412#define ecs_log_pop_3()
414#define ecs_should_log_1() ecs_should_log(1)
415#define ecs_should_log_2() false
416#define ecs_should_log_3() false
420#elif defined(FLECS_LOG_0)
421#define ecs_dbg_1(...)
422#define ecs_dbg_2(...)
423#define ecs_dbg_3(...)
425#define ecs_log_push_1()
426#define ecs_log_push_2()
427#define ecs_log_push_3()
429#define ecs_log_pop_1()
430#define ecs_log_pop_2()
431#define ecs_log_pop_3()
433#define ecs_should_log_1() false
434#define ecs_should_log_2() false
435#define ecs_should_log_3() false
439#define ecs_trace(...)
440#define ecs_dbg_1(...)
441#define ecs_dbg_2(...)
442#define ecs_dbg_3(...)
444#define ecs_log_push_1()
445#define ecs_log_push_2()
446#define ecs_log_push_3()
448#define ecs_log_pop_1()
449#define ecs_log_pop_2()
450#define ecs_log_pop_3()
455#define ecs_dbg ecs_dbg_1
458#define ecs_log_push() ecs_log_push_(0)
460#define ecs_log_pop() ecs_log_pop_(0)
464#define ecs_abort(error_code, ...)\
465 ecs_abort_(error_code, __FILE__, __LINE__, __VA_ARGS__);\
466 ecs_os_abort(); abort();
470#if defined(FLECS_NDEBUG) && !defined(FLECS_KEEP_ASSERT)
471#define ecs_assert(condition, error_code, ...)
473#define ecs_assert(condition, error_code, ...)\
475 ecs_assert_log_(error_code, #condition, __FILE__, __LINE__, __VA_ARGS__);\
484#define ecs_dbg_assert(condition, error_code, ...) ecs_assert(condition, error_code, __VA_ARGS__)
486#define ecs_dbg_assert(condition, error_code, ...)
492#define ecs_san_assert(condition, error_code, ...) ecs_assert(condition, error_code, __VA_ARGS__)
494#define ecs_san_assert(condition, error_code, ...)
499#define ecs_dummy_check\
506#if defined(FLECS_NDEBUG) && !defined(FLECS_KEEP_ASSERT)
507#define ecs_check(condition, error_code, ...) ecs_dummy_check
509#ifdef FLECS_SOFT_ASSERT
510#define ecs_check(condition, error_code, ...)\
512 ecs_assert_log_(error_code, #condition, __FILE__, __LINE__, __VA_ARGS__);\
517#define ecs_check(condition, error_code, ...)\
519 ecs_assert_log_(error_code, #condition, __FILE__, __LINE__, __VA_ARGS__);\
529#if defined(FLECS_NDEBUG) && !defined(FLECS_KEEP_ASSERT)
530#define ecs_throw(error_code, ...) ecs_dummy_check
532#ifdef FLECS_SOFT_ASSERT
533#define ecs_throw(error_code, ...)\
534 ecs_abort_(error_code, __FILE__, __LINE__, __VA_ARGS__);\
537#define ecs_throw(error_code, ...)\
538 ecs_abort(error_code, __VA_ARGS__);\
544#define ecs_parser_error(name, expr, column, ...)\
545 ecs_parser_error_(name, expr, column, __VA_ARGS__)
548#define ecs_parser_errorv(name, expr, column, fmt, args)\
549 ecs_parser_errorv_(name, expr, column, fmt, args)
552#define ecs_parser_warning(name, expr, column, ...)\
553 ecs_parser_warning_(name, expr, column, __VA_ARGS__)
556#define ecs_parser_warningv(name, expr, column, fmt, args)\
557 ecs_parser_warningv_(name, expr, column, fmt, args)
659#define ECS_INVALID_OPERATION (1)
661#define ECS_INVALID_PARAMETER (2)
663#define ECS_CONSTRAINT_VIOLATED (3)
665#define ECS_OUT_OF_MEMORY (4)
667#define ECS_OUT_OF_RANGE (5)
669#define ECS_UNSUPPORTED (6)
671#define ECS_INTERNAL_ERROR (7)
673#define ECS_ALREADY_DEFINED (8)
675#define ECS_MISSING_OS_API (9)
677#define ECS_OPERATION_FAILED (10)
679#define ECS_INVALID_CONVERSION (11)
681#define ECS_CYCLE_DETECTED (13)
683#define ECS_LEAK_DETECTED (14)
685#define ECS_DOUBLE_FREE (15)
688#define ECS_INCONSISTENT_NAME (20)
690#define ECS_NAME_IN_USE (21)
692#define ECS_INVALID_COMPONENT_SIZE (23)
694#define ECS_INVALID_COMPONENT_ALIGNMENT (24)
696#define ECS_COMPONENT_NOT_REGISTERED (25)
698#define ECS_INCONSISTENT_COMPONENT_ID (26)
700#define ECS_INCONSISTENT_COMPONENT_ACTION (27)
702#define ECS_MODULE_UNDEFINED (28)
704#define ECS_MISSING_SYMBOL (29)
706#define ECS_ALREADY_IN_USE (30)
709#define ECS_ACCESS_VIOLATION (40)
711#define ECS_COLUMN_INDEX_OUT_OF_RANGE (41)
713#define ECS_COLUMN_IS_NOT_SHARED (42)
715#define ECS_COLUMN_IS_SHARED (43)
717#define ECS_COLUMN_TYPE_MISMATCH (45)
720#define ECS_INVALID_WHILE_READONLY (70)
722#define ECS_LOCKED_STORAGE (71)
724#define ECS_INVALID_FROM_WORKER (72)
732#define ECS_BLACK "\033[1;30m"
734#define ECS_RED "\033[0;31m"
736#define ECS_GREEN "\033[0;32m"
738#define ECS_YELLOW "\033[0;33m"
740#define ECS_BLUE "\033[0;34m"
742#define ECS_MAGENTA "\033[0;35m"
744#define ECS_CYAN "\033[0;36m"
746#define ECS_WHITE "\033[1;37m"
748#define ECS_GREY "\033[0;37m"
750#define ECS_NORMAL "\033[0;49m"
752#define ECS_BOLD "\033[1;49m"
FLECS_API char * ecs_log_stop_capture(void)
Stop capturing log output.
FLECS_API int ecs_log_last_error(void)
Get last logged error code.
FLECS_API void ecs_log_pop_(int32_t level)
Decrease log stack.
FLECS_API void ecs_parser_warningv_(const char *name, const char *expr, int64_t column, const char *fmt, va_list args)
Log a parser warning (va_list).
FLECS_API void ecs_abort_(int32_t error_code, const char *file, int32_t line, const char *fmt,...)
Abort with error code.
FLECS_API void ecs_log_start_capture(bool capture_try)
Start capturing log output.
FLECS_API bool ecs_should_log(int32_t level)
Should current level be logged.
FLECS_API void ecs_printv_(int level, const char *file, int32_t line, const char *fmt, va_list args)
Print at the provided log level (va_list).
FLECS_API void ecs_log_(int32_t level, const char *file, int32_t line, const char *fmt,...)
Log at the provided level.
FLECS_API void ecs_assert_log_(int32_t error_code, const char *condition_str, const char *file, int32_t line, const char *fmt,...)
Log an assertion failure.
FLECS_API void ecs_print_(int32_t level, const char *file, int32_t line, const char *fmt,...)
Print at the provided log level.
FLECS_API const char * ecs_strerror(int32_t error_code)
Get description for error code.
FLECS_API void ecs_deprecated_(const char *file, int32_t line, const char *msg)
Log message indicating an operation is deprecated.
FLECS_API void ecs_log_push_(int32_t level)
Increase log stack.
FLECS_API void ecs_parser_warning_(const char *name, const char *expr, int64_t column, const char *fmt,...)
Log a parser warning.
FLECS_API void ecs_logv_(int level, const char *file, int32_t line, const char *fmt, va_list args)
Log at the provided level (va_list).
FLECS_API bool ecs_log_enable_colors(bool enabled)
Enable/disable tracing with colors.
FLECS_API void ecs_parser_error_(const char *name, const char *expr, int64_t column, const char *fmt,...)
Log a parser error.
FLECS_API int ecs_log_get_level(void)
Get current log level.
FLECS_API void ecs_parser_errorv_(const char *name, const char *expr, int64_t column, const char *fmt, va_list args)
Log a parser error (va_list).
FLECS_API int ecs_log_set_level(int level)
Enable or disable log.
FLECS_API bool ecs_log_enable_timestamp(bool enabled)
Enable/disable logging timestamp.
FLECS_API bool ecs_log_enable_timedelta(bool enabled)
Enable/disable logging time since last log.