99#define ecs_deprecated_(file, line, msg)\
104#define ecs_log_push_(level)
105#define ecs_log_pop_(level)
106#define ecs_should_log(level) false
108#define ecs_strerror(error_code)\
161 const char *condition_str,
168void ecs_parser_error_(
176void ecs_parser_errorv_(
184void ecs_parser_warning_(
192void ecs_parser_warningv_(
207#define ecs_print(level, ...)\
208 ecs_print_(level, __FILE__, __LINE__, __VA_ARGS__)
210#define ecs_printv(level, fmt, args)\
211 ecs_printv_(level, __FILE__, __LINE__, fmt, args)
213#define ecs_log(level, ...)\
214 ecs_log_(level, __FILE__, __LINE__, __VA_ARGS__)
216#define ecs_logv(level, fmt, args)\
217 ecs_logv_(level, __FILE__, __LINE__, fmt, args)
220#define ecs_trace_(file, line, ...) ecs_log_(0, file, line, __VA_ARGS__)
221#define ecs_trace(...) ecs_trace_(__FILE__, __LINE__, __VA_ARGS__)
224#define ecs_warn_(file, line, ...) ecs_log_(-2, file, line, __VA_ARGS__)
225#define ecs_warn(...) ecs_warn_(__FILE__, __LINE__, __VA_ARGS__)
228#define ecs_err_(file, line, ...) ecs_log_(-3, file, line, __VA_ARGS__)
229#define ecs_err(...) ecs_err_(__FILE__, __LINE__, __VA_ARGS__)
232#define ecs_fatal_(file, line, ...) ecs_log_(-4, file, line, __VA_ARGS__)
233#define ecs_fatal(...) ecs_fatal_(__FILE__, __LINE__, __VA_ARGS__)
236#ifndef FLECS_NO_DEPRECATED_WARNINGS
237#define ecs_deprecated(...)\
238 ecs_deprecated_(__FILE__, __LINE__, __VA_ARGS__)
240#define ecs_deprecated(...)
244#if !(defined(FLECS_LOG_0) || defined(FLECS_LOG_1) || defined(FLECS_LOG_2) || defined(FLECS_LOG_3))
245#if !defined(FLECS_NDEBUG)
256#if defined(FLECS_LOG_3)
257#define ecs_dbg_1(...) ecs_log(1, __VA_ARGS__);
258#define ecs_dbg_2(...) ecs_log(2, __VA_ARGS__);
259#define ecs_dbg_3(...) ecs_log(3, __VA_ARGS__);
261#define ecs_log_push_1() ecs_log_push_(1);
262#define ecs_log_push_2() ecs_log_push_(2);
263#define ecs_log_push_3() ecs_log_push_(3);
265#define ecs_log_pop_1() ecs_log_pop_(1);
266#define ecs_log_pop_2() ecs_log_pop_(2);
267#define ecs_log_pop_3() ecs_log_pop_(3);
269#define ecs_should_log_1() ecs_should_log(1)
270#define ecs_should_log_2() ecs_should_log(2)
271#define ecs_should_log_3() ecs_should_log(3)
277#elif defined(FLECS_LOG_2)
278#define ecs_dbg_1(...) ecs_log(1, __VA_ARGS__);
279#define ecs_dbg_2(...) ecs_log(2, __VA_ARGS__);
280#define ecs_dbg_3(...)
282#define ecs_log_push_1() ecs_log_push_(1);
283#define ecs_log_push_2() ecs_log_push_(2);
284#define ecs_log_push_3()
286#define ecs_log_pop_1() ecs_log_pop_(1);
287#define ecs_log_pop_2() ecs_log_pop_(2);
288#define ecs_log_pop_3()
290#define ecs_should_log_1() ecs_should_log(1)
291#define ecs_should_log_2() ecs_should_log(2)
292#define ecs_should_log_3() false
297#elif defined(FLECS_LOG_1)
298#define ecs_dbg_1(...) ecs_log(1, __VA_ARGS__);
299#define ecs_dbg_2(...)
300#define ecs_dbg_3(...)
302#define ecs_log_push_1() ecs_log_push_(1);
303#define ecs_log_push_2()
304#define ecs_log_push_3()
306#define ecs_log_pop_1() ecs_log_pop_(1);
307#define ecs_log_pop_2()
308#define ecs_log_pop_3()
310#define ecs_should_log_1() ecs_should_log(1)
311#define ecs_should_log_2() false
312#define ecs_should_log_3() false
316#elif defined(FLECS_LOG_0)
317#define ecs_dbg_1(...)
318#define ecs_dbg_2(...)
319#define ecs_dbg_3(...)
321#define ecs_log_push_1()
322#define ecs_log_push_2()
323#define ecs_log_push_3()
325#define ecs_log_pop_1()
326#define ecs_log_pop_2()
327#define ecs_log_pop_3()
329#define ecs_should_log_1() false
330#define ecs_should_log_2() false
331#define ecs_should_log_3() false
335#define ecs_trace(...)
336#define ecs_dbg_1(...)
337#define ecs_dbg_2(...)
338#define ecs_dbg_3(...)
340#define ecs_log_push_1()
341#define ecs_log_push_2()
342#define ecs_log_push_3()
344#define ecs_log_pop_1()
345#define ecs_log_pop_2()
346#define ecs_log_pop_3()
351#define ecs_dbg ecs_dbg_1
354#define ecs_log_push() ecs_log_push_(0)
355#define ecs_log_pop() ecs_log_pop_(0)
359#define ecs_abort(error_code, ...)\
360 ecs_abort_(error_code, __FILE__, __LINE__, __VA_ARGS__);\
361 ecs_os_abort(); abort();
365#if defined(FLECS_NDEBUG) && !defined(FLECS_KEEP_ASSERT)
366#define ecs_assert(condition, error_code, ...)
368#define ecs_assert(condition, error_code, ...)\
370 ecs_assert_log_(error_code, #condition, __FILE__, __LINE__, __VA_ARGS__);\
379#define ecs_dbg_assert(condition, error_code, ...) ecs_assert(condition, error_code, __VA_ARGS__)
381#define ecs_dbg_assert(condition, error_code, ...)
387#define ecs_san_assert(condition, error_code, ...) ecs_assert(condition, error_code, __VA_ARGS__)
389#define ecs_san_assert(condition, error_code, ...)
394#define ecs_dummy_check\
401#if defined(FLECS_NDEBUG) && !defined(FLECS_KEEP_ASSERT)
402#define ecs_check(condition, error_code, ...) ecs_dummy_check
404#ifdef FLECS_SOFT_ASSERT
405#define ecs_check(condition, error_code, ...)\
407 ecs_assert_log_(error_code, #condition, __FILE__, __LINE__, __VA_ARGS__);\
412#define ecs_check(condition, error_code, ...)\
414 ecs_assert_log_(error_code, #condition, __FILE__, __LINE__, __VA_ARGS__);\
424#if defined(FLECS_NDEBUG) && !defined(FLECS_KEEP_ASSERT)
425#define ecs_throw(error_code, ...) ecs_dummy_check
427#ifdef FLECS_SOFT_ASSERT
428#define ecs_throw(error_code, ...)\
429 ecs_abort_(error_code, __FILE__, __LINE__, __VA_ARGS__);\
432#define ecs_throw(error_code, ...)\
433 ecs_abort(error_code, __VA_ARGS__);\
439#define ecs_parser_error(name, expr, column, ...)\
440 ecs_parser_error_(name, expr, column, __VA_ARGS__)
442#define ecs_parser_errorv(name, expr, column, fmt, args)\
443 ecs_parser_errorv_(name, expr, column, fmt, args)
445#define ecs_parser_warning(name, expr, column, ...)\
446 ecs_parser_warning_(name, expr, column, __VA_ARGS__)
448#define ecs_parser_warningv(name, expr, column, fmt, args)\
449 ecs_parser_warningv_(name, expr, column, fmt, args)
534void ecs_log_start_capture(
bool capture_try);
537char* ecs_log_stop_capture(
void);
543#define ECS_INVALID_OPERATION (1)
544#define ECS_INVALID_PARAMETER (2)
545#define ECS_CONSTRAINT_VIOLATED (3)
546#define ECS_OUT_OF_MEMORY (4)
547#define ECS_OUT_OF_RANGE (5)
548#define ECS_UNSUPPORTED (6)
549#define ECS_INTERNAL_ERROR (7)
550#define ECS_ALREADY_DEFINED (8)
551#define ECS_MISSING_OS_API (9)
552#define ECS_OPERATION_FAILED (10)
553#define ECS_INVALID_CONVERSION (11)
554#define ECS_CYCLE_DETECTED (13)
555#define ECS_LEAK_DETECTED (14)
556#define ECS_DOUBLE_FREE (15)
558#define ECS_INCONSISTENT_NAME (20)
559#define ECS_NAME_IN_USE (21)
560#define ECS_INVALID_COMPONENT_SIZE (23)
561#define ECS_INVALID_COMPONENT_ALIGNMENT (24)
562#define ECS_COMPONENT_NOT_REGISTERED (25)
563#define ECS_INCONSISTENT_COMPONENT_ID (26)
564#define ECS_INCONSISTENT_COMPONENT_ACTION (27)
565#define ECS_MODULE_UNDEFINED (28)
566#define ECS_MISSING_SYMBOL (29)
567#define ECS_ALREADY_IN_USE (30)
569#define ECS_ACCESS_VIOLATION (40)
570#define ECS_COLUMN_INDEX_OUT_OF_RANGE (41)
571#define ECS_COLUMN_IS_NOT_SHARED (42)
572#define ECS_COLUMN_IS_SHARED (43)
573#define ECS_COLUMN_TYPE_MISMATCH (45)
575#define ECS_INVALID_WHILE_READONLY (70)
576#define ECS_LOCKED_STORAGE (71)
577#define ECS_INVALID_FROM_WORKER (72)
584#define ECS_BLACK "\033[1;30m"
585#define ECS_RED "\033[0;31m"
586#define ECS_GREEN "\033[0;32m"
587#define ECS_YELLOW "\033[0;33m"
588#define ECS_BLUE "\033[0;34m"
589#define ECS_MAGENTA "\033[0;35m"
590#define ECS_CYAN "\033[0;36m"
591#define ECS_WHITE "\033[1;37m"
592#define ECS_GREY "\033[0;37m"
593#define ECS_NORMAL "\033[0;49m"
594#define ECS_BOLD "\033[1;49m"
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 bool ecs_should_log(int32_t level)
Should current level be logged.
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 bool ecs_log_enable_colors(bool enabled)
Enable/disable tracing with colors.
FLECS_API int ecs_log_get_level(void)
Get current log level.
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.