From 22dd934e95a216e59a0710378fd6e2b207bbbfca Mon Sep 17 00:00:00 2001 From: copygirl Date: Mon, 9 Jan 2023 20:17:15 +0100 Subject: [PATCH] WIP --- .gitmodules | 3 + .vscode/launch.json | 17 + .vscode/settings.json | 8 + .vscode/tasks.json | 14 + flecs.h-ast | 14548 ++++++++++++++++ gaemstone.ECS.sln | 34 + src/flecs | 1 + src/gaemstone.ECS.BindGen/Program.cs | 421 + .../gaemstone.ECS.BindGen.csproj | 21 + src/gaemstone.ECS/flecs/flecs+Constants.g.cs | 182 + src/gaemstone.ECS/flecs/flecs+Functions.g.cs | 3773 ++++ src/gaemstone.ECS/flecs/flecs+Structs.g.cs | 1754 ++ src/gaemstone.Utility/Allocators.cs | 171 - src/gaemstone.Utility/CStringExtensions.cs | 34 - .../CallbackContextHelper.cs | 30 - src/gaemstone.Utility/FlecsException.cs | 26 - src/gaemstone.Utility/SpanExtensions.cs | 41 - 17 files changed, 20776 insertions(+), 302 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 flecs.h-ast create mode 100644 gaemstone.ECS.sln create mode 160000 src/flecs create mode 100644 src/gaemstone.ECS.BindGen/Program.cs create mode 100644 src/gaemstone.ECS.BindGen/gaemstone.ECS.BindGen.csproj create mode 100644 src/gaemstone.ECS/flecs/flecs+Constants.g.cs create mode 100644 src/gaemstone.ECS/flecs/flecs+Functions.g.cs create mode 100644 src/gaemstone.ECS/flecs/flecs+Structs.g.cs delete mode 100644 src/gaemstone.Utility/Allocators.cs delete mode 100644 src/gaemstone.Utility/CStringExtensions.cs delete mode 100644 src/gaemstone.Utility/CallbackContextHelper.cs delete mode 100644 src/gaemstone.Utility/FlecsException.cs delete mode 100644 src/gaemstone.Utility/SpanExtensions.cs diff --git a/.gitmodules b/.gitmodules index accde2e..a5d8f9d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "src/flecs-cs"] path = src/flecs-cs url = https://github.com/flecs-hub/flecs-cs +[submodule "src/flecs"] + path = src/flecs + url = https://github.com/SanderMertens/flecs.git diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..70787b4 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Launch BindGen", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "env": { "LIBCLANG_DISABLE_CRASH_RECOVERY": "true" }, + "cwd": "${workspaceFolder}/src/gaemstone.ECS.BindGen", + "program": "${workspaceFolder}/src/gaemstone.ECS.BindGen/bin/Debug/net7.0/gaemstone.ECS.BindGen.dll", + "args": [], + "console": "internalConsole", + "stopAtEntry": false, + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e782077 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.exclude": { + "**/.git": true, + "**/.DS_Store": true, + "**/bin": true, + "**/obj": true, + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..18c57fa --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,14 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "group": "build", + "label": "build", + "type": "shell", "command": "dotnet", + "options": { "cwd": "src/gaemstone.ECS.BindGen" }, + "args": [ "build", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], + "presentation": { "reveal": "silent" }, + "problemMatcher": "$msCompile" + } + ] +} diff --git a/flecs.h-ast b/flecs.h-ast new file mode 100644 index 0000000..9abc9b5 --- /dev/null +++ b/flecs.h-ast @@ -0,0 +1,14548 @@ +TranslationUnitDecl 0x560467ec17a8 <> +|-TypedefDecl 0x560467ec1fd0 <> implicit __int128_t '__int128' +| `-BuiltinType 0x560467ec1d70 '__int128' +|-TypedefDecl 0x560467ec2040 <> implicit __uint128_t 'unsigned __int128' +| `-BuiltinType 0x560467ec1d90 'unsigned __int128' +|-TypedefDecl 0x560467ec2348 <> implicit __NSConstantString 'struct __NSConstantString_tag' +| `-RecordType 0x560467ec2120 'struct __NSConstantString_tag' +| `-Record 0x560467ec2098 '__NSConstantString_tag' +|-TypedefDecl 0x560467ec23e0 <> implicit __builtin_ms_va_list 'char *' +| `-PointerType 0x560467ec23a0 'char *' +| `-BuiltinType 0x560467ec1850 'char' +|-TypedefDecl 0x560467ec26d8 <> implicit referenced __builtin_va_list 'struct __va_list_tag[1]' +| `-ConstantArrayType 0x560467ec2680 'struct __va_list_tag[1]' 1 +| `-RecordType 0x560467ec24c0 'struct __va_list_tag' +| `-Record 0x560467ec2438 '__va_list_tag' +|-FunctionDecl 0x560467f19e38 line:67:13 __assert_fail 'void (const char *, const char *, unsigned int, const char *) __attribute__((noreturn))' extern +| |-ParmVarDecl 0x560467f19b70 col:40 __assertion 'const char *' +| |-ParmVarDecl 0x560467f19bf0 col:65 __file 'const char *' +| |-ParmVarDecl 0x560467f19c70 col:20 __line 'unsigned int' +| |-ParmVarDecl 0x560467f19cf0 col:40 __function 'const char *' +| `-NoThrowAttr 0x560467f19ef8 +|-FunctionDecl 0x560467f58e88 line:72:13 __assert_perror_fail 'void (int, const char *, unsigned int, const char *) __attribute__((noreturn))' extern +| |-ParmVarDecl 0x560467f19fb0 col:39 __errnum 'int' +| |-ParmVarDecl 0x560467f1a030 col:61 __file 'const char *' +| |-ParmVarDecl 0x560467f1a0b0 col:20 __line 'unsigned int' +| |-ParmVarDecl 0x560467f1a130 col:40 __function 'const char *' +| `-NoThrowAttr 0x560467f58f48 +|-FunctionDecl 0x560467f591d8 line:79:13 __assert 'void (const char *, const char *, int) __attribute__((noreturn))' extern +| |-ParmVarDecl 0x560467f58fb8 col:35 __assertion 'const char *' +| |-ParmVarDecl 0x560467f59038 col:60 __file 'const char *' +| |-ParmVarDecl 0x560467f590b8 col:72 __line 'int' +| `-NoThrowAttr 0x560467f59290 +|-TypedefDecl 0x560467f59320 col:27 referenced va_list '__builtin_va_list':'struct __va_list_tag[1]' +| `-TypedefType 0x560467f592f0 '__builtin_va_list' sugar +| |-Typedef 0x560467ec26d8 '__builtin_va_list' +| `-ConstantArrayType 0x560467ec2680 'struct __va_list_tag[1]' 1 +| `-RecordType 0x560467ec24c0 'struct __va_list_tag' +| `-Record 0x560467ec2438 '__va_list_tag' +|-TypedefDecl 0x560467f59388 col:27 __gnuc_va_list '__builtin_va_list':'struct __va_list_tag[1]' +| `-TypedefType 0x560467f592f0 '__builtin_va_list' sugar +| |-Typedef 0x560467ec26d8 '__builtin_va_list' +| `-ConstantArrayType 0x560467ec2680 'struct __va_list_tag[1]' 1 +| `-RecordType 0x560467ec24c0 'struct __va_list_tag' +| `-Record 0x560467ec2438 '__va_list_tag' +|-TypedefDecl 0x560467f593f8 col:23 referenced size_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-FunctionDecl 0x560467f59720 col:14 implicit memcpy 'void *(void *, const void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f59818 <> 'void *' +| |-ParmVarDecl 0x560467f59880 <> 'const void *' +| |-ParmVarDecl 0x560467f598e8 <> 'unsigned long' +| `-BuiltinAttr 0x560467f597c0 <> Implicit 805 +|-FunctionDecl 0x560467f59968 prev 0x560467f59720 /usr/include/string.h:43:14 memcpy 'void *(void *, const void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f59468 col:39 __dest 'void *restrict' +| |-ParmVarDecl 0x560467f59510 col:70 __src 'const void *restrict' +| |-ParmVarDecl 0x560467f595b0 col:15 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f59ab8 <> Inherited Implicit 805 +| |-NoThrowAttr 0x560467f59a20 +| `-NonNullAttr 0x560467f59a78 1 2 +|-FunctionDecl 0x560467f5fd70 col:14 implicit memmove 'void *(void *, const void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f5fe68 <> 'void *' +| |-ParmVarDecl 0x560467f5fed0 <> 'const void *' +| |-ParmVarDecl 0x560467f5ff38 <> 'unsigned long' +| `-BuiltinAttr 0x560467f5fe10 <> Implicit 807 +|-FunctionDecl 0x560467f5ffb8 prev 0x560467f5fd70 /usr/include/string.h:47:14 memmove 'void *(void *, const void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f59af8 col:29 __dest 'void *' +| |-ParmVarDecl 0x560467f59b78 col:49 __src 'const void *' +| |-ParmVarDecl 0x560467f59bf0 col:63 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f60108 <> Inherited Implicit 807 +| |-NoThrowAttr 0x560467f60070 +| `-NonNullAttr 0x560467f600c8 1 2 +|-FunctionDecl 0x560467f60450 col:14 implicit memccpy 'void *(void *, const void *, int, unsigned long)' extern +| |-ParmVarDecl 0x560467f60548 <> 'void *' +| |-ParmVarDecl 0x560467f605b0 <> 'const void *' +| |-ParmVarDecl 0x560467f60618 <> 'int' +| |-ParmVarDecl 0x560467f60680 <> 'unsigned long' +| `-BuiltinAttr 0x560467f604f0 <> Implicit 869 +|-FunctionDecl 0x560467f60708 prev 0x560467f60450 /usr/include/string.h:54:14 memccpy 'void *(void *, const void *, int, unsigned long)' extern +| |-ParmVarDecl 0x560467f60148 col:40 __dest 'void *restrict' +| |-ParmVarDecl 0x560467f601c8 col:71 __src 'const void *restrict' +| |-ParmVarDecl 0x560467f60248 col:13 __c 'int' +| |-ParmVarDecl 0x560467f602c0 col:25 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f60858 <> Inherited Implicit 869 +| |-NoThrowAttr 0x560467f607c8 +| `-NonNullAttr 0x560467f60820 1 2 +|-FunctionDecl 0x560467f60ae0 col:14 implicit memset 'void *(void *, int, unsigned long)' extern +| |-ParmVarDecl 0x560467f60bd8 <> 'void *' +| |-ParmVarDecl 0x560467f60c40 <> 'int' +| |-ParmVarDecl 0x560467f60ca8 <> 'unsigned long' +| `-BuiltinAttr 0x560467f60b80 <> Implicit 823 +|-FunctionDecl 0x560467f60d80 prev 0x560467f60ae0 /usr/include/string.h:61:14 memset 'void *(void *, int, unsigned long)' extern +| |-ParmVarDecl 0x560467f60898 col:28 __s 'void *' +| |-ParmVarDecl 0x560467f60918 col:37 __c 'int' +| |-ParmVarDecl 0x560467f60990 col:49 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f60ec8 <> Inherited Implicit 823 +| |-NoThrowAttr 0x560467f60e38 +| `-NonNullAttr 0x560467f60e90 1 +|-FunctionDecl 0x560467f61170 col:12 implicit memcmp 'int (const void *, const void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f61268 <> 'const void *' +| |-ParmVarDecl 0x560467f612d0 <> 'const void *' +| |-ParmVarDecl 0x560467f61338 <> 'unsigned long' +| `-BuiltinAttr 0x560467f61210 <> Implicit 806 +|-FunctionDecl 0x560467f613b8 prev 0x560467f61170 /usr/include/string.h:64:12 memcmp 'int (const void *, const void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f60f08 col:32 __s1 'const void *' +| |-ParmVarDecl 0x560467f60f88 col:50 __s2 'const void *' +| |-ParmVarDecl 0x560467f61000 col:63 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f61528 <> Inherited Implicit 806 +| |-NoThrowAttr 0x560467f61470 +| |-PureAttr 0x560467f614c8 +| `-NonNullAttr 0x560467f614f0 1 2 +|-FunctionDecl 0x560467f61748 /usr/include/string.h:80:12 __memcmpeq 'int (const void *, const void *, size_t)' extern +| |-ParmVarDecl 0x560467f61568 col:36 __s1 'const void *' +| |-ParmVarDecl 0x560467f615e8 col:54 __s2 'const void *' +| |-ParmVarDecl 0x560467f61660 col:67 __n 'size_t':'unsigned long' +| |-NoThrowAttr 0x560467f61800 +| |-PureAttr 0x560467f61858 +| `-NonNullAttr 0x560467f61880 1 2 +|-FunctionDecl 0x560467f61b10 col:14 implicit memchr 'void *(const void *, int, unsigned long)' extern +| |-ParmVarDecl 0x560467f61c08 <> 'const void *' +| |-ParmVarDecl 0x560467f61c70 <> 'int' +| |-ParmVarDecl 0x560467f61cd8 <> 'unsigned long' +| `-BuiltinAttr 0x560467f61bb0 <> Implicit 815 +|-FunctionDecl 0x560467f61d90 prev 0x560467f61b10 /usr/include/string.h:107:14 memchr 'void *(const void *, int, unsigned long)' extern +| |-ParmVarDecl 0x560467f618d0 col:34 __s 'const void *' +| |-ParmVarDecl 0x560467f61950 col:43 __c 'int' +| |-ParmVarDecl 0x560467f619c8 col:55 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f61f08 <> Inherited Implicit 815 +| |-NoThrowAttr 0x560467f61e48 +| |-PureAttr 0x560467f61ea0 +| `-NonNullAttr 0x560467f61ec8 1 +|-FunctionDecl 0x560467f62120 col:14 implicit strcpy 'char *(char *, const char *)' extern +| |-ParmVarDecl 0x560467f62218 <> 'char *' +| |-ParmVarDecl 0x560467f62280 <> 'const char *' +| `-BuiltinAttr 0x560467f621c0 <> Implicit 808 +|-FunctionDecl 0x560467f622f8 prev 0x560467f62120 /usr/include/string.h:141:14 strcpy 'char *(char *, const char *)' extern +| |-ParmVarDecl 0x560467f61f48 col:39 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f61fc8 col:70 __src 'const char *restrict' +| |-BuiltinAttr 0x560467f62438 <> Inherited Implicit 808 +| |-NoThrowAttr 0x560467f623a8 +| `-NonNullAttr 0x560467f62400 1 2 +|-FunctionDecl 0x560467f626e0 col:14 implicit strncpy 'char *(char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f627d8 <> 'char *' +| |-ParmVarDecl 0x560467f62840 <> 'const char *' +| |-ParmVarDecl 0x560467f628a8 <> 'unsigned long' +| `-BuiltinAttr 0x560467f62780 <> Implicit 809 +|-FunctionDecl 0x560467f62928 prev 0x560467f626e0 /usr/include/string.h:144:14 strncpy 'char *(char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f62478 col:40 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f624f8 col:32 __src 'const char *restrict' +| |-ParmVarDecl 0x560467f62570 col:46 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f62a78 <> Inherited Implicit 809 +| |-NoThrowAttr 0x560467f629e0 +| `-NonNullAttr 0x560467f62a38 1 2 +|-FunctionDecl 0x560467f62c18 col:14 implicit strcat 'char *(char *, const char *)' extern +| |-ParmVarDecl 0x560467f62d10 <> 'char *' +| |-ParmVarDecl 0x560467f62da0 <> 'const char *' +| `-BuiltinAttr 0x560467f62cb8 <> Implicit 812 +|-FunctionDecl 0x560467f62e18 prev 0x560467f62c18 /usr/include/string.h:149:14 strcat 'char *(char *, const char *)' extern +| |-ParmVarDecl 0x560467f62ab8 col:39 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f62b38 col:70 __src 'const char *restrict' +| |-BuiltinAttr 0x560467f62f58 <> Inherited Implicit 812 +| |-NoThrowAttr 0x560467f62ec8 +| `-NonNullAttr 0x560467f62f20 1 2 +|-FunctionDecl 0x560467f63178 col:14 implicit strncat 'char *(char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f63270 <> 'char *' +| |-ParmVarDecl 0x560467f632d8 <> 'const char *' +| |-ParmVarDecl 0x560467f63340 <> 'unsigned long' +| `-BuiltinAttr 0x560467f63218 <> Implicit 813 +|-FunctionDecl 0x560467f633c0 prev 0x560467f63178 /usr/include/string.h:152:14 strncat 'char *(char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f62f98 col:40 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f63018 col:71 __src 'const char *restrict' +| |-ParmVarDecl 0x560467f63090 col:16 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f63508 <> Inherited Implicit 813 +| |-NoThrowAttr 0x560467f63478 +| `-NonNullAttr 0x560467f634d0 1 2 +|-FunctionDecl 0x560467f636e0 col:12 implicit strcmp 'int (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f637d8 <> 'const char *' +| |-ParmVarDecl 0x560467f63840 <> 'const char *' +| `-BuiltinAttr 0x560467f63780 <> Implicit 810 +|-FunctionDecl 0x560467f638b8 prev 0x560467f636e0 /usr/include/string.h:156:12 strcmp 'int (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f63548 col:32 __s1 'const char *' +| |-ParmVarDecl 0x560467f635c8 col:50 __s2 'const char *' +| |-BuiltinAttr 0x560467f63a28 <> Inherited Implicit 810 +| |-NoThrowAttr 0x560467f63968 +| |-PureAttr 0x560467f639c0 +| `-NonNullAttr 0x560467f639e8 1 2 +|-FunctionDecl 0x560467f63cd0 col:12 implicit strncmp 'int (const char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f63de0 <> 'const char *' +| |-ParmVarDecl 0x560467f63e48 <> 'const char *' +| |-ParmVarDecl 0x560467f63eb0 <> 'unsigned long' +| `-BuiltinAttr 0x560467f63d70 <> Implicit 811 +|-FunctionDecl 0x560467f63f30 prev 0x560467f63cd0 /usr/include/string.h:159:12 strncmp 'int (const char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f63a68 col:33 __s1 'const char *' +| |-ParmVarDecl 0x560467f63ae8 col:51 __s2 'const char *' +| |-ParmVarDecl 0x560467f63b60 col:64 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f640a8 <> Inherited Implicit 811 +| |-NoThrowAttr 0x560467f63fe8 +| |-PureAttr 0x560467f64040 +| `-NonNullAttr 0x560467f64068 1 2 +|-FunctionDecl 0x560467f64248 /usr/include/string.h:163:12 strcoll 'int (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f640e8 col:33 __s1 'const char *' +| |-ParmVarDecl 0x560467f64168 col:51 __s2 'const char *' +| |-NoThrowAttr 0x560467f642f8 +| |-PureAttr 0x560467f64350 +| `-NonNullAttr 0x560467f64378 1 2 +|-FunctionDecl 0x560467f64608 col:15 implicit strxfrm 'unsigned long (char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f64700 <> 'char *' +| |-ParmVarDecl 0x560467f64768 <> 'const char *' +| |-ParmVarDecl 0x560467f647d0 <> 'unsigned long' +| `-BuiltinAttr 0x560467f646a8 <> Implicit 814 +|-FunctionDecl 0x560467f64850 prev 0x560467f64608 /usr/include/string.h:166:15 strxfrm 'unsigned long (char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f643d0 col:41 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f64450 col:33 __src 'const char *restrict' +| |-ParmVarDecl 0x560467f644c8 col:47 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f64998 <> Inherited Implicit 814 +| |-NoThrowAttr 0x560467f64908 +| `-NonNullAttr 0x560467f64960 2 +|-RecordDecl 0x560467f649c0 line:27:8 struct __locale_struct definition +| |-RecordDecl 0x560467f64a60 parent 0x560467ec17a8 col:10 struct __locale_data +| |-FieldDecl 0x560467f64ca0 col:25 __locales 'struct __locale_data *[13]' +| |-FieldDecl 0x560467f64d30 col:29 __ctype_b 'const unsigned short *' +| |-FieldDecl 0x560467f67cf0 col:14 __ctype_tolower 'const int *' +| |-FieldDecl 0x560467f67d58 col:14 __ctype_toupper 'const int *' +| `-FieldDecl 0x560467f67e50 col:15 __names 'const char *[13]' +|-TypedefDecl 0x560467f67f50 col:33 referenced __locale_t 'struct __locale_struct *' +| `-PointerType 0x560467f67f00 'struct __locale_struct *' +| `-ElaboratedType 0x560467f67ea0 'struct __locale_struct' sugar +| `-RecordType 0x560467f64a40 'struct __locale_struct' +| `-Record 0x560467f649c0 '__locale_struct' +|-TypedefDecl 0x560467f67fe0 col:20 referenced locale_t '__locale_t':'struct __locale_struct *' +| `-TypedefType 0x560467f67fb0 '__locale_t' sugar +| |-Typedef 0x560467f67f50 '__locale_t' +| `-PointerType 0x560467f67f00 'struct __locale_struct *' +| `-ElaboratedType 0x560467f67ea0 'struct __locale_struct' sugar +| `-RecordType 0x560467f64a40 'struct __locale_struct' +| `-Record 0x560467f649c0 '__locale_struct' +|-FunctionDecl 0x560467f68300 /usr/include/string.h:175:12 strcoll_l 'int (const char *, const char *, locale_t)' extern +| |-ParmVarDecl 0x560467f68050 col:35 __s1 'const char *' +| |-ParmVarDecl 0x560467f680d0 col:53 __s2 'const char *' +| |-ParmVarDecl 0x560467f68170 col:68 __l 'locale_t':'struct __locale_struct *' +| |-NoThrowAttr 0x560467f683b8 +| |-PureAttr 0x560467f68410 +| `-NonNullAttr 0x560467f68438 1 2 3 +|-FunctionDecl 0x560467f68788 /usr/include/string.h:179:15 strxfrm_l 'size_t (char *, const char *, size_t, locale_t)' extern +| |-ParmVarDecl 0x560467f68498 col:32 __dest 'char *' +| |-ParmVarDecl 0x560467f68518 col:52 __src 'const char *' +| |-ParmVarDecl 0x560467f68590 col:66 __n 'size_t':'unsigned long' +| |-ParmVarDecl 0x560467f68608 col:14 __l 'locale_t':'struct __locale_struct *' +| |-NoThrowAttr 0x560467f68848 +| `-NonNullAttr 0x560467f688a0 2 4 +|-FunctionDecl 0x560467f689e0 col:14 implicit strdup 'char *(const char *)' extern +| |-ParmVarDecl 0x560467f68ad8 <> 'const char *' +| `-BuiltinAttr 0x560467f68a80 <> Implicit 873 +|-FunctionDecl 0x560467f68b48 prev 0x560467f689e0 /usr/include/string.h:187:14 strdup 'char *(const char *)' extern +| |-ParmVarDecl 0x560467f688f0 col:34 __s 'const char *' +| |-BuiltinAttr 0x560467f68ca8 <> Inherited Implicit 873 +| |-NoThrowAttr 0x560467f68bf0 +| |-RestrictAttr 0x560467f68c48 malloc +| `-NonNullAttr 0x560467f68c70 1 +|-FunctionDecl 0x560467f68eb0 col:14 implicit strndup 'char *(const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f68fa8 <> 'const char *' +| |-ParmVarDecl 0x560467f69010 <> 'unsigned long' +| `-BuiltinAttr 0x560467f68f50 <> Implicit 874 +|-FunctionDecl 0x560467f69088 prev 0x560467f68eb0 /usr/include/string.h:195:14 strndup 'char *(const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f68d00 col:35 __string 'const char *' +| |-ParmVarDecl 0x560467f68d78 col:52 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f691f8 <> Inherited Implicit 874 +| |-NoThrowAttr 0x560467f69138 +| |-RestrictAttr 0x560467f69190 malloc +| `-NonNullAttr 0x560467f691b8 1 +|-FunctionDecl 0x560467f693b0 col:14 implicit strchr 'char *(const char *, int)' extern +| |-ParmVarDecl 0x560467f694a8 <> 'const char *' +| |-ParmVarDecl 0x560467f69510 <> 'int' +| `-BuiltinAttr 0x560467f69450 <> Implicit 816 +|-FunctionDecl 0x560467f69588 prev 0x560467f693b0 /usr/include/string.h:246:14 strchr 'char *(const char *, int)' extern +| |-ParmVarDecl 0x560467f69238 col:34 __s 'const char *' +| |-ParmVarDecl 0x560467f692b8 col:43 __c 'int' +| |-BuiltinAttr 0x560467f696f8 <> Inherited Implicit 816 +| |-NoThrowAttr 0x560467f69638 +| |-PureAttr 0x560467f69690 +| `-NonNullAttr 0x560467f696b8 1 +|-FunctionDecl 0x560467f69878 col:14 implicit strrchr 'char *(const char *, int)' extern +| |-ParmVarDecl 0x560467f69970 <> 'const char *' +| |-ParmVarDecl 0x560467f699d8 <> 'int' +| `-BuiltinAttr 0x560467f69918 <> Implicit 819 +|-FunctionDecl 0x560467f69a50 prev 0x560467f69878 /usr/include/string.h:273:14 strrchr 'char *(const char *, int)' extern +| |-ParmVarDecl 0x560467f69738 col:35 __s 'const char *' +| |-ParmVarDecl 0x560467f697b8 col:44 __c 'int' +| |-BuiltinAttr 0x560467f69bb8 <> Inherited Implicit 819 +| |-NoThrowAttr 0x560467f69b00 +| |-PureAttr 0x560467f69b58 +| `-NonNullAttr 0x560467f69b80 1 +|-FunctionDecl 0x560467f69dd8 col:15 implicit strcspn 'unsigned long (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f69ed0 <> 'const char *' +| |-ParmVarDecl 0x560467f69f38 <> 'const char *' +| `-BuiltinAttr 0x560467f69e78 <> Implicit 817 +|-FunctionDecl 0x560467f69fb0 prev 0x560467f69dd8 /usr/include/string.h:293:15 strcspn 'unsigned long (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f69bf8 col:36 __s 'const char *' +| |-ParmVarDecl 0x560467f69c78 col:53 __reject 'const char *' +| |-BuiltinAttr 0x560467f6a118 <> Inherited Implicit 817 +| |-NoThrowAttr 0x560467f6a060 +| |-PureAttr 0x560467f6a0b8 +| `-NonNullAttr 0x560467f6a0e0 1 2 +|-FunctionDecl 0x560467f6a2b0 col:15 implicit strspn 'unsigned long (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f6a3a8 <> 'const char *' +| |-ParmVarDecl 0x560467f6a410 <> 'const char *' +| `-BuiltinAttr 0x560467f6a350 <> Implicit 820 +|-FunctionDecl 0x560467f6a488 prev 0x560467f6a2b0 /usr/include/string.h:297:15 strspn 'unsigned long (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f6a158 col:35 __s 'const char *' +| |-ParmVarDecl 0x560467f6a1d8 col:52 __accept 'const char *' +| |-BuiltinAttr 0x560467f6a5f8 <> Inherited Implicit 820 +| |-NoThrowAttr 0x560467f6a538 +| |-PureAttr 0x560467f6a590 +| `-NonNullAttr 0x560467f6a5b8 1 2 +|-FunctionDecl 0x560467f6a7d0 col:14 implicit strpbrk 'char *(const char *, const char *)' extern +| |-ParmVarDecl 0x560467f6a8c8 <> 'const char *' +| |-ParmVarDecl 0x560467f6a930 <> 'const char *' +| `-BuiltinAttr 0x560467f6a870 <> Implicit 818 +|-FunctionDecl 0x560467f6a9a8 prev 0x560467f6a7d0 /usr/include/string.h:323:14 strpbrk 'char *(const char *, const char *)' extern +| |-ParmVarDecl 0x560467f6a638 col:35 __s 'const char *' +| |-ParmVarDecl 0x560467f6a6b8 col:52 __accept 'const char *' +| |-BuiltinAttr 0x560467f6ab18 <> Inherited Implicit 818 +| |-NoThrowAttr 0x560467f6aa58 +| |-PureAttr 0x560467f6aab0 +| `-NonNullAttr 0x560467f6aad8 1 2 +|-FunctionDecl 0x560467f6bd30 col:14 implicit strstr 'char *(const char *, const char *)' extern +| |-ParmVarDecl 0x560467f6be28 <> 'const char *' +| |-ParmVarDecl 0x560467f6be90 <> 'const char *' +| `-BuiltinAttr 0x560467f6bdd0 <> Implicit 821 +|-FunctionDecl 0x560467f6bf08 prev 0x560467f6bd30 /usr/include/string.h:350:14 strstr 'char *(const char *, const char *)' extern +| |-ParmVarDecl 0x560467f6ab58 col:34 __haystack 'const char *' +| |-ParmVarDecl 0x560467f6abd8 col:58 __needle 'const char *' +| |-BuiltinAttr 0x560467f6c078 <> Inherited Implicit 821 +| |-NoThrowAttr 0x560467f6bfb8 +| |-PureAttr 0x560467f6c010 +| `-NonNullAttr 0x560467f6c038 1 2 +|-FunctionDecl 0x560467f6c1f8 col:14 implicit strtok 'char *(char *, const char *)' extern +| |-ParmVarDecl 0x560467f6c2f0 <> 'char *' +| |-ParmVarDecl 0x560467f6c358 <> 'const char *' +| `-BuiltinAttr 0x560467f6c298 <> Implicit 822 +|-FunctionDecl 0x560467f6c3d0 prev 0x560467f6c1f8 /usr/include/string.h:356:14 strtok 'char *(char *, const char *)' extern +| |-ParmVarDecl 0x560467f6c0b8 col:39 __s 'char *restrict' +| |-ParmVarDecl 0x560467f6c138 col:67 __delim 'const char *restrict' +| |-BuiltinAttr 0x560467f6c518 <> Inherited Implicit 822 +| |-NoThrowAttr 0x560467f6c480 +| `-NonNullAttr 0x560467f6c4d8 2 +|-FunctionDecl 0x560467f6c7f0 /usr/include/string.h:361:14 __strtok_r 'char *(char *restrict, const char *restrict, char **restrict)' extern +| |-ParmVarDecl 0x560467f6c558 col:43 __s 'char *restrict' +| |-ParmVarDecl 0x560467f6c5d8 col:28 __delim 'const char *restrict' +| |-ParmVarDecl 0x560467f6c680 col:23 __save_ptr 'char **restrict' +| |-NoThrowAttr 0x560467f6c8a8 +| `-NonNullAttr 0x560467f6c900 2 3 +|-FunctionDecl 0x560467f6cb38 /usr/include/string.h:366:14 strtok_r 'char *(char *restrict, const char *restrict, char **restrict)' extern +| |-ParmVarDecl 0x560467f6c950 col:41 __s 'char *restrict' +| |-ParmVarDecl 0x560467f6c9d0 col:69 __delim 'const char *restrict' +| |-ParmVarDecl 0x560467f6ca50 col:28 __save_ptr 'char **restrict' +| |-NoThrowAttr 0x560467f6cbf0 +| `-NonNullAttr 0x560467f6cc48 2 3 +|-FunctionDecl 0x560467f54e38 col:15 implicit strlen 'unsigned long (const char *)' extern +| |-ParmVarDecl 0x560467f54f30 <> 'const char *' +| `-BuiltinAttr 0x560467f54ed8 <> Implicit 825 +|-FunctionDecl 0x560467f54fa0 prev 0x560467f54e38 /usr/include/string.h:407:15 strlen 'unsigned long (const char *)' extern +| |-ParmVarDecl 0x560467f6cca0 col:35 __s 'const char *' +| |-BuiltinAttr 0x560467f55108 <> Inherited Implicit 825 +| |-NoThrowAttr 0x560467f55048 +| |-PureAttr 0x560467f550a0 +| `-NonNullAttr 0x560467f550c8 1 +|-FunctionDecl 0x560467f552f8 /usr/include/string.h:413:15 strnlen 'size_t (const char *, size_t)' extern +| |-ParmVarDecl 0x560467f55148 col:36 __string 'const char *' +| |-ParmVarDecl 0x560467f551c0 col:53 __maxlen 'size_t':'unsigned long' +| |-NoThrowAttr 0x560467f553a8 +| |-PureAttr 0x560467f55400 +| `-NonNullAttr 0x560467f55428 1 +|-FunctionDecl 0x560467f55550 col:14 implicit strerror 'char *(int)' extern +| |-ParmVarDecl 0x560467f55648 <> 'int' +| `-BuiltinAttr 0x560467f555f0 <> Implicit 824 +|-FunctionDecl 0x560467f556b8 prev 0x560467f55550 /usr/include/string.h:419:14 strerror 'char *(int)' extern +| |-ParmVarDecl 0x560467f55480 col:28 __errnum 'int' +| |-BuiltinAttr 0x560467f557b8 <> Inherited Implicit 824 +| `-NoThrowAttr 0x560467f55760 +|-FunctionDecl 0x560467f55ab0 /usr/include/string.h:432:28 strerror_r 'int (int, char *, size_t)' extern +| |-ParmVarDecl 0x560467f557f8 col:12 __errnum 'int' +| |-ParmVarDecl 0x560467f55878 col:28 __buf 'char *' +| |-ParmVarDecl 0x560467f558f0 col:42 __buflen 'size_t':'unsigned long' +| |-AsmLabelAttr 0x560467f55b50 <:33:1> "__xpg_strerror_r" IsLiteralLabel +| |-NoThrowAttr 0x560467f55be0 +| `-NonNullAttr 0x560467f55c08 2 +|-FunctionDecl 0x560467f56630 /usr/include/string.h:458:14 strerror_l 'char *(int, locale_t)' extern +| |-ParmVarDecl 0x560467f55c60 col:30 __errnum 'int' +| |-ParmVarDecl 0x560467f55cd8 col:49 __l 'locale_t':'struct __locale_struct *' +| `-NoThrowAttr 0x560467f566e0 +|-FunctionDecl 0x560467f56930 col:12 implicit bcmp 'int (const void *, const void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f56a28 <> 'const void *' +| |-ParmVarDecl 0x560467f56a90 <> 'const void *' +| |-ParmVarDecl 0x560467f56af8 <> 'unsigned long' +| `-BuiltinAttr 0x560467f569d0 <> Implicit 878 +|-FunctionDecl 0x560467f56b78 prev 0x560467f56930 /usr/include/strings.h:34:12 bcmp 'int (const void *, const void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f56750 col:30 __s1 'const void *' +| |-ParmVarDecl 0x560467f567d0 col:48 __s2 'const void *' +| |-ParmVarDecl 0x560467f56848 col:61 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f56ce8 <> Inherited Implicit 878 +| |-NoThrowAttr 0x560467f56c30 +| |-PureAttr 0x560467f56c88 +| `-NonNullAttr 0x560467f56cb0 1 2 +|-FunctionDecl 0x560467f56f88 /usr/include/strings.h:38:13 bcopy 'void (const void *, void *, size_t)' extern +| |-ParmVarDecl 0x560467f56d28 col:32 __src 'const void *' +| |-ParmVarDecl 0x560467f56da8 col:45 __dest 'void *' +| |-ParmVarDecl 0x560467f56e20 col:60 __n 'size_t':'unsigned long' +| |-NoThrowAttr 0x560467f57040 +| `-NonNullAttr 0x560467f57098 1 2 +|-FunctionDecl 0x560467f57298 col:13 implicit bzero 'void (void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f57390 <> 'void *' +| |-ParmVarDecl 0x560467f573f8 <> 'unsigned long' +| `-BuiltinAttr 0x560467f57338 <> Implicit 877 +|-FunctionDecl 0x560467f57470 prev 0x560467f57298 /usr/include/strings.h:42:13 bzero 'void (void *, unsigned long)' extern +| |-ParmVarDecl 0x560467f570f0 col:26 __s 'void *' +| |-ParmVarDecl 0x560467f57168 col:38 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f75010 <> Inherited Implicit 877 +| |-NoThrowAttr 0x560467f57520 +| `-NonNullAttr 0x560467f57578 1 +|-FunctionDecl 0x560467f75190 col:14 implicit index 'char *(const char *, int)' extern +| |-ParmVarDecl 0x560467f75288 <> 'const char *' +| |-ParmVarDecl 0x560467f752f0 <> 'int' +| `-BuiltinAttr 0x560467f75230 <> Implicit 875 +|-FunctionDecl 0x560467f75368 prev 0x560467f75190 /usr/include/strings.h:68:14 index 'char *(const char *, int)' extern +| |-ParmVarDecl 0x560467f75050 col:33 __s 'const char *' +| |-ParmVarDecl 0x560467f750d0 col:42 __c 'int' +| |-BuiltinAttr 0x560467f754d8 <> Inherited Implicit 875 +| |-NoThrowAttr 0x560467f75418 +| |-PureAttr 0x560467f75470 +| `-NonNullAttr 0x560467f75498 1 +|-FunctionDecl 0x560467f75658 col:14 implicit rindex 'char *(const char *, int)' extern +| |-ParmVarDecl 0x560467f75750 <> 'const char *' +| |-ParmVarDecl 0x560467f757b8 <> 'int' +| `-BuiltinAttr 0x560467f756f8 <> Implicit 876 +|-FunctionDecl 0x560467f75830 prev 0x560467f75658 /usr/include/strings.h:96:14 rindex 'char *(const char *, int)' extern +| |-ParmVarDecl 0x560467f75518 col:34 __s 'const char *' +| |-ParmVarDecl 0x560467f75598 col:43 __c 'int' +| |-BuiltinAttr 0x560467f75998 <> Inherited Implicit 876 +| |-NoThrowAttr 0x560467f758e0 +| |-PureAttr 0x560467f75938 +| `-NonNullAttr 0x560467f75960 1 +|-FunctionDecl 0x560467f75aa0 /usr/include/strings.h:104:12 ffs 'int (int)' extern +| |-ParmVarDecl 0x560467f759d8 col:21 __i 'int' +| |-NoThrowAttr 0x560467f75b48 +| `-ConstAttr 0x560467f75ba0 +|-FunctionDecl 0x560467f75cb0 /usr/include/strings.h:110:12 ffsl 'int (long)' extern +| |-ParmVarDecl 0x560467f75be0 col:27 __l 'long' +| |-NoThrowAttr 0x560467f75d58 +| `-ConstAttr 0x560467f75db0 +|-FunctionDecl 0x560467f75ec0 /usr/include/strings.h:111:26 ffsll 'int (long long)' extern +| |-ParmVarDecl 0x560467f75df0 col:47 __ll 'long long' +| |-NoThrowAttr 0x560467f75f68 +| `-ConstAttr 0x560467f75fc0 +|-FunctionDecl 0x560467f76180 col:12 implicit strcasecmp 'int (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f76278 <> 'const char *' +| |-ParmVarDecl 0x560467f762e0 <> 'const char *' +| `-BuiltinAttr 0x560467f76220 <> Implicit 879 +|-FunctionDecl 0x560467f76358 prev 0x560467f76180 /usr/include/strings.h:116:12 strcasecmp 'int (const char *, const char *)' extern +| |-ParmVarDecl 0x560467f76020 col:36 __s1 'const char *' +| |-ParmVarDecl 0x560467f760a0 col:54 __s2 'const char *' +| |-BuiltinAttr 0x560467f764c8 <> Inherited Implicit 879 +| |-NoThrowAttr 0x560467f76408 +| |-PureAttr 0x560467f76460 +| `-NonNullAttr 0x560467f76488 1 2 +|-FunctionDecl 0x560467f766e8 col:12 implicit strncasecmp 'int (const char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f767e0 <> 'const char *' +| |-ParmVarDecl 0x560467f76848 <> 'const char *' +| |-ParmVarDecl 0x560467f768b0 <> 'unsigned long' +| `-BuiltinAttr 0x560467f76788 <> Implicit 880 +|-FunctionDecl 0x560467f76930 prev 0x560467f766e8 /usr/include/strings.h:120:12 strncasecmp 'int (const char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f76508 col:37 __s1 'const char *' +| |-ParmVarDecl 0x560467f76588 col:55 __s2 'const char *' +| |-ParmVarDecl 0x560467f76600 col:68 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f76aa8 <> Inherited Implicit 880 +| |-NoThrowAttr 0x560467f769e8 +| |-PureAttr 0x560467f76a40 +| `-NonNullAttr 0x560467f76a68 1 2 +|-FunctionDecl 0x560467f76ce8 /usr/include/strings.h:128:12 strcasecmp_l 'int (const char *, const char *, locale_t)' extern +| |-ParmVarDecl 0x560467f76ae8 col:38 __s1 'const char *' +| |-ParmVarDecl 0x560467f76b68 col:56 __s2 'const char *' +| |-ParmVarDecl 0x560467f76be0 col:71 __loc 'locale_t':'struct __locale_struct *' +| |-NoThrowAttr 0x560467f76da0 +| |-PureAttr 0x560467f76df8 +| `-NonNullAttr 0x560467f76e20 1 2 3 +|-FunctionDecl 0x560467f771e0 /usr/include/strings.h:133:12 strncasecmp_l 'int (const char *, const char *, size_t, locale_t)' extern +| |-ParmVarDecl 0x560467f76e78 col:39 __s1 'const char *' +| |-ParmVarDecl 0x560467f76ef8 col:57 __s2 'const char *' +| |-ParmVarDecl 0x560467f76f70 col:13 __n 'size_t':'unsigned long' +| |-ParmVarDecl 0x560467f77030 col:27 __loc 'locale_t':'struct __locale_struct *' +| |-NoThrowAttr 0x560467f772a0 +| |-PureAttr 0x560467f772f8 +| `-NonNullAttr 0x560467f77320 1 2 4 +|-FunctionDecl 0x560467f774a8 /usr/include/string.h:466:13 explicit_bzero 'void (void *, size_t)' extern +| |-ParmVarDecl 0x560467f77378 col:35 __s 'void *' +| |-ParmVarDecl 0x560467f773f0 col:47 __n 'size_t':'unsigned long' +| |-NoThrowAttr 0x560467f77558 +| `-NonNullAttr 0x560467f775b0 1 +|-FunctionDecl 0x560467f777e0 /usr/include/string.h:471:14 strsep 'char *(char **restrict, const char *restrict)' extern +| |-ParmVarDecl 0x560467f77600 col:40 __stringp 'char **restrict' +| |-ParmVarDecl 0x560467f77680 col:31 __delim 'const char *restrict' +| |-NoThrowAttr 0x560467f77890 +| `-NonNullAttr 0x560467f778e8 1 2 +|-FunctionDecl 0x560467f779d8 /usr/include/string.h:478:14 strsignal 'char *(int)' extern +| |-ParmVarDecl 0x560467f77940 col:29 __sig 'int' +| `-NoThrowAttr 0x560467f77a80 +|-FunctionDecl 0x560467f77c50 /usr/include/string.h:489:14 __stpcpy 'char *(char *restrict, const char *restrict)' extern +| |-ParmVarDecl 0x560467f77af0 col:41 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f77b70 col:72 __src 'const char *restrict' +| |-NoThrowAttr 0x560467f77d00 +| `-NonNullAttr 0x560467f77d58 1 2 +|-FunctionDecl 0x560467f77f10 col:14 implicit stpcpy 'char *(char *, const char *)' extern +| |-ParmVarDecl 0x560467f78040 <> 'char *' +| |-ParmVarDecl 0x560467f780a8 <> 'const char *' +| `-BuiltinAttr 0x560467f77fb0 <> Implicit 871 +|-FunctionDecl 0x560467f78120 prev 0x560467f77f10 /usr/include/string.h:491:14 stpcpy 'char *(char *, const char *)' extern +| |-ParmVarDecl 0x560467f77db0 col:39 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f77e30 col:70 __src 'const char *restrict' +| |-BuiltinAttr 0x560467f78268 <> Inherited Implicit 871 +| |-NoThrowAttr 0x560467f781d0 +| `-NonNullAttr 0x560467f78228 1 2 +|-FunctionDecl 0x560467f78488 /usr/include/string.h:496:14 __stpncpy 'char *(char *restrict, const char *restrict, size_t)' extern +| |-ParmVarDecl 0x560467f782a8 col:42 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f78328 col:27 __src 'const char *restrict' +| |-ParmVarDecl 0x560467f783a0 col:41 __n 'size_t':'unsigned long' +| |-NoThrowAttr 0x560467f78540 +| `-NonNullAttr 0x560467f78598 1 2 +|-FunctionDecl 0x560467f787d0 col:14 implicit stpncpy 'char *(char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f788c8 <> 'char *' +| |-ParmVarDecl 0x560467f78930 <> 'const char *' +| |-ParmVarDecl 0x560467f78998 <> 'unsigned long' +| `-BuiltinAttr 0x560467f78870 <> Implicit 872 +|-FunctionDecl 0x560467f78a18 prev 0x560467f787d0 /usr/include/string.h:499:14 stpncpy 'char *(char *, const char *, unsigned long)' extern +| |-ParmVarDecl 0x560467f785f0 col:40 __dest 'char *restrict' +| |-ParmVarDecl 0x560467f78670 col:32 __src 'const char *restrict' +| |-ParmVarDecl 0x560467f786e8 col:46 __n 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467f78b68 <> Inherited Implicit 872 +| |-NoThrowAttr 0x560467f78ad0 +| `-NonNullAttr 0x560467f78b28 1 2 +|-TypedefDecl 0x560467f78ba8 col:23 __u_char 'unsigned char' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x560467f78c18 col:28 __u_short 'unsigned short' +| `-BuiltinType 0x560467ec1930 'unsigned short' +|-TypedefDecl 0x560467f78c88 col:22 __u_int 'unsigned int' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f78cf8 col:27 __u_long 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f78d68 col:21 referenced __int8_t 'signed char' +| `-BuiltinType 0x560467ec1870 'signed char' +|-TypedefDecl 0x560467f78dd8 col:23 referenced __uint8_t 'unsigned char' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x560467f78e48 col:26 referenced __int16_t 'short' +| `-BuiltinType 0x560467ec1890 'short' +|-TypedefDecl 0x560467f78eb8 col:28 referenced __uint16_t 'unsigned short' +| `-BuiltinType 0x560467ec1930 'unsigned short' +|-TypedefDecl 0x560467f78f28 col:20 referenced __int32_t 'int' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467f78f98 col:22 referenced __uint32_t 'unsigned int' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f7e470 col:25 referenced __int64_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f7e4e0 col:27 referenced __uint64_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7e570 col:18 referenced __int_least8_t '__int8_t':'signed char' +| `-TypedefType 0x560467f7e540 '__int8_t' sugar +| |-Typedef 0x560467f78d68 '__int8_t' +| `-BuiltinType 0x560467ec1870 'signed char' +|-TypedefDecl 0x560467f7e600 col:19 referenced __uint_least8_t '__uint8_t':'unsigned char' +| `-TypedefType 0x560467f7e5d0 '__uint8_t' sugar +| |-Typedef 0x560467f78dd8 '__uint8_t' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x560467f7e690 col:19 referenced __int_least16_t '__int16_t':'short' +| `-TypedefType 0x560467f7e660 '__int16_t' sugar +| |-Typedef 0x560467f78e48 '__int16_t' +| `-BuiltinType 0x560467ec1890 'short' +|-TypedefDecl 0x560467f7e720 col:20 referenced __uint_least16_t '__uint16_t':'unsigned short' +| `-TypedefType 0x560467f7e6f0 '__uint16_t' sugar +| |-Typedef 0x560467f78eb8 '__uint16_t' +| `-BuiltinType 0x560467ec1930 'unsigned short' +|-TypedefDecl 0x560467f7e7b0 col:19 referenced __int_least32_t '__int32_t':'int' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467f7e840 col:20 referenced __uint_least32_t '__uint32_t':'unsigned int' +| `-TypedefType 0x560467f7e810 '__uint32_t' sugar +| |-Typedef 0x560467f78f98 '__uint32_t' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f7e8d0 col:19 referenced __int_least64_t '__int64_t':'long' +| `-TypedefType 0x560467f7e8a0 '__int64_t' sugar +| |-Typedef 0x560467f7e470 '__int64_t' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f7e960 col:20 referenced __uint_least64_t '__uint64_t':'unsigned long' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7e9d0 col:18 __quad_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f7ea40 col:27 __u_quad_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7eab0 col:18 referenced __intmax_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f7eb20 col:27 referenced __uintmax_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7eb90 col:25 __dev_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7ec00 col:25 __uid_t 'unsigned int' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f7ec70 col:25 __gid_t 'unsigned int' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f7ece0 col:25 __ino_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7ed50 col:27 __ino64_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7edc0 col:26 __mode_t 'unsigned int' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f7ee30 col:27 __nlink_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7eea0 col:25 __off_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f7ef10 col:27 referenced __off64_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f7ef80 col:25 __pid_t 'int' +| `-BuiltinType 0x560467ec18b0 'int' +|-RecordDecl 0x560467f7efd8 col:24 struct definition +| `-FieldDecl 0x560467f7f120 col:37 __val 'int[2]' +|-TypedefDecl 0x560467f7f1c8 col:26 __fsid_t 'struct __fsid_t':'__fsid_t' +| `-ElaboratedType 0x560467f7f170 'struct __fsid_t' sugar +| `-RecordType 0x560467f7f060 '__fsid_t' +| `-Record 0x560467f7efd8 '' +|-TypedefDecl 0x560467f7f250 col:27 __clock_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f7f2c0 col:26 __rlim_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7f330 col:28 __rlim64_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f7f3a0 col:24 __id_t 'unsigned int' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f7f410 col:26 __time_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f87188 col:30 __useconds_t 'unsigned int' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f871f8 col:31 __suseconds_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f87268 col:33 __suseconds64_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f872d8 col:27 __daddr_t 'int' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467f87348 col:25 __key_t 'int' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467f873b8 col:29 __clockid_t 'int' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467f87428 col:27 __timer_t 'void *' +| `-PointerType 0x560467ec1f30 'void *' +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560467f87498 col:29 __blksize_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f87508 col:28 __blkcnt_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f87578 col:30 __blkcnt64_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f875e8 col:30 __fsblkcnt_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f87658 col:32 __fsblkcnt64_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f876c8 col:30 __fsfilcnt_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f87738 col:32 __fsfilcnt64_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f877a8 col:28 __fsword_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f87818 col:27 __ssize_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f87888 col:33 __syscall_slong_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f878f8 col:33 __syscall_ulong_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f87980 col:19 __loff_t '__off64_t':'long' +| `-TypedefType 0x560467f87950 '__off64_t' sugar +| |-Typedef 0x560467f7ef10 '__off64_t' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f879f0 col:15 __caddr_t 'char *' +| `-PointerType 0x560467ec23a0 'char *' +| `-BuiltinType 0x560467ec1850 'char' +|-TypedefDecl 0x560467f87a60 col:25 __intptr_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f87ad0 col:23 __socklen_t 'unsigned int' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f87b40 col:13 __sig_atomic_t 'int' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467f87ba8 col:18 referenced int8_t '__int8_t':'signed char' +| `-TypedefType 0x560467f7e540 '__int8_t' sugar +| |-Typedef 0x560467f78d68 '__int8_t' +| `-BuiltinType 0x560467ec1870 'signed char' +|-TypedefDecl 0x560467f87c10 col:19 referenced int16_t '__int16_t':'short' +| `-TypedefType 0x560467f7e660 '__int16_t' sugar +| |-Typedef 0x560467f78e48 '__int16_t' +| `-BuiltinType 0x560467ec1890 'short' +|-TypedefDecl 0x560467f87c78 col:19 referenced int32_t '__int32_t':'int' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467f87ce0 col:19 referenced int64_t '__int64_t':'long' +| `-TypedefType 0x560467f7e8a0 '__int64_t' sugar +| |-Typedef 0x560467f7e470 '__int64_t' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f87d48 col:19 referenced uint8_t '__uint8_t':'unsigned char' +| `-TypedefType 0x560467f7e5d0 '__uint8_t' sugar +| |-Typedef 0x560467f78dd8 '__uint8_t' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x560467f87db0 col:20 referenced uint16_t '__uint16_t':'unsigned short' +| `-TypedefType 0x560467f7e6f0 '__uint16_t' sugar +| |-Typedef 0x560467f78eb8 '__uint16_t' +| `-BuiltinType 0x560467ec1930 'unsigned short' +|-TypedefDecl 0x560467f87e18 col:20 referenced uint32_t '__uint32_t':'unsigned int' +| `-TypedefType 0x560467f7e810 '__uint32_t' sugar +| |-Typedef 0x560467f78f98 '__uint32_t' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f87e80 col:20 referenced uint64_t '__uint64_t':'unsigned long' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f87f10 col:24 int_least8_t '__int_least8_t':'signed char' +| `-TypedefType 0x560467f87ee0 '__int_least8_t' sugar +| |-Typedef 0x560467f7e570 '__int_least8_t' +| `-TypedefType 0x560467f7e540 '__int8_t' sugar +| |-Typedef 0x560467f78d68 '__int8_t' +| `-BuiltinType 0x560467ec1870 'signed char' +|-TypedefDecl 0x560467f87fa0 col:25 int_least16_t '__int_least16_t':'short' +| `-TypedefType 0x560467f87f70 '__int_least16_t' sugar +| |-Typedef 0x560467f7e690 '__int_least16_t' +| `-TypedefType 0x560467f7e660 '__int16_t' sugar +| |-Typedef 0x560467f78e48 '__int16_t' +| `-BuiltinType 0x560467ec1890 'short' +|-TypedefDecl 0x560467f88030 col:25 int_least32_t '__int_least32_t':'int' +| `-TypedefType 0x560467f88000 '__int_least32_t' sugar +| |-Typedef 0x560467f7e7b0 '__int_least32_t' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467f880c0 col:25 int_least64_t '__int_least64_t':'long' +| `-TypedefType 0x560467f88090 '__int_least64_t' sugar +| |-Typedef 0x560467f7e8d0 '__int_least64_t' +| `-TypedefType 0x560467f7e8a0 '__int64_t' sugar +| |-Typedef 0x560467f7e470 '__int64_t' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f8c420 col:25 uint_least8_t '__uint_least8_t':'unsigned char' +| `-TypedefType 0x560467f88120 '__uint_least8_t' sugar +| |-Typedef 0x560467f7e600 '__uint_least8_t' +| `-TypedefType 0x560467f7e5d0 '__uint8_t' sugar +| |-Typedef 0x560467f78dd8 '__uint8_t' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x560467f8c4b0 col:26 uint_least16_t '__uint_least16_t':'unsigned short' +| `-TypedefType 0x560467f8c480 '__uint_least16_t' sugar +| |-Typedef 0x560467f7e720 '__uint_least16_t' +| `-TypedefType 0x560467f7e6f0 '__uint16_t' sugar +| |-Typedef 0x560467f78eb8 '__uint16_t' +| `-BuiltinType 0x560467ec1930 'unsigned short' +|-TypedefDecl 0x560467f8c540 col:26 uint_least32_t '__uint_least32_t':'unsigned int' +| `-TypedefType 0x560467f8c510 '__uint_least32_t' sugar +| |-Typedef 0x560467f7e840 '__uint_least32_t' +| `-TypedefType 0x560467f7e810 '__uint32_t' sugar +| |-Typedef 0x560467f78f98 '__uint32_t' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f8c5d0 col:26 uint_least64_t '__uint_least64_t':'unsigned long' +| `-TypedefType 0x560467f8c5a0 '__uint_least64_t' sugar +| |-Typedef 0x560467f7e960 '__uint_least64_t' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f8c640 col:22 int_fast8_t 'signed char' +| `-BuiltinType 0x560467ec1870 'signed char' +|-TypedefDecl 0x560467f8c6b0 col:19 int_fast16_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f8c720 col:19 int_fast32_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f8c790 col:19 int_fast64_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f8c800 col:24 uint_fast8_t 'unsigned char' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x560467f8c870 col:27 uint_fast16_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f8c8e0 col:27 uint_fast32_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f8c950 col:27 uint_fast64_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f8c9c0 col:19 referenced intptr_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f8ca30 col:27 referenced uintptr_t 'unsigned long' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f8cac0 col:21 intmax_t '__intmax_t':'long' +| `-TypedefType 0x560467f8ca90 '__intmax_t' sugar +| |-Typedef 0x560467f7eab0 '__intmax_t' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467f8cb50 col:22 uintmax_t '__uintmax_t':'unsigned long' +| `-TypedefType 0x560467f8cb20 '__uintmax_t' sugar +| |-Typedef 0x560467f7eb20 '__uintmax_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f8cc10 col:17 referenced ecs_flags8_t 'uint8_t':'unsigned char' +| `-TypedefType 0x560467f8cbe0 'uint8_t' sugar +| |-Typedef 0x560467f87d48 'uint8_t' +| `-TypedefType 0x560467f7e5d0 '__uint8_t' sugar +| |-Typedef 0x560467f78dd8 '__uint8_t' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x560467f8cca0 col:18 ecs_flags16_t 'uint16_t':'unsigned short' +| `-TypedefType 0x560467f8cc70 'uint16_t' sugar +| |-Typedef 0x560467f87db0 'uint16_t' +| `-TypedefType 0x560467f7e6f0 '__uint16_t' sugar +| |-Typedef 0x560467f78eb8 '__uint16_t' +| `-BuiltinType 0x560467ec1930 'unsigned short' +|-TypedefDecl 0x560467f8cd30 col:18 referenced ecs_flags32_t 'uint32_t':'unsigned int' +| `-TypedefType 0x560467f8cd00 'uint32_t' sugar +| |-Typedef 0x560467f87e18 'uint32_t' +| `-TypedefType 0x560467f7e810 '__uint32_t' sugar +| |-Typedef 0x560467f78f98 '__uint32_t' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x560467f8cdc0 col:18 referenced ecs_flags64_t 'uint64_t':'unsigned long' +| `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| |-Typedef 0x560467f87e80 'uint64_t' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467f8ce50 col:17 referenced ecs_size_t 'int32_t':'int' +| `-TypedefType 0x560467f8ce20 'int32_t' sugar +| |-Typedef 0x560467f87c78 'int32_t' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-RecordDecl 0x560467f8d058 col:16 struct ecs_vector_t +|-TypedefDecl 0x560467f8d158 col:29 referenced ecs_vector_t 'struct ecs_vector_t':'struct ecs_vector_t' +| `-ElaboratedType 0x560467f8d100 'struct ecs_vector_t' sugar +| `-RecordType 0x560467f8d0e0 'struct ecs_vector_t' +| `-Record 0x560467f8d058 'ecs_vector_t' +|-TypedefDecl 0x560467fa7850 line:775:15 referenced ecs_comparator_t 'int (*)(const void *, const void *)' +| `-PointerType 0x560467f8d370 'int (*)(const void *, const void *)' +| `-ParenType 0x560467f8d310 'int (const void *, const void *)' sugar +| `-FunctionProtoType 0x560467f8d2d0 'int (const void *, const void *)' cdecl +| |-BuiltinType 0x560467ec18b0 'int' +| |-PointerType 0x560467f594d0 'const void *' +| | `-QualType 0x560467ec1811 'const void' const +| | `-BuiltinType 0x560467ec1810 'void' +| `-PointerType 0x560467f594d0 'const void *' +| `-QualType 0x560467ec1811 'const void' const +| `-BuiltinType 0x560467ec1810 'void' +|-FunctionDecl 0x560467fa7bc8 line:781:15 _ecs_vector_new 'ecs_vector_t *(ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fa7930 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fa79d0 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fa7a48 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x5604680fd4b0 +| `-ParagraphComment 0x5604680fd480 +| `-TextComment 0x5604680fd450 Text=" Create new vector. " +|-FunctionDecl 0x560467fa7f48 line:794:15 _ecs_vector_from_array 'ecs_vector_t *(ecs_size_t, int16_t, int32_t, void *)' +| |-ParmVarDecl 0x560467fa7c90 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fa7d08 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fa7d80 col:13 elem_count 'int32_t':'int' +| `-ParmVarDecl 0x560467fa7e00 col:11 array 'void *' +|-FunctionDecl 0x560467fa8228 line:805:6 _ecs_vector_zero 'void (ecs_vector_t *, ecs_size_t, int16_t)' +| |-ParmVarDecl 0x560467fa8018 col:19 vector 'ecs_vector_t *' +| |-ParmVarDecl 0x560467fa8090 col:16 elem_size 'ecs_size_t':'int' +| `-ParmVarDecl 0x560467fa8108 col:13 offset 'int16_t':'short' +|-FunctionDecl 0x560467fa8408 line:815:6 ecs_vector_free 'void (ecs_vector_t *)' +| |-ParmVarDecl 0x560467fa8318 col:19 vector 'ecs_vector_t *' +| `-FullComment 0x5604680fd580 +| `-ParagraphComment 0x5604680fd550 +| `-TextComment 0x5604680fd520 Text=" Free vector " +|-FunctionDecl 0x560467fa8578 line:820:6 ecs_vector_clear 'void (ecs_vector_t *)' +| |-ParmVarDecl 0x560467fa84e8 col:19 vector 'ecs_vector_t *' +| `-FullComment 0x56046811bf10 +| `-ParagraphComment 0x5604680fd620 +| `-TextComment 0x5604680fd5f0 Text=" Clear values in vector " +|-FunctionDecl 0x560467fa8fe0 line:825:6 ecs_vector_assert_size 'void (ecs_vector_t *, ecs_size_t)' +| |-ParmVarDecl 0x560467fa8658 col:19 vector_inout 'ecs_vector_t *' +| |-ParmVarDecl 0x560467fa86d0 col:16 elem_size 'ecs_size_t':'int' +| `-FullComment 0x56046811bfe0 +| `-ParagraphComment 0x56046811bfb0 +| `-TextComment 0x56046811bf80 Text=" Assert when the provided size does not match the vector type. " +|-FunctionDecl 0x560467fa9350 line:831:7 _ecs_vector_add 'void *(ecs_vector_t **, ecs_size_t, int16_t)' +| |-ParmVarDecl 0x560467fa9130 col:20 array_inout 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fa91a8 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fa9220 col:13 offset 'int16_t':'short' +| `-FullComment 0x56046811c0b0 +| `-ParagraphComment 0x56046811c080 +| `-TextComment 0x56046811c050 Text=" Add element to vector. " +|-FunctionDecl 0x560467fa9700 line:844:7 _ecs_vector_insert_at 'void *(ecs_vector_t **, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fa9450 col:20 array_inout 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fa94c8 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fa9540 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fa95b8 col:13 index 'int32_t':'int' +| `-FullComment 0x56046811c180 +| `-ParagraphComment 0x56046811c150 +| `-TextComment 0x56046811c120 Text=" Insert element to vector. " +|-FunctionDecl 0x560467fa9a18 line:858:7 _ecs_vector_addn 'void *(ecs_vector_t **, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fa9800 col:20 array_inout 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fa9878 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fa98f0 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fa9968 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811c250 +| `-ParagraphComment 0x56046811c220 +| `-TextComment 0x56046811c1f0 Text=" Add n elements to the vector. " +|-FunctionDecl 0x560467fa9e30 line:872:7 _ecs_vector_get 'void *(const ecs_vector_t *, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fa9b78 col:25 vector 'const ecs_vector_t *' +| |-ParmVarDecl 0x560467fa9bf0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fa9c68 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fa9ce0 col:13 index 'int32_t':'int' +| `-FullComment 0x56046811c320 +| `-ParagraphComment 0x56046811c2f0 +| `-TextComment 0x56046811c2c0 Text=" Get element from vector. " +|-FunctionDecl 0x560467fabfe0 line:886:7 _ecs_vector_last 'void *(const ecs_vector_t *, ecs_size_t, int16_t)' +| |-ParmVarDecl 0x560467fa9f28 col:25 vector 'const ecs_vector_t *' +| |-ParmVarDecl 0x560467fabe40 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fabeb8 col:13 offset 'int16_t':'short' +| `-FullComment 0x56046811c3f0 +| `-ParagraphComment 0x56046811c3c0 +| `-TextComment 0x56046811c390 Text=" Get last element from vector. " +|-FunctionDecl 0x560467fac388 line:900:9 _ecs_vector_set_min_size 'int32_t (ecs_vector_t **, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fac0e0 col:20 array_inout 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fac158 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fac1d0 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fac248 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811c4e0 +| `-ParagraphComment 0x56046811c4b0 +| |-TextComment 0x56046811c460 Text=" Set minimum size for vector. If the current size of the vector is larger, " +| `-TextComment 0x56046811c480 Text=" the function will have no side effects. " +|-FunctionDecl 0x560467fac6a0 line:912:9 _ecs_vector_set_min_count 'int32_t (ecs_vector_t **, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fac490 col:20 vector_inout 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fac508 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fac580 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fac5f8 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811c5d0 +| `-ParagraphComment 0x56046811c5a0 +| |-TextComment 0x56046811c550 Text=" Set minimum count for vector. If the current count of the vector is larger, " +| `-TextComment 0x56046811c570 Text=" the function will have no side effects. " +|-FunctionDecl 0x560467fac828 line:926:6 ecs_vector_remove_last 'void (ecs_vector_t *)' +| |-ParmVarDecl 0x560467fac798 col:19 vector 'ecs_vector_t *' +| `-FullComment 0x56046811c6a0 +| `-ParagraphComment 0x56046811c670 +| `-TextComment 0x56046811c640 Text=" Remove last element. This operation requires no swapping of values. " +|-FunctionDecl 0x560467facbb8 line:931:6 _ecs_vector_pop 'bool (ecs_vector_t *, ecs_size_t, int16_t, void *)' +| |-ParmVarDecl 0x560467fac908 col:19 vector 'ecs_vector_t *' +| |-ParmVarDecl 0x560467fac980 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fac9f8 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467faca78 col:11 value 'void *' +| `-FullComment 0x56046811c770 +| `-ParagraphComment 0x56046811c740 +| `-TextComment 0x56046811c710 Text=" Remove last value, store last element in provided value. " +|-FunctionDecl 0x560467fadb18 line:942:9 _ecs_vector_move_index 'int32_t (ecs_vector_t **, ecs_vector_t *, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467faccc0 col:20 dst 'ecs_vector_t **' +| |-ParmVarDecl 0x560467facd38 col:19 src 'ecs_vector_t *' +| |-ParmVarDecl 0x560467facdb0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fad950 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fad9c8 col:13 index 'int32_t':'int' +| `-FullComment 0x56046811c840 +| `-ParagraphComment 0x56046811c810 +| `-TextComment 0x56046811c7e0 Text=" Append element at specified index to another vector. " +|-FunctionDecl 0x560467fadec8 line:957:9 _ecs_vector_remove 'int32_t (ecs_vector_t *, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fadc18 col:19 vector 'ecs_vector_t *' +| |-ParmVarDecl 0x560467fadc90 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fadd08 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fadd80 col:13 index 'int32_t':'int' +| `-FullComment 0x56046811c910 +| `-ParagraphComment 0x56046811c8e0 +| `-TextComment 0x56046811c8b0 Text=" Remove element at specified index. Moves the last value to the index. " +|-FunctionDecl 0x560467fae1e8 line:971:6 _ecs_vector_reclaim 'void (ecs_vector_t **, ecs_size_t, int16_t)' +| |-ParmVarDecl 0x560467fadfd0 col:20 vector 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fae048 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fae0c0 col:13 offset 'int16_t':'short' +| `-FullComment 0x56046811c9e0 +| `-ParagraphComment 0x56046811c9b0 +| `-TextComment 0x56046811c980 Text=" Shrink vector to make the size match the count. " +|-FunctionDecl 0x560467fae4f0 line:984:9 _ecs_vector_grow 'int32_t (ecs_vector_t **, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fae2e0 col:20 vector 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fae358 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fae3d0 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fae448 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811cab0 +| `-ParagraphComment 0x56046811ca80 +| `-TextComment 0x56046811ca50 Text=" Grow size of vector with provided number of elements. " +|-FunctionDecl 0x560467fae800 line:995:9 _ecs_vector_set_size 'int32_t (ecs_vector_t **, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fae5f0 col:20 vector 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fae668 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fae6e0 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fae758 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811cb80 +| `-ParagraphComment 0x56046811cb50 +| `-TextComment 0x56046811cb20 Text=" Set allocation size of vector. " +|-FunctionDecl 0x560467fb1b70 line:1010:9 _ecs_vector_set_count 'int32_t (ecs_vector_t **, ecs_size_t, int16_t, int32_t)' +| |-ParmVarDecl 0x560467fb1960 col:20 vector 'ecs_vector_t **' +| |-ParmVarDecl 0x560467fb19d8 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fb1a50 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fb1ac8 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811cc70 +| `-ParagraphComment 0x56046811cc40 +| |-TextComment 0x56046811cbf0 Text=" Set count of vector. If the size of the vector is smaller than the provided" +| `-TextComment 0x56046811cc10 Text=" count, the vector is resized. " +|-FunctionDecl 0x560467fb1d58 line:1024:9 ecs_vector_count 'int32_t (const ecs_vector_t *)' +| |-ParmVarDecl 0x560467fb1c68 col:25 vector 'const ecs_vector_t *' +| `-FullComment 0x56046811cd40 +| `-ParagraphComment 0x56046811cd10 +| `-TextComment 0x56046811cce0 Text=" Return number of elements in vector. " +|-FunctionDecl 0x560467fb1ec8 line:1029:9 ecs_vector_size 'int32_t (const ecs_vector_t *)' +| |-ParmVarDecl 0x560467fb1e38 col:25 vector 'const ecs_vector_t *' +| `-FullComment 0x56046811ce10 +| `-ParagraphComment 0x56046811cde0 +| `-TextComment 0x56046811cdb0 Text=" Return size of vector. " +|-FunctionDecl 0x560467fb2140 line:1034:7 _ecs_vector_first 'void *(const ecs_vector_t *, ecs_size_t, int16_t)' +| |-ParmVarDecl 0x560467fb1fa8 col:25 vector 'const ecs_vector_t *' +| |-ParmVarDecl 0x560467fb2020 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fb2098 col:13 offset 'int16_t':'short' +| `-FullComment 0x56046811cee0 +| `-ParagraphComment 0x56046811ceb0 +| `-TextComment 0x56046811ce80 Text=" Return first element of vector. " +|-FunctionDecl 0x560467fb2508 line:1047:6 _ecs_vector_sort 'void (ecs_vector_t *, ecs_size_t, int16_t, ecs_comparator_t)' +| |-ParmVarDecl 0x560467fb2238 col:19 vector 'ecs_vector_t *' +| |-ParmVarDecl 0x560467fb22b0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fb2328 col:13 offset 'int16_t':'short' +| |-ParmVarDecl 0x560467fb23c0 col:22 compare_action 'ecs_comparator_t':'int (*)(const void *, const void *)' +| `-FullComment 0x56046811cfb0 +| `-ParagraphComment 0x56046811cf80 +| `-TextComment 0x56046811cf50 Text=" Sort elements in vector. " +|-FunctionDecl 0x560467fb2818 line:1058:15 _ecs_vector_copy 'ecs_vector_t *(const ecs_vector_t *, ecs_size_t, int16_t)' +| |-ParmVarDecl 0x560467fb2608 col:25 src 'const ecs_vector_t *' +| |-ParmVarDecl 0x560467fb2680 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fb26f8 col:13 offset 'int16_t':'short' +| `-FullComment 0x56046811d080 +| `-ParagraphComment 0x56046811d050 +| `-TextComment 0x56046811d020 Text=" Copy vectors " +|-RecordDecl 0x560467fb3d80 line:1226:16 struct ecs_sparse_t definition +| |-FieldDecl 0x560467fb3e30 col:19 dense 'ecs_vector_t *' +| |-FieldDecl 0x560467fb3e90 col:19 chunks 'ecs_vector_t *' +| |-FieldDecl 0x560467fb3ef0 col:16 size 'ecs_size_t':'int' +| |-FieldDecl 0x560467fb3f50 col:13 count 'int32_t':'int' +| |-FieldDecl 0x560467fb3fb0 col:14 max_id_local 'uint64_t':'unsigned long' +| |-FieldDecl 0x560467fb4068 col:15 max_id 'uint64_t *' +| |-RecordDecl 0x560467fb40b8 parent 0x560467ec17a8 col:12 struct ecs_allocator_t +| |-FieldDecl 0x560467fb4230 col:29 allocator 'struct ecs_allocator_t *' +| |-RecordDecl 0x560467fb4280 parent 0x560467ec17a8 col:12 struct ecs_block_allocator_t +| `-FieldDecl 0x560467fb43f0 col:35 chunk_allocator 'struct ecs_block_allocator_t *' +|-TypedefDecl 0x560467fb4498 col:3 referenced ecs_sparse_t 'struct ecs_sparse_t':'struct ecs_sparse_t' +| `-ElaboratedType 0x560467fb4440 'struct ecs_sparse_t' sugar +| `-RecordType 0x560467fb3e00 'struct ecs_sparse_t' +| `-Record 0x560467fb3d80 'ecs_sparse_t' +|-FunctionDecl 0x560467fb4948 line:1243:6 _flecs_sparse_init 'void (ecs_sparse_t *, struct ecs_allocator_t *, struct ecs_block_allocator_t *, ecs_size_t)' +| |-ParmVarDecl 0x560467fb45b8 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb46a0 col:29 allocator 'struct ecs_allocator_t *' +| |-ParmVarDecl 0x560467fb4790 col:35 chunk_allocator 'struct ecs_block_allocator_t *' +| |-ParmVarDecl 0x560467fb4808 col:16 elem_size 'ecs_size_t':'int' +| `-FullComment 0x56046811d150 +| `-ParagraphComment 0x56046811d120 +| `-TextComment 0x56046811d0f0 Text=" Initialize sparse set " +|-FunctionDecl 0x560467fb4c88 line:1254:15 _flecs_sparse_new 'ecs_sparse_t *(struct ecs_allocator_t *, struct ecs_block_allocator_t *, ecs_size_t)' +| |-ParmVarDecl 0x560467fb4a60 col:29 allocator 'struct ecs_allocator_t *' +| |-ParmVarDecl 0x560467fb4af0 col:35 chunk_allocator 'struct ecs_block_allocator_t *' +| |-ParmVarDecl 0x560467fb4b68 col:16 elem_size 'ecs_size_t':'int' +| `-FullComment 0x56046811d220 +| `-ParagraphComment 0x56046811d1f0 +| `-TextComment 0x56046811d1c0 Text=" Create new sparse set " +|-FunctionDecl 0x560467fb6ea8 line:1263:6 _flecs_sparse_fini 'void (ecs_sparse_t *)' +| `-ParmVarDecl 0x560467fb6db0 col:19 sparse 'ecs_sparse_t *' +|-FunctionDecl 0x560467fb7018 line:1271:6 flecs_sparse_free 'void (ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fb6f88 col:19 sparse 'ecs_sparse_t *' +| `-FullComment 0x56046811d2f0 +| `-ParagraphComment 0x56046811d2c0 +| `-TextComment 0x56046811d290 Text=" Free sparse set " +|-FunctionDecl 0x560467fb7188 line:1276:6 flecs_sparse_clear 'void (ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fb70f8 col:19 sparse 'ecs_sparse_t *' +| `-FullComment 0x56046811d3c0 +| `-ParagraphComment 0x56046811d390 +| `-TextComment 0x56046811d360 Text=" Remove all elements from sparse set " +|-FunctionDecl 0x560467fb73f8 line:1282:6 flecs_sparse_set_id_source 'void (ecs_sparse_t *, uint64_t *)' +| |-ParmVarDecl 0x560467fb7268 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb72e0 col:15 id_source 'uint64_t *' +| `-FullComment 0x56046811d4b0 +| `-ParagraphComment 0x56046811d480 +| |-TextComment 0x56046811d430 Text=" Set id source. This allows the sparse set to use an external variable for" +| `-TextComment 0x56046811d450 Text=" issuing and increasing new ids. " +|-FunctionDecl 0x560467fb7680 line:1288:7 _flecs_sparse_add 'void *(ecs_sparse_t *, ecs_size_t)' +| |-ParmVarDecl 0x560467fb74e8 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb7560 col:16 elem_size 'ecs_size_t':'int' +| `-FullComment 0x56046811d580 +| `-ParagraphComment 0x56046811d550 +| `-TextComment 0x56046811d520 Text=" Add element to sparse set, this generates or recycles an id " +|-FunctionDecl 0x560467fb78b8 line:1297:10 flecs_sparse_last_id 'uint64_t (const ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fb77c8 col:25 sparse 'const ecs_sparse_t *' +| `-FullComment 0x56046811d650 +| `-ParagraphComment 0x56046811d620 +| `-TextComment 0x56046811d5f0 Text=" Get last issued id. " +|-FunctionDecl 0x560467fb7a88 line:1302:10 flecs_sparse_new_id 'uint64_t (ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fb7998 col:19 sparse 'ecs_sparse_t *' +| `-FullComment 0x56046811d720 +| `-ParagraphComment 0x56046811d6f0 +| `-TextComment 0x56046811d6c0 Text=" Generate or recycle a new id. " +|-FunctionDecl 0x560467fb8dc0 line:1309:17 flecs_sparse_new_ids 'const uint64_t *(ecs_sparse_t *, int32_t)' +| |-ParmVarDecl 0x560467fb7b68 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb7be0 col:13 count 'int32_t':'int' +| `-FullComment 0x56046811d840 +| `-ParagraphComment 0x56046811d810 +| |-TextComment 0x56046811d790 Text=" Generate or recycle new ids in bulk. The returned pointer points directly to" +| |-TextComment 0x56046811d7b0 Text=" the internal dense array vector with sparse ids. Operations on the sparse set" +| `-TextComment 0x56046811d7d0 Text=" can (and likely will) modify the contents of the buffer. " +|-FunctionDecl 0x560467fb9038 line:1315:6 flecs_sparse_remove 'void (ecs_sparse_t *, uint64_t)' +| |-ParmVarDecl 0x560467fb8ea8 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb8f20 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811d910 +| `-ParagraphComment 0x56046811d8e0 +| `-TextComment 0x56046811d8b0 Text=" Remove an element " +|-FunctionDecl 0x560467fb9340 line:1321:7 _flecs_sparse_remove_fast 'void *(ecs_sparse_t *, ecs_size_t, uint64_t)' +| |-ParmVarDecl 0x560467fb9128 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb91a0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fb9218 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811d9e0 +| `-ParagraphComment 0x56046811d9b0 +| `-TextComment 0x56046811d980 Text=" Fast version of remove, no liveliness checking " +|-FunctionDecl 0x560467fb95d0 line:1328:7 _flecs_sparse_remove_get 'void *(ecs_sparse_t *, ecs_size_t, uint64_t)' +| |-ParmVarDecl 0x560467fb9438 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb94b0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fb9528 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811dab0 +| `-ParagraphComment 0x56046811da80 +| `-TextComment 0x56046811da50 Text=" Remove an element, return pointer to the value in the sparse array " +|-FunctionDecl 0x560467fb9858 line:1338:6 flecs_sparse_exists 'bool (const ecs_sparse_t *, uint64_t)' +| |-ParmVarDecl 0x560467fb96c8 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb9740 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811db80 +| `-ParagraphComment 0x56046811db50 +| `-TextComment 0x56046811db20 Text=" Check whether an id has ever been issued. " +|-FunctionDecl 0x560467fb9a58 line:1344:6 flecs_sparse_is_valid 'bool (const ecs_sparse_t *, uint64_t)' +| |-ParmVarDecl 0x560467fb9948 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb99c0 col:14 index 'uint64_t':'unsigned long' +| `-FullComment 0x56046811dc50 +| `-ParagraphComment 0x56046811dc20 +| `-TextComment 0x56046811dbf0 Text=" Check whether an id has ever been issued and is currently alive. " +|-FunctionDecl 0x560467fb9c58 line:1350:6 flecs_sparse_is_alive 'bool (const ecs_sparse_t *, uint64_t)' +| |-ParmVarDecl 0x560467fb9b48 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb9bc0 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811dd20 +| `-ParagraphComment 0x56046811dcf0 +| `-TextComment 0x56046811dcc0 Text=" Test if id is alive, which requires the generation count to match. " +|-FunctionDecl 0x560467fb9ee8 line:1356:10 flecs_sparse_get_alive 'uint64_t (const ecs_sparse_t *, uint64_t)' +| |-ParmVarDecl 0x560467fb9d48 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fb9dd0 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811ddf0 +| `-ParagraphComment 0x56046811ddc0 +| `-TextComment 0x56046811dd90 Text=" Return identifier with current generation set. " +|-FunctionDecl 0x560467fba1f0 line:1363:7 _flecs_sparse_get_dense 'void *(const ecs_sparse_t *, ecs_size_t, int32_t)' +| |-ParmVarDecl 0x560467fb9fd8 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fba050 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fba0c8 col:13 index 'int32_t':'int' +| `-FullComment 0x56046811dee0 +| `-ParagraphComment 0x56046811deb0 +| |-TextComment 0x56046811de60 Text=" Get value from sparse set by dense id. This function is useful in " +| `-TextComment 0x56046811de80 Text=" combination with flecs_sparse_count for iterating all values in the set. " +|-FunctionDecl 0x560467fba3d8 line:1374:9 flecs_sparse_count 'int32_t (const ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fba2e8 col:25 sparse 'const ecs_sparse_t *' +| `-FullComment 0x56046811dfc0 +| `-ParagraphComment 0x56046811df90 +| `-TextComment 0x56046811df60 Text=" Get the number of alive elements in the sparse set. " +|-FunctionDecl 0x560467fba548 line:1379:9 flecs_sparse_not_alive_count 'int32_t (const ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fba4b8 col:25 sparse 'const ecs_sparse_t *' +| `-FullComment 0x56046811e090 +| `-ParagraphComment 0x56046811e060 +| `-TextComment 0x56046811e030 Text=" Get the number of not alive alive elements in the sparse set. " +|-FunctionDecl 0x560467fba6b8 line:1384:9 flecs_sparse_size 'int32_t (const ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fba628 col:25 sparse 'const ecs_sparse_t *' +| `-FullComment 0x56046811e160 +| `-ParagraphComment 0x56046811e130 +| `-TextComment 0x56046811e100 Text=" Return total number of allocated elements in the dense array " +|-FunctionDecl 0x560467fba9b0 line:1390:7 _flecs_sparse_get 'void *(const ecs_sparse_t *, ecs_size_t, uint64_t)' +| |-ParmVarDecl 0x560467fba798 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fba810 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fba888 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811e250 +| `-ParagraphComment 0x56046811e220 +| |-TextComment 0x56046811e1d0 Text=" Get element by (sparse) id. The returned pointer is stable for the duration" +| `-TextComment 0x56046811e1f0 Text=" of the sparse set, as it is stored in the sparse array. " +|-FunctionDecl 0x560467fbac40 line:1400:7 _flecs_sparse_get_any 'void *(const ecs_sparse_t *, ecs_size_t, uint64_t)' +| |-ParmVarDecl 0x560467fbaaa8 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbab20 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fbab98 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811e320 +| `-ParagraphComment 0x56046811e2f0 +| `-TextComment 0x56046811e2c0 Text=" Like get_sparse, but don't care whether element is alive or not. " +|-FunctionDecl 0x560467fbc0b0 line:1410:7 _flecs_sparse_ensure 'void *(ecs_sparse_t *, ecs_size_t, uint64_t)' +| |-ParmVarDecl 0x560467fbad38 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbbf90 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fbc008 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811e3f0 +| `-ParagraphComment 0x56046811e3c0 +| `-TextComment 0x56046811e390 Text=" Get or create element by (sparse) id. " +|-FunctionDecl 0x560467fbc340 line:1420:7 _flecs_sparse_ensure_fast 'void *(ecs_sparse_t *, ecs_size_t, uint64_t)' +| |-ParmVarDecl 0x560467fbc1a8 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbc220 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fbc298 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811e4c0 +| `-ParagraphComment 0x56046811e490 +| `-TextComment 0x56046811e460 Text=" Fast version of ensure, no liveliness checking " +|-FunctionDecl 0x560467fbc6f0 line:1430:7 _flecs_sparse_set 'void *(ecs_sparse_t *, ecs_size_t, uint64_t, void *)' +| |-ParmVarDecl 0x560467fbc438 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbc4b0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fbc528 col:14 id 'uint64_t':'unsigned long' +| |-ParmVarDecl 0x560467fbc5a8 col:11 value 'void *' +| `-FullComment 0x56046811e590 +| `-ParagraphComment 0x56046811e560 +| `-TextComment 0x56046811e530 Text=" Set value. " +|-FunctionDecl 0x560467fbc8d8 line:1441:17 flecs_sparse_ids 'const uint64_t *(const ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fbc7e8 col:25 sparse 'const ecs_sparse_t *' +| `-FullComment 0x56046811e660 +| `-ParagraphComment 0x56046811e630 +| `-TextComment 0x56046811e600 Text=" Get pointer to ids (alive and not alive). Use with count() or size(). " +|-FunctionDecl 0x560467fbcb48 line:1446:6 flecs_sparse_set_size 'void (ecs_sparse_t *, int32_t)' +| |-ParmVarDecl 0x560467fbc9b8 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbca30 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811e730 +| `-ParagraphComment 0x56046811e700 +| `-TextComment 0x56046811e6d0 Text=" Set size of the dense array. " +|-FunctionDecl 0x560467fbcd28 line:1452:15 flecs_sparse_copy 'ecs_sparse_t *(const ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fbcc38 col:25 src 'const ecs_sparse_t *' +| `-FullComment 0x56046811e800 +| `-ParagraphComment 0x56046811e7d0 +| `-TextComment 0x56046811e7a0 Text=" Copy sparse set into a new sparse set. " +|-FunctionDecl 0x560467fbdbb0 line:1457:6 flecs_sparse_restore 'void (ecs_sparse_t *, const ecs_sparse_t *)' +| |-ParmVarDecl 0x560467fbce08 col:19 dst 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbce80 col:25 src 'const ecs_sparse_t *' +| `-FullComment 0x56046811e8d0 +| `-ParagraphComment 0x56046811e8a0 +| `-TextComment 0x56046811e870 Text=" Restore sparse set into destination sparse set. " +|-FunctionDecl 0x560467fbdd68 line:1466:15 _ecs_sparse_new 'ecs_sparse_t *(ecs_size_t)' +| `-ParmVarDecl 0x560467fbdc70 col:16 elem_size 'ecs_size_t':'int' +|-FunctionDecl 0x560467fbdf38 line:1473:7 _ecs_sparse_add 'void *(ecs_sparse_t *, ecs_size_t)' +| |-ParmVarDecl 0x560467fbde20 col:19 sparse 'ecs_sparse_t *' +| `-ParmVarDecl 0x560467fbde98 col:16 elem_size 'ecs_size_t':'int' +|-FunctionDecl 0x560467fbe088 line:1481:10 ecs_sparse_last_id 'uint64_t (const ecs_sparse_t *)' +| `-ParmVarDecl 0x560467fbdff8 col:25 sparse 'const ecs_sparse_t *' +|-FunctionDecl 0x560467fbe1d0 line:1485:9 ecs_sparse_count 'int32_t (const ecs_sparse_t *)' +| `-ParmVarDecl 0x560467fbe140 col:25 sparse 'const ecs_sparse_t *' +|-FunctionDecl 0x560467fbe3c8 line:1490:6 flecs_sparse_set_generation 'void (ecs_sparse_t *, uint64_t)' +| |-ParmVarDecl 0x560467fbe2b8 col:19 sparse 'ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbe330 col:14 id 'uint64_t':'unsigned long' +| `-FullComment 0x56046811e9a0 +| `-ParagraphComment 0x56046811e970 +| `-TextComment 0x56046811e940 Text=" Override the generation count for a specific id " +|-FunctionDecl 0x560467fbe620 line:1495:7 _ecs_sparse_get_dense 'void *(const ecs_sparse_t *, ecs_size_t, int32_t)' +| |-ParmVarDecl 0x560467fbe488 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbe500 col:16 elem_size 'ecs_size_t':'int' +| `-ParmVarDecl 0x560467fbe578 col:13 index 'int32_t':'int' +|-FunctionDecl 0x560467fbe880 line:1504:7 _ecs_sparse_get 'void *(const ecs_sparse_t *, ecs_size_t, uint64_t)' +| |-ParmVarDecl 0x560467fbe6e8 col:25 sparse 'const ecs_sparse_t *' +| |-ParmVarDecl 0x560467fbe760 col:16 elem_size 'ecs_size_t':'int' +| `-ParmVarDecl 0x560467fbe7d8 col:14 id 'uint64_t':'unsigned long' +|-RecordDecl 0x560467fbe968 line:1527:16 struct ecs_block_allocator_block_t definition +| |-FieldDecl 0x560467fbea28 col:11 memory 'void *' +| `-FieldDecl 0x560467fbeb30 col:41 next 'struct ecs_block_allocator_block_t *' +|-TypedefDecl 0x560467fc0158 col:3 referenced ecs_block_allocator_block_t 'struct ecs_block_allocator_block_t':'struct ecs_block_allocator_block_t' +| `-ElaboratedType 0x560467fc0100 'struct ecs_block_allocator_block_t' sugar +| `-RecordType 0x560467fbe9f0 'struct ecs_block_allocator_block_t' +| `-Record 0x560467fbe968 'ecs_block_allocator_block_t' +|-RecordDecl 0x560467fc01c8 line:1532:16 struct ecs_block_allocator_chunk_header_t definition +| `-FieldDecl 0x560467fc0320 col:48 next 'struct ecs_block_allocator_chunk_header_t *' +|-TypedefDecl 0x560467fc03c8 col:3 referenced ecs_block_allocator_chunk_header_t 'struct ecs_block_allocator_chunk_header_t':'struct ecs_block_allocator_chunk_header_t' +| `-ElaboratedType 0x560467fc0370 'struct ecs_block_allocator_chunk_header_t' sugar +| `-RecordType 0x560467fc0250 'struct ecs_block_allocator_chunk_header_t' +| `-Record 0x560467fc01c8 'ecs_block_allocator_chunk_header_t' +|-RecordDecl 0x560467fc0438 prev 0x560467fb4280 line:1536:16 struct ecs_block_allocator_t definition +| |-FieldDecl 0x560467fc0518 col:41 head 'ecs_block_allocator_chunk_header_t *' +| |-FieldDecl 0x560467fc05c8 col:34 block_head 'ecs_block_allocator_block_t *' +| |-FieldDecl 0x560467fc0628 col:34 block_tail 'ecs_block_allocator_block_t *' +| |-FieldDecl 0x560467fc0688 col:13 chunk_size 'int32_t':'int' +| |-FieldDecl 0x560467fc06e8 col:13 data_size 'int32_t':'int' +| |-FieldDecl 0x560467fc0748 col:13 chunks_per_block 'int32_t':'int' +| |-FieldDecl 0x560467fc07a8 col:13 block_size 'int32_t':'int' +| `-FieldDecl 0x560467fc0808 col:13 alloc_count 'int32_t':'int' +|-TypedefDecl 0x560467fc08b8 col:3 referenced ecs_block_allocator_t 'struct ecs_block_allocator_t':'struct ecs_block_allocator_t' +| `-ElaboratedType 0x560467fc0860 'struct ecs_block_allocator_t' sugar +| `-RecordType 0x560467fb4300 'struct ecs_block_allocator_t' +| `-Record 0x560467fc0438 'ecs_block_allocator_t' +|-FunctionDecl 0x560467fc0b18 line:1548:6 flecs_ballocator_init 'void (ecs_block_allocator_t *, ecs_size_t)' +| |-ParmVarDecl 0x560467fc0988 col:28 ba 'ecs_block_allocator_t *' +| `-ParmVarDecl 0x560467fc0a00 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x560467fc0cc8 line:1558:24 flecs_ballocator_new 'ecs_block_allocator_t *(ecs_size_t)' +| `-ParmVarDecl 0x560467fc0bd8 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x560467fc0e78 line:1562:6 flecs_ballocator_fini 'void (ecs_block_allocator_t *)' +| `-ParmVarDecl 0x560467fc0d80 col:28 ba 'ecs_block_allocator_t *' +|-FunctionDecl 0x560467fc0fc0 line:1566:6 flecs_ballocator_free 'void (ecs_block_allocator_t *)' +| `-ParmVarDecl 0x560467fc0f30 col:28 ba 'ecs_block_allocator_t *' +|-FunctionDecl 0x560467fc14e0 line:1570:7 flecs_balloc 'void *(ecs_block_allocator_t *)' +| `-ParmVarDecl 0x560467fc1078 col:28 allocator 'ecs_block_allocator_t *' +|-FunctionDecl 0x560467fc1630 line:1574:7 flecs_bcalloc 'void *(ecs_block_allocator_t *)' +| `-ParmVarDecl 0x560467fc1598 col:28 allocator 'ecs_block_allocator_t *' +|-FunctionDecl 0x560467fc1878 line:1578:6 flecs_bfree 'void (ecs_block_allocator_t *, void *)' +| |-ParmVarDecl 0x560467fc16e8 col:28 allocator 'ecs_block_allocator_t *' +| `-ParmVarDecl 0x560467fc1768 col:11 memory 'void *' +|-FunctionDecl 0x560467fc1b60 line:1583:7 flecs_brealloc 'void *(ecs_block_allocator_t *, ecs_block_allocator_t *, void *)' +| |-ParmVarDecl 0x560467fc1938 col:28 dst 'ecs_block_allocator_t *' +| |-ParmVarDecl 0x560467fc19b0 col:28 src 'ecs_block_allocator_t *' +| `-ParmVarDecl 0x560467fc1a30 col:11 memory 'void *' +|-FunctionDecl 0x560467fc1dc0 line:1589:7 flecs_bdup 'void *(ecs_block_allocator_t *, void *)' +| |-ParmVarDecl 0x560467fc1c28 col:28 ba 'ecs_block_allocator_t *' +| `-ParmVarDecl 0x560467fc1ca8 col:11 memory 'void *' +|-TypedefDecl 0x560467fc1ea8 col:18 referenced ecs_map_key_t 'uint64_t':'unsigned long' +| `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| |-Typedef 0x560467f87e80 'uint64_t' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-RecordDecl 0x560467fc1f00 line:1611:16 struct ecs_bucket_entry_t definition +| |-FieldDecl 0x560467fc2050 col:32 next 'struct ecs_bucket_entry_t *' +| `-FieldDecl 0x560467fc20d0 col:19 key 'ecs_map_key_t':'unsigned long' +|-TypedefDecl 0x560467fc2178 col:3 referenced ecs_bucket_entry_t 'struct ecs_bucket_entry_t':'struct ecs_bucket_entry_t' +| `-ElaboratedType 0x560467fc2120 'struct ecs_bucket_entry_t' sugar +| `-RecordType 0x560467fc1f80 'struct ecs_bucket_entry_t' +| `-Record 0x560467fc1f00 'ecs_bucket_entry_t' +|-RecordDecl 0x560467fc21e8 line:1617:16 struct ecs_bucket_t definition +| `-FieldDecl 0x560467fc22e8 col:25 first 'ecs_bucket_entry_t *' +|-TypedefDecl 0x560467fc2398 col:3 referenced ecs_bucket_t 'struct ecs_bucket_t':'struct ecs_bucket_t' +| `-ElaboratedType 0x560467fc2340 'struct ecs_bucket_t' sugar +| `-RecordType 0x560467fc2270 'struct ecs_bucket_t' +| `-Record 0x560467fc21e8 'ecs_bucket_t' +|-RecordDecl 0x560467fc24a0 line:1621:16 struct ecs_map_t definition +| |-FieldDecl 0x560467fc25c8 col:19 buckets 'ecs_bucket_t *' +| |-FieldDecl 0x560467fc2628 col:19 buckets_end 'ecs_bucket_t *' +| |-FieldDecl 0x560467fc2688 col:13 elem_size 'int16_t':'short' +| |-FieldDecl 0x560467fc26e8 col:13 bucket_shift 'uint8_t':'unsigned char' +| |-FieldDecl 0x560467fc2748 col:10 shared_allocator 'bool' +| |-FieldDecl 0x560467fc27a8 col:13 bucket_count 'int32_t':'int' +| |-FieldDecl 0x560467fc2808 col:13 count 'int32_t':'int' +| |-FieldDecl 0x560467fc2880 col:29 allocator 'struct ecs_allocator_t *' +| `-FieldDecl 0x560467fc28f8 col:35 entry_allocator 'struct ecs_block_allocator_t *' +|-TypedefDecl 0x560467fc29a8 col:3 referenced ecs_map_t 'struct ecs_map_t':'struct ecs_map_t' +| `-ElaboratedType 0x560467fc2950 'struct ecs_map_t' sugar +| `-RecordType 0x560467fc2520 'struct ecs_map_t' +| `-Record 0x560467fc24a0 'ecs_map_t' +|-RecordDecl 0x560467fc2a18 line:1633:16 struct ecs_map_iter_t definition +| |-FieldDecl 0x560467fc2b48 col:22 map 'const ecs_map_t *' +| |-FieldDecl 0x560467fc2ba8 col:19 bucket 'ecs_bucket_t *' +| `-FieldDecl 0x560467fc2c08 col:25 entry 'ecs_bucket_entry_t *' +|-TypedefDecl 0x560467fc2cb8 col:3 referenced ecs_map_iter_t 'struct ecs_map_iter_t':'struct ecs_map_iter_t' +| `-ElaboratedType 0x560467fc2c60 'struct ecs_map_iter_t' sugar +| `-RecordType 0x560467fc2aa0 'struct ecs_map_iter_t' +| `-Record 0x560467fc2a18 'ecs_map_iter_t' +|-RecordDecl 0x560467fc2d28 line:1639:16 struct ecs_map_params_t definition +| |-FieldDecl 0x560467fc2de0 col:16 size 'ecs_size_t':'int' +| |-FieldDecl 0x560467fc2e58 col:29 allocator 'struct ecs_allocator_t *' +| |-FieldDecl 0x560467fc2ec8 col:34 entry_allocator 'struct ecs_block_allocator_t':'struct ecs_block_allocator_t' +| `-FieldDecl 0x560467fc2f28 col:13 initial_count 'int32_t':'int' +|-TypedefDecl 0x560467fc2fd8 col:3 referenced ecs_map_params_t 'struct ecs_map_params_t':'struct ecs_map_params_t' +| `-ElaboratedType 0x560467fc2f80 'struct ecs_map_params_t' sugar +| `-RecordType 0x560467fc2db0 'struct ecs_map_params_t' +| `-Record 0x560467fc2d28 'ecs_map_params_t' +|-FunctionDecl 0x560467fc3308 line:1649:6 _ecs_map_params_init 'void (ecs_map_params_t *, struct ecs_allocator_t *, ecs_size_t)' +| |-ParmVarDecl 0x560467fc30d8 col:23 params 'ecs_map_params_t *' +| |-ParmVarDecl 0x560467fc3168 col:29 allocator 'struct ecs_allocator_t *' +| `-ParmVarDecl 0x560467fc31e0 col:16 elem_size 'ecs_size_t':'int' +|-FunctionDecl 0x560467fc4828 line:1658:6 ecs_map_params_fini 'void (ecs_map_params_t *)' +| `-ParmVarDecl 0x560467fc33d0 col:23 params 'ecs_map_params_t *' +|-FunctionDecl 0x560467fc4c28 line:1663:6 _ecs_map_init 'void (ecs_map_t *, ecs_size_t, struct ecs_allocator_t *, int32_t)' +| |-ParmVarDecl 0x560467fc4968 col:16 map 'ecs_map_t *' +| |-ParmVarDecl 0x560467fc49e0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fc4a70 col:29 allocator 'struct ecs_allocator_t *' +| |-ParmVarDecl 0x560467fc4ae8 col:13 initial_count 'int32_t':'int' +| `-FullComment 0x56046811ea70 +| `-ParagraphComment 0x56046811ea40 +| `-TextComment 0x56046811ea10 Text=" Initialize new map. " +|-FunctionDecl 0x560467fc4eb8 line:1674:6 _ecs_map_init_w_params 'void (ecs_map_t *, ecs_map_params_t *)' +| |-ParmVarDecl 0x560467fc4d28 col:16 map 'ecs_map_t *' +| |-ParmVarDecl 0x560467fc4da0 col:23 params 'ecs_map_params_t *' +| `-FullComment 0x56046811eb40 +| `-ParagraphComment 0x56046811eb10 +| `-TextComment 0x56046811eae0 Text=" Initialize new map. " +|-FunctionDecl 0x560467fc51d0 line:1683:6 _ecs_map_init_if 'void (ecs_map_t *, ecs_size_t, struct ecs_allocator_t *, int32_t)' +| |-ParmVarDecl 0x560467fc4fa8 col:16 map 'ecs_map_t *' +| |-ParmVarDecl 0x560467fc5020 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fc50b0 col:29 allocator 'struct ecs_allocator_t *' +| |-ParmVarDecl 0x560467fc5128 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811ec10 +| `-ParagraphComment 0x56046811ebe0 +| `-TextComment 0x56046811ebb0 Text=" Initialize new map if uninitialized, leave as is otherwise " +|-FunctionDecl 0x560467fc53b0 line:1693:6 _ecs_map_init_w_params_if 'void (ecs_map_t *, ecs_map_params_t *)' +| |-ParmVarDecl 0x560467fc52a0 col:16 result 'ecs_map_t *' +| `-ParmVarDecl 0x560467fc5318 col:23 params 'ecs_map_params_t *' +|-FunctionDecl 0x560467fc5588 line:1702:6 ecs_map_fini 'void (ecs_map_t *)' +| |-ParmVarDecl 0x560467fc5498 col:16 map 'ecs_map_t *' +| `-FullComment 0x56046811ece0 +| `-ParagraphComment 0x56046811ecb0 +| `-TextComment 0x56046811ec80 Text=" Deinitialize map. " +|-FunctionDecl 0x560467fc5d48 line:1707:12 _ecs_map_new 'ecs_map_t *(ecs_size_t, struct ecs_allocator_t *, int32_t)' +| |-ParmVarDecl 0x560467fc5668 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fc56f8 col:29 allocator 'struct ecs_allocator_t *' +| |-ParmVarDecl 0x560467fc5770 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811edb0 +| `-ParagraphComment 0x56046811ed80 +| `-TextComment 0x56046811ed50 Text=" Create new map. " +|-FunctionDecl 0x560467fc5f28 line:1716:6 ecs_map_is_initialized 'bool (const ecs_map_t *)' +| |-ParmVarDecl 0x560467fc5e38 col:22 result 'const ecs_map_t *' +| `-FullComment 0x56046811ee80 +| `-ParagraphComment 0x56046811ee50 +| `-TextComment 0x56046811ee20 Text=" Is map initialized " +|-FunctionDecl 0x560467fc6220 line:1721:7 _ecs_map_get 'void *(const ecs_map_t *, ecs_size_t, ecs_map_key_t)' +| |-ParmVarDecl 0x560467fc6008 col:22 map 'const ecs_map_t *' +| |-ParmVarDecl 0x560467fc6080 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fc60f8 col:19 key 'ecs_map_key_t':'unsigned long' +| `-FullComment 0x56046811ef50 +| `-ParagraphComment 0x56046811ef20 +| `-TextComment 0x56046811eef0 Text=" Get element for key, returns NULL if they key doesn't exist. " +|-FunctionDecl 0x560467fc64b0 line:1734:7 _ecs_map_get_ptr 'void *(const ecs_map_t *, ecs_map_key_t)' +| |-ParmVarDecl 0x560467fc6318 col:22 map 'const ecs_map_t *' +| |-ParmVarDecl 0x560467fc6390 col:19 key 'ecs_map_key_t':'unsigned long' +| `-FullComment 0x56046811f090 +| `-ParagraphComment 0x56046811f060 +| |-TextComment 0x56046811efc0 Text=" Get pointer element. This dereferences the map element as a pointer. This" +| |-TextComment 0x56046811efe0 Text=" operation returns NULL when either the element does not exist or whether the" +| |-TextComment 0x56046811f000 Text=" pointer is NULL, and should therefore only be used when the application knows" +| `-TextComment 0x56046811f020 Text=" for sure that a pointer should never be NULL. " +|-FunctionDecl 0x560467fc6728 line:1743:6 ecs_map_has 'bool (const ecs_map_t *, ecs_map_key_t)' +| |-ParmVarDecl 0x560467fc6598 col:22 map 'const ecs_map_t *' +| |-ParmVarDecl 0x560467fc6610 col:19 key 'ecs_map_key_t':'unsigned long' +| `-FullComment 0x56046811f160 +| `-ParagraphComment 0x56046811f130 +| `-TextComment 0x56046811f100 Text=" Test if map has key " +|-FunctionDecl 0x560467fc6a30 line:1749:7 _ecs_map_ensure 'void *(ecs_map_t *, ecs_size_t, ecs_map_key_t)' +| |-ParmVarDecl 0x560467fc6818 col:16 map 'ecs_map_t *' +| |-ParmVarDecl 0x560467fc6890 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fc6908 col:19 key 'ecs_map_key_t':'unsigned long' +| `-FullComment 0x56046811f230 +| `-ParagraphComment 0x56046811f200 +| `-TextComment 0x56046811f1d0 Text=" Get or create element for key. " +|-FunctionDecl 0x560467fc8970 line:1759:7 _ecs_map_set 'void *(ecs_map_t *, ecs_size_t, ecs_map_key_t, const void *)' +| |-ParmVarDecl 0x560467fc6b28 col:16 map 'ecs_map_t *' +| |-ParmVarDecl 0x560467fc6ba0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fc6c18 col:19 key 'ecs_map_key_t':'unsigned long' +| |-ParmVarDecl 0x560467fc8828 col:17 payload 'const void *' +| `-FullComment 0x56046811f300 +| `-ParagraphComment 0x56046811f2d0 +| `-TextComment 0x56046811f2a0 Text=" Set element. " +|-FunctionDecl 0x560467fc8af8 line:1773:6 ecs_map_free 'void (ecs_map_t *)' +| |-ParmVarDecl 0x560467fc8a68 col:16 map 'ecs_map_t *' +| `-FullComment 0x56046811f3d0 +| `-ParagraphComment 0x56046811f3a0 +| `-TextComment 0x56046811f370 Text=" Free map. " +|-FunctionDecl 0x560467fc8d68 line:1780:9 ecs_map_remove 'int32_t (ecs_map_t *, ecs_map_key_t)' +| |-ParmVarDecl 0x560467fc8bd8 col:16 map 'ecs_map_t *' +| |-ParmVarDecl 0x560467fc8c50 col:19 key 'ecs_map_key_t':'unsigned long' +| `-FullComment 0x56046811f4c0 +| `-ParagraphComment 0x56046811f490 +| |-TextComment 0x56046811f440 Text=" Remove key from map." +| `-TextComment 0x56046811f460 Text=" Returns number of remaining elements." +|-FunctionDecl 0x560467fc8ee8 line:1786:6 ecs_map_clear 'void (ecs_map_t *)' +| |-ParmVarDecl 0x560467fc8e58 col:16 map 'ecs_map_t *' +| `-FullComment 0x56046811f590 +| `-ParagraphComment 0x56046811f560 +| `-TextComment 0x56046811f530 Text=" Remove all elements from map. " +|-FunctionDecl 0x560467fc90b8 line:1791:9 ecs_map_count 'int32_t (const ecs_map_t *)' +| |-ParmVarDecl 0x560467fc8fc8 col:22 map 'const ecs_map_t *' +| `-FullComment 0x56046811f660 +| `-ParagraphComment 0x56046811f630 +| `-TextComment 0x56046811f600 Text=" Return number of elements in map. " +|-FunctionDecl 0x560467fc9228 line:1796:9 ecs_map_bucket_count 'int32_t (const ecs_map_t *)' +| |-ParmVarDecl 0x560467fc9198 col:22 map 'const ecs_map_t *' +| `-FullComment 0x56046811f730 +| `-ParagraphComment 0x56046811f700 +| `-TextComment 0x56046811f6d0 Text=" Return number of buckets in map. " +|-FunctionDecl 0x560467fc9428 line:1801:16 ecs_map_iter 'ecs_map_iter_t (const ecs_map_t *)' +| |-ParmVarDecl 0x560467fc9330 col:22 map 'const ecs_map_t *' +| `-FullComment 0x56046811f800 +| `-ParagraphComment 0x56046811f7d0 +| `-TextComment 0x56046811f7a0 Text=" Return iterator to map contents. " +|-FunctionDecl 0x560467fc9d20 line:1806:7 _ecs_map_next 'void *(ecs_map_iter_t *, ecs_size_t, ecs_map_key_t *)' +| |-ParmVarDecl 0x560467fc9568 col:21 iter 'ecs_map_iter_t *' +| |-ParmVarDecl 0x560467fc95e0 col:16 elem_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560467fc9688 col:20 key 'ecs_map_key_t *' +| `-FullComment 0x56046811f8d0 +| `-ParagraphComment 0x56046811f8a0 +| `-TextComment 0x56046811f870 Text=" Obtain next element in map from iterator. " +|-FunctionDecl 0x560467fc9fb0 line:1816:7 _ecs_map_next_ptr 'void *(ecs_map_iter_t *, ecs_map_key_t *)' +| |-ParmVarDecl 0x560467fc9e18 col:21 iter 'ecs_map_iter_t *' +| |-ParmVarDecl 0x560467fc9e90 col:20 key 'ecs_map_key_t *' +| `-FullComment 0x56046811f9a0 +| `-ParagraphComment 0x56046811f970 +| `-TextComment 0x56046811f940 Text=" Obtain next pointer element from iterator. See ecs_map_get_ptr. " +|-FunctionDecl 0x560467fca228 line:1825:6 ecs_map_grow 'void (ecs_map_t *, int32_t)' +| |-ParmVarDecl 0x560467fca098 col:16 map 'ecs_map_t *' +| |-ParmVarDecl 0x560467fca110 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811fa70 +| `-ParagraphComment 0x56046811fa40 +| `-TextComment 0x56046811fa10 Text=" Grow number of buckets in the map for specified number of elements. " +|-FunctionDecl 0x560467fca428 line:1831:6 ecs_map_set_size 'void (ecs_map_t *, int32_t)' +| |-ParmVarDecl 0x560467fca318 col:16 map 'ecs_map_t *' +| |-ParmVarDecl 0x560467fca390 col:13 elem_count 'int32_t':'int' +| `-FullComment 0x56046811fb40 +| `-ParagraphComment 0x56046811fb10 +| `-TextComment 0x56046811fae0 Text=" Set number of buckets in the map for specified number of elements. " +|-FunctionDecl 0x560467fca608 line:1837:12 ecs_map_copy 'ecs_map_t *(ecs_map_t *)' +| |-ParmVarDecl 0x560467fca518 col:16 map 'ecs_map_t *' +| `-FullComment 0x56046811fc10 +| `-ParagraphComment 0x56046811fbe0 +| `-TextComment 0x56046811fbb0 Text=" Copy map. " +|-VarDecl 0x560467fca710 col:30 ecs_block_allocator_alloc_count 'int64_t':'long' extern +|-VarDecl 0x560467fca788 col:30 ecs_block_allocator_free_count 'int64_t':'long' extern +|-VarDecl 0x560467fca800 col:30 ecs_stack_allocator_alloc_count 'int64_t':'long' extern +|-VarDecl 0x560467fca878 col:30 ecs_stack_allocator_free_count 'int64_t':'long' extern +|-RecordDecl 0x560467fca8e0 prev 0x560467fb40b8 line:1874:16 struct ecs_allocator_t definition +| |-FieldDecl 0x560467fca970 col:27 chunks 'ecs_block_allocator_t':'struct ecs_block_allocator_t' +| `-FieldDecl 0x560467fcaa10 col:25 sizes 'struct ecs_sparse_t':'struct ecs_sparse_t' +|-TypedefDecl 0x560467fcab48 col:3 referenced ecs_allocator_t 'struct ecs_allocator_t':'struct ecs_allocator_t' +| `-ElaboratedType 0x560467fcaaf0 'struct ecs_allocator_t' sugar +| `-RecordType 0x560467fb4140 'struct ecs_allocator_t' +| `-Record 0x560467fca8e0 'ecs_allocator_t' +|-FunctionDecl 0x560467fcb860 line:1880:6 flecs_allocator_init 'void (ecs_allocator_t *)' +| `-ParmVarDecl 0x560467fcac18 col:22 a 'ecs_allocator_t *' +|-FunctionDecl 0x560467fcb9a8 line:1884:6 flecs_allocator_fini 'void (ecs_allocator_t *)' +| `-ParmVarDecl 0x560467fcb918 col:22 a 'ecs_allocator_t *' +|-FunctionDecl 0x560467fcbbe8 line:1888:24 flecs_allocator_get 'ecs_block_allocator_t *(ecs_allocator_t *, ecs_size_t)' +| |-ParmVarDecl 0x560467fcba60 col:22 a 'ecs_allocator_t *' +| `-ParmVarDecl 0x560467fcbad8 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x560467fcbe40 line:1893:7 flecs_strdup 'char *(ecs_allocator_t *, const char *)' +| |-ParmVarDecl 0x560467fcbca8 col:22 a 'ecs_allocator_t *' +| `-ParmVarDecl 0x560467fcbd28 col:17 str 'const char *' +|-FunctionDecl 0x560467fcc098 line:1898:6 flecs_strfree 'void (ecs_allocator_t *, char *)' +| |-ParmVarDecl 0x560467fcbf00 col:22 a 'ecs_allocator_t *' +| `-ParmVarDecl 0x560467fcbf80 col:11 str 'char *' +|-FunctionDecl 0x560467fcc380 line:1903:7 flecs_dup 'void *(ecs_allocator_t *, ecs_size_t, const void *)' +| |-ParmVarDecl 0x560467fcc158 col:22 a 'ecs_allocator_t *' +| |-ParmVarDecl 0x560467fcc1d0 col:16 size 'ecs_size_t':'int' +| `-ParmVarDecl 0x560467fcc250 col:17 src 'const void *' +|-RecordDecl 0x560467fcc468 line:1950:16 struct ecs_strbuf_element definition +| |-FieldDecl 0x560467fcc520 col:10 buffer_embedded 'bool' +| |-FieldDecl 0x560467fcc580 col:13 pos 'int32_t':'int' +| |-FieldDecl 0x560467fcc5e8 col:11 buf 'char *' +| `-FieldDecl 0x560467fcc6f0 col:32 next 'struct ecs_strbuf_element *' +|-TypedefDecl 0x560467fcc798 col:3 referenced ecs_strbuf_element 'struct ecs_strbuf_element':'struct ecs_strbuf_element' +| `-ElaboratedType 0x560467fcc740 'struct ecs_strbuf_element' sugar +| `-RecordType 0x560467fcc4f0 'struct ecs_strbuf_element' +| `-Record 0x560467fcc468 'ecs_strbuf_element' +|-RecordDecl 0x560467fd0230 line:1957:16 struct ecs_strbuf_element_embedded definition +| |-FieldDecl 0x560467fd0300 col:24 super 'ecs_strbuf_element':'struct ecs_strbuf_element' +| `-FieldDecl 0x560467fd0448 col:10 buf 'char[512]' +|-TypedefDecl 0x560467fd0568 col:3 referenced ecs_strbuf_element_embedded 'struct ecs_strbuf_element_embedded':'struct ecs_strbuf_element_embedded' +| `-ElaboratedType 0x560467fd0510 'struct ecs_strbuf_element_embedded' sugar +| `-RecordType 0x560467fd02b0 'struct ecs_strbuf_element_embedded' +| `-Record 0x560467fd0230 'ecs_strbuf_element_embedded' +|-RecordDecl 0x560467fd05d8 line:1962:16 struct ecs_strbuf_element_str definition +| |-FieldDecl 0x560467fd0690 col:24 super 'ecs_strbuf_element':'struct ecs_strbuf_element' +| `-FieldDecl 0x560467fd06f8 col:11 alloc_str 'char *' +|-TypedefDecl 0x560467fd07a8 col:3 ecs_strbuf_element_str 'struct ecs_strbuf_element_str':'struct ecs_strbuf_element_str' +| `-ElaboratedType 0x560467fd0750 'struct ecs_strbuf_element_str' sugar +| `-RecordType 0x560467fd0660 'struct ecs_strbuf_element_str' +| `-Record 0x560467fd05d8 'ecs_strbuf_element_str' +|-RecordDecl 0x560467fd0818 line:1967:16 struct ecs_strbuf_list_elem definition +| |-FieldDecl 0x560467fd08d0 col:13 count 'int32_t':'int' +| `-FieldDecl 0x560467fd0938 col:17 separator 'const char *' +|-TypedefDecl 0x560467fd09e8 col:3 referenced ecs_strbuf_list_elem 'struct ecs_strbuf_list_elem':'struct ecs_strbuf_list_elem' +| `-ElaboratedType 0x560467fd0990 'struct ecs_strbuf_list_elem' sugar +| `-RecordType 0x560467fd08a0 'struct ecs_strbuf_list_elem' +| `-Record 0x560467fd0818 'ecs_strbuf_list_elem' +|-RecordDecl 0x560467fd0a58 line:1972:16 struct ecs_strbuf_t definition +| |-FieldDecl 0x560467fd0b18 col:11 buf 'char *' +| |-FieldDecl 0x560467fd0b78 col:13 max 'int32_t':'int' +| |-FieldDecl 0x560467fd0bd8 col:13 size 'int32_t':'int' +| |-FieldDecl 0x560467fd0c38 col:13 elementCount 'int32_t':'int' +| |-FieldDecl 0x560467fd0cc0 col:33 firstElement 'ecs_strbuf_element_embedded':'struct ecs_strbuf_element_embedded' +| |-FieldDecl 0x560467fd0d48 col:25 current 'ecs_strbuf_element *' +| |-FieldDecl 0x560467fd0f18 col:26 list_stack 'ecs_strbuf_list_elem[32]' +| |-FieldDecl 0x560467fd0f78 col:13 list_sp 'int32_t':'int' +| |-FieldDecl 0x560467fd0fe0 col:11 content 'char *' +| `-FieldDecl 0x560467fd1040 col:13 length 'int32_t':'int' +|-TypedefDecl 0x560467fd10e8 col:3 referenced ecs_strbuf_t 'struct ecs_strbuf_t':'struct ecs_strbuf_t' +| `-ElaboratedType 0x560467fd1090 'struct ecs_strbuf_t' sugar +| `-RecordType 0x560467fd0ae0 'struct ecs_strbuf_t' +| `-Record 0x560467fd0a58 'ecs_strbuf_t' +|-FunctionDecl 0x560467fd13e0 line:2006:6 ecs_strbuf_append 'bool (ecs_strbuf_t *, const char *, ...)' +| |-ParmVarDecl 0x560467fd1240 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd12c0 col:17 fmt 'const char *' +|-FunctionDecl 0x560467fd1748 line:2014:6 ecs_strbuf_vappend 'bool (ecs_strbuf_t *, const char *, struct __va_list_tag *)' +| |-ParmVarDecl 0x560467fd14a0 col:19 buffer 'ecs_strbuf_t *' +| |-ParmVarDecl 0x560467fd1520 col:17 fmt 'const char *' +| `-ParmVarDecl 0x560467fd1620 col:13 args 'struct __va_list_tag *':'struct __va_list_tag *' +|-FunctionDecl 0x560467fd19a8 line:2022:6 ecs_strbuf_appendstr 'bool (ecs_strbuf_t *, const char *)' +| |-ParmVarDecl 0x560467fd1810 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd1890 col:17 str 'const char *' +|-FunctionDecl 0x560467fd1bf8 line:2029:6 ecs_strbuf_appendch 'bool (ecs_strbuf_t *, char)' +| |-ParmVarDecl 0x560467fd1a68 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd1ae0 col:10 ch 'char' +|-FunctionDecl 0x560467fd1e48 line:2036:6 ecs_strbuf_appendint 'bool (ecs_strbuf_t *, int64_t)' +| |-ParmVarDecl 0x560467fd1cb8 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd1d30 col:13 v 'int64_t':'long' +|-FunctionDecl 0x560467fd2128 line:2043:6 ecs_strbuf_appendflt 'bool (ecs_strbuf_t *, double, char)' +| |-ParmVarDecl 0x560467fd1f08 col:19 buffer 'ecs_strbuf_t *' +| |-ParmVarDecl 0x560467fd1f88 col:12 v 'double' +| `-ParmVarDecl 0x560467fd2000 col:10 nan_delim 'char' +|-FunctionDecl 0x560467fd23d8 line:2051:6 ecs_strbuf_mergebuff 'bool (ecs_strbuf_t *, ecs_strbuf_t *)' +| |-ParmVarDecl 0x560467fd2250 col:19 dst_buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd22c8 col:19 src_buffer 'ecs_strbuf_t *' +|-FunctionDecl 0x560467fd2628 line:2058:6 ecs_strbuf_appendstr_zerocpy 'bool (ecs_strbuf_t *, char *)' +| |-ParmVarDecl 0x560467fd2498 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd2518 col:11 str 'char *' +|-FunctionDecl 0x560467fd2908 line:2065:6 ecs_strbuf_appendstr_zerocpyn 'bool (ecs_strbuf_t *, char *, int32_t)' +| |-ParmVarDecl 0x560467fd26e8 col:19 buffer 'ecs_strbuf_t *' +| |-ParmVarDecl 0x560467fd2768 col:11 str 'char *' +| `-ParmVarDecl 0x560467fd27e0 col:13 n 'int32_t':'int' +|-FunctionDecl 0x560467fd2ae8 line:2073:6 ecs_strbuf_appendstr_zerocpy_const 'bool (ecs_strbuf_t *, const char *)' +| |-ParmVarDecl 0x560467fd29d0 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd2a50 col:17 str 'const char *' +|-FunctionDecl 0x560467fd2dc8 line:2080:6 ecs_strbuf_appendstr_zerocpyn_const 'bool (ecs_strbuf_t *, const char *, int32_t)' +| |-ParmVarDecl 0x560467fd2ba8 col:19 buffer 'ecs_strbuf_t *' +| |-ParmVarDecl 0x560467fd2c28 col:17 str 'const char *' +| `-ParmVarDecl 0x560467fd2ca0 col:13 n 'int32_t':'int' +|-FunctionDecl 0x560467fd3028 line:2088:6 ecs_strbuf_appendstrn 'bool (ecs_strbuf_t *, const char *, int32_t)' +| |-ParmVarDecl 0x560467fd2e90 col:19 buffer 'ecs_strbuf_t *' +| |-ParmVarDecl 0x560467fd2f10 col:17 str 'const char *' +| `-ParmVarDecl 0x560467fd2f88 col:13 n 'int32_t':'int' +|-FunctionDecl 0x560467fd3260 line:2095:7 ecs_strbuf_get 'char *(ecs_strbuf_t *)' +| `-ParmVarDecl 0x560467fd30f0 col:19 buffer 'ecs_strbuf_t *' +|-FunctionDecl 0x560467fd33b0 line:2100:7 ecs_strbuf_get_small 'char *(ecs_strbuf_t *)' +| `-ParmVarDecl 0x560467fd3318 col:19 buffer 'ecs_strbuf_t *' +|-FunctionDecl 0x560467fd3558 line:2105:6 ecs_strbuf_reset 'void (ecs_strbuf_t *)' +| `-ParmVarDecl 0x560467fd3468 col:19 buffer 'ecs_strbuf_t *' +|-FunctionDecl 0x560467fd3838 line:2110:6 ecs_strbuf_list_push 'void (ecs_strbuf_t *, const char *, const char *)' +| |-ParmVarDecl 0x560467fd3610 col:19 buffer 'ecs_strbuf_t *' +| |-ParmVarDecl 0x560467fd3690 col:17 list_open 'const char *' +| `-ParmVarDecl 0x560467fd3710 col:17 separator 'const char *' +|-FunctionDecl 0x560467fd3a98 line:2117:6 ecs_strbuf_list_pop 'void (ecs_strbuf_t *, const char *)' +| |-ParmVarDecl 0x560467fd3900 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd3980 col:17 list_close 'const char *' +|-FunctionDecl 0x560467fd3be8 line:2123:6 ecs_strbuf_list_next 'void (ecs_strbuf_t *)' +| `-ParmVarDecl 0x560467fd3b58 col:19 buffer 'ecs_strbuf_t *' +|-FunctionDecl 0x560467fd3db0 line:2128:6 ecs_strbuf_list_appendch 'bool (ecs_strbuf_t *, char)' +| |-ParmVarDecl 0x560467fd3ca0 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd3d18 col:10 ch 'char' +|-FunctionDecl 0x560467fd3f88 line:2134:6 ecs_strbuf_list_append 'bool (ecs_strbuf_t *, const char *, ...)' +| |-ParmVarDecl 0x560467fd3e70 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd3ef0 col:17 fmt 'const char *' +|-FunctionDecl 0x560467fd4160 line:2141:6 ecs_strbuf_list_appendstr 'bool (ecs_strbuf_t *, const char *)' +| |-ParmVarDecl 0x560467fd4048 col:19 buffer 'ecs_strbuf_t *' +| `-ParmVarDecl 0x560467fd40c8 col:17 str 'const char *' +|-FunctionDecl 0x560467fd4408 line:2147:6 ecs_strbuf_list_appendstrn 'bool (ecs_strbuf_t *, const char *, int32_t)' +| |-ParmVarDecl 0x560467fd4270 col:19 buffer 'ecs_strbuf_t *' +| |-ParmVarDecl 0x560467fd42f0 col:17 str 'const char *' +| `-ParmVarDecl 0x560467fd4368 col:13 n 'int32_t':'int' +|-FunctionDecl 0x560467fd4618 line:2153:9 ecs_strbuf_written 'int32_t (const ecs_strbuf_t *)' +| `-ParmVarDecl 0x560467fd4528 col:25 buffer 'const ecs_strbuf_t *' +|-FunctionDecl 0x560467fd4810 /usr/include/errno.h:37:13 __errno_location 'int *(void)' extern +| |-NoThrowAttr 0x560467fd48b0 +| `-ConstAttr 0x560467fd4908 +|-FunctionDecl 0x560467fd4a40 col:14 implicit alloca 'void *(unsigned long)' extern +| |-ParmVarDecl 0x560467fd4b38 <> 'unsigned long' +| `-BuiltinAttr 0x560467fd4ae0 <> Implicit 867 +|-FunctionDecl 0x560467fd4ba8 prev 0x560467fd4a40 /usr/include/alloca.h:32:14 alloca 'void *(unsigned long)' extern +| |-ParmVarDecl 0x560467fd4940 col:29 __size 'size_t':'unsigned long' +| |-BuiltinAttr 0x560467fd4ca8 <> Inherited Implicit 867 +| `-NoThrowAttr 0x560467fd4c50 +|-RecordDecl 0x560467fd4cd0 line:2206:16 struct ecs_time_t definition +| |-FieldDecl 0x560467fd4d80 col:14 sec 'uint32_t':'unsigned int' +| `-FieldDecl 0x560467fd4de0 col:14 nanosec 'uint32_t':'unsigned int' +|-TypedefDecl 0x560467fd4e88 col:3 referenced ecs_time_t 'struct ecs_time_t':'struct ecs_time_t' +| `-ElaboratedType 0x560467fd4e30 'struct ecs_time_t' sugar +| `-RecordType 0x560467fd4d50 'struct ecs_time_t' +| `-Record 0x560467fd4cd0 'ecs_time_t' +|-VarDecl 0x560467fd4f08 col:16 ecs_os_api_malloc_count 'int64_t':'long' extern +|-VarDecl 0x560467fd4f80 col:16 ecs_os_api_realloc_count 'int64_t':'long' extern +|-VarDecl 0x560467fd4ff8 col:16 ecs_os_api_calloc_count 'int64_t':'long' extern +|-VarDecl 0x560467fd5070 col:16 ecs_os_api_free_count 'int64_t':'long' extern +|-TypedefDecl 0x560467fd5110 col:19 referenced ecs_os_thread_t 'uintptr_t':'unsigned long' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fd5178 col:19 referenced ecs_os_cond_t 'uintptr_t':'unsigned long' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fd51e0 col:19 referenced ecs_os_mutex_t 'uintptr_t':'unsigned long' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fe9b50 col:19 referenced ecs_os_dl_t 'uintptr_t':'unsigned long' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fe9bb8 col:19 ecs_os_sock_t 'uintptr_t':'unsigned long' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fe9c20 col:18 referenced ecs_os_thread_id_t 'uint64_t':'unsigned long' +| `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| |-Typedef 0x560467f87e80 'uint64_t' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fe9dd8 col:16 referenced ecs_os_proc_t 'void (*)(void)' +| `-PointerType 0x560467fe9d80 'void (*)(void)' +| `-ParenType 0x560467fe9d20 'void (void)' sugar +| `-FunctionProtoType 0x560467fe9cf0 'void (void)' cdecl +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560467fe9ed8 col:8 referenced ecs_os_api_init_t 'void (*)(void)' +| `-PointerType 0x560467fe9d80 'void (*)(void)' +| `-ParenType 0x560467fe9d20 'void (void)' sugar +| `-FunctionProtoType 0x560467fe9cf0 'void (void)' cdecl +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560467fe9fd8 col:8 referenced ecs_os_api_fini_t 'void (*)(void)' +| `-PointerType 0x560467fe9d80 'void (*)(void)' +| `-ParenType 0x560467fe9d20 'void (void)' sugar +| `-FunctionProtoType 0x560467fe9cf0 'void (void)' cdecl +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560467fea1d8 line:2240:9 referenced ecs_os_api_malloc_t 'void *(*)(ecs_size_t)' +| `-PointerType 0x560467fea170 'void *(*)(ecs_size_t)' +| `-ParenType 0x560467fea110 'void *(ecs_size_t)' sugar +| `-FunctionProtoType 0x560467fea0e0 'void *(ecs_size_t)' cdecl +| |-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467fa7900 'ecs_size_t' sugar +| |-Typedef 0x560467f8ce50 'ecs_size_t' +| `-TypedefType 0x560467f8ce20 'int32_t' sugar +| |-Typedef 0x560467f87c78 'int32_t' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467fea3a0 line:2244:8 referenced ecs_os_api_free_t 'void (*)(void *)' +| `-PointerType 0x560467fea340 'void (*)(void *)' +| `-ParenType 0x560467fea2e0 'void (void *)' sugar +| `-FunctionProtoType 0x560467fea2b0 'void (void *)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-PointerType 0x560467ec1f30 'void *' +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560467fea640 line:2248:9 referenced ecs_os_api_realloc_t 'void *(*)(void *, ecs_size_t)' +| `-PointerType 0x560467fea5d0 'void *(*)(void *, ecs_size_t)' +| `-ParenType 0x560467fea570 'void *(void *, ecs_size_t)' sugar +| `-FunctionProtoType 0x560467fea530 'void *(void *, ecs_size_t)' cdecl +| |-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| |-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467fa7900 'ecs_size_t' sugar +| |-Typedef 0x560467f8ce50 'ecs_size_t' +| `-TypedefType 0x560467f8ce20 'int32_t' sugar +| |-Typedef 0x560467f87c78 'int32_t' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467fea750 line:2253:9 referenced ecs_os_api_calloc_t 'void *(*)(ecs_size_t)' +| `-PointerType 0x560467fea170 'void *(*)(ecs_size_t)' +| `-ParenType 0x560467fea110 'void *(ecs_size_t)' sugar +| `-FunctionProtoType 0x560467fea0e0 'void *(ecs_size_t)' cdecl +| |-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467fa7900 'ecs_size_t' sugar +| |-Typedef 0x560467f8ce50 'ecs_size_t' +| `-TypedefType 0x560467f8ce20 'int32_t' sugar +| |-Typedef 0x560467f87c78 'int32_t' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467fea8f8 line:2257:9 referenced ecs_os_api_strdup_t 'char *(*)(const char *)' +| `-PointerType 0x560467fea890 'char *(*)(const char *)' +| `-ParenType 0x560467fea830 'char *(const char *)' sugar +| `-FunctionProtoType 0x560467f68980 'char *(const char *)' cdecl +| |-PointerType 0x560467ec23a0 'char *' +| | `-BuiltinType 0x560467ec1850 'char' +| `-PointerType 0x560467ec21d0 'const char *' +| `-QualType 0x560467ec1851 'const char' const +| `-BuiltinType 0x560467ec1850 'char' +|-TypedefDecl 0x560467feaac8 line:2262:9 referenced ecs_os_thread_callback_t 'void *(*)(void *)' +| `-PointerType 0x560467feaa60 'void *(*)(void *)' +| `-ParenType 0x560467feaa00 'void *(void *)' sugar +| `-FunctionProtoType 0x560467fea9d0 'void *(void *)' cdecl +| |-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-PointerType 0x560467ec1f30 'void *' +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560467febdd8 line:2266:19 referenced ecs_os_api_thread_new_t 'ecs_os_thread_t (*)(ecs_os_thread_callback_t, void *)' +| `-PointerType 0x560467febd70 'ecs_os_thread_t (*)(ecs_os_thread_callback_t, void *)' +| `-ParenType 0x560467febd10 'ecs_os_thread_t (ecs_os_thread_callback_t, void *)' sugar +| `-FunctionProtoType 0x560467febcd0 'ecs_os_thread_t (ecs_os_thread_callback_t, void *)' cdecl +| |-TypedefType 0x560467feab20 'ecs_os_thread_t' sugar +| | |-Typedef 0x560467fd5110 'ecs_os_thread_t' +| | `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| | |-Typedef 0x560467f8ca30 'uintptr_t' +| | `-BuiltinType 0x560467ec1970 'unsigned long' +| |-TypedefType 0x560467febb70 'ecs_os_thread_callback_t' sugar +| | |-Typedef 0x560467feaac8 'ecs_os_thread_callback_t' +| | `-PointerType 0x560467feaa60 'void *(*)(void *)' +| | `-ParenType 0x560467feaa00 'void *(void *)' sugar +| | `-FunctionProtoType 0x560467fea9d0 'void *(void *)' cdecl +| | |-PointerType 0x560467ec1f30 'void *' +| | | `-BuiltinType 0x560467ec1810 'void' +| | `-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-PointerType 0x560467ec1f30 'void *' +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560467febfa8 line:2271:9 referenced ecs_os_api_thread_join_t 'void *(*)(ecs_os_thread_t)' +| `-PointerType 0x560467febf40 'void *(*)(ecs_os_thread_t)' +| `-ParenType 0x560467febee0 'void *(ecs_os_thread_t)' sugar +| `-FunctionProtoType 0x560467febeb0 'void *(ecs_os_thread_t)' cdecl +| |-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467feab20 'ecs_os_thread_t' sugar +| |-Typedef 0x560467fd5110 'ecs_os_thread_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fec1b8 col:22 referenced ecs_os_api_thread_self_t 'ecs_os_thread_id_t (*)(void)' +| `-PointerType 0x560467fec160 'ecs_os_thread_id_t (*)(void)' +| `-ParenType 0x560467fec100 'ecs_os_thread_id_t (void)' sugar +| `-FunctionProtoType 0x560467fec0d0 'ecs_os_thread_id_t (void)' cdecl +| `-TypedefType 0x560467fec000 'ecs_os_thread_id_t' sugar +| |-Typedef 0x560467fe9c20 'ecs_os_thread_id_t' +| `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| |-Typedef 0x560467f87e80 'uint64_t' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fec3d0 line:2279:11 referenced ecs_os_api_ainc_t 'int32_t (*)(int32_t *)' +| `-PointerType 0x560467fec370 'int32_t (*)(int32_t *)' +| `-ParenType 0x560467fec310 'int32_t (int32_t *)' sugar +| `-FunctionProtoType 0x560467fec2e0 'int32_t (int32_t *)' cdecl +| |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | |-Typedef 0x560467f87c78 'int32_t' +| | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | |-Typedef 0x560467f78f28 '__int32_t' +| | `-BuiltinType 0x560467ec18b0 'int' +| `-PointerType 0x560467fec210 'int32_t *' +| `-TypedefType 0x560467f8ce20 'int32_t' sugar +| |-Typedef 0x560467f87c78 'int32_t' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467fec620 line:2283:11 referenced ecs_os_api_lainc_t 'int64_t (*)(int64_t *)' +| `-PointerType 0x560467fec5c0 'int64_t (*)(int64_t *)' +| `-ParenType 0x560467fec560 'int64_t (int64_t *)' sugar +| `-FunctionProtoType 0x560467fec530 'int64_t (int64_t *)' cdecl +| |-TypedefType 0x560467fca6e0 'int64_t' sugar +| | |-Typedef 0x560467f87ce0 'int64_t' +| | `-TypedefType 0x560467f7e8a0 '__int64_t' sugar +| | |-Typedef 0x560467f7e470 '__int64_t' +| | `-BuiltinType 0x560467ec18d0 'long' +| `-PointerType 0x560467fec460 'int64_t *' +| `-TypedefType 0x560467fca6e0 'int64_t' sugar +| |-Typedef 0x560467f87ce0 'int64_t' +| `-TypedefType 0x560467f7e8a0 '__int64_t' sugar +| |-Typedef 0x560467f7e470 '__int64_t' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x560467fec7d8 line:2288:18 referenced ecs_os_api_mutex_new_t 'ecs_os_mutex_t (*)(void)' +| `-PointerType 0x560467fec780 'ecs_os_mutex_t (*)(void)' +| `-ParenType 0x560467fec750 'ecs_os_mutex_t (void)' sugar +| `-FunctionProtoType 0x560467fec720 'ecs_os_mutex_t (void)' cdecl +| `-TypedefType 0x560467fec680 'ecs_os_mutex_t' sugar +| |-Typedef 0x560467fd51e0 'ecs_os_mutex_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fec9d0 line:2292:8 referenced ecs_os_api_mutex_lock_t 'void (*)(ecs_os_mutex_t)' +| `-PointerType 0x560467fec970 'void (*)(ecs_os_mutex_t)' +| `-ParenType 0x560467fec910 'void (ecs_os_mutex_t)' sugar +| `-FunctionProtoType 0x560467fec8e0 'void (ecs_os_mutex_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467fec680 'ecs_os_mutex_t' sugar +| |-Typedef 0x560467fd51e0 'ecs_os_mutex_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fecad8 line:2296:8 ecs_os_api_mutex_unlock_t 'void (*)(ecs_os_mutex_t)' +| `-PointerType 0x560467fec970 'void (*)(ecs_os_mutex_t)' +| `-ParenType 0x560467fec910 'void (ecs_os_mutex_t)' sugar +| `-FunctionProtoType 0x560467fec8e0 'void (ecs_os_mutex_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467fec680 'ecs_os_mutex_t' sugar +| |-Typedef 0x560467fd51e0 'ecs_os_mutex_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467feec20 line:2300:8 referenced ecs_os_api_mutex_free_t 'void (*)(ecs_os_mutex_t)' +| `-PointerType 0x560467fec970 'void (*)(ecs_os_mutex_t)' +| `-ParenType 0x560467fec910 'void (ecs_os_mutex_t)' sugar +| `-FunctionProtoType 0x560467fec8e0 'void (ecs_os_mutex_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467fec680 'ecs_os_mutex_t' sugar +| |-Typedef 0x560467fd51e0 'ecs_os_mutex_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467feedd8 line:2305:17 referenced ecs_os_api_cond_new_t 'ecs_os_cond_t (*)(void)' +| `-PointerType 0x560467feed80 'ecs_os_cond_t (*)(void)' +| `-ParenType 0x560467feed50 'ecs_os_cond_t (void)' sugar +| `-FunctionProtoType 0x560467feed20 'ecs_os_cond_t (void)' cdecl +| `-TypedefType 0x560467feec80 'ecs_os_cond_t' sugar +| |-Typedef 0x560467fd5178 'ecs_os_cond_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467feef70 line:2309:8 referenced ecs_os_api_cond_free_t 'void (*)(ecs_os_cond_t)' +| `-PointerType 0x560467feef10 'void (*)(ecs_os_cond_t)' +| `-ParenType 0x560467feeee0 'void (ecs_os_cond_t)' sugar +| `-FunctionProtoType 0x560467feeeb0 'void (ecs_os_cond_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467feec80 'ecs_os_cond_t' sugar +| |-Typedef 0x560467fd5178 'ecs_os_cond_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fef078 line:2313:8 referenced ecs_os_api_cond_signal_t 'void (*)(ecs_os_cond_t)' +| `-PointerType 0x560467feef10 'void (*)(ecs_os_cond_t)' +| `-ParenType 0x560467feeee0 'void (ecs_os_cond_t)' sugar +| `-FunctionProtoType 0x560467feeeb0 'void (ecs_os_cond_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467feec80 'ecs_os_cond_t' sugar +| |-Typedef 0x560467fd5178 'ecs_os_cond_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fef180 line:2317:8 referenced ecs_os_api_cond_broadcast_t 'void (*)(ecs_os_cond_t)' +| `-PointerType 0x560467feef10 'void (*)(ecs_os_cond_t)' +| `-ParenType 0x560467feeee0 'void (ecs_os_cond_t)' sugar +| `-FunctionProtoType 0x560467feeeb0 'void (ecs_os_cond_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467feec80 'ecs_os_cond_t' sugar +| |-Typedef 0x560467fd5178 'ecs_os_cond_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fef418 line:2321:8 referenced ecs_os_api_cond_wait_t 'void (*)(ecs_os_cond_t, ecs_os_mutex_t)' +| `-PointerType 0x560467fef3b0 'void (*)(ecs_os_cond_t, ecs_os_mutex_t)' +| `-ParenType 0x560467fef350 'void (ecs_os_cond_t, ecs_os_mutex_t)' sugar +| `-FunctionProtoType 0x560467fef310 'void (ecs_os_cond_t, ecs_os_mutex_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| |-TypedefType 0x560467feec80 'ecs_os_cond_t' sugar +| | |-Typedef 0x560467fd5178 'ecs_os_cond_t' +| | `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| | |-Typedef 0x560467f8ca30 'uintptr_t' +| | `-BuiltinType 0x560467ec1970 'unsigned long' +| `-TypedefType 0x560467fec680 'ecs_os_mutex_t' sugar +| |-Typedef 0x560467fd51e0 'ecs_os_mutex_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467fef6a8 line:2326:8 referenced ecs_os_api_sleep_t 'void (*)(int32_t, int32_t)' +| `-PointerType 0x560467fef640 'void (*)(int32_t, int32_t)' +| `-ParenType 0x560467fef5e0 'void (int32_t, int32_t)' sugar +| `-FunctionProtoType 0x560467fef5a0 'void (int32_t, int32_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | |-Typedef 0x560467f87c78 'int32_t' +| | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | |-Typedef 0x560467f78f28 '__int32_t' +| | `-BuiltinType 0x560467ec18b0 'int' +| `-TypedefType 0x560467f8ce20 'int32_t' sugar +| |-Typedef 0x560467f87c78 'int32_t' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x560467fef870 line:2331:8 ecs_os_api_enable_high_timer_resolution_t 'void (*)(bool)' +| `-PointerType 0x560467fef810 'void (*)(bool)' +| `-ParenType 0x560467fef7b0 'void (bool)' sugar +| `-FunctionProtoType 0x560467fef780 'void (bool)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-BuiltinType 0x560467ec1830 'bool' +|-TypedefDecl 0x560467fefae0 line:2335:8 referenced ecs_os_api_get_time_t 'void (*)(ecs_time_t *)' +| `-PointerType 0x560467fefa80 'void (*)(ecs_time_t *)' +| `-ParenType 0x560467fefa20 'void (ecs_time_t *)' sugar +| `-FunctionProtoType 0x560467fef9f0 'void (ecs_time_t *)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-PointerType 0x560467fef920 'ecs_time_t *' +| `-TypedefType 0x560467fef8d0 'ecs_time_t' sugar +| |-Typedef 0x560467fd4e88 'ecs_time_t' +| `-ElaboratedType 0x560467fd4e30 'struct ecs_time_t' sugar +| `-RecordType 0x560467fd4d50 'struct ecs_time_t' +| `-Record 0x560467fd4cd0 'ecs_time_t' +|-TypedefDecl 0x560467fefcb8 col:12 referenced ecs_os_api_now_t 'uint64_t (*)(void)' +| `-PointerType 0x560467fefc60 'uint64_t (*)(void)' +| `-ParenType 0x560467fefc30 'uint64_t (void)' sugar +| `-FunctionProtoType 0x560467fefc00 'uint64_t (void)' cdecl +| `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| |-Typedef 0x560467f87e80 'uint64_t' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467ff0078 line:2343:8 referenced ecs_os_api_log_t 'void (*)(int32_t, const char *, int32_t, const char *)' +| `-PointerType 0x560467ff0000 'void (*)(int32_t, const char *, int32_t, const char *)' +| `-ParenType 0x560467feffa0 'void (int32_t, const char *, int32_t, const char *)' sugar +| `-FunctionProtoType 0x560467feff50 'void (int32_t, const char *, int32_t, const char *)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | |-Typedef 0x560467f87c78 'int32_t' +| | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | |-Typedef 0x560467f78f28 '__int32_t' +| | `-BuiltinType 0x560467ec18b0 'int' +| |-PointerType 0x560467ec21d0 'const char *' +| | `-QualType 0x560467ec1851 'const char' const +| | `-BuiltinType 0x560467ec1850 'char' +| |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | |-Typedef 0x560467f87c78 'int32_t' +| | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | |-Typedef 0x560467f78f28 '__int32_t' +| | `-BuiltinType 0x560467ec18b0 'int' +| `-PointerType 0x560467ec21d0 'const char *' +| `-QualType 0x560467ec1851 'const char' const +| `-BuiltinType 0x560467ec1850 'char' +|-TypedefDecl 0x560467ff0178 line:2351:8 referenced ecs_os_api_abort_t 'void (*)(void)' +| `-PointerType 0x560467fe9d80 'void (*)(void)' +| `-ParenType 0x560467fe9d20 'void (void)' sugar +| `-FunctionProtoType 0x560467fe9cf0 'void (void)' cdecl +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560467ff0360 line:2356:15 referenced ecs_os_api_dlopen_t 'ecs_os_dl_t (*)(const char *)' +| `-PointerType 0x560467ff0300 'ecs_os_dl_t (*)(const char *)' +| `-ParenType 0x560467ff02a0 'ecs_os_dl_t (const char *)' sugar +| `-FunctionProtoType 0x560467ff0270 'ecs_os_dl_t (const char *)' cdecl +| |-TypedefType 0x560467ff01d0 'ecs_os_dl_t' sugar +| | |-Typedef 0x560467fe9b50 'ecs_os_dl_t' +| | `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| | |-Typedef 0x560467f8ca30 'uintptr_t' +| | `-BuiltinType 0x560467ec1970 'unsigned long' +| `-PointerType 0x560467ec21d0 'const char *' +| `-QualType 0x560467ec1851 'const char' const +| `-BuiltinType 0x560467ec1850 'char' +|-TypedefDecl 0x560467ff0628 line:2360:17 referenced ecs_os_api_dlproc_t 'ecs_os_proc_t (*)(ecs_os_dl_t, const char *)' +| `-PointerType 0x560467ff05c0 'ecs_os_proc_t (*)(ecs_os_dl_t, const char *)' +| `-ParenType 0x560467ff0560 'ecs_os_proc_t (ecs_os_dl_t, const char *)' sugar +| `-FunctionProtoType 0x560467ff0520 'ecs_os_proc_t (ecs_os_dl_t, const char *)' cdecl +| |-TypedefType 0x560467ff03c0 'ecs_os_proc_t' sugar +| | |-Typedef 0x560467fe9dd8 'ecs_os_proc_t' +| | `-PointerType 0x560467fe9d80 'void (*)(void)' +| | `-ParenType 0x560467fe9d20 'void (void)' sugar +| | `-FunctionProtoType 0x560467fe9cf0 'void (void)' cdecl +| | `-BuiltinType 0x560467ec1810 'void' +| |-TypedefType 0x560467ff01d0 'ecs_os_dl_t' sugar +| | |-Typedef 0x560467fe9b50 'ecs_os_dl_t' +| | `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| | |-Typedef 0x560467f8ca30 'uintptr_t' +| | `-BuiltinType 0x560467ec1970 'unsigned long' +| `-PointerType 0x560467ec21d0 'const char *' +| `-QualType 0x560467ec1851 'const char' const +| `-BuiltinType 0x560467ec1850 'char' +|-TypedefDecl 0x560467ff07c0 line:2365:8 referenced ecs_os_api_dlclose_t 'void (*)(ecs_os_dl_t)' +| `-PointerType 0x560467ff0760 'void (*)(ecs_os_dl_t)' +| `-ParenType 0x560467ff0730 'void (ecs_os_dl_t)' sugar +| `-FunctionProtoType 0x560467ff0700 'void (ecs_os_dl_t)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-TypedefType 0x560467ff01d0 'ecs_os_dl_t' sugar +| |-Typedef 0x560467fe9b50 'ecs_os_dl_t' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x560467ff08d8 line:2369:9 referenced ecs_os_api_module_to_path_t 'char *(*)(const char *)' +| `-PointerType 0x560467fea890 'char *(*)(const char *)' +| `-ParenType 0x560467fea830 'char *(const char *)' sugar +| `-FunctionProtoType 0x560467f68980 'char *(const char *)' cdecl +| |-PointerType 0x560467ec23a0 'char *' +| | `-BuiltinType 0x560467ec1850 'char' +| `-PointerType 0x560467ec21d0 'const char *' +| `-QualType 0x560467ec1851 'const char' const +| `-BuiltinType 0x560467ec1850 'char' +|-RecordDecl 0x560467ff0930 line:2375:16 struct ecs_os_api_t definition +| |-FieldDecl 0x560467ff0a00 col:23 init_ 'ecs_os_api_init_t':'void (*)(void)' +| |-FieldDecl 0x560467ff0a80 col:23 fini_ 'ecs_os_api_fini_t':'void (*)(void)' +| |-FieldDecl 0x560467ff0b00 col:25 malloc_ 'ecs_os_api_malloc_t':'void *(*)(ecs_size_t)' +| |-FieldDecl 0x560467ff0ba0 col:26 realloc_ 'ecs_os_api_realloc_t':'void *(*)(void *, ecs_size_t)' +| |-FieldDecl 0x560467ff0c20 col:25 calloc_ 'ecs_os_api_calloc_t':'void *(*)(ecs_size_t)' +| |-FieldDecl 0x560467ff0ca0 col:23 free_ 'ecs_os_api_free_t':'void (*)(void *)' +| |-FieldDecl 0x560467ff0d20 col:25 strdup_ 'ecs_os_api_strdup_t':'char *(*)(const char *)' +| |-FieldDecl 0x560467ff0da0 col:29 thread_new_ 'ecs_os_api_thread_new_t':'ecs_os_thread_t (*)(ecs_os_thread_callback_t, void *)' +| |-FieldDecl 0x560467ff0e20 col:30 thread_join_ 'ecs_os_api_thread_join_t':'void *(*)(ecs_os_thread_t)' +| |-FieldDecl 0x560467ff0ea0 col:30 thread_self_ 'ecs_os_api_thread_self_t':'ecs_os_thread_id_t (*)(void)' +| |-FieldDecl 0x560467ff0f20 col:23 ainc_ 'ecs_os_api_ainc_t':'int32_t (*)(int32_t *)' +| |-FieldDecl 0x560467ff0f80 col:23 adec_ 'ecs_os_api_ainc_t':'int32_t (*)(int32_t *)' +| |-FieldDecl 0x560467ff1000 col:24 lainc_ 'ecs_os_api_lainc_t':'int64_t (*)(int64_t *)' +| |-FieldDecl 0x560467ff1060 col:24 ladec_ 'ecs_os_api_lainc_t':'int64_t (*)(int64_t *)' +| |-FieldDecl 0x560467ff10e0 col:28 mutex_new_ 'ecs_os_api_mutex_new_t':'ecs_os_mutex_t (*)(void)' +| |-FieldDecl 0x560467ff1160 col:29 mutex_free_ 'ecs_os_api_mutex_free_t':'void (*)(ecs_os_mutex_t)' +| |-FieldDecl 0x560467ff11e0 col:29 mutex_lock_ 'ecs_os_api_mutex_lock_t':'void (*)(ecs_os_mutex_t)' +| |-FieldDecl 0x560467ff1240 col:29 mutex_unlock_ 'ecs_os_api_mutex_lock_t':'void (*)(ecs_os_mutex_t)' +| |-FieldDecl 0x560467ff12c0 col:27 cond_new_ 'ecs_os_api_cond_new_t':'ecs_os_cond_t (*)(void)' +| |-FieldDecl 0x560467ff1340 col:28 cond_free_ 'ecs_os_api_cond_free_t':'void (*)(ecs_os_cond_t)' +| |-FieldDecl 0x560467ff13c0 col:30 cond_signal_ 'ecs_os_api_cond_signal_t':'void (*)(ecs_os_cond_t)' +| |-FieldDecl 0x560467ff1440 col:33 cond_broadcast_ 'ecs_os_api_cond_broadcast_t':'void (*)(ecs_os_cond_t)' +| |-FieldDecl 0x560467ff14c0 col:28 cond_wait_ 'ecs_os_api_cond_wait_t':'void (*)(ecs_os_cond_t, ecs_os_mutex_t)' +| |-FieldDecl 0x560467ff1540 col:24 sleep_ 'ecs_os_api_sleep_t':'void (*)(int32_t, int32_t)' +| |-FieldDecl 0x560467ff15c0 col:22 now_ 'ecs_os_api_now_t':'uint64_t (*)(void)' +| |-FieldDecl 0x560467ff1640 col:27 get_time_ 'ecs_os_api_get_time_t':'void (*)(ecs_time_t *)' +| |-FieldDecl 0x560467ff16c0 col:22 log_ 'ecs_os_api_log_t':'void (*)(int32_t, const char *, int32_t, const char *)' +| |-FieldDecl 0x560467ff1740 col:24 abort_ 'ecs_os_api_abort_t':'void (*)(void)' +| |-FieldDecl 0x560467ff17c0 col:25 dlopen_ 'ecs_os_api_dlopen_t':'ecs_os_dl_t (*)(const char *)' +| |-FieldDecl 0x560467ff1840 col:25 dlproc_ 'ecs_os_api_dlproc_t':'ecs_os_proc_t (*)(ecs_os_dl_t, const char *)' +| |-FieldDecl 0x560467ff18c0 col:26 dlclose_ 'ecs_os_api_dlclose_t':'void (*)(ecs_os_dl_t)' +| |-FieldDecl 0x560467ff1940 col:33 module_to_dl_ 'ecs_os_api_module_to_path_t':'char *(*)(const char *)' +| |-FieldDecl 0x560467ff19a0 col:33 module_to_etc_ 'ecs_os_api_module_to_path_t':'char *(*)(const char *)' +| |-FieldDecl 0x560467ff1a00 col:13 log_level_ 'int32_t':'int' +| |-FieldDecl 0x560467ff1a60 col:13 log_indent_ 'int32_t':'int' +| |-FieldDecl 0x560467ff1ac0 col:13 log_last_error_ 'int32_t':'int' +| |-FieldDecl 0x560467ff1b20 col:13 log_last_timestamp_ 'int64_t':'long' +| `-FieldDecl 0x560467ff2bc0 col:19 flags_ 'ecs_flags32_t':'unsigned int' +|-TypedefDecl 0x560467ff2c68 col:3 referenced ecs_os_api_t 'struct ecs_os_api_t':'struct ecs_os_api_t' +| `-ElaboratedType 0x560467ff2c10 'struct ecs_os_api_t' sugar +| `-RecordType 0x560467ff09b0 'struct ecs_os_api_t' +| `-Record 0x560467ff0930 'ecs_os_api_t' +|-VarDecl 0x560467ff2d10 col:21 ecs_os_api 'ecs_os_api_t':'struct ecs_os_api_t' extern +|-FunctionDecl 0x560467ff2e10 col:6 ecs_os_init 'void (void)' +|-FunctionDecl 0x560467ff2f48 col:6 ecs_os_fini 'void (void)' +|-FunctionDecl 0x560467ff3148 line:2468:6 ecs_os_set_api 'void (ecs_os_api_t *)' +| `-ParmVarDecl 0x560467ff3058 col:19 os_api 'ecs_os_api_t *' +|-FunctionDecl 0x560467ff32e8 col:14 ecs_os_get_api 'ecs_os_api_t (void)' +|-FunctionDecl 0x560467ff3420 col:6 ecs_os_set_api_defaults 'void (void)' +|-FunctionDecl 0x560467ff36f8 col:6 ecs_os_dbg 'void (const char *, int32_t, const char *)' +| |-ParmVarDecl 0x560467ff34d8 col:29 file 'const char *' +| |-ParmVarDecl 0x560467ff3550 col:43 line 'int32_t':'int' +| `-ParmVarDecl 0x560467ff35d0 col:61 msg 'const char *' +|-FunctionDecl 0x560467ff3960 col:6 ecs_os_trace 'void (const char *, int32_t, const char *)' +| |-ParmVarDecl 0x560467ff37c8 col:31 file 'const char *' +| |-ParmVarDecl 0x560467ff3840 col:45 line 'int32_t':'int' +| `-ParmVarDecl 0x560467ff38c0 col:63 msg 'const char *' +|-FunctionDecl 0x560467ffb6c8 col:6 ecs_os_warn 'void (const char *, int32_t, const char *)' +| |-ParmVarDecl 0x560467ff3a30 col:30 file 'const char *' +| |-ParmVarDecl 0x560467ff3aa8 col:44 line 'int32_t':'int' +| `-ParmVarDecl 0x560467ff3b28 col:62 msg 'const char *' +|-FunctionDecl 0x560467ffb930 col:6 ecs_os_err 'void (const char *, int32_t, const char *)' +| |-ParmVarDecl 0x560467ffb798 col:29 file 'const char *' +| |-ParmVarDecl 0x560467ffb810 col:43 line 'int32_t':'int' +| `-ParmVarDecl 0x560467ffb890 col:61 msg 'const char *' +|-FunctionDecl 0x560467ffbb98 col:6 ecs_os_fatal 'void (const char *, int32_t, const char *)' +| |-ParmVarDecl 0x560467ffba00 col:31 file 'const char *' +| |-ParmVarDecl 0x560467ffba78 col:45 line 'int32_t':'int' +| `-ParmVarDecl 0x560467ffbaf8 col:63 msg 'const char *' +|-FunctionDecl 0x560467ffbd30 col:13 ecs_os_strerror 'const char *(int)' +| `-ParmVarDecl 0x560467ffbc68 col:33 err 'int' +|-FunctionDecl 0x560467ffbeb8 line:2647:6 ecs_sleepf 'void (double)' +| `-ParmVarDecl 0x560467ffbdf0 col:12 t 'double' +|-FunctionDecl 0x560467ffc070 line:2652:8 ecs_time_measure 'double (ecs_time_t *)' +| `-ParmVarDecl 0x560467ffbf70 col:17 start 'ecs_time_t *' +|-FunctionDecl 0x560467ffc2b8 line:2657:12 ecs_time_sub 'ecs_time_t (ecs_time_t, ecs_time_t)' +| |-ParmVarDecl 0x560467ffc128 col:16 t1 'ecs_time_t':'struct ecs_time_t' +| `-ParmVarDecl 0x560467ffc1a0 col:16 t2 'ecs_time_t':'struct ecs_time_t' +|-FunctionDecl 0x560467ffc470 line:2663:8 ecs_time_to_double 'double (ecs_time_t)' +| `-ParmVarDecl 0x560467ffc378 col:16 t 'ecs_time_t':'struct ecs_time_t' +|-FunctionDecl 0x560467ffe6e8 line:2667:7 ecs_os_memdup 'void *(const void *, ecs_size_t)' +| |-ParmVarDecl 0x560467ffc530 col:17 src 'const void *' +| `-ParmVarDecl 0x560467ffc5a8 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x560467ffe888 col:6 ecs_os_has_heap 'bool (void)' +| `-FullComment 0x56046811fce0 +| `-ParagraphComment 0x56046811fcb0 +| `-TextComment 0x56046811fc80 Text=" Are heap functions available? " +|-FunctionDecl 0x560467ffe9f0 col:6 ecs_os_has_threading 'bool (void)' +| `-FullComment 0x56046811fdb0 +| `-ParagraphComment 0x56046811fd80 +| `-TextComment 0x56046811fd50 Text=" Are threading functions available? " +|-FunctionDecl 0x560467ffeb50 col:6 ecs_os_has_time 'bool (void)' +| `-FullComment 0x56046811fe80 +| `-ParagraphComment 0x56046811fe50 +| `-TextComment 0x56046811fe20 Text=" Are time functions available? " +|-FunctionDecl 0x560467ffecb0 col:6 ecs_os_has_logging 'bool (void)' +| `-FullComment 0x560468120770 +| `-ParagraphComment 0x560468120740 +| `-TextComment 0x56046811fef0 Text=" Are logging functions available? " +|-FunctionDecl 0x560467ffee10 col:6 ecs_os_has_dl 'bool (void)' +| `-FullComment 0x560468120840 +| `-ParagraphComment 0x560468120810 +| `-TextComment 0x5604681207e0 Text=" Are dynamic library functions available? " +|-FunctionDecl 0x560467ffef70 col:6 ecs_os_has_modules 'bool (void)' +| `-FullComment 0x560468120910 +| `-ParagraphComment 0x5604681208e0 +| `-TextComment 0x5604681208b0 Text=" Are module path functions available? " +|-TypedefDecl 0x560467fff0d8 col:18 referenced ecs_id_t 'uint64_t':'unsigned long' +| |-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | |-Typedef 0x560467f87e80 'uint64_t' +| | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | `-BuiltinType 0x560467ec1970 'unsigned long' +| `-FullComment 0x560468120a00 +| `-ParagraphComment 0x5604681209d0 +| |-TextComment 0x560468120980 Text=" An id. Ids are the things that can be added to an entity. An id can be an" +| `-TextComment 0x5604681209a0 Text=" entity or pair, and can have optional id flags. " +|-TypedefDecl 0x560467fff190 col:18 referenced ecs_entity_t 'ecs_id_t':'unsigned long' +| |-TypedefType 0x560467fff160 'ecs_id_t' sugar +| | |-Typedef 0x560467fff0d8 'ecs_id_t' +| | `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | |-Typedef 0x560467f87e80 'uint64_t' +| | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | `-BuiltinType 0x560467ec1970 'unsigned long' +| `-FullComment 0x560468120ad0 +| `-ParagraphComment 0x560468120aa0 +| `-TextComment 0x560468120a70 Text=" An entity identifier. " +|-RecordDecl 0x560467fff218 line:2728:9 struct definition +| |-FullComment 0x560468120ba0 +| | `-ParagraphComment 0x560468120b70 +| | `-TextComment 0x560468120b40 Text=" An array with (component) ids " +| |-FieldDecl 0x560467fff2f8 col:15 array 'ecs_id_t *' +| `-FieldDecl 0x560467fff358 col:13 count 'int32_t':'int' +|-TypedefDecl 0x560467fff408 col:3 referenced ecs_type_t 'struct ecs_type_t':'ecs_type_t' +| |-ElaboratedType 0x560467fff3b0 'struct ecs_type_t' sugar +| | `-RecordType 0x560467fff2a0 'ecs_type_t' +| | `-Record 0x560467fff218 '' +| `-FullComment 0x560468120c70 +| `-ParagraphComment 0x560468120c40 +| `-TextComment 0x560468120c10 Text=" An array with (component) ids " +|-RecordDecl 0x560467fff4a0 col:16 struct ecs_world_t +|-TypedefDecl 0x560467fff598 col:28 referenced ecs_world_t 'struct ecs_world_t':'struct ecs_world_t' +| |-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | `-Record 0x560467fff4a0 'ecs_world_t' +| `-FullComment 0x560468120d40 +| `-ParagraphComment 0x560468120d10 +| `-TextComment 0x560468120ce0 Text=" A world is the container for all ECS data and supporting features. " +|-RecordDecl 0x560467fff630 col:16 struct ecs_table_t +|-TypedefDecl 0x560467fff738 col:28 referenced ecs_table_t 'struct ecs_table_t':'struct ecs_table_t' +| |-ElaboratedType 0x560467fff6e0 'struct ecs_table_t' sugar +| | `-RecordType 0x560467fff6c0 'struct ecs_table_t' +| | `-Record 0x560467fff630 'ecs_table_t' +| `-FullComment 0x560468120e10 +| `-ParagraphComment 0x560468120de0 +| `-TextComment 0x560468120db0 Text=" A table is where entities and components are stored " +|-RecordDecl 0x560467fff7d0 col:16 struct ecs_term_t +|-TypedefDecl 0x560467fff8c8 col:27 referenced ecs_term_t 'struct ecs_term_t':'struct ecs_term_t' +| |-ElaboratedType 0x560467fff870 'struct ecs_term_t' sugar +| | `-RecordType 0x560467fff850 'struct ecs_term_t' +| | `-Record 0x560468007910 'ecs_term_t' +| `-FullComment 0x560468120ee0 +| `-ParagraphComment 0x560468120eb0 +| `-TextComment 0x560468120e80 Text=" A term is a single element in a query " +|-RecordDecl 0x560467fff960 col:16 struct ecs_query_t +|-TypedefDecl 0x560467fffa58 col:28 referenced ecs_query_t 'struct ecs_query_t':'struct ecs_query_t' +| |-ElaboratedType 0x560467fffa00 'struct ecs_query_t' sugar +| | `-RecordType 0x560467fff9e0 'struct ecs_query_t' +| | `-Record 0x560467fff960 'ecs_query_t' +| `-FullComment 0x560468120fb0 +| `-ParagraphComment 0x560468120f80 +| `-TextComment 0x560468120f50 Text=" A query allows for cached iteration over ECS data " +|-RecordDecl 0x560467fffaf0 col:16 struct ecs_filter_t +|-TypedefDecl 0x560467fffbe8 col:29 referenced ecs_filter_t 'struct ecs_filter_t':'struct ecs_filter_t' +| |-ElaboratedType 0x560467fffb90 'struct ecs_filter_t' sugar +| | `-RecordType 0x560467fffb70 'struct ecs_filter_t' +| | `-Record 0x560468008198 'ecs_filter_t' +| `-FullComment 0x560468121080 +| `-ParagraphComment 0x560468121050 +| `-TextComment 0x560468121020 Text=" A filter allows for uncached, ad hoc iteration over ECS data " +|-RecordDecl 0x560467fffc80 col:16 struct ecs_rule_t +|-TypedefDecl 0x560467fffd78 col:27 referenced ecs_rule_t 'struct ecs_rule_t':'struct ecs_rule_t' +| |-ElaboratedType 0x560467fffd20 'struct ecs_rule_t' sugar +| | `-RecordType 0x560467fffd00 'struct ecs_rule_t' +| | `-Record 0x560467fffc80 'ecs_rule_t' +| `-FullComment 0x560468121150 +| `-ParagraphComment 0x560468121120 +| `-TextComment 0x5604681210f0 Text=" A rule implements a non-trivial filter " +|-RecordDecl 0x560467fffe10 col:16 struct ecs_observer_t +|-TypedefDecl 0x560467ffff08 col:31 ecs_observer_t 'struct ecs_observer_t':'struct ecs_observer_t' +| |-ElaboratedType 0x560467fffeb0 'struct ecs_observer_t' sugar +| | `-RecordType 0x560467fffe90 'struct ecs_observer_t' +| | `-Record 0x560468008fb0 'ecs_observer_t' +| `-FullComment 0x560468121220 +| `-ParagraphComment 0x5604681211f0 +| `-TextComment 0x5604681211c0 Text=" An observer reacts to events matching multiple filter terms " +|-RecordDecl 0x560467ffffa0 col:16 struct ecs_observable_t +|-TypedefDecl 0x560468000098 col:33 referenced ecs_observable_t 'struct ecs_observable_t':'struct ecs_observable_t' +| |-ElaboratedType 0x560468000040 'struct ecs_observable_t' sugar +| | `-RecordType 0x560468000020 'struct ecs_observable_t' +| | `-Record 0x56046800d1c8 'ecs_observable_t' +| `-FullComment 0x5604681212f0 +| `-ParagraphComment 0x5604681212c0 +| `-TextComment 0x560468121290 Text=" An observable contains lists of triggers for specific events/components " +|-RecordDecl 0x560468000108 col:16 struct ecs_iter_t +|-TypedefDecl 0x560468000208 col:27 referenced ecs_iter_t 'struct ecs_iter_t':'struct ecs_iter_t' +| `-ElaboratedType 0x5604680001b0 'struct ecs_iter_t' sugar +| `-RecordType 0x560468000190 'struct ecs_iter_t' +| `-Record 0x560468016320 'ecs_iter_t' +|-RecordDecl 0x5604680002a0 col:16 struct ecs_ref_t +|-TypedefDecl 0x560468000398 col:26 referenced ecs_ref_t 'struct ecs_ref_t':'struct ecs_ref_t' +| |-ElaboratedType 0x560468000340 'struct ecs_ref_t' sugar +| | `-RecordType 0x560468000320 'struct ecs_ref_t' +| | `-Record 0x56046800ea70 'ecs_ref_t' +| `-FullComment 0x5604681213c0 +| `-ParagraphComment 0x560468121390 +| `-TextComment 0x560468121360 Text=" Refs cache data that lets them access components faster than ecs_get. " +|-RecordDecl 0x560468000430 col:16 struct ecs_type_hooks_t +|-TypedefDecl 0x560468000528 col:33 referenced ecs_type_hooks_t 'struct ecs_type_hooks_t':'struct ecs_type_hooks_t' +| |-ElaboratedType 0x5604680004d0 'struct ecs_type_hooks_t' sugar +| | `-RecordType 0x5604680004b0 'struct ecs_type_hooks_t' +| | `-Record 0x560468009b28 'ecs_type_hooks_t' +| `-FullComment 0x560468121490 +| `-ParagraphComment 0x560468121460 +| `-TextComment 0x560468121430 Text=" Type hooks (callbacks) " +|-RecordDecl 0x5604680005c0 col:16 struct ecs_type_info_t +|-TypedefDecl 0x5604680006d0 col:32 referenced ecs_type_info_t 'struct ecs_type_info_t':'struct ecs_type_info_t' +| |-ElaboratedType 0x560468000660 'struct ecs_type_info_t' sugar +| | `-RecordType 0x560468000640 'struct ecs_type_info_t' +| | `-Record 0x56046800a9b8 'ecs_type_info_t' +| `-FullComment 0x560468121560 +| `-ParagraphComment 0x560468121530 +| `-TextComment 0x560468121500 Text=" Type information " +|-RecordDecl 0x560468000740 col:16 struct ecs_id_record_t +|-TypedefDecl 0x560468000838 col:32 referenced ecs_id_record_t 'struct ecs_id_record_t':'struct ecs_id_record_t' +| `-ElaboratedType 0x5604680007e0 'struct ecs_id_record_t' sugar +| `-RecordType 0x5604680007c0 'struct ecs_id_record_t' +| `-Record 0x560468000740 'ecs_id_record_t' +|-RecordDecl 0x5604680008a8 col:16 struct ecs_table_record_t +|-TypedefDecl 0x5604680009a8 col:35 ecs_table_record_t 'struct ecs_table_record_t':'struct ecs_table_record_t' +| `-ElaboratedType 0x560468000950 'struct ecs_table_record_t' sugar +| `-RecordType 0x560468000930 'struct ecs_table_record_t' +| `-Record 0x5604680008a8 'ecs_table_record_t' +|-TypedefDecl 0x560468000a50 col:14 referenced ecs_poly_t 'void' +| |-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468121950 +| |-ParagraphComment 0x560468121670 +| | |-TextComment 0x5604681215d0 Text=" A poly object." +| | |-TextComment 0x5604681215f0 Text=" A poly (short for polymorph) object is an object that has a variable list of" +| | |-TextComment 0x560468121610 Text=" capabilities, determined by a mixin table. This is the current list of types" +| | `-TextComment 0x560468121630 Text=" in the flecs API that can be used as an ecs_poly_t:" +| |-ParagraphComment 0x560468121780 +| | |-TextComment 0x560468121690 Text=" - ecs_world_t" +| | |-TextComment 0x5604681216b0 Text=" - ecs_stage_t" +| | |-TextComment 0x5604681216d0 Text=" - ecs_query_t" +| | |-TextComment 0x5604681216f0 Text=" - ecs_filter_t" +| | |-TextComment 0x560468121710 Text=" - ecs_rule_t" +| | `-TextComment 0x560468121730 Text=" - (more to come)" +| |-ParagraphComment 0x560468121820 +| | |-TextComment 0x5604681217a0 Text=" Functions that accept an ecs_poly_t argument can accept objects of these" +| | |-TextComment 0x5604681217c0 Text=" types. If the object does not have the requested mixin the API will throw an" +| | `-TextComment 0x5604681217e0 Text=" assert." +| `-ParagraphComment 0x560468121910 +| |-TextComment 0x560468121840 Text=" The poly/mixin framework enables partially overlapping features to be" +| |-TextComment 0x560468121860 Text=" implemented once, and enables objects of different types to interact with" +| |-TextComment 0x560468121880 Text=" each other depending on what mixins they have, rather than their type" +| |-TextComment 0x5604681218a0 Text=" (in some ways it's like a mini-ECS). Additionally, each poly object has a" +| `-TextComment 0x5604681218c0 Text=" header that enables the API to do sanity checking on the input arguments." +|-RecordDecl 0x560468000ad8 col:16 struct ecs_mixins_t +|-TypedefDecl 0x560468000bd8 col:29 referenced ecs_mixins_t 'struct ecs_mixins_t':'struct ecs_mixins_t' +| |-ElaboratedType 0x560468000b80 'struct ecs_mixins_t' sugar +| | `-RecordType 0x560468000b60 'struct ecs_mixins_t' +| | `-Record 0x560468000ad8 'ecs_mixins_t' +| `-FullComment 0x560468121a20 +| `-ParagraphComment 0x5604681219f0 +| `-TextComment 0x5604681219c0 Text=" Type that stores poly mixins " +|-RecordDecl 0x560468000c70 line:2803:16 struct ecs_header_t definition +| |-FullComment 0x560468121af0 +| | `-ParagraphComment 0x560468121ac0 +| | `-TextComment 0x560468121a90 Text=" Header for ecs_poly_t objects. " +| |-FieldDecl 0x560468000d20 col:13 magic 'int32_t':'int' +| |-FieldDecl 0x560468000d80 col:13 type 'int32_t':'int' +| `-FieldDecl 0x560468000e58 col:19 mixins 'ecs_mixins_t *' +|-TypedefDecl 0x560468000f08 col:3 referenced ecs_header_t 'struct ecs_header_t':'struct ecs_header_t' +| |-ElaboratedType 0x560468000eb0 'struct ecs_header_t' sugar +| | `-RecordType 0x560468000cf0 'struct ecs_header_t' +| | `-Record 0x560468000c70 'ecs_header_t' +| `-FullComment 0x560468121bc0 +| `-ParagraphComment 0x560468121b90 +| `-TextComment 0x560468121b60 Text=" Header for ecs_poly_t objects. " +|-TypedefDecl 0x560468001210 line:2826:16 referenced ecs_run_action_t 'void (*)(ecs_iter_t *)' +| |-PointerType 0x5604680011b0 'void (*)(ecs_iter_t *)' +| | `-ParenType 0x560468001150 'void (ecs_iter_t *)' sugar +| | `-FunctionProtoType 0x560468001120 'void (ecs_iter_t *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | `-PointerType 0x560468001050 'ecs_iter_t *' +| | `-TypedefType 0x560468001000 'ecs_iter_t' sugar +| | |-Typedef 0x560468000208 'ecs_iter_t' +| | `-ElaboratedType 0x5604680001b0 'struct ecs_iter_t' sugar +| | `-RecordType 0x560468000190 'struct ecs_iter_t' +| | `-Record 0x560468016320 'ecs_iter_t' +| `-FullComment 0x560468121e60 +| |-ParagraphComment 0x560468121cb0 +| | |-TextComment 0x560468121c30 Text=" Function prototype for runnables (systems, observers)." +| | |-TextComment 0x560468121c50 Text=" The run callback overrides the default behavior for iterating through the" +| | `-TextComment 0x560468121c70 Text=" results of a runnable object." +| |-ParagraphComment 0x560468121d20 +| | |-TextComment 0x560468121cd0 Text=" The default runnable iterates the iterator, and calls an iter_action (see" +| | `-TextComment 0x560468121cf0 Text=" below) for each returned result." +| |-ParagraphComment 0x560468121d70 +| | `-TextComment 0x560468121d40 Text=" " +| `-ParamCommandComment 0x560468121d90 [in] implicitly Param="it" ParamIndex=0 +| `-ParagraphComment 0x560468121e20 +| `-TextComment 0x560468121df0 Text=" The iterator to be iterated by the runnable." +|-TypedefDecl 0x560468001348 line:2835:16 referenced ecs_iter_action_t 'void (*)(ecs_iter_t *)' +| |-PointerType 0x5604680011b0 'void (*)(ecs_iter_t *)' +| | `-ParenType 0x560468001150 'void (ecs_iter_t *)' sugar +| | `-FunctionProtoType 0x560468001120 'void (ecs_iter_t *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | `-PointerType 0x560468001050 'ecs_iter_t *' +| | `-TypedefType 0x560468001000 'ecs_iter_t' sugar +| | |-Typedef 0x560468000208 'ecs_iter_t' +| | `-ElaboratedType 0x5604680001b0 'struct ecs_iter_t' sugar +| | `-RecordType 0x560468000190 'struct ecs_iter_t' +| | `-Record 0x560468016320 'ecs_iter_t' +| `-FullComment 0x560468122090 +| |-ParagraphComment 0x560468121f50 +| | |-TextComment 0x560468121ed0 Text=" Function prototype for iterables." +| | |-TextComment 0x560468121ef0 Text=" A system may invoke a callback multiple times, typically once for each" +| | `-TextComment 0x560468121f10 Text=" matched table." +| |-ParagraphComment 0x560468121fa0 +| | `-TextComment 0x560468121f70 Text=" " +| `-ParamCommandComment 0x560468121fc0 [in] implicitly Param="it" ParamIndex=0 +| `-ParagraphComment 0x560468122050 +| `-TextComment 0x560468122020 Text=" The iterator containing the data for the current match." +|-TypedefDecl 0x560468001a48 line:2849:16 referenced ecs_iter_init_action_t 'void (*)(const ecs_world_t *, const ecs_poly_t *, ecs_iter_t *, ecs_term_t *)' +| |-PointerType 0x5604680019d0 'void (*)(const ecs_world_t *, const ecs_poly_t *, ecs_iter_t *, ecs_term_t *)' +| | `-ParenType 0x560468001970 'void (const ecs_world_t *, const ecs_poly_t *, ecs_iter_t *, ecs_term_t *)' sugar +| | `-FunctionProtoType 0x560468001920 'void (const ecs_world_t *, const ecs_poly_t *, ecs_iter_t *, ecs_term_t *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560468001420 'const ecs_world_t *' +| | | `-QualType 0x5604680013d1 'const ecs_world_t' const +| | | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | | |-Typedef 0x560467fff598 'ecs_world_t' +| | | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | | `-Record 0x560467fff4a0 'ecs_world_t' +| | |-PointerType 0x5604680014e0 'const ecs_poly_t *' +| | | `-QualType 0x5604680014c1 'const ecs_poly_t' const +| | | `-TypedefType 0x5604680014c0 'ecs_poly_t' sugar +| | | |-Typedef 0x560468000a50 'ecs_poly_t' +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560468001050 'ecs_iter_t *' +| | | `-TypedefType 0x560468001000 'ecs_iter_t' sugar +| | | |-Typedef 0x560468000208 'ecs_iter_t' +| | | `-ElaboratedType 0x5604680001b0 'struct ecs_iter_t' sugar +| | | `-RecordType 0x560468000190 'struct ecs_iter_t' +| | | `-Record 0x560468016320 'ecs_iter_t' +| | `-PointerType 0x560468001650 'ecs_term_t *' +| | `-TypedefType 0x560468001600 'ecs_term_t' sugar +| | |-Typedef 0x560467fff8c8 'ecs_term_t' +| | `-ElaboratedType 0x560467fff870 'struct ecs_term_t' sugar +| | `-RecordType 0x560467fff850 'struct ecs_term_t' +| | `-Record 0x560468007910 'ecs_term_t' +| `-FullComment 0x560468122590 +| |-ParagraphComment 0x5604681221d0 +| | |-TextComment 0x560468122100 Text=" Function prototype for creating an iterator from a poly." +| | |-TextComment 0x560468122120 Text=" Used to create iterators from poly objects with the iterable mixin. When a" +| | |-TextComment 0x560468122140 Text=" filter is provided, an array of two iterators must be passed to the function." +| | |-TextComment 0x560468122160 Text=" This allows the mixin implementation to create a chained iterator when" +| | `-TextComment 0x560468122180 Text=" necessary, which requires two iterator objects." +| |-ParagraphComment 0x560468122220 +| | `-TextComment 0x5604681221f0 Text=" " +| |-ParamCommandComment 0x560468122240 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681222f0 +| | |-TextComment 0x5604681222a0 Text=" The world or stage for which to create the iterator." +| | `-TextComment 0x5604681222c0 Text=" " +| |-ParamCommandComment 0x560468122310 [in] implicitly Param="iterable" ParamIndex=1 +| | `-ParagraphComment 0x5604681223c0 +| | |-TextComment 0x560468122370 Text=" An iterable poly object." +| | `-TextComment 0x560468122390 Text=" " +| |-ParamCommandComment 0x5604681223e0 [in] implicitly Param="it" ParamIndex=2 +| | `-ParagraphComment 0x560468122490 +| | |-TextComment 0x560468122440 Text=" The iterator to create (out parameter)" +| | `-TextComment 0x560468122460 Text=" " +| `-ParamCommandComment 0x5604681224b0 [in] implicitly Param="filter" ParamIndex=3 +| `-ParagraphComment 0x560468122540 +| `-TextComment 0x560468122510 Text=" Optional term to filter results." +|-TypedefDecl 0x560468001c60 line:2862:16 referenced ecs_iter_next_action_t 'bool (*)(ecs_iter_t *)' +| |-PointerType 0x560468001c00 'bool (*)(ecs_iter_t *)' +| | `-ParenType 0x560468001ba0 'bool (ecs_iter_t *)' sugar +| | `-FunctionProtoType 0x560468001b70 'bool (ecs_iter_t *)' cdecl +| | |-BuiltinType 0x560467ec1830 'bool' +| | `-PointerType 0x560468001050 'ecs_iter_t *' +| | `-TypedefType 0x560468001000 'ecs_iter_t' sugar +| | |-Typedef 0x560468000208 'ecs_iter_t' +| | `-ElaboratedType 0x5604680001b0 'struct ecs_iter_t' sugar +| | `-RecordType 0x560468000190 'struct ecs_iter_t' +| | `-Record 0x560468016320 'ecs_iter_t' +| `-FullComment 0x560468123890 +| |-ParagraphComment 0x560468122680 +| | |-TextComment 0x560468122600 Text=" Function prototype for iterating an iterator." +| | |-TextComment 0x560468122620 Text=" Stored inside initialized iterators. This allows an application to * iterate " +| | `-TextComment 0x560468122640 Text=" an iterator without needing to know what created it." +| |-ParagraphComment 0x5604681226d0 +| | `-TextComment 0x5604681226a0 Text=" " +| |-ParamCommandComment 0x5604681226f0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x5604681237d0 +| | |-TextComment 0x560468123780 Text=" The iterator to iterate." +| | `-TextComment 0x5604681237a0 Text=" " +| `-BlockCommandComment 0x5604681237f0 Name="return" +| `-ParagraphComment 0x560468123850 +| `-TextComment 0x560468123820 Text=" True if iterator has no more results, false if it does." +|-TypedefDecl 0x560468001d98 line:2870:16 referenced ecs_iter_fini_action_t 'void (*)(ecs_iter_t *)' +| |-PointerType 0x5604680011b0 'void (*)(ecs_iter_t *)' +| | `-ParenType 0x560468001150 'void (ecs_iter_t *)' sugar +| | `-FunctionProtoType 0x560468001120 'void (ecs_iter_t *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | `-PointerType 0x560468001050 'ecs_iter_t *' +| | `-TypedefType 0x560468001000 'ecs_iter_t' sugar +| | |-Typedef 0x560468000208 'ecs_iter_t' +| | `-ElaboratedType 0x5604680001b0 'struct ecs_iter_t' sugar +| | `-RecordType 0x560468000190 'struct ecs_iter_t' +| | `-Record 0x560468016320 'ecs_iter_t' +| `-FullComment 0x560468123a90 +| |-ParagraphComment 0x560468123950 +| | |-TextComment 0x560468123900 Text=" Function prototype for freeing an iterator." +| | `-TextComment 0x560468123920 Text=" Free iterator resources." +| |-ParagraphComment 0x5604681239a0 +| | `-TextComment 0x560468123970 Text=" " +| `-ParamCommandComment 0x5604681239c0 [in] implicitly Param="it" ParamIndex=0 +| `-ParagraphComment 0x560468123a50 +| `-TextComment 0x560468123a20 Text=" The iterator to free." +|-TypedefDecl 0x5604680021b0 line:2874:15 referenced ecs_order_by_action_t 'int (*)(ecs_entity_t, const void *, ecs_entity_t, const void *)' +| |-PointerType 0x560468002130 'int (*)(ecs_entity_t, const void *, ecs_entity_t, const void *)' +| | `-ParenType 0x5604680020d0 'int (ecs_entity_t, const void *, ecs_entity_t, const void *)' sugar +| | `-FunctionProtoType 0x560468002080 'int (ecs_entity_t, const void *, ecs_entity_t, const void *)' cdecl +| | |-BuiltinType 0x560467ec18b0 'int' +| | |-TypedefType 0x560468001e20 'ecs_entity_t' sugar +| | | |-Typedef 0x560467fff190 'ecs_entity_t' +| | | `-TypedefType 0x560467fff160 'ecs_id_t' sugar +| | | |-Typedef 0x560467fff0d8 'ecs_id_t' +| | | `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | | |-Typedef 0x560467f87e80 'uint64_t' +| | | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | | `-BuiltinType 0x560467ec1970 'unsigned long' +| | |-PointerType 0x560467f594d0 'const void *' +| | | `-QualType 0x560467ec1811 'const void' const +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-TypedefType 0x560468001e20 'ecs_entity_t' sugar +| | | |-Typedef 0x560467fff190 'ecs_entity_t' +| | | `-TypedefType 0x560467fff160 'ecs_id_t' sugar +| | | |-Typedef 0x560467fff0d8 'ecs_id_t' +| | | `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | | |-Typedef 0x560467f87e80 'uint64_t' +| | | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | | `-BuiltinType 0x560467ec1970 'unsigned long' +| | `-PointerType 0x560467f594d0 'const void *' +| | `-QualType 0x560467ec1811 'const void' const +| | `-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468123b60 +| `-ParagraphComment 0x560468123b30 +| `-TextComment 0x560468123b00 Text=" Callback used for comparing components " +|-TypedefDecl 0x560468002e48 line:2881:16 referenced ecs_sort_table_action_t 'void (*)(ecs_world_t *, ecs_table_t *, ecs_entity_t *, void *, int32_t, int32_t, int32_t, ecs_order_by_action_t)' +| |-PointerType 0x560468002db0 'void (*)(ecs_world_t *, ecs_table_t *, ecs_entity_t *, void *, int32_t, int32_t, int32_t, ecs_order_by_action_t)' +| | `-ParenType 0x560468002810 'void (ecs_world_t *, ecs_table_t *, ecs_entity_t *, void *, int32_t, int32_t, int32_t, ecs_order_by_action_t)' sugar +| | `-FunctionProtoType 0x5604680027a0 'void (ecs_world_t *, ecs_table_t *, ecs_entity_t *, void *, int32_t, int32_t, int32_t, ecs_order_by_action_t)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560468002270 'ecs_world_t *' +| | | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | | |-Typedef 0x560467fff598 'ecs_world_t' +| | | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | | `-Record 0x560467fff4a0 'ecs_world_t' +| | |-PointerType 0x560468002360 'ecs_table_t *' +| | | `-TypedefType 0x560468002310 'ecs_table_t' sugar +| | | |-Typedef 0x560467fff738 'ecs_table_t' +| | | `-ElaboratedType 0x560467fff6e0 'struct ecs_table_t' sugar +| | | `-RecordType 0x560467fff6c0 'struct ecs_table_t' +| | | `-Record 0x560467fff630 'ecs_table_t' +| | |-PointerType 0x560468002400 'ecs_entity_t *' +| | | `-TypedefType 0x560468001e20 'ecs_entity_t' sugar +| | | |-Typedef 0x560467fff190 'ecs_entity_t' +| | | `-TypedefType 0x560467fff160 'ecs_id_t' sugar +| | | |-Typedef 0x560467fff0d8 'ecs_id_t' +| | | `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | | |-Typedef 0x560467f87e80 'uint64_t' +| | | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | | `-BuiltinType 0x560467ec1970 'unsigned long' +| | |-PointerType 0x560467ec1f30 'void *' +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | | |-Typedef 0x560467f87c78 'int32_t' +| | | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | | |-Typedef 0x560467f78f28 '__int32_t' +| | | `-BuiltinType 0x560467ec18b0 'int' +| | |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | | |-Typedef 0x560467f87c78 'int32_t' +| | | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | | |-Typedef 0x560467f78f28 '__int32_t' +| | | `-BuiltinType 0x560467ec18b0 'int' +| | |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | | |-Typedef 0x560467f87c78 'int32_t' +| | | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | | |-Typedef 0x560467f78f28 '__int32_t' +| | | `-BuiltinType 0x560467ec18b0 'int' +| | `-TypedefType 0x560468002690 'ecs_order_by_action_t' sugar +| | |-Typedef 0x5604680021b0 'ecs_order_by_action_t' +| | `-PointerType 0x560468002130 'int (*)(ecs_entity_t, const void *, ecs_entity_t, const void *)' +| | `-ParenType 0x5604680020d0 'int (ecs_entity_t, const void *, ecs_entity_t, const void *)' sugar +| | `-FunctionProtoType 0x560468002080 'int (ecs_entity_t, const void *, ecs_entity_t, const void *)' cdecl +| | |-BuiltinType 0x560467ec18b0 'int' +| | |-TypedefType 0x560468001e20 'ecs_entity_t' sugar +| | | |-Typedef 0x560467fff190 'ecs_entity_t' +| | | `-TypedefType 0x560467fff160 'ecs_id_t' sugar +| | | |-Typedef 0x560467fff0d8 'ecs_id_t' +| | | `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | | |-Typedef 0x560467f87e80 'uint64_t' +| | | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | | `-BuiltinType 0x560467ec1970 'unsigned long' +| | |-PointerType 0x560467f594d0 'const void *' +| | | `-QualType 0x560467ec1811 'const void' const +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-TypedefType 0x560468001e20 'ecs_entity_t' sugar +| | | |-Typedef 0x560467fff190 'ecs_entity_t' +| | | `-TypedefType 0x560467fff160 'ecs_id_t' sugar +| | | |-Typedef 0x560467fff0d8 'ecs_id_t' +| | | `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | | |-Typedef 0x560467f87e80 'uint64_t' +| | | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | | `-BuiltinType 0x560467ec1970 'unsigned long' +| | `-PointerType 0x560467f594d0 'const void *' +| | `-QualType 0x560467ec1811 'const void' const +| | `-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468123c30 +| `-ParagraphComment 0x560468123c00 +| `-TextComment 0x560468123bd0 Text=" Callback used for sorting the entire table of components " +|-TypedefDecl 0x560468003228 line:2892:20 referenced ecs_group_by_action_t 'uint64_t (*)(ecs_world_t *, ecs_table_t *, ecs_id_t, void *)' +| |-PointerType 0x5604680031b0 'uint64_t (*)(ecs_world_t *, ecs_table_t *, ecs_id_t, void *)' +| | `-ParenType 0x560468003150 'uint64_t (ecs_world_t *, ecs_table_t *, ecs_id_t, void *)' sugar +| | `-FunctionProtoType 0x560468003100 'uint64_t (ecs_world_t *, ecs_table_t *, ecs_id_t, void *)' cdecl +| | |-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | | |-Typedef 0x560467f87e80 'uint64_t' +| | | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | | `-BuiltinType 0x560467ec1970 'unsigned long' +| | |-PointerType 0x560468002270 'ecs_world_t *' +| | | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | | |-Typedef 0x560467fff598 'ecs_world_t' +| | | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | | `-Record 0x560467fff4a0 'ecs_world_t' +| | |-PointerType 0x560468002360 'ecs_table_t *' +| | | `-TypedefType 0x560468002310 'ecs_table_t' sugar +| | | |-Typedef 0x560467fff738 'ecs_table_t' +| | | `-ElaboratedType 0x560467fff6e0 'struct ecs_table_t' sugar +| | | `-RecordType 0x560467fff6c0 'struct ecs_table_t' +| | | `-Record 0x560467fff630 'ecs_table_t' +| | |-TypedefType 0x560467fff160 'ecs_id_t' sugar +| | | |-Typedef 0x560467fff0d8 'ecs_id_t' +| | | `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | | |-Typedef 0x560467f87e80 'uint64_t' +| | | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | | `-BuiltinType 0x560467ec1970 'unsigned long' +| | `-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468123d00 +| `-ParagraphComment 0x560468123cd0 +| `-TextComment 0x560468123ca0 Text=" Callback used for grouping tables in a query " +|-TypedefDecl 0x560468003548 line:2899:17 referenced ecs_group_create_action_t 'void *(*)(ecs_world_t *, uint64_t, void *)' +| `-PointerType 0x5604680034d0 'void *(*)(ecs_world_t *, uint64_t, void *)' +| `-ParenType 0x560468003470 'void *(ecs_world_t *, uint64_t, void *)' sugar +| `-FunctionProtoType 0x560468003430 'void *(ecs_world_t *, uint64_t, void *)' cdecl +| |-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| |-PointerType 0x560468002270 'ecs_world_t *' +| | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | |-Typedef 0x560467fff598 'ecs_world_t' +| | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | `-Record 0x560467fff4a0 'ecs_world_t' +| |-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | |-Typedef 0x560467f87e80 'uint64_t' +| | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | `-BuiltinType 0x560467ec1970 'unsigned long' +| `-PointerType 0x560467ec1f30 'void *' +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560468003908 line:2905:16 referenced ecs_group_delete_action_t 'void (*)(ecs_world_t *, uint64_t, void *, void *)' +| `-PointerType 0x560468003890 'void (*)(ecs_world_t *, uint64_t, void *, void *)' +| `-ParenType 0x560468003830 'void (ecs_world_t *, uint64_t, void *, void *)' sugar +| `-FunctionProtoType 0x5604680037e0 'void (ecs_world_t *, uint64_t, void *, void *)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| |-PointerType 0x560468002270 'ecs_world_t *' +| | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | |-Typedef 0x560467fff598 'ecs_world_t' +| | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | `-Record 0x560467fff4a0 'ecs_world_t' +| |-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | |-Typedef 0x560467f87e80 'uint64_t' +| | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | `-BuiltinType 0x560467ec1970 'unsigned long' +| |-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-PointerType 0x560467ec1f30 'void *' +| `-BuiltinType 0x560467ec1810 'void' +|-TypedefDecl 0x560468003b20 line:2912:16 referenced ecs_module_action_t 'void (*)(ecs_world_t *)' +| |-PointerType 0x560468003ac0 'void (*)(ecs_world_t *)' +| | `-ParenType 0x560468003a60 'void (ecs_world_t *)' sugar +| | `-FunctionProtoType 0x560468003a30 'void (ecs_world_t *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | `-PointerType 0x560468002270 'ecs_world_t *' +| | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | |-Typedef 0x560467fff598 'ecs_world_t' +| | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | `-Record 0x560467fff4a0 'ecs_world_t' +| `-FullComment 0x560468123dd0 +| `-ParagraphComment 0x560468123da0 +| `-TextComment 0x560468123d70 Text=" Initialization action for modules " +|-TypedefDecl 0x560468004ec8 line:2916:16 referenced ecs_fini_action_t 'void (*)(ecs_world_t *, void *)' +| |-PointerType 0x560468004e60 'void (*)(ecs_world_t *, void *)' +| | `-ParenType 0x560468003d20 'void (ecs_world_t *, void *)' sugar +| | `-FunctionProtoType 0x560468003ce0 'void (ecs_world_t *, void *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560468002270 'ecs_world_t *' +| | | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | | |-Typedef 0x560467fff598 'ecs_world_t' +| | | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | | `-Record 0x560467fff4a0 'ecs_world_t' +| | `-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468123ea0 +| `-ParagraphComment 0x560468123e70 +| `-TextComment 0x560468123e40 Text=" Action callback on world exit " +|-TypedefDecl 0x560468005000 line:2921:16 referenced ecs_ctx_free_t 'void (*)(void *)' +| |-PointerType 0x560467fea340 'void (*)(void *)' +| | `-ParenType 0x560467fea2e0 'void (void *)' sugar +| | `-FunctionProtoType 0x560467fea2b0 'void (void *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | `-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468123f70 +| `-ParagraphComment 0x560468123f40 +| `-TextComment 0x560468123f10 Text=" Function to cleanup context data " +|-TypedefDecl 0x5604680051d0 line:2925:15 referenced ecs_compare_action_t 'int (*)(const void *, const void *)' +| |-PointerType 0x560467f8d370 'int (*)(const void *, const void *)' +| | `-ParenType 0x560467f8d310 'int (const void *, const void *)' sugar +| | `-FunctionProtoType 0x560467f8d2d0 'int (const void *, const void *)' cdecl +| | |-BuiltinType 0x560467ec18b0 'int' +| | |-PointerType 0x560467f594d0 'const void *' +| | | `-QualType 0x560467ec1811 'const void' const +| | | `-BuiltinType 0x560467ec1810 'void' +| | `-PointerType 0x560467f594d0 'const void *' +| | `-QualType 0x560467ec1811 'const void' const +| | `-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468124040 +| `-ParagraphComment 0x560468124010 +| `-TextComment 0x560468123fe0 Text=" Callback used for sorting values " +|-TypedefDecl 0x560468005400 line:2930:20 referenced ecs_hash_value_action_t 'uint64_t (*)(const void *)' +| |-PointerType 0x5604680053a0 'uint64_t (*)(const void *)' +| | `-ParenType 0x560468005340 'uint64_t (const void *)' sugar +| | `-FunctionProtoType 0x560468005310 'uint64_t (const void *)' cdecl +| | |-TypedefType 0x560467f8cd90 'uint64_t' sugar +| | | |-Typedef 0x560467f87e80 'uint64_t' +| | | `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| | | |-Typedef 0x560467f7e4e0 '__uint64_t' +| | | `-BuiltinType 0x560467ec1970 'unsigned long' +| | `-PointerType 0x560467f594d0 'const void *' +| | `-QualType 0x560467ec1811 'const void' const +| | `-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468124110 +| `-ParagraphComment 0x5604681240e0 +| `-TextComment 0x5604681240b0 Text=" Callback used for hashing values " +|-TypedefDecl 0x5604680057c0 line:2934:16 referenced ecs_xtor_t 'void (*)(void *, int32_t, const ecs_type_info_t *)' +| |-PointerType 0x560468005750 'void (*)(void *, int32_t, const ecs_type_info_t *)' +| | `-ParenType 0x5604680056f0 'void (void *, int32_t, const ecs_type_info_t *)' sugar +| | `-FunctionProtoType 0x5604680056b0 'void (void *, int32_t, const ecs_type_info_t *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560467ec1f30 'void *' +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | | |-Typedef 0x560467f87c78 'int32_t' +| | | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | | |-Typedef 0x560467f78f28 '__int32_t' +| | | `-BuiltinType 0x560467ec18b0 'int' +| | `-PointerType 0x5604680055d0 'const ecs_type_info_t *' +| | `-QualType 0x560468005581 'const ecs_type_info_t' const +| | `-TypedefType 0x560468005580 'ecs_type_info_t' sugar +| | |-Typedef 0x5604680006d0 'ecs_type_info_t' +| | `-ElaboratedType 0x560468000660 'struct ecs_type_info_t' sugar +| | `-RecordType 0x560468000640 'struct ecs_type_info_t' +| | `-Record 0x56046800a9b8 'ecs_type_info_t' +| `-FullComment 0x5604681241e0 +| `-ParagraphComment 0x5604681241b0 +| `-TextComment 0x560468124180 Text=" Constructor/destructor callback " +|-TypedefDecl 0x560468005bb8 line:2940:16 referenced ecs_copy_t 'void (*)(void *, const void *, int32_t, const ecs_type_info_t *)' +| |-PointerType 0x560468005b40 'void (*)(void *, const void *, int32_t, const ecs_type_info_t *)' +| | `-ParenType 0x560468005ae0 'void (void *, const void *, int32_t, const ecs_type_info_t *)' sugar +| | `-FunctionProtoType 0x560468005a90 'void (void *, const void *, int32_t, const ecs_type_info_t *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560467ec1f30 'void *' +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560467f594d0 'const void *' +| | | `-QualType 0x560467ec1811 'const void' const +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | | |-Typedef 0x560467f87c78 'int32_t' +| | | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | | |-Typedef 0x560467f78f28 '__int32_t' +| | | `-BuiltinType 0x560467ec18b0 'int' +| | `-PointerType 0x5604680055d0 'const ecs_type_info_t *' +| | `-QualType 0x560468005581 'const ecs_type_info_t' const +| | `-TypedefType 0x560468005580 'ecs_type_info_t' sugar +| | |-Typedef 0x5604680006d0 'ecs_type_info_t' +| | `-ElaboratedType 0x560468000660 'struct ecs_type_info_t' sugar +| | `-RecordType 0x560468000640 'struct ecs_type_info_t' +| | `-Record 0x56046800a9b8 'ecs_type_info_t' +| `-FullComment 0x5604681242b0 +| `-ParagraphComment 0x560468124280 +| `-TextComment 0x560468124250 Text=" Copy is invoked when a component is copied into another component. " +|-TypedefDecl 0x560468006168 line:2947:16 referenced ecs_move_t 'void (*)(void *, void *, int32_t, const ecs_type_info_t *)' +| |-PointerType 0x5604680060f0 'void (*)(void *, void *, int32_t, const ecs_type_info_t *)' +| | `-ParenType 0x560468006090 'void (void *, void *, int32_t, const ecs_type_info_t *)' sugar +| | `-FunctionProtoType 0x560468006040 'void (void *, void *, int32_t, const ecs_type_info_t *)' cdecl +| | |-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560467ec1f30 'void *' +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-PointerType 0x560467ec1f30 'void *' +| | | `-BuiltinType 0x560467ec1810 'void' +| | |-TypedefType 0x560467f8ce20 'int32_t' sugar +| | | |-Typedef 0x560467f87c78 'int32_t' +| | | `-TypedefType 0x560467f7e780 '__int32_t' sugar +| | | |-Typedef 0x560467f78f28 '__int32_t' +| | | `-BuiltinType 0x560467ec18b0 'int' +| | `-PointerType 0x5604680055d0 'const ecs_type_info_t *' +| | `-QualType 0x560468005581 'const ecs_type_info_t' const +| | `-TypedefType 0x560468005580 'ecs_type_info_t' sugar +| | |-Typedef 0x5604680006d0 'ecs_type_info_t' +| | `-ElaboratedType 0x560468000660 'struct ecs_type_info_t' sugar +| | `-RecordType 0x560468000640 'struct ecs_type_info_t' +| | `-Record 0x56046800a9b8 'ecs_type_info_t' +| `-FullComment 0x560468124380 +| `-ParagraphComment 0x560468124350 +| `-TextComment 0x560468124320 Text=" Move is invoked when a component is moved to another component. " +|-TypedefDecl 0x560468006320 line:2954:16 referenced ecs_poly_dtor_t 'void (*)(ecs_poly_t *)' +| `-PointerType 0x5604680062c0 'void (*)(ecs_poly_t *)' +| `-ParenType 0x560468006290 'void (ecs_poly_t *)' sugar +| `-FunctionProtoType 0x560468006260 'void (ecs_poly_t *)' cdecl +| |-BuiltinType 0x560467ec1810 'void' +| `-PointerType 0x5604680061c0 'ecs_poly_t *' +| `-TypedefType 0x5604680014c0 'ecs_poly_t' sugar +| |-Typedef 0x560468000a50 'ecs_poly_t' +| `-BuiltinType 0x560467ec1810 'void' +|-RecordDecl 0x560468006408 line:2967:16 struct ecs_iterable_t definition +| |-FullComment 0x560468124470 +| | `-ParagraphComment 0x560468124440 +| | |-TextComment 0x5604681243f0 Text=" Iterable mixin." +| | `-TextComment 0x560468124410 Text=" Allows its container to be iterated. " +| `-FieldDecl 0x5604680064e0 col:28 init 'ecs_iter_init_action_t':'void (*)(const ecs_world_t *, const ecs_poly_t *, ecs_iter_t *, ecs_term_t *)' +|-TypedefDecl 0x560468006588 col:3 referenced ecs_iterable_t 'struct ecs_iterable_t':'struct ecs_iterable_t' +| |-ElaboratedType 0x560468006530 'struct ecs_iterable_t' sugar +| | `-RecordType 0x560468006490 'struct ecs_iterable_t' +| | `-Record 0x560468006408 'ecs_iterable_t' +| `-FullComment 0x560468124560 +| `-ParagraphComment 0x560468124530 +| |-TextComment 0x5604681244e0 Text=" Iterable mixin." +| `-TextComment 0x560468124500 Text=" Allows its container to be iterated. " +|-EnumDecl 0x560468006680 line:2980:14 ecs_inout_kind_t +| |-FullComment 0x560468124630 +| | `-ParagraphComment 0x560468124600 +| | `-TextComment 0x5604681245d0 Text=" Specify read/write access for term " +| |-EnumConstantDecl 0x560468006740 col:5 EcsInOutDefault 'int' +| |-EnumConstantDecl 0x560468006790 col:5 EcsInOutNone 'int' +| |-EnumConstantDecl 0x5604680067e0 col:5 EcsInOut 'int' +| |-EnumConstantDecl 0x560468006830 col:5 EcsIn 'int' +| `-EnumConstantDecl 0x560468006880 col:5 EcsOut 'int' +|-TypedefDecl 0x560468006928 col:3 referenced ecs_inout_kind_t 'enum ecs_inout_kind_t':'enum ecs_inout_kind_t' +| |-ElaboratedType 0x5604680068d0 'enum ecs_inout_kind_t' sugar +| | `-EnumType 0x560468006720 'enum ecs_inout_kind_t' +| | `-Enum 0x560468006680 'ecs_inout_kind_t' +| `-FullComment 0x560468124700 +| `-ParagraphComment 0x5604681246d0 +| `-TextComment 0x5604681246a0 Text=" Specify read/write access for term " +|-EnumDecl 0x5604680069c0 line:2989:14 ecs_oper_kind_t +| |-FullComment 0x5604681247d0 +| | `-ParagraphComment 0x5604681247a0 +| | `-TextComment 0x560468124770 Text=" Specify operator for term " +| |-EnumConstantDecl 0x560468006a80 col:5 EcsAnd 'int' +| |-EnumConstantDecl 0x560468006ad0 col:5 EcsOr 'int' +| |-EnumConstantDecl 0x560468006b20 col:5 EcsNot 'int' +| |-EnumConstantDecl 0x560468006b70 col:5 EcsOptional 'int' +| |-EnumConstantDecl 0x560468006bc0 col:5 EcsAndFrom 'int' +| |-EnumConstantDecl 0x560468006c10 col:5 EcsOrFrom 'int' +| `-EnumConstantDecl 0x560468006c60 col:5 EcsNotFrom 'int' +|-TypedefDecl 0x560468006d08 col:3 referenced ecs_oper_kind_t 'enum ecs_oper_kind_t':'enum ecs_oper_kind_t' +| |-ElaboratedType 0x560468006cb0 'enum ecs_oper_kind_t' sugar +| | `-EnumType 0x560468006a60 'enum ecs_oper_kind_t' +| | `-Enum 0x5604680069c0 'ecs_oper_kind_t' +| `-FullComment 0x5604681248a0 +| `-ParagraphComment 0x560468124870 +| `-TextComment 0x560468124840 Text=" Specify operator for term " +|-RecordDecl 0x560468006f50 line:3012:16 struct ecs_term_id_t definition +| |-FullComment 0x560468124970 +| | `-ParagraphComment 0x560468124940 +| | `-TextComment 0x560468124910 Text=" Type that describes a single identifier in a term " +| |-FieldDecl 0x5604680075f0 col:18 id 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468124ae0 +| | `-ParagraphComment 0x560468124ab0 +| | |-TextComment 0x5604681249e0 Text=" Entity id. If left to 0 and flags does not " +| | |-TextComment 0x560468124a00 Text=" specify whether id is an entity or a variable" +| | |-TextComment 0x560468124a20 Text=" the id will be initialized to EcsThis. " +| | |-TextComment 0x560468124a40 Text=" To explicitly set the id to 0, leave the id" +| | `-TextComment 0x560468124a60 Text=" member to 0 and set EcsIsEntity in flags. " +| |-FieldDecl 0x560468007680 col:11 name 'char *' +| | `-FullComment 0x560468124c70 +| | `-ParagraphComment 0x560468124c40 +| | |-TextComment 0x560468124b50 Text=" Name. This can be either the variable name" +| | |-TextComment 0x560468124b70 Text=" (when the EcsIsVariable flag is set) or an" +| | |-TextComment 0x560468124b90 Text=" entity name. Entity names are used to " +| | |-TextComment 0x560468124bb0 Text=" initialize the id member during term " +| | |-TextComment 0x560468124bd0 Text=" finalization and will be freed when term.move" +| | `-TextComment 0x560468124bf0 Text=" is set to true. " +| |-FieldDecl 0x560468007708 col:18 trav 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468124d90 +| | `-ParagraphComment 0x560468124d60 +| | |-TextComment 0x560468124ce0 Text=" Relationship to traverse when looking for the" +| | |-TextComment 0x560468124d00 Text=" component. The relationship must have" +| | `-TextComment 0x560468124d20 Text=" the Acyclic property. Default is IsA. " +| `-FieldDecl 0x560468007798 col:19 flags 'ecs_flags32_t':'unsigned int' +| `-FullComment 0x560468124e60 +| `-ParagraphComment 0x560468124e30 +| `-TextComment 0x560468124e00 Text=" Term flags " +|-TypedefDecl 0x560468007878 col:3 referenced ecs_term_id_t 'struct ecs_term_id_t':'struct ecs_term_id_t' +| |-ElaboratedType 0x560468007820 'struct ecs_term_id_t' sugar +| | `-RecordType 0x560468006fd0 'struct ecs_term_id_t' +| | `-Record 0x560468006f50 'ecs_term_id_t' +| `-FullComment 0x560468124f30 +| `-ParagraphComment 0x560468124f00 +| `-TextComment 0x560468124ed0 Text=" Type that describes a single identifier in a term " +|-RecordDecl 0x560468007910 prev 0x560467fff7d0 line:3034:8 struct ecs_term_t definition +| |-FullComment 0x560468125000 +| | `-ParagraphComment 0x560468124fd0 +| | `-TextComment 0x560468124fa0 Text=" Type that describes a term (single element in a query) " +| |-FieldDecl 0x5604680079a0 col:14 id 'ecs_id_t':'unsigned long' +| | `-FullComment 0x560468125140 +| | `-ParagraphComment 0x560468125110 +| | |-TextComment 0x560468125070 Text=" Component id to be matched by term. Can be" +| | |-TextComment 0x560468125090 Text=" set directly, or will be populated from the" +| | |-TextComment 0x5604681250b0 Text=" first/second members, which provide more" +| | `-TextComment 0x5604681250d0 Text=" flexibility. " +| |-FieldDecl 0x560468007a50 col:19 src 'ecs_term_id_t':'struct ecs_term_id_t' +| | `-FullComment 0x560468125210 +| | `-ParagraphComment 0x5604681251e0 +| | `-TextComment 0x5604681251b0 Text=" Source of term " +| |-FieldDecl 0x560468007ad8 col:19 first 'ecs_term_id_t':'struct ecs_term_id_t' +| | `-FullComment 0x5604681252e0 +| | `-ParagraphComment 0x5604681252b0 +| | `-TextComment 0x560468125280 Text=" Component or first element of pair " +| |-FieldDecl 0x560468007b68 col:19 second 'ecs_term_id_t':'struct ecs_term_id_t' +| | `-FullComment 0x5604681253b0 +| | `-ParagraphComment 0x560468125380 +| | `-TextComment 0x560468125350 Text=" Second element of pair " +| |-FieldDecl 0x560468007c20 col:22 inout 'ecs_inout_kind_t':'enum ecs_inout_kind_t' +| | `-FullComment 0x560468125480 +| | `-ParagraphComment 0x560468125450 +| | `-TextComment 0x560468125420 Text=" Access to contents matched by term " +| |-FieldDecl 0x560468007cd0 col:21 oper 'ecs_oper_kind_t':'enum ecs_oper_kind_t' +| | `-FullComment 0x560468125550 +| | `-ParagraphComment 0x560468125520 +| | `-TextComment 0x5604681254f0 Text=" Operator of term " +| |-FieldDecl 0x560468007d58 col:14 id_flags 'ecs_id_t':'unsigned long' +| | `-FullComment 0x560468125620 +| | `-ParagraphComment 0x5604681255f0 +| | `-TextComment 0x5604681255c0 Text=" Id flags of term id " +| |-FieldDecl 0x560468007df0 col:11 name 'char *' +| | `-FullComment 0x5604681256f0 +| | `-ParagraphComment 0x5604681256c0 +| | `-TextComment 0x560468125690 Text=" Name of term " +| |-FieldDecl 0x560468007e78 col:13 field_index 'int32_t':'int' +| | `-FullComment 0x5604681261d0 +| | `-ParagraphComment 0x5604681261a0 +| | `-TextComment 0x560468126170 Text=" Index of field for term in iterator " +| |-FieldDecl 0x560468007f88 col:22 idr 'ecs_id_record_t *' +| | `-FullComment 0x5604681262a0 +| | `-ParagraphComment 0x560468126270 +| | `-TextComment 0x560468126240 Text=" Cached pointer to internal index " +| `-FieldDecl 0x560468008018 col:10 move 'bool' +| `-FullComment 0x560468126370 +| `-ParagraphComment 0x560468126340 +| `-TextComment 0x560468126310 Text=" Used by internals " +|-VarDecl 0x560468008100 col:31 ECS_FILTER_INIT 'ecs_filter_t':'struct ecs_filter_t' extern +| `-FullComment 0x560468126440 +| `-ParagraphComment 0x560468126410 +| `-TextComment 0x5604681263e0 Text=" Use this variable to initialize user-allocated filter object " +|-RecordDecl 0x560468008198 prev 0x560467fffaf0 line:3060:8 struct ecs_filter_t definition +| |-FullComment 0x560468126510 +| | `-ParagraphComment 0x5604681264e0 +| | `-TextComment 0x5604681264b0 Text=" Filters alllow for ad-hoc quick filtering of entity tables. " +| |-FieldDecl 0x560468008250 col:18 hdr 'ecs_header_t':'struct ecs_header_t' +| |-FieldDecl 0x5604680082b0 col:17 terms 'ecs_term_t *' +| | `-FullComment 0x5604681265e0 +| | `-ParagraphComment 0x5604681265b0 +| | `-TextComment 0x560468126580 Text=" Array containing terms for filter " +| |-FieldDecl 0x560468008338 col:13 term_count 'int32_t':'int' +| | `-FullComment 0x5604681266b0 +| | `-ParagraphComment 0x560468126680 +| | `-TextComment 0x560468126650 Text=" Number of elements in terms array " +| |-FieldDecl 0x5604680083c8 col:13 field_count 'int32_t':'int' +| | `-FullComment 0x560468126780 +| | `-ParagraphComment 0x560468126750 +| | `-TextComment 0x560468126720 Text=" Number of fields in iterator for filter " +| |-FieldDecl 0x560468008458 col:10 owned 'bool' +| | `-FullComment 0x560468126850 +| | `-ParagraphComment 0x560468126820 +| | `-TextComment 0x5604681267f0 Text=" Is filter object owned by filter " +| |-FieldDecl 0x5604680084e8 col:10 terms_owned 'bool' +| | `-FullComment 0x560468126920 +| | `-ParagraphComment 0x5604681268f0 +| | `-TextComment 0x5604681268c0 Text=" Is terms array owned by filter " +| |-FieldDecl 0x560468008578 col:19 flags 'ecs_flags32_t':'unsigned int' +| | `-FullComment 0x5604681269f0 +| | `-ParagraphComment 0x5604681269c0 +| | `-TextComment 0x560468126990 Text=" Filter flags " +| |-FieldDecl 0x560468008c80 col:11 variable_names 'char *[1]' +| | `-FullComment 0x560468126ac0 +| | `-ParagraphComment 0x560468126a90 +| | `-TextComment 0x560468126a60 Text=" Array with variable names " +| |-FieldDecl 0x560468008d08 col:18 entity 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468126b90 +| | `-ParagraphComment 0x560468126b60 +| | `-TextComment 0x560468126b30 Text=" Entity associated with filter (optional) " +| |-FieldDecl 0x560468008d98 col:18 world 'ecs_world_t *' +| |-FieldDecl 0x560468008e20 col:20 iterable 'ecs_iterable_t':'struct ecs_iterable_t' +| | `-FullComment 0x560468126c60 +| | `-ParagraphComment 0x560468126c30 +| | `-TextComment 0x560468126c00 Text=" Iterable mixin " +| `-FieldDecl 0x560468008ed0 col:21 dtor 'ecs_poly_dtor_t':'void (*)(ecs_poly_t *)' +| `-FullComment 0x560468126d30 +| `-ParagraphComment 0x560468126d00 +| `-TextComment 0x560468126cd0 Text=" Dtor mixin " +|-RecordDecl 0x560468008fb0 prev 0x560467fffe10 line:3082:8 struct ecs_observer_t definition +| |-FieldDecl 0x560468009040 col:18 hdr 'ecs_header_t':'struct ecs_header_t' +| |-FieldDecl 0x5604680090a0 col:18 filter 'ecs_filter_t':'struct ecs_filter_t' +| | `-FullComment 0x560468126e00 +| | `-ParagraphComment 0x560468126dd0 +| | `-TextComment 0x560468126da0 Text=" Query for observer " +| |-FieldDecl 0x560468009218 col:18 events 'ecs_entity_t[8]' +| |-FieldDecl 0x560468009278 col:13 event_count 'int32_t':'int' +| |-FieldDecl 0x560468009300 col:23 callback 'ecs_iter_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x560468126ed0 +| | `-ParagraphComment 0x560468126ea0 +| | `-TextComment 0x560468126e70 Text=" See ecs_observer_desc_t::callback " +| |-FieldDecl 0x5604680093b0 col:22 run 'ecs_run_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x560468126fa0 +| | `-ParagraphComment 0x560468126f70 +| | `-TextComment 0x560468126f40 Text=" See ecs_observer_desc_t::run " +| |-FieldDecl 0x560468009440 col:11 ctx 'void *' +| | `-FullComment 0x560468127070 +| | `-ParagraphComment 0x560468127040 +| | `-TextComment 0x560468127010 Text=" Callback context " +| |-FieldDecl 0x5604680094d0 col:11 binding_ctx 'void *' +| | `-FullComment 0x560468127140 +| | `-ParagraphComment 0x560468127110 +| | `-TextComment 0x5604681270e0 Text=" Binding context (for language bindings) " +| |-FieldDecl 0x560468009580 col:20 ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| | `-FullComment 0x560468127210 +| | `-ParagraphComment 0x5604681271e0 +| | `-TextComment 0x5604681271b0 Text=" Callback to free ctx " +| |-FieldDecl 0x560468009608 col:20 binding_ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| | `-FullComment 0x5604681272e0 +| | `-ParagraphComment 0x5604681272b0 +| | `-TextComment 0x560468127280 Text=" Callback to free binding_ctx " +| |-FieldDecl 0x560468009718 col:23 observable 'ecs_observable_t *' +| | `-FullComment 0x5604681273b0 +| | `-ParagraphComment 0x560468127380 +| | `-TextComment 0x560468127350 Text=" Observable for observer " +| |-FieldDecl 0x5604680097a8 col:14 last_event_id 'int32_t *' +| | `-FullComment 0x560468127480 +| | `-ParagraphComment 0x560468127450 +| | `-TextComment 0x560468127420 Text=" Last handled event id " +| |-FieldDecl 0x560468009838 col:14 register_id 'ecs_id_t':'unsigned long' +| | `-FullComment 0x560468127550 +| | `-ParagraphComment 0x560468127520 +| | `-TextComment 0x5604681274f0 Text=" Id observer is registered with (single term observers only) " +| |-FieldDecl 0x5604680098c8 col:13 term_index 'int32_t':'int' +| | `-FullComment 0x560468127620 +| | `-ParagraphComment 0x5604681275f0 +| | `-TextComment 0x5604681275c0 Text=" Index of the term in parent observer (single term observers only) " +| |-FieldDecl 0x560468009958 col:10 is_monitor 'bool' +| | `-FullComment 0x5604681277e0 +| | `-ParagraphComment 0x5604681277b0 +| | |-TextComment 0x560468127690 Text=" If true, the observer only triggers when the" +| | |-TextComment 0x5604681276b0 Text="*" +| | |-TextComment 0x5604681276d0 Text="<" +| | |-TextComment 0x5604681276f0 Text=" filter did not match with the entity before" +| | |-TextComment 0x560468127710 Text="*" +| | |-TextComment 0x560468127730 Text="<" +| | `-TextComment 0x560468127750 Text=" the event happened. " +| |-FieldDecl 0x5604680099e8 col:10 is_multi 'bool' +| | `-FullComment 0x5604681278b0 +| | `-ParagraphComment 0x560468127880 +| | `-TextComment 0x560468127850 Text=" If true, the observer triggers on more than one term " +| `-FieldDecl 0x560468009a78 col:21 dtor 'ecs_poly_dtor_t':'void (*)(ecs_poly_t *)' +|-RecordDecl 0x560468009b28 prev 0x560468000430 line:3123:8 struct ecs_type_hooks_t definition +| |-FullComment 0x560468127a70 +| | |-ParagraphComment 0x560468127950 +| | | `-TextComment 0x560468127920 Text=" Type that contains component lifecycle callbacks. " +| | |-ParagraphComment 0x5604681279a0 +| | | `-TextComment 0x560468127970 Text=" " +| | |-VerbatimLineComment 0x5604681279c0 Text=" components" +| | `-ParagraphComment 0x560468127a30 +| | `-TextComment 0x560468127a00 Text=" " +| |-FieldDecl 0x56046800a0f0 col:16 ctor 'ecs_xtor_t':'void (*)(void *, int32_t, const ecs_type_info_t *)' +| | `-FullComment 0x560468127b40 +| | `-ParagraphComment 0x560468127b10 +| | `-TextComment 0x560468127ae0 Text=" ctor " +| |-FieldDecl 0x56046800a178 col:16 dtor 'ecs_xtor_t':'void (*)(void *, int32_t, const ecs_type_info_t *)' +| | `-FullComment 0x560468127c10 +| | `-ParagraphComment 0x560468127be0 +| | `-TextComment 0x560468127bb0 Text=" dtor " +| |-FieldDecl 0x56046800a230 col:16 copy 'ecs_copy_t':'void (*)(void *, const void *, int32_t, const ecs_type_info_t *)' +| | `-FullComment 0x560468127ce0 +| | `-ParagraphComment 0x560468127cb0 +| | `-TextComment 0x560468127c80 Text=" copy assignment " +| |-FieldDecl 0x56046800a2e0 col:16 move 'ecs_move_t':'void (*)(void *, void *, int32_t, const ecs_type_info_t *)' +| | `-FullComment 0x560468127db0 +| | `-ParagraphComment 0x560468127d80 +| | `-TextComment 0x560468127d50 Text=" move assignment " +| |-FieldDecl 0x56046800a398 col:16 copy_ctor 'ecs_copy_t':'void (*)(void *, const void *, int32_t, const ecs_type_info_t *)' +| | `-FullComment 0x560468127e80 +| | `-ParagraphComment 0x560468127e50 +| | `-TextComment 0x560468127e20 Text=" Ctor + copy " +| |-FieldDecl 0x56046800a428 col:16 move_ctor 'ecs_move_t':'void (*)(void *, void *, int32_t, const ecs_type_info_t *)' +| | `-FullComment 0x560468127f50 +| | `-ParagraphComment 0x560468127f20 +| | `-TextComment 0x560468127ef0 Text=" Ctor + move " +| |-FieldDecl 0x56046800a4b8 col:16 ctor_move_dtor 'ecs_move_t':'void (*)(void *, void *, int32_t, const ecs_type_info_t *)' +| | `-FullComment 0x560468128090 +| | `-ParagraphComment 0x560468128060 +| | |-TextComment 0x560468127fc0 Text=" Ctor + move + dtor (or move_ctor + dtor)." +| | |-TextComment 0x560468127fe0 Text=" This combination is typically used when a component is moved from one" +| | |-TextComment 0x560468128000 Text=" location to a new location, like when it is moved to a new table. If" +| | `-TextComment 0x560468128020 Text=" not set explicitly it will be derived from other callbacks. " +| |-FieldDecl 0x56046800a548 col:16 move_dtor 'ecs_move_t':'void (*)(void *, void *, int32_t, const ecs_type_info_t *)' +| | `-FullComment 0x5604681281f0 +| | `-ParagraphComment 0x5604681281c0 +| | |-TextComment 0x560468128100 Text=" Move + dtor." +| | |-TextComment 0x560468128120 Text=" This combination is typically used when a component is moved from one" +| | |-TextComment 0x560468128140 Text=" location to an existing location, like what happens during a remove. If" +| | `-TextComment 0x560468128180 Text=" not set explicitly it will be derived from other callbacks. " +| |-FieldDecl 0x56046800a5d8 col:23 on_add 'ecs_iter_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x5604681282e0 +| | `-ParagraphComment 0x5604681282b0 +| | |-TextComment 0x560468128260 Text=" Callback that is invoked when an instance of a component is added. This" +| | `-TextComment 0x560468128280 Text=" callback is invoked before triggers are invoked. " +| |-FieldDecl 0x56046800a668 col:23 on_set 'ecs_iter_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x560468128400 +| | `-ParagraphComment 0x5604681283d0 +| | |-TextComment 0x560468128350 Text=" Callback that is invoked when an instance of the component is set. This" +| | |-TextComment 0x560468128370 Text=" callback is invoked before triggers are invoked, and enable the component" +| | `-TextComment 0x560468128390 Text=" to respond to changes on itself before others can. " +| |-FieldDecl 0x56046800a6f8 col:23 on_remove 'ecs_iter_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x560468128520 +| | `-ParagraphComment 0x5604681284f0 +| | |-TextComment 0x560468128470 Text=" Callback that is invoked when an instance of the component is removed. " +| | |-TextComment 0x560468128490 Text=" This callback is invoked after the triggers are invoked, and before the" +| | `-TextComment 0x5604681284b0 Text=" destructor is invoked. " +| |-FieldDecl 0x56046800a760 col:11 ctx 'void *' +| | `-FullComment 0x5604681285f0 +| | `-ParagraphComment 0x5604681285c0 +| | `-TextComment 0x560468128590 Text=" User defined context " +| |-FieldDecl 0x56046800a7f0 col:11 binding_ctx 'void *' +| | `-FullComment 0x5604681286c0 +| | `-ParagraphComment 0x560468128690 +| | `-TextComment 0x560468128660 Text=" Language binding context " +| |-FieldDecl 0x56046800a878 col:20 ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| | `-FullComment 0x560468128790 +| | `-ParagraphComment 0x560468128760 +| | `-TextComment 0x560468128730 Text=" Callback to free ctx " +| `-FieldDecl 0x56046800a908 col:20 binding_ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| `-FullComment 0x560468128860 +| `-ParagraphComment 0x560468128830 +| `-TextComment 0x560468128800 Text=" Callback to free binding_ctx " +|-RecordDecl 0x56046800a9b8 prev 0x5604680005c0 line:3172:8 struct ecs_type_info_t definition +| |-FullComment 0x560468128a20 +| | |-ParagraphComment 0x560468128900 +| | | `-TextComment 0x5604681288d0 Text=" Type that contains component information (passed to ctors/dtors/...) " +| | |-ParagraphComment 0x560468128950 +| | | `-TextComment 0x560468128920 Text=" " +| | |-VerbatimLineComment 0x560468128970 Text=" components" +| | `-ParagraphComment 0x5604681289e0 +| | `-TextComment 0x5604681289b0 Text=" " +| |-FieldDecl 0x56046800aa48 col:16 size 'ecs_size_t':'int' +| | `-FullComment 0x560468128af0 +| | `-ParagraphComment 0x560468128ac0 +| | `-TextComment 0x560468128a90 Text=" Size of type " +| |-FieldDecl 0x56046800aad8 col:16 alignment 'ecs_size_t':'int' +| | `-FullComment 0x560468128bc0 +| | `-ParagraphComment 0x560468128b90 +| | `-TextComment 0x560468128b60 Text=" Alignment of type " +| |-FieldDecl 0x56046800ab90 col:22 hooks 'ecs_type_hooks_t':'struct ecs_type_hooks_t' +| | `-FullComment 0x560468128c90 +| | `-ParagraphComment 0x560468128c60 +| | `-TextComment 0x560468128c30 Text=" Type hooks " +| |-FieldDecl 0x56046800ac18 col:18 component 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468128d60 +| | `-ParagraphComment 0x560468128d30 +| | `-TextComment 0x560468128d00 Text=" Handle to component (do not set) " +| `-FieldDecl 0x56046800acb0 col:17 name 'const char *' +| `-FullComment 0x560468128e30 +| `-ParagraphComment 0x560468128e00 +| `-TextComment 0x560468128dd0 Text=" Type name. " +|-RecordDecl 0x56046800adb8 col:16 struct ecs_stage_t +|-TypedefDecl 0x56046800aeb8 col:28 ecs_stage_t 'struct ecs_stage_t':'struct ecs_stage_t' +| |-ElaboratedType 0x56046800ae60 'struct ecs_stage_t' sugar +| | `-RecordType 0x56046800ae40 'struct ecs_stage_t' +| | `-Record 0x56046800adb8 'ecs_stage_t' +| `-FullComment 0x560468128f00 +| `-ParagraphComment 0x560468128ed0 +| `-TextComment 0x560468128ea0 Text=" A stage enables modification while iterating and from multiple threads " +|-RecordDecl 0x56046800af50 col:16 struct ecs_record_t +|-TypedefDecl 0x56046800b048 col:29 referenced ecs_record_t 'struct ecs_record_t':'struct ecs_record_t' +| |-ElaboratedType 0x56046800aff0 'struct ecs_record_t' sugar +| | `-RecordType 0x56046800afd0 'struct ecs_record_t' +| | `-Record 0x56046800d5e8 'ecs_record_t' +| `-FullComment 0x560468128fd0 +| `-ParagraphComment 0x560468128fa0 +| `-TextComment 0x560468128f70 Text=" A record stores data to map an entity id to a location in a table " +|-RecordDecl 0x56046800c760 col:16 struct ecs_data_t +|-TypedefDecl 0x56046800c858 col:27 ecs_data_t 'struct ecs_data_t':'struct ecs_data_t' +| |-ElaboratedType 0x56046800c800 'struct ecs_data_t' sugar +| | `-RecordType 0x56046800c7e0 'struct ecs_data_t' +| | `-Record 0x56046800c760 'ecs_data_t' +| `-FullComment 0x5604681290a0 +| `-ParagraphComment 0x560468129070 +| `-TextComment 0x560468129040 Text=" Table data " +|-RecordDecl 0x56046800c8c8 col:16 struct ecs_switch_t +|-TypedefDecl 0x56046800c9c8 col:29 ecs_switch_t 'struct ecs_switch_t':'struct ecs_switch_t' +| `-ElaboratedType 0x56046800c970 'struct ecs_switch_t' sugar +| `-RecordType 0x56046800c950 'struct ecs_switch_t' +| `-Record 0x56046800c8c8 'ecs_switch_t' +|-RecordDecl 0x56046800ca38 col:16 struct ecs_query_table_node_t +|-TypedefDecl 0x56046800cb38 col:39 referenced ecs_query_table_node_t 'struct ecs_query_table_node_t':'struct ecs_query_table_node_t' +| `-ElaboratedType 0x56046800cae0 'struct ecs_query_table_node_t' sugar +| `-RecordType 0x56046800cac0 'struct ecs_query_table_node_t' +| `-Record 0x56046800ca38 'ecs_query_table_node_t' +|-RecordDecl 0x56046800cba8 prev 0x560467fca8e0 col:8 struct ecs_allocator_t +|-RecordDecl 0x56046800cc88 line:3226:16 struct ecs_event_record_t definition +| |-FullComment 0x5604681291c0 +| | |-ParagraphComment 0x560468129140 +| | | `-TextComment 0x560468129110 Text=" Mixin for emitting events to triggers/observers " +| | `-ParagraphComment 0x560468129190 +| | `-TextComment 0x560468129160 Text=" All observers for a specific event " +| |-RecordDecl 0x56046800cd30 parent 0x560467ec17a8 col:12 struct ecs_event_id_record_t +| |-FieldDecl 0x56046800cea0 col:35 any 'struct ecs_event_id_record_t *' +| |-FieldDecl 0x56046800cf70 col:35 wildcard 'struct ecs_event_id_record_t *' +| |-FieldDecl 0x56046800cfe8 col:35 wildcard_pair 'struct ecs_event_id_record_t *' +| |-FieldDecl 0x56046800d048 col:15 event_ids 'ecs_map_t':'struct ecs_map_t' +| `-FieldDecl 0x56046800d0a8 col:18 event 'ecs_entity_t':'unsigned long' +|-TypedefDecl 0x56046800d158 col:3 referenced ecs_event_record_t 'struct ecs_event_record_t':'struct ecs_event_record_t' +| |-ElaboratedType 0x56046800d100 'struct ecs_event_record_t' sugar +| | `-RecordType 0x56046800cd10 'struct ecs_event_record_t' +| | `-Record 0x56046800cc88 'ecs_event_record_t' +| `-FullComment 0x5604681292e0 +| |-ParagraphComment 0x560468129260 +| | `-TextComment 0x560468129230 Text=" Mixin for emitting events to triggers/observers " +| `-ParagraphComment 0x5604681292b0 +| `-TextComment 0x560468129280 Text=" All observers for a specific event " +|-RecordDecl 0x56046800d1c8 prev 0x560467ffffa0 line:3234:8 struct ecs_observable_t definition +| |-FieldDecl 0x56046800d280 col:24 on_add 'ecs_event_record_t':'struct ecs_event_record_t' +| |-FieldDecl 0x56046800d2e0 col:24 on_remove 'ecs_event_record_t':'struct ecs_event_record_t' +| |-FieldDecl 0x56046800d340 col:24 on_set 'ecs_event_record_t':'struct ecs_event_record_t' +| |-FieldDecl 0x56046800d3a0 col:24 un_set 'ecs_event_record_t':'struct ecs_event_record_t' +| |-FieldDecl 0x56046800d400 col:24 on_wildcard 'ecs_event_record_t':'struct ecs_event_record_t' +| `-FieldDecl 0x56046800d460 col:19 events 'ecs_sparse_t *' +|-RecordDecl 0x56046800d5e8 prev 0x56046800af50 line:3244:8 struct ecs_record_t definition +| |-FullComment 0x5604681293b0 +| | `-ParagraphComment 0x560468129380 +| | `-TextComment 0x560468129350 Text=" Record for entity index " +| |-FieldDecl 0x56046800d678 col:22 idr 'ecs_id_record_t *' +| |-FieldDecl 0x56046800e400 col:18 table 'ecs_table_t *' +| `-FieldDecl 0x56046800e460 col:14 row 'uint32_t':'unsigned int' +|-RecordDecl 0x56046800e4d8 line:3251:16 struct ecs_table_range_t definition +| |-FullComment 0x560468129480 +| | `-ParagraphComment 0x560468129450 +| | `-TextComment 0x560468129420 Text=" Range in table " +| |-FieldDecl 0x56046800e590 col:18 table 'ecs_table_t *' +| |-FieldDecl 0x56046800e5f0 col:13 offset 'int32_t':'int' +| `-FieldDecl 0x56046800e650 col:13 count 'int32_t':'int' +|-TypedefDecl 0x56046800e6f8 col:3 referenced ecs_table_range_t 'struct ecs_table_range_t':'struct ecs_table_range_t' +| |-ElaboratedType 0x56046800e6a0 'struct ecs_table_range_t' sugar +| | `-RecordType 0x56046800e560 'struct ecs_table_range_t' +| | `-Record 0x56046800e4d8 'ecs_table_range_t' +| `-FullComment 0x560468129550 +| `-ParagraphComment 0x560468129520 +| `-TextComment 0x5604681294f0 Text=" Range in table " +|-RecordDecl 0x56046800e790 line:3258:16 struct ecs_var_t definition +| |-FullComment 0x560468129620 +| | `-ParagraphComment 0x5604681295f0 +| | `-TextComment 0x5604681295c0 Text=" Value of query variable " +| |-FieldDecl 0x56046800e860 col:23 range 'ecs_table_range_t':'struct ecs_table_range_t' +| `-FieldDecl 0x56046800e8c0 col:18 entity 'ecs_entity_t':'unsigned long' +|-TypedefDecl 0x56046800e9d8 col:3 referenced ecs_var_t 'struct ecs_var_t':'struct ecs_var_t' +| |-ElaboratedType 0x56046800e980 'struct ecs_var_t' sugar +| | `-RecordType 0x56046800e810 'struct ecs_var_t' +| | `-Record 0x56046800e790 'ecs_var_t' +| `-FullComment 0x5604681296f0 +| `-ParagraphComment 0x5604681296c0 +| `-TextComment 0x560468129690 Text=" Value of query variable " +|-RecordDecl 0x56046800ea70 prev 0x5604680002a0 line:3269:8 struct ecs_ref_t definition +| |-FullComment 0x5604681297c0 +| | `-ParagraphComment 0x560468129790 +| | `-TextComment 0x560468129760 Text=" Cached reference. " +| |-FieldDecl 0x56046800eb00 col:18 entity 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x56046800eb60 col:18 id 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x56046800ec60 col:32 tr 'struct ecs_table_record_t *' +| `-FieldDecl 0x56046800ed38 col:19 record 'ecs_record_t *' +|-RecordDecl 0x56046800ed88 col:8 struct ecs_stack_page_t +|-RecordDecl 0x56046800ee30 line:3279:16 struct ecs_stack_cursor_t definition +| |-FieldDecl 0x56046800ef80 col:30 cur 'struct ecs_stack_page_t *' +| `-FieldDecl 0x56046800efe0 col:13 sp 'int16_t':'short' +|-TypedefDecl 0x56046800f088 col:3 referenced ecs_stack_cursor_t 'struct ecs_stack_cursor_t':'struct ecs_stack_cursor_t' +| `-ElaboratedType 0x56046800f030 'struct ecs_stack_cursor_t' sugar +| `-RecordType 0x56046800eeb0 'struct ecs_stack_cursor_t' +| `-Record 0x56046800ee30 'ecs_stack_cursor_t' +|-RecordDecl 0x56046800f0f8 line:3285:16 struct ecs_page_iter_t definition +| |-FieldDecl 0x56046800f1b0 col:13 offset 'int32_t':'int' +| |-FieldDecl 0x56046800f210 col:13 limit 'int32_t':'int' +| `-FieldDecl 0x56046800f270 col:13 remaining 'int32_t':'int' +|-TypedefDecl 0x56046800f318 col:3 referenced ecs_page_iter_t 'struct ecs_page_iter_t':'struct ecs_page_iter_t' +| `-ElaboratedType 0x56046800f2c0 'struct ecs_page_iter_t' sugar +| `-RecordType 0x56046800f180 'struct ecs_page_iter_t' +| `-Record 0x56046800f0f8 'ecs_page_iter_t' +|-RecordDecl 0x56046800f410 line:3292:16 struct ecs_worker_iter_t definition +| |-FieldDecl 0x56046800f4c0 col:13 index 'int32_t':'int' +| `-FieldDecl 0x56046800f520 col:13 count 'int32_t':'int' +|-TypedefDecl 0x56046800f5c8 col:3 referenced ecs_worker_iter_t 'struct ecs_worker_iter_t':'struct ecs_worker_iter_t' +| `-ElaboratedType 0x56046800f570 'struct ecs_worker_iter_t' sugar +| `-RecordType 0x56046800f490 'struct ecs_worker_iter_t' +| `-Record 0x56046800f410 'ecs_worker_iter_t' +|-RecordDecl 0x56046800f638 line:3298:16 struct ecs_table_cache_iter_t definition +| |-RecordDecl 0x56046800f6e0 parent 0x560467ec17a8 col:12 struct ecs_table_cache_hdr_t +| |-FieldDecl 0x56046800f850 col:35 cur 'struct ecs_table_cache_hdr_t *' +| |-FieldDecl 0x56046800f8c8 col:41 next 'struct ecs_table_cache_hdr_t *' +| `-FieldDecl 0x56046800f9a0 col:35 next_list 'struct ecs_table_cache_hdr_t *' +|-TypedefDecl 0x56046800fa48 col:3 referenced ecs_table_cache_iter_t 'struct ecs_table_cache_iter_t':'struct ecs_table_cache_iter_t' +| `-ElaboratedType 0x56046800f9f0 'struct ecs_table_cache_iter_t' sugar +| `-RecordType 0x56046800f6c0 'struct ecs_table_cache_iter_t' +| `-Record 0x56046800f638 'ecs_table_cache_iter_t' +|-RecordDecl 0x56046800fae0 line:3304:16 struct ecs_term_iter_t definition +| |-FullComment 0x560468129890 +| | `-ParagraphComment 0x560468129860 +| | `-TextComment 0x560468129830 Text=" Term-iterator specific data " +| |-FieldDecl 0x56046800fb90 col:16 term 'ecs_term_t':'struct ecs_term_t' +| |-FieldDecl 0x56046800fbf0 col:22 self_index 'ecs_id_record_t *' +| |-FieldDecl 0x56046800fc50 col:22 set_index 'ecs_id_record_t *' +| |-FieldDecl 0x56046800fcb0 col:22 cur 'ecs_id_record_t *' +| |-FieldDecl 0x56046800fd30 col:28 it 'ecs_table_cache_iter_t':'struct ecs_table_cache_iter_t' +| |-FieldDecl 0x56046800fd90 col:13 index 'int32_t':'int' +| |-FieldDecl 0x56046800fdf0 col:13 observed_table_count 'int32_t':'int' +| |-FieldDecl 0x56046800fe50 col:18 table 'ecs_table_t *' +| |-FieldDecl 0x56046800feb0 col:13 cur_match 'int32_t':'int' +| |-FieldDecl 0x56046800ff10 col:13 match_count 'int32_t':'int' +| |-FieldDecl 0x56046800ff70 col:13 last_column 'int32_t':'int' +| |-FieldDecl 0x56046800ffd0 col:10 empty_tables 'bool' +| |-FieldDecl 0x560468010030 col:14 id 'ecs_id_t':'unsigned long' +| |-FieldDecl 0x560468010090 col:13 column 'int32_t':'int' +| |-FieldDecl 0x5604680100f0 col:18 subject 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x560468010150 col:16 size 'ecs_size_t':'int' +| `-FieldDecl 0x5604680101b8 col:11 ptr 'void *' +|-TypedefDecl 0x560468010378 col:3 referenced ecs_term_iter_t 'struct ecs_term_iter_t':'struct ecs_term_iter_t' +| |-ElaboratedType 0x560468010320 'struct ecs_term_iter_t' sugar +| | `-RecordType 0x56046800fb60 'struct ecs_term_iter_t' +| | `-Record 0x56046800fae0 'ecs_term_iter_t' +| `-FullComment 0x560468129960 +| `-ParagraphComment 0x560468129930 +| `-TextComment 0x560468129900 Text=" Term-iterator specific data " +|-EnumDecl 0x560468010420 line:3329:14 ecs_iter_kind_t +| |-EnumConstantDecl 0x5604680104e0 col:5 EcsIterEvalCondition 'int' +| |-EnumConstantDecl 0x560468010530 col:5 EcsIterEvalTables 'int' +| |-EnumConstantDecl 0x560468010580 col:5 EcsIterEvalChain 'int' +| `-EnumConstantDecl 0x5604680105d0 col:5 EcsIterEvalNone 'int' +|-TypedefDecl 0x560468010678 col:3 referenced ecs_iter_kind_t 'enum ecs_iter_kind_t':'enum ecs_iter_kind_t' +| `-ElaboratedType 0x560468010620 'enum ecs_iter_kind_t' sugar +| `-EnumType 0x5604680104c0 'enum ecs_iter_kind_t' +| `-Enum 0x560468010420 'ecs_iter_kind_t' +|-RecordDecl 0x560468010710 line:3337:16 struct ecs_filter_iter_t definition +| |-FullComment 0x560468129a30 +| | `-ParagraphComment 0x560468129a00 +| | `-TextComment 0x5604681299d0 Text=" Filter-iterator specific data " +| |-FieldDecl 0x560468010818 col:25 filter 'const ecs_filter_t *' +| |-FieldDecl 0x5604680108a0 col:21 kind 'ecs_iter_kind_t':'enum ecs_iter_kind_t' +| |-FieldDecl 0x560468010920 col:21 term_iter 'ecs_term_iter_t':'struct ecs_term_iter_t' +| |-FieldDecl 0x560468010980 col:13 matches_left 'int32_t':'int' +| `-FieldDecl 0x5604680109e0 col:13 pivot_term 'int32_t':'int' +|-TypedefDecl 0x560468010a88 col:3 referenced ecs_filter_iter_t 'struct ecs_filter_iter_t':'struct ecs_filter_iter_t' +| |-ElaboratedType 0x560468010a30 'struct ecs_filter_iter_t' sugar +| | `-RecordType 0x560468010790 'struct ecs_filter_iter_t' +| | `-Record 0x560468010710 'ecs_filter_iter_t' +| `-FullComment 0x560468129b00 +| `-ParagraphComment 0x560468129ad0 +| `-TextComment 0x560468129aa0 Text=" Filter-iterator specific data " +|-RecordDecl 0x560468010b20 line:3346:16 struct ecs_query_iter_t definition +| |-FullComment 0x560468129bd0 +| | `-ParagraphComment 0x560468129ba0 +| | `-TextComment 0x560468129b70 Text=" Query-iterator specific data " +| |-FieldDecl 0x560468010c48 col:18 query 'ecs_query_t *' +| |-FieldDecl 0x560468010d28 col:29 node 'ecs_query_table_node_t *' +| |-FieldDecl 0x560468010d88 col:36 prev 'ecs_query_table_node_t *' +| |-FieldDecl 0x560468010de8 col:43 last 'ecs_query_table_node_t *' +| |-FieldDecl 0x560468010e48 col:13 sparse_smallest 'int32_t':'int' +| |-FieldDecl 0x560468010ea8 col:13 sparse_first 'int32_t':'int' +| |-FieldDecl 0x560468010f08 col:13 bitset_first 'int32_t':'int' +| `-FieldDecl 0x560468010f68 col:13 skip_count 'int32_t':'int' +|-TypedefDecl 0x560468011018 col:3 referenced ecs_query_iter_t 'struct ecs_query_iter_t':'struct ecs_query_iter_t' +| |-ElaboratedType 0x560468010fc0 'struct ecs_query_iter_t' sugar +| | `-RecordType 0x560468010ba0 'struct ecs_query_iter_t' +| | `-Record 0x560468010b20 'ecs_query_iter_t' +| `-FullComment 0x560468129ca0 +| `-ParagraphComment 0x560468129c70 +| `-TextComment 0x560468129c40 Text=" Query-iterator specific data " +|-RecordDecl 0x5604680110b0 line:3356:16 struct ecs_snapshot_iter_t definition +| |-FullComment 0x560468129d70 +| | `-ParagraphComment 0x560468129d40 +| | `-TextComment 0x560468129d10 Text=" Snapshot-iterator specific data " +| |-FieldDecl 0x560468011160 col:18 filter 'ecs_filter_t':'struct ecs_filter_t' +| |-FieldDecl 0x5604680111c0 col:19 tables 'ecs_vector_t *' +| `-FieldDecl 0x560468011220 col:13 index 'int32_t':'int' +|-TypedefDecl 0x560468011430 col:3 referenced ecs_snapshot_iter_t 'struct ecs_snapshot_iter_t':'struct ecs_snapshot_iter_t' +| |-ElaboratedType 0x560468011380 'struct ecs_snapshot_iter_t' sugar +| | `-RecordType 0x560468011130 'struct ecs_snapshot_iter_t' +| | `-Record 0x5604680110b0 'ecs_snapshot_iter_t' +| `-FullComment 0x560468129e40 +| `-ParagraphComment 0x560468129e10 +| `-TextComment 0x560468129de0 Text=" Snapshot-iterator specific data " +|-RecordDecl 0x5604680114d0 line:3363:16 struct ecs_rule_iter_t definition +| |-FullComment 0x560468129f10 +| | `-ParagraphComment 0x560468129ee0 +| | `-TextComment 0x560468129eb0 Text=" Rule-iterator specific data " +| |-FieldDecl 0x5604680115f8 col:23 rule 'const ecs_rule_t *' +| |-FieldDecl 0x560468011700 col:23 registers 'struct ecs_var_t *' +| |-RecordDecl 0x560468011750 parent 0x560467ec17a8 col:12 struct ecs_rule_op_ctx_t +| |-FieldDecl 0x5604680118c0 col:31 op_ctx 'struct ecs_rule_op_ctx_t *' +| |-FieldDecl 0x560468011920 col:14 columns 'int32_t *' +| |-FieldDecl 0x560468011980 col:18 entity 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680119e0 col:10 redo 'bool' +| |-FieldDecl 0x560468011a40 col:13 op 'int32_t':'int' +| `-FieldDecl 0x560468011aa0 col:13 sp 'int32_t':'int' +|-TypedefDecl 0x560468011b48 col:3 referenced ecs_rule_iter_t 'struct ecs_rule_iter_t':'struct ecs_rule_iter_t' +| |-ElaboratedType 0x560468011af0 'struct ecs_rule_iter_t' sugar +| | `-RecordType 0x560468011550 'struct ecs_rule_iter_t' +| | `-Record 0x5604680114d0 'ecs_rule_iter_t' +| `-FullComment 0x560468129fe0 +| `-ParagraphComment 0x560468129fb0 +| `-TextComment 0x560468129f80 Text=" Rule-iterator specific data " +|-RecordDecl 0x560468011bb8 line:3390:16 struct ecs_iter_cache_t definition +| |-FieldDecl 0x560468011c90 col:24 stack_cursor 'ecs_stack_cursor_t':'struct ecs_stack_cursor_t' +| |-FieldDecl 0x560468011d10 col:18 used 'ecs_flags8_t':'unsigned char' +| `-FieldDecl 0x560468011d70 col:18 allocated 'ecs_flags8_t':'unsigned char' +|-TypedefDecl 0x560468011e78 col:3 referenced ecs_iter_cache_t 'struct ecs_iter_cache_t':'struct ecs_iter_cache_t' +| `-ElaboratedType 0x560468011e20 'struct ecs_iter_cache_t' sugar +| `-RecordType 0x560468011c40 'struct ecs_iter_cache_t' +| `-Record 0x560468011bb8 'ecs_iter_cache_t' +|-RecordDecl 0x560468011ee8 line:3398:16 struct ecs_iter_private_t definition +| |-RecordDecl 0x560468011f90 line:3399:5 union definition +| | |-FieldDecl 0x560468012040 col:25 term 'ecs_term_iter_t':'struct ecs_term_iter_t' +| | |-FieldDecl 0x5604680120c0 col:27 filter 'ecs_filter_iter_t':'struct ecs_filter_iter_t' +| | |-FieldDecl 0x560468012140 col:26 query 'ecs_query_iter_t':'struct ecs_query_iter_t' +| | |-FieldDecl 0x5604680121c0 col:25 rule 'ecs_rule_iter_t':'struct ecs_rule_iter_t' +| | |-FieldDecl 0x560468012240 col:29 snapshot 'ecs_snapshot_iter_t':'struct ecs_snapshot_iter_t' +| | |-FieldDecl 0x5604680122c0 col:25 page 'ecs_page_iter_t':'struct ecs_page_iter_t' +| | `-FieldDecl 0x560468012340 col:27 worker 'ecs_worker_iter_t':'struct ecs_worker_iter_t' +| |-FieldDecl 0x560468015da8 col:7 iter 'union (unnamed union at flecs.h:3399:5)':'union ecs_iter_private_t::(unnamed at flecs.h:3399:5)' +| |-FieldDecl 0x560468015e10 col:11 entity_iter 'void *' +| `-FieldDecl 0x560468015e90 col:22 cache 'ecs_iter_cache_t':'struct ecs_iter_cache_t' +|-TypedefDecl 0x560468016288 col:3 referenced ecs_iter_private_t 'struct ecs_iter_private_t':'struct ecs_iter_private_t' +| `-ElaboratedType 0x560468016230 'struct ecs_iter_private_t' sugar +| `-RecordType 0x560468011f70 'struct ecs_iter_private_t' +| `-Record 0x560468011ee8 'ecs_iter_private_t' +|-RecordDecl 0x560468016320 prev 0x560468000108 line:3414:8 struct ecs_iter_t definition +| |-FullComment 0x56046812a0b0 +| | `-ParagraphComment 0x56046812a080 +| | `-TextComment 0x56046812a050 Text=" Iterator " +| |-FieldDecl 0x5604680163b0 col:18 world 'ecs_world_t *' +| |-FieldDecl 0x560468016410 col:18 real_world 'ecs_world_t *' +| |-FieldDecl 0x560468016470 col:19 entities 'ecs_entity_t *' +| |-FieldDecl 0x560468016500 col:12 ptrs 'void **' +| |-FieldDecl 0x560468016588 col:17 sizes 'ecs_size_t *' +| |-FieldDecl 0x5604680165e8 col:18 table 'ecs_table_t *' +| |-FieldDecl 0x560468016648 col:18 other_table 'ecs_table_t *' +| |-FieldDecl 0x5604680166a8 col:15 ids 'ecs_id_t *' +| |-FieldDecl 0x560468016758 col:16 variables 'ecs_var_t *' +| |-FieldDecl 0x5604680167b8 col:14 columns 'int32_t *' +| |-FieldDecl 0x560468016818 col:19 sources 'ecs_entity_t *' +| |-FieldDecl 0x560468016878 col:14 match_indices 'int32_t *' +| |-FieldDecl 0x560468016958 col:16 references 'ecs_ref_t *' +| |-FieldDecl 0x5604680169e0 col:19 constrained_vars 'ecs_flags64_t':'unsigned long' +| |-FieldDecl 0x560468016a40 col:14 group_id 'uint64_t':'unsigned long' +| |-FieldDecl 0x560468016aa0 col:13 field_count 'int32_t':'int' +| |-FieldDecl 0x560468016b00 col:18 system 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x560468016b60 col:18 event 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x560468016bc0 col:14 event_id 'ecs_id_t':'unsigned long' +| |-FieldDecl 0x560468016c20 col:17 terms 'ecs_term_t *' +| |-FieldDecl 0x560468016c90 col:13 table_count 'int32_t':'int' +| |-FieldDecl 0x560468016cf0 col:13 term_index 'int32_t':'int' +| |-FieldDecl 0x560468016d50 col:13 variable_count 'int32_t':'int' +| |-FieldDecl 0x560468016db8 col:12 variable_names 'char **' +| |-FieldDecl 0x560468016e20 col:11 param 'void *' +| |-FieldDecl 0x560468016e88 col:11 ctx 'void *' +| |-FieldDecl 0x560468016ef0 col:11 binding_ctx 'void *' +| |-FieldDecl 0x560468016f58 col:17 delta_time 'float' +| |-FieldDecl 0x560468016fc0 col:17 delta_system_time 'float' +| |-FieldDecl 0x560468017020 col:13 frame_offset 'int32_t':'int' +| |-FieldDecl 0x560468017080 col:13 offset 'int32_t':'int' +| |-FieldDecl 0x5604680170e0 col:13 count 'int32_t':'int' +| |-FieldDecl 0x560468017140 col:13 instance_count 'int32_t':'int' +| |-FieldDecl 0x5604680171a0 col:19 flags 'ecs_flags32_t':'unsigned int' +| |-FieldDecl 0x560468017200 col:18 interrupted_by 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x560468017280 col:24 priv 'ecs_iter_private_t':'struct ecs_iter_private_t' +| |-FieldDecl 0x560468017300 col:28 next 'ecs_iter_next_action_t':'bool (*)(ecs_iter_t *)' +| |-FieldDecl 0x560468017360 col:23 callback 'ecs_iter_action_t':'void (*)(ecs_iter_t *)' +| |-FieldDecl 0x5604680173e0 col:28 fini 'ecs_iter_fini_action_t':'void (*)(ecs_iter_t *)' +| `-FieldDecl 0x560468017440 col:17 chain_it 'ecs_iter_t *' +|-FunctionDecl 0x560468017688 line:3532:7 ecs_module_path_from_c 'char *(const char *)' +| `-ParmVarDecl 0x5604680175f0 col:17 c_name 'const char *' +|-FunctionDecl 0x560468017808 line:3535:6 ecs_identifier_is_0 'bool (const char *)' +| `-ParmVarDecl 0x560468017748 col:17 id 'const char *' +|-FunctionDecl 0x560468017a58 line:3540:6 ecs_default_ctor 'void (void *, int32_t, const ecs_type_info_t *)' +| |-ParmVarDecl 0x5604680178c8 col:11 ptr 'void *' +| |-ParmVarDecl 0x560468017940 col:13 count 'int32_t':'int' +| `-ParmVarDecl 0x5604680179b8 col:28 ctx 'const ecs_type_info_t *' +|-FunctionDecl 0x560468017d00 line:3547:7 ecs_vasprintf 'char *(const char *, struct __va_list_tag *)' +| |-ParmVarDecl 0x560468017b28 col:17 fmt 'const char *' +| `-ParmVarDecl 0x560468017ba0 col:13 args 'struct __va_list_tag *':'struct __va_list_tag *' +|-FunctionDecl 0x560468017e98 line:3553:7 ecs_asprintf 'char *(const char *, ...)' +| `-ParmVarDecl 0x560468017dc8 col:17 fmt 'const char *' +|-FunctionDecl 0x560468018098 line:3558:9 flecs_table_observed_count 'int32_t (const ecs_table_t *)' +| `-ParmVarDecl 0x560468017fa8 col:24 table 'const ecs_table_t *' +|-RecordDecl 0x5604680181f8 line:3595:16 struct ecs_vec_t definition +| |-FullComment 0x56046812a190 +| | `-ParagraphComment 0x56046812a150 +| | `-TextComment 0x56046812a120 Text=" A component column. " +| |-FieldDecl 0x5604680182b8 col:11 array 'void *' +| |-FieldDecl 0x560468018318 col:13 count 'int32_t':'int' +| |-FieldDecl 0x560468018378 col:13 size 'int32_t':'int' +| `-FieldDecl 0x5604680183d8 col:16 elem_size 'ecs_size_t':'int' +|-TypedefDecl 0x560468018488 col:3 referenced ecs_vec_t 'struct ecs_vec_t':'struct ecs_vec_t' +| |-ElaboratedType 0x560468018430 'struct ecs_vec_t' sugar +| | `-RecordType 0x560468018280 'struct ecs_vec_t' +| | `-Record 0x5604680181f8 'ecs_vec_t' +| `-FullComment 0x56046812a260 +| `-ParagraphComment 0x56046812a230 +| `-TextComment 0x56046812a200 Text=" A component column. " +|-FunctionDecl 0x560468018838 line:3605:12 ecs_vec_init 'ecs_vec_t *(ecs_allocator_t *, ecs_vec_t *, ecs_size_t, int32_t)' +| |-ParmVarDecl 0x560468018530 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x560468018608 col:16 vec 'ecs_vec_t *' +| |-ParmVarDecl 0x560468018680 col:16 size 'ecs_size_t':'int' +| `-ParmVarDecl 0x5604680186f8 col:13 elem_count 'int32_t':'int' +|-FunctionDecl 0x560468018b18 line:3615:6 ecs_vec_fini 'void (ecs_allocator_t *, ecs_vec_t *, ecs_size_t)' +| |-ParmVarDecl 0x560468018908 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x560468018980 col:16 vec 'ecs_vec_t *' +| `-ParmVarDecl 0x5604680189f8 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x56046801a678 line:3624:12 ecs_vec_reset 'ecs_vec_t *(ecs_allocator_t *, ecs_vec_t *, ecs_size_t)' +| |-ParmVarDecl 0x560468018be0 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x56046801a4e0 col:16 vec 'ecs_vec_t *' +| `-ParmVarDecl 0x56046801a558 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x56046801a838 line:3633:6 ecs_vec_clear 'void (ecs_vec_t *)' +| `-ParmVarDecl 0x56046801a740 col:16 vec 'ecs_vec_t *' +|-FunctionDecl 0x56046801ab10 line:3637:7 ecs_vec_append 'void *(ecs_allocator_t *, ecs_vec_t *, ecs_size_t)' +| |-ParmVarDecl 0x56046801a8f0 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x56046801a968 col:16 vec 'ecs_vec_t *' +| `-ParmVarDecl 0x56046801a9e0 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x56046801ade8 line:3646:6 ecs_vec_remove 'void (ecs_vec_t *, ecs_size_t, int32_t)' +| |-ParmVarDecl 0x56046801abd8 col:16 vec 'ecs_vec_t *' +| |-ParmVarDecl 0x56046801ac50 col:16 size 'ecs_size_t':'int' +| `-ParmVarDecl 0x56046801acc8 col:13 elem 'int32_t':'int' +|-FunctionDecl 0x56046801af40 line:3655:6 ecs_vec_remove_last 'void (ecs_vec_t *)' +| `-ParmVarDecl 0x56046801aeb0 col:16 vec 'ecs_vec_t *' +|-FunctionDecl 0x56046801b208 line:3659:11 ecs_vec_copy 'ecs_vec_t (ecs_allocator_t *, ecs_vec_t *, ecs_size_t)' +| |-ParmVarDecl 0x56046801aff8 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x56046801b070 col:16 vec 'ecs_vec_t *' +| `-ParmVarDecl 0x56046801b0e8 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x56046801db90 line:3668:6 ecs_vec_reclaim 'void (ecs_allocator_t *, ecs_vec_t *, ecs_size_t)' +| |-ParmVarDecl 0x56046801b2d0 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x56046801b348 col:16 vec 'ecs_vec_t *' +| `-ParmVarDecl 0x56046801b3c0 col:16 size 'ecs_size_t':'int' +|-FunctionDecl 0x56046801df08 line:3677:6 ecs_vec_set_size 'void (ecs_allocator_t *, ecs_vec_t *, ecs_size_t, int32_t)' +| |-ParmVarDecl 0x56046801dc58 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x56046801dcd0 col:16 vec 'ecs_vec_t *' +| |-ParmVarDecl 0x56046801dd48 col:16 size 'ecs_size_t':'int' +| `-ParmVarDecl 0x56046801ddc0 col:13 elem_count 'int32_t':'int' +|-FunctionDecl 0x56046801e1e8 line:3687:6 ecs_vec_set_count 'void (ecs_allocator_t *, ecs_vec_t *, ecs_size_t, int32_t)' +| |-ParmVarDecl 0x56046801dfd8 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x56046801e050 col:16 vec 'ecs_vec_t *' +| |-ParmVarDecl 0x56046801e0c8 col:16 size 'ecs_size_t':'int' +| `-ParmVarDecl 0x56046801e140 col:13 elem_count 'int32_t':'int' +|-FunctionDecl 0x56046801e570 line:3697:7 ecs_vec_grow 'void *(ecs_allocator_t *, ecs_vec_t *, ecs_size_t, int32_t)' +| |-ParmVarDecl 0x56046801e2b8 col:22 allocator 'ecs_allocator_t *' +| |-ParmVarDecl 0x56046801e330 col:16 vec 'ecs_vec_t *' +| |-ParmVarDecl 0x56046801e3a8 col:16 size 'ecs_size_t':'int' +| `-ParmVarDecl 0x56046801e420 col:13 elem_count 'int32_t':'int' +|-FunctionDecl 0x56046801e788 line:3707:9 ecs_vec_count 'int32_t (const ecs_vec_t *)' +| `-ParmVarDecl 0x56046801e698 col:22 vec 'const ecs_vec_t *' +|-FunctionDecl 0x56046801e8d0 line:3711:9 ecs_vec_size 'int32_t (const ecs_vec_t *)' +| `-ParmVarDecl 0x56046801e840 col:22 vec 'const ecs_vec_t *' +|-FunctionDecl 0x56046801f260 line:3715:7 ecs_vec_get 'void *(const ecs_vec_t *, ecs_size_t, int32_t)' +| |-ParmVarDecl 0x56046801e988 col:22 vec 'const ecs_vec_t *' +| |-ParmVarDecl 0x56046801ea00 col:16 size 'ecs_size_t':'int' +| `-ParmVarDecl 0x56046801ea78 col:13 index 'int32_t':'int' +|-FunctionDecl 0x56046801f420 line:3724:7 ecs_vec_first 'void *(const ecs_vec_t *)' +| `-ParmVarDecl 0x56046801f328 col:22 vec 'const ecs_vec_t *' +|-FunctionDecl 0x56046801f670 line:3731:7 ecs_vec_last 'void *(const ecs_vec_t *, ecs_size_t)' +| |-ParmVarDecl 0x56046801f4d8 col:22 vec 'const ecs_vec_t *' +| `-ParmVarDecl 0x56046801f550 col:16 size 'ecs_size_t':'int' +|-RecordDecl 0x56046801f748 line:3753:9 struct definition +| |-FieldDecl 0x56046801f800 col:15 keys 'ecs_vec_t':'struct ecs_vec_t' +| `-FieldDecl 0x56046801f860 col:15 values 'ecs_vec_t':'struct ecs_vec_t' +|-TypedefDecl 0x56046801f978 col:3 referenced ecs_hm_bucket_t 'struct ecs_hm_bucket_t':'ecs_hm_bucket_t' +| `-ElaboratedType 0x56046801f920 'struct ecs_hm_bucket_t' sugar +| `-RecordType 0x56046801f7d0 'ecs_hm_bucket_t' +| `-Record 0x56046801f748 '' +|-RecordDecl 0x56046801f9e8 line:3758:9 struct definition +| |-FieldDecl 0x56046801fac0 col:29 hash 'ecs_hash_value_action_t':'uint64_t (*)(const void *)' +| |-FieldDecl 0x56046801fb40 col:26 compare 'ecs_compare_action_t':'int (*)(const void *, const void *)' +| |-FieldDecl 0x56046801fba0 col:16 key_size 'ecs_size_t':'int' +| |-FieldDecl 0x56046801fc00 col:16 value_size 'ecs_size_t':'int' +| |-FieldDecl 0x56046801fc60 col:28 hashmap_allocator 'ecs_block_allocator_t *' +| `-FieldDecl 0x56046801fcc0 col:15 impl 'ecs_map_t':'struct ecs_map_t' +|-TypedefDecl 0x56046801fd68 col:3 referenced ecs_hashmap_t 'struct ecs_hashmap_t':'ecs_hashmap_t' +| `-ElaboratedType 0x56046801fd10 'struct ecs_hashmap_t' sugar +| `-RecordType 0x56046801fa70 'ecs_hashmap_t' +| `-Record 0x56046801f9e8 '' +|-RecordDecl 0x56046801fdd8 line:3767:9 struct definition +| |-FieldDecl 0x56046801fe90 col:20 it 'ecs_map_iter_t':'struct ecs_map_iter_t' +| |-FieldDecl 0x56046801ff68 col:22 bucket 'ecs_hm_bucket_t *' +| `-FieldDecl 0x56046801ffc8 col:13 index 'int32_t':'int' +|-TypedefDecl 0x5604680200d8 col:3 referenced flecs_hashmap_iter_t 'struct flecs_hashmap_iter_t':'flecs_hashmap_iter_t' +| `-ElaboratedType 0x560468020080 'struct flecs_hashmap_iter_t' sugar +| `-RecordType 0x56046801fe60 'flecs_hashmap_iter_t' +| `-Record 0x56046801fdd8 '' +|-RecordDecl 0x560468020148 line:3773:9 struct definition +| |-FieldDecl 0x560468020710 col:11 key 'void *' +| |-FieldDecl 0x560468020778 col:11 value 'void *' +| `-FieldDecl 0x5604680207d8 col:14 hash 'uint64_t':'unsigned long' +|-TypedefDecl 0x560468020888 col:3 referenced flecs_hashmap_result_t 'struct flecs_hashmap_result_t':'flecs_hashmap_result_t' +| `-ElaboratedType 0x560468020830 'struct flecs_hashmap_result_t' sugar +| `-RecordType 0x5604680201d0 'flecs_hashmap_result_t' +| `-Record 0x560468020148 '' +|-FunctionDecl 0x560468020d58 line:3780:6 _flecs_hashmap_init 'void (ecs_hashmap_t *, ecs_size_t, ecs_size_t, ecs_hash_value_action_t, ecs_compare_action_t, ecs_allocator_t *)' +| |-ParmVarDecl 0x560468020988 col:20 hm 'ecs_hashmap_t *' +| |-ParmVarDecl 0x560468020a00 col:16 key_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560468020a78 col:16 value_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560468020af0 col:29 hash 'ecs_hash_value_action_t':'uint64_t (*)(const void *)' +| |-ParmVarDecl 0x560468020b68 col:26 compare 'ecs_compare_action_t':'int (*)(const void *, const void *)' +| `-ParmVarDecl 0x560468020be0 col:22 allocator 'ecs_allocator_t *' +|-FunctionDecl 0x560468020f28 line:3792:6 flecs_hashmap_fini 'void (ecs_hashmap_t *)' +| `-ParmVarDecl 0x560468020e38 col:20 map 'ecs_hashmap_t *' +|-FunctionDecl 0x5604680212f0 line:3796:7 _flecs_hashmap_get 'void *(const ecs_hashmap_t *, ecs_size_t, const void *, ecs_size_t)' +| |-ParmVarDecl 0x560468021038 col:26 map 'const ecs_hashmap_t *' +| |-ParmVarDecl 0x5604680210b0 col:16 key_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560468021130 col:17 key 'const void *' +| `-ParmVarDecl 0x5604680211a8 col:16 value_size 'ecs_size_t':'int' +|-FunctionDecl 0x560468021dc0 line:3806:24 _flecs_hashmap_ensure 'flecs_hashmap_result_t (ecs_hashmap_t *, ecs_size_t, const void *, ecs_size_t)' +| |-ParmVarDecl 0x5604680213e0 col:20 map 'ecs_hashmap_t *' +| |-ParmVarDecl 0x560468021458 col:16 key_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x5604680214d8 col:17 key 'const void *' +| `-ParmVarDecl 0x560468021550 col:16 value_size 'ecs_size_t':'int' +|-FunctionDecl 0x5604680221d8 line:3816:6 _flecs_hashmap_set 'void (ecs_hashmap_t *, ecs_size_t, void *, ecs_size_t, const void *)' +| |-ParmVarDecl 0x560468021e90 col:20 map 'ecs_hashmap_t *' +| |-ParmVarDecl 0x560468021f08 col:16 key_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560468021f88 col:11 key 'void *' +| |-ParmVarDecl 0x560468022000 col:16 value_size 'ecs_size_t':'int' +| `-ParmVarDecl 0x560468022080 col:17 value 'const void *' +|-FunctionDecl 0x560468022568 line:3827:6 _flecs_hashmap_remove 'void (ecs_hashmap_t *, ecs_size_t, const void *, ecs_size_t)' +| |-ParmVarDecl 0x5604680222b0 col:20 map 'ecs_hashmap_t *' +| |-ParmVarDecl 0x560468022328 col:16 key_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x5604680223a8 col:17 key 'const void *' +| `-ParmVarDecl 0x560468022420 col:16 value_size 'ecs_size_t':'int' +|-FunctionDecl 0x560468022978 line:3837:6 _flecs_hashmap_remove_w_hash 'void (ecs_hashmap_t *, ecs_size_t, const void *, ecs_size_t, uint64_t)' +| |-ParmVarDecl 0x560468022638 col:20 map 'ecs_hashmap_t *' +| |-ParmVarDecl 0x5604680226b0 col:16 key_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560468022730 col:17 key 'const void *' +| |-ParmVarDecl 0x5604680227a8 col:16 value_size 'ecs_size_t':'int' +| `-ParmVarDecl 0x560468022820 col:14 hash 'uint64_t':'unsigned long' +|-FunctionDecl 0x560468022bd8 line:3848:18 flecs_hashmap_get_bucket 'ecs_hm_bucket_t *(const ecs_hashmap_t *, uint64_t)' +| |-ParmVarDecl 0x560468022a50 col:26 map 'const ecs_hashmap_t *' +| `-ParmVarDecl 0x560468022ac8 col:14 hash 'uint64_t':'unsigned long' +|-FunctionDecl 0x560468024978 line:3853:6 flecs_hm_bucket_remove 'void (ecs_hashmap_t *, ecs_hm_bucket_t *, uint64_t, int32_t)' +| |-ParmVarDecl 0x560468022c98 col:20 map 'ecs_hashmap_t *' +| |-ParmVarDecl 0x560468022d10 col:22 bucket 'ecs_hm_bucket_t *' +| |-ParmVarDecl 0x5604680247c0 col:14 hash 'uint64_t':'unsigned long' +| `-ParmVarDecl 0x560468024838 col:13 index 'int32_t':'int' +|-FunctionDecl 0x560468024bd8 line:3860:6 flecs_hashmap_copy 'void (const ecs_hashmap_t *, ecs_hashmap_t *)' +| |-ParmVarDecl 0x560468024a48 col:26 src 'const ecs_hashmap_t *' +| `-ParmVarDecl 0x560468024ac0 col:20 dst 'ecs_hashmap_t *' +|-FunctionDecl 0x560468024db8 line:3865:22 flecs_hashmap_iter 'flecs_hashmap_iter_t (ecs_hashmap_t *)' +| `-ParmVarDecl 0x560468024cc0 col:20 map 'ecs_hashmap_t *' +|-FunctionDecl 0x560468025180 line:3869:7 _flecs_hashmap_next 'void *(flecs_hashmap_iter_t *, ecs_size_t, void *, ecs_size_t)' +| |-ParmVarDecl 0x560468024ec8 col:27 it 'flecs_hashmap_iter_t *' +| |-ParmVarDecl 0x560468024f40 col:16 key_size 'ecs_size_t':'int' +| |-ParmVarDecl 0x560468024fc0 col:11 key_out 'void *' +| `-ParmVarDecl 0x560468025038 col:16 value_size 'ecs_size_t':'int' +|-RecordDecl 0x560468025268 line:3892:16 struct ecs_entity_desc_t definition +| |-FullComment 0x56046812a420 +| | |-ParagraphComment 0x56046812a300 +| | | `-TextComment 0x56046812a2d0 Text=" Used with ecs_entity_init " +| | |-ParagraphComment 0x56046812a350 +| | | `-TextComment 0x56046812a320 Text=" " +| | |-VerbatimLineComment 0x56046812a370 Text=" entities" +| | `-ParagraphComment 0x56046812a3e0 +| | `-TextComment 0x56046812a3b0 Text=" " +| |-FieldDecl 0x560468025320 col:13 _canary 'int32_t':'int' +| |-FieldDecl 0x560468025380 col:18 id 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x56046812a4f0 +| | `-ParagraphComment 0x56046812a4c0 +| | `-TextComment 0x56046812a490 Text=" Set to modify existing entity (optional) " +| |-FieldDecl 0x560468025410 col:17 name 'const char *' +| | `-FullComment 0x56046812a630 +| | `-ParagraphComment 0x56046812a600 +| | |-TextComment 0x56046812a560 Text=" Name of the entity. If no entity is provided, an " +| | |-TextComment 0x56046812a580 Text=" entity with this name will be looked up first. When" +| | |-TextComment 0x56046812a5a0 Text=" an entity is provided, the name will be verified" +| | `-TextComment 0x56046812a5c0 Text=" with the existing entity. " +| |-FieldDecl 0x5604680254a0 col:17 sep 'const char *' +| | `-FullComment 0x56046812a750 +| | `-ParagraphComment 0x56046812a720 +| | |-TextComment 0x56046812a6a0 Text=" Optional custom separator for hierarchical names." +| | |-TextComment 0x56046812a6c0 Text=" Leave to NULL for default ('.') separator. Set to" +| | `-TextComment 0x56046812a6e0 Text=" an empty string to prevent tokenization of name. " +| |-FieldDecl 0x560468025530 col:17 root_sep 'const char *' +| | `-FullComment 0x56046812a820 +| | `-ParagraphComment 0x56046812a7f0 +| | `-TextComment 0x56046812a7c0 Text=" Optional, used for identifiers relative to root " +| |-FieldDecl 0x5604680255c0 col:17 symbol 'const char *' +| | `-FullComment 0x56046812aa30 +| | `-ParagraphComment 0x56046812aa00 +| | |-TextComment 0x56046812a890 Text=" Optional entity symbol. A symbol is an unscoped" +| | |-TextComment 0x56046812a8b0 Text=" identifier that can be used to lookup an entity. The" +| | |-TextComment 0x56046812a8d0 Text=" primary use case for this is to associate the entity" +| | |-TextComment 0x56046812a8f0 Text=" with a language identifier, such as a type or " +| | |-TextComment 0x56046812a910 Text=" function name, where these identifiers differ from" +| | |-TextComment 0x56046812a930 Text=" the name they are registered with in flecs. For " +| | |-TextComment 0x56046812a950 Text=" example, C type "EcsPosition" might be registered" +| | |-TextComment 0x56046812a970 Text=" as "flecs.components.transform.Position", with the" +| | `-TextComment 0x56046812a990 Text=" symbol set to "EcsPosition". " +| |-FieldDecl 0x560468025648 col:10 use_low_id 'bool' +| | `-FullComment 0x56046812ab50 +| | `-ParagraphComment 0x56046812ab20 +| | |-TextComment 0x56046812aaa0 Text=" When set to true, a low id (typically reserved for" +| | |-TextComment 0x56046812aac0 Text=" components) will be used to create the entity, if" +| | `-TextComment 0x56046812aae0 Text=" no id is specified. " +| |-FieldDecl 0x560468025f18 col:14 add 'ecs_id_t[32]' +| | `-FullComment 0x56046812ac20 +| | `-ParagraphComment 0x56046812abf0 +| | `-TextComment 0x56046812abc0 Text=" Array of ids to add to the new or existing entity. " +| `-FieldDecl 0x560468025fb0 col:17 add_expr 'const char *' +| `-FullComment 0x56046812acf0 +| `-ParagraphComment 0x56046812acc0 +| `-TextComment 0x56046812ac90 Text=" String expression with components to add " +|-TypedefDecl 0x560468026058 col:3 referenced ecs_entity_desc_t 'struct ecs_entity_desc_t':'struct ecs_entity_desc_t' +| |-ElaboratedType 0x560468026000 'struct ecs_entity_desc_t' sugar +| | `-RecordType 0x5604680252f0 'struct ecs_entity_desc_t' +| | `-Record 0x560468025268 'ecs_entity_desc_t' +| `-FullComment 0x56046812aeb0 +| |-ParagraphComment 0x56046812ad90 +| | `-TextComment 0x56046812ad60 Text=" Used with ecs_entity_init " +| |-ParagraphComment 0x56046812ade0 +| | `-TextComment 0x56046812adb0 Text=" " +| |-VerbatimLineComment 0x56046812ae00 Text=" entities" +| `-ParagraphComment 0x56046812ae70 +| `-TextComment 0x56046812ae40 Text=" " +|-RecordDecl 0x5604680260f0 line:3933:16 struct ecs_bulk_desc_t definition +| |-FullComment 0x56046812b070 +| | |-ParagraphComment 0x56046812af50 +| | | `-TextComment 0x56046812af20 Text=" Used with ecs_bulk_init " +| | |-ParagraphComment 0x56046812afa0 +| | | `-TextComment 0x56046812af70 Text=" " +| | |-VerbatimLineComment 0x56046812afc0 Text=" entities" +| | `-ParagraphComment 0x56046812b030 +| | `-TextComment 0x56046812b000 Text=" " +| |-FieldDecl 0x5604680261a0 col:13 _canary 'int32_t':'int' +| |-FieldDecl 0x560468026200 col:19 entities 'ecs_entity_t *' +| | `-FullComment 0x56046812b1b0 +| | `-ParagraphComment 0x56046812b180 +| | |-TextComment 0x56046812b0e0 Text=" Entities to bulk insert. Entity ids provided by " +| | |-TextComment 0x56046812b100 Text=" the application application must be empty (cannot" +| | |-TextComment 0x56046812b120 Text=" have components). If no entity ids are provided, the" +| | `-TextComment 0x56046812b140 Text=" operation will create 'count' new entities. " +| |-FieldDecl 0x560468026288 col:13 count 'int32_t':'int' +| | `-FullComment 0x56046812b280 +| | `-ParagraphComment 0x56046812b250 +| | `-TextComment 0x56046812b220 Text=" Number of entities to create/populate " +| |-FieldDecl 0x560468026388 col:14 ids 'ecs_id_t[32]' +| | `-FullComment 0x56046812b350 +| | `-ParagraphComment 0x56046812b320 +| | `-TextComment 0x56046812b2f0 Text=" Ids to create the entities with " +| |-FieldDecl 0x560468026420 col:12 data 'void **' +| | `-FullComment 0x56046812b4e0 +| | `-ParagraphComment 0x56046812b4b0 +| | |-TextComment 0x56046812b3c0 Text=" Array with component data to insert. Each element in " +| | |-TextComment 0x56046812b3e0 Text=" the array must correspond with an element in the ids" +| | |-TextComment 0x56046812b400 Text=" array. If an element in the ids array is a tag, the" +| | |-TextComment 0x56046812b420 Text=" data array must contain a NULL. An element may be" +| | |-TextComment 0x56046812b440 Text=" set to NULL for a component, in which case the" +| | `-TextComment 0x56046812b460 Text=" component will not be set by the operation. " +| `-FieldDecl 0x5604680264a8 col:18 table 'ecs_table_t *' +| `-FullComment 0x56046812b620 +| `-ParagraphComment 0x56046812b5f0 +| |-TextComment 0x56046812b550 Text=" Table to insert the entities into. Should not be set" +| |-TextComment 0x56046812b570 Text=" at the same time as ids. When 'table' is set at the" +| |-TextComment 0x56046812b590 Text=" same time as 'data', the elements in the data array" +| `-TextComment 0x56046812b5b0 Text=" must correspond with the ids in the table's type. " +|-TypedefDecl 0x560468026588 col:3 referenced ecs_bulk_desc_t 'struct ecs_bulk_desc_t':'struct ecs_bulk_desc_t' +| |-ElaboratedType 0x560468026530 'struct ecs_bulk_desc_t' sugar +| | `-RecordType 0x560468026170 'struct ecs_bulk_desc_t' +| | `-Record 0x5604680260f0 'ecs_bulk_desc_t' +| `-FullComment 0x56046812b7e0 +| |-ParagraphComment 0x56046812b6c0 +| | `-TextComment 0x56046812b690 Text=" Used with ecs_bulk_init " +| |-ParagraphComment 0x56046812b710 +| | `-TextComment 0x56046812b6e0 Text=" " +| |-VerbatimLineComment 0x56046812b730 Text=" entities" +| `-ParagraphComment 0x56046812b7a0 +| `-TextComment 0x56046812b770 Text=" " +|-RecordDecl 0x560468026620 line:3963:16 struct ecs_component_desc_t definition +| |-FullComment 0x56046812b9a0 +| | |-ParagraphComment 0x56046812b880 +| | | `-TextComment 0x56046812b850 Text=" Used with ecs_component_init. " +| | |-ParagraphComment 0x56046812b8d0 +| | | `-TextComment 0x56046812b8a0 Text=" " +| | |-VerbatimLineComment 0x56046812b8f0 Text=" components" +| | `-ParagraphComment 0x56046812b960 +| | `-TextComment 0x56046812b930 Text=" " +| |-FieldDecl 0x5604680266d0 col:13 _canary 'int32_t':'int' +| |-FieldDecl 0x560468026758 col:18 entity 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x56046812ba70 +| | `-ParagraphComment 0x56046812ba40 +| | `-TextComment 0x56046812ba10 Text=" Existing entity to associate with observer (optional) " +| `-FieldDecl 0x5604680267b8 col:21 type 'ecs_type_info_t':'struct ecs_type_info_t' +| `-FullComment 0x56046812bb40 +| `-ParagraphComment 0x56046812bb10 +| `-TextComment 0x56046812bae0 Text=" Parameters for type (size, hooks, ...) " +|-TypedefDecl 0x560468026898 col:3 referenced ecs_component_desc_t 'struct ecs_component_desc_t':'struct ecs_component_desc_t' +| |-ElaboratedType 0x560468026840 'struct ecs_component_desc_t' sugar +| | `-RecordType 0x5604680266a0 'struct ecs_component_desc_t' +| | `-Record 0x560468026620 'ecs_component_desc_t' +| `-FullComment 0x56046812bd00 +| |-ParagraphComment 0x56046812bbe0 +| | `-TextComment 0x56046812bbb0 Text=" Used with ecs_component_init. " +| |-ParagraphComment 0x56046812bc30 +| | `-TextComment 0x56046812bc00 Text=" " +| |-VerbatimLineComment 0x56046812bc50 Text=" components" +| `-ParagraphComment 0x56046812bcc0 +| `-TextComment 0x56046812bc90 Text=" " +|-RecordDecl 0x560468026930 line:3976:16 struct ecs_filter_desc_t definition +| |-FullComment 0x56046812bec0 +| | |-ParagraphComment 0x56046812bda0 +| | | `-TextComment 0x56046812bd70 Text=" Used with ecs_filter_init. " +| | |-ParagraphComment 0x56046812bdf0 +| | | `-TextComment 0x56046812bdc0 Text=" " +| | |-VerbatimLineComment 0x56046812be10 Text=" filters" +| | `-ParagraphComment 0x56046812be80 +| | `-TextComment 0x56046812be50 Text=" " +| |-FieldDecl 0x5604680269e0 col:13 _canary 'int32_t':'int' +| |-FieldDecl 0x560468026b58 col:16 terms 'ecs_term_t[16]' +| | `-FullComment 0x56046812bfb0 +| | `-ParagraphComment 0x56046812bf80 +| | |-TextComment 0x56046812bf30 Text=" Terms of the filter. If a filter has more terms than " +| | `-TextComment 0x56046812bf50 Text=" ECS_TERM_DESC_CACHE_SIZE use terms_buffer " +| |-FieldDecl 0x560468026be8 col:17 terms_buffer 'ecs_term_t *' +| | `-FullComment 0x56046812c080 +| | `-ParagraphComment 0x56046812c050 +| | `-TextComment 0x56046812c020 Text=" For filters with lots of terms an outside array can be provided. " +| |-FieldDecl 0x560468026c78 col:13 terms_buffer_count 'int32_t':'int' +| | `-FullComment 0x56046812c150 +| | `-ParagraphComment 0x56046812c120 +| | `-TextComment 0x56046812c0f0 Text=" Number of terms in array provided in terms_buffer. " +| |-FieldDecl 0x560468026d68 col:19 storage 'ecs_filter_t *' +| | `-FullComment 0x56046812c240 +| | `-ParagraphComment 0x56046812c210 +| | `-TextComment 0x56046812c1e0 Text=" External storage to prevent allocation of the filter object " +| |-FieldDecl 0x560468026df8 col:10 instanced 'bool' +| | `-FullComment 0x56046812c3b0 +| | `-ParagraphComment 0x56046812c380 +| | |-TextComment 0x56046812c2b0 Text=" When true, terms returned by an iterator may either contain 1 or N " +| | |-TextComment 0x56046812c2d0 Text=" elements, where terms with N elements are owned, and terms with 1 element " +| | |-TextComment 0x56046812c2f0 Text=" are shared, for example from a parent or base entity. When false, the " +| | |-TextComment 0x56046812c310 Text=" iterator will at most return 1 element when the result contains both " +| | `-TextComment 0x56046812c330 Text=" owned and shared terms. " +| |-FieldDecl 0x560468028320 col:19 flags 'ecs_flags32_t':'unsigned int' +| | `-FullComment 0x56046812c480 +| | `-ParagraphComment 0x56046812c450 +| | `-TextComment 0x56046812c420 Text=" Flags for advanced usage " +| |-FieldDecl 0x5604680283b0 col:17 expr 'const char *' +| | `-FullComment 0x56046812c550 +| | `-ParagraphComment 0x56046812c520 +| | `-TextComment 0x56046812c4f0 Text=" Filter expression. Should not be set at the same time as terms array " +| `-FieldDecl 0x560468028438 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046812c620 +| `-ParagraphComment 0x56046812c5f0 +| `-TextComment 0x56046812c5c0 Text=" Entity associated with query (optional) " +|-TypedefDecl 0x5604680284e8 col:3 referenced ecs_filter_desc_t 'struct ecs_filter_desc_t':'struct ecs_filter_desc_t' +| |-ElaboratedType 0x560468028490 'struct ecs_filter_desc_t' sugar +| | `-RecordType 0x5604680269b0 'struct ecs_filter_desc_t' +| | `-Record 0x560468026930 'ecs_filter_desc_t' +| `-FullComment 0x56046812c7e0 +| |-ParagraphComment 0x56046812c6c0 +| | `-TextComment 0x56046812c690 Text=" Used with ecs_filter_init. " +| |-ParagraphComment 0x56046812c710 +| | `-TextComment 0x56046812c6e0 Text=" " +| |-VerbatimLineComment 0x56046812c730 Text=" filters" +| `-ParagraphComment 0x56046812c7a0 +| `-TextComment 0x56046812c770 Text=" " +|-RecordDecl 0x560468028580 line:4013:16 struct ecs_query_desc_t definition +| |-FullComment 0x56046812c9a0 +| | |-ParagraphComment 0x56046812c880 +| | | `-TextComment 0x56046812c850 Text=" Used with ecs_query_init. " +| | |-ParagraphComment 0x56046812c8d0 +| | | `-TextComment 0x56046812c8a0 Text=" " +| | |-VerbatimLineComment 0x56046812c8f0 Text=" queries" +| | `-ParagraphComment 0x56046812c960 +| | `-TextComment 0x56046812c930 Text=" " +| |-FieldDecl 0x560468028630 col:13 _canary 'int32_t':'int' +| |-FieldDecl 0x5604680286e0 col:23 filter 'ecs_filter_desc_t':'struct ecs_filter_desc_t' +| | `-FullComment 0x56046812ca70 +| | `-ParagraphComment 0x56046812ca40 +| | `-TextComment 0x56046812ca10 Text=" Filter for the query " +| |-FieldDecl 0x560468028768 col:18 order_by_component 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x56046812cb40 +| | `-ParagraphComment 0x56046812cb10 +| | `-TextComment 0x56046812cae0 Text=" Component to be used by order_by " +| |-FieldDecl 0x5604680287f8 col:27 order_by 'ecs_order_by_action_t':'int (*)(ecs_entity_t, const void *, ecs_entity_t, const void *)' +| | `-FullComment 0x56046812cc60 +| | `-ParagraphComment 0x56046812cc30 +| | |-TextComment 0x56046812cbb0 Text=" Callback used for ordering query results. If order_by_id is 0, the " +| | |-TextComment 0x56046812cbd0 Text=" pointer provided to the callback will be NULL. If the callback is not" +| | `-TextComment 0x56046812cbf0 Text=" set, results will not be ordered. " +| |-FieldDecl 0x5604680288b0 col:29 sort_table 'ecs_sort_table_action_t':'void (*)(ecs_world_t *, ecs_table_t *, ecs_entity_t *, void *, int32_t, int32_t, int32_t, ecs_order_by_action_t)' +| | `-FullComment 0x56046812cd50 +| | `-ParagraphComment 0x56046812cd20 +| | |-TextComment 0x56046812ccd0 Text=" Callback used for ordering query results. Same as order_by," +| | `-TextComment 0x56046812ccf0 Text=" but more efficient. " +| |-FieldDecl 0x560468028938 col:14 group_by_id 'ecs_id_t':'unsigned long' +| | `-FullComment 0x56046812ce70 +| | `-ParagraphComment 0x56046812ce40 +| | |-TextComment 0x56046812cdc0 Text=" Id to be used by group_by. This id is passed to the group_by function and" +| | |-TextComment 0x56046812cde0 Text=" can be used identify the part of an entity type that should be used for" +| | `-TextComment 0x56046812ce00 Text=" grouping. " +| |-FieldDecl 0x5604680289f0 col:27 group_by 'ecs_group_by_action_t':'uint64_t (*)(ecs_world_t *, ecs_table_t *, ecs_id_t, void *)' +| | `-FullComment 0x56046812cfe0 +| | `-ParagraphComment 0x56046812cfb0 +| | |-TextComment 0x56046812cee0 Text=" Callback used for grouping results. If the callback is not set, results" +| | |-TextComment 0x56046812cf00 Text=" will not be grouped. When set, this callback will be used to calculate a" +| | |-TextComment 0x56046812cf20 Text=" "rank" for each entity (table) based on its components. This rank is then" +| | |-TextComment 0x56046812cf40 Text=" used to sort entities (tables), so that entities (tables) of the same" +| | `-TextComment 0x56046812cf60 Text=" rank are "grouped" together when iterated. " +| |-FieldDecl 0x560468028aa0 col:31 on_group_create 'ecs_group_create_action_t':'void *(*)(ecs_world_t *, uint64_t, void *)' +| | `-FullComment 0x56046812d0d0 +| | `-ParagraphComment 0x56046812d0a0 +| | |-TextComment 0x56046812d050 Text=" Callback that is invoked when a new group is created. The return value of" +| | `-TextComment 0x56046812d070 Text=" the callback is stored as context for a group. " +| |-FieldDecl 0x560468028b50 col:31 on_group_delete 'ecs_group_delete_action_t':'void (*)(ecs_world_t *, uint64_t, void *, void *)' +| | `-FullComment 0x56046812d1c0 +| | `-ParagraphComment 0x56046812d190 +| | |-TextComment 0x56046812d140 Text=" Callback that is invoked when an existing group is deleted. The return " +| | `-TextComment 0x56046812d160 Text=" value of the on_group_create callback is passed as context parameter. " +| |-FieldDecl 0x560468028be0 col:11 group_by_ctx 'void *' +| | `-FullComment 0x56046812d290 +| | `-ParagraphComment 0x56046812d260 +| | `-TextComment 0x56046812d230 Text=" Context to pass to group_by " +| |-FieldDecl 0x560468028c68 col:20 group_by_ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| | `-FullComment 0x56046812d360 +| | `-ParagraphComment 0x56046812d330 +| | `-TextComment 0x56046812d300 Text=" Function to free group_by_ctx " +| `-FieldDecl 0x560468028cf8 col:18 parent 'ecs_query_t *' +| `-FullComment 0x56046812d4f0 +| `-ParagraphComment 0x56046812d4c0 +| |-TextComment 0x56046812d3d0 Text=" If set, the query will be created as a subquery. A subquery matches at" +| |-TextComment 0x56046812d3f0 Text=" most a subset of its parent query. Subqueries do not directly receive" +| |-TextComment 0x56046812d410 Text=" (table) notifications from the world. Instead parent queries forward" +| |-TextComment 0x56046812d430 Text=" results to subqueries. This can improve matching performance, as fewer" +| |-TextComment 0x56046812d450 Text=" queries need to be matched with new tables." +| `-TextComment 0x56046812d470 Text=" Subqueries can be nested. " +|-TypedefDecl 0x560468028da8 col:3 referenced ecs_query_desc_t 'struct ecs_query_desc_t':'struct ecs_query_desc_t' +| |-ElaboratedType 0x560468028d50 'struct ecs_query_desc_t' sugar +| | `-RecordType 0x560468028600 'struct ecs_query_desc_t' +| | `-Record 0x560468028580 'ecs_query_desc_t' +| `-FullComment 0x56046812d6b0 +| |-ParagraphComment 0x56046812d590 +| | `-TextComment 0x56046812d560 Text=" Used with ecs_query_init. " +| |-ParagraphComment 0x56046812d5e0 +| | `-TextComment 0x56046812d5b0 Text=" " +| |-VerbatimLineComment 0x56046812d600 Text=" queries" +| `-ParagraphComment 0x56046812d670 +| `-TextComment 0x56046812d640 Text=" " +|-RecordDecl 0x560468028e40 line:4070:16 struct ecs_observer_desc_t definition +| |-FullComment 0x56046812d870 +| | |-ParagraphComment 0x56046812d750 +| | | `-TextComment 0x56046812d720 Text=" Used with ecs_observer_init. " +| | |-ParagraphComment 0x56046812d7a0 +| | | `-TextComment 0x56046812d770 Text=" " +| | |-VerbatimLineComment 0x56046812d7c0 Text=" observers" +| | `-ParagraphComment 0x56046812d830 +| | `-TextComment 0x56046812d800 Text=" " +| |-FieldDecl 0x560468028ef0 col:13 _canary 'int32_t':'int' +| |-FieldDecl 0x560468028f78 col:18 entity 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x56046812d940 +| | `-ParagraphComment 0x56046812d910 +| | `-TextComment 0x56046812d8e0 Text=" Existing entity to associate with observer (optional) " +| |-FieldDecl 0x560468029008 col:23 filter 'ecs_filter_desc_t':'struct ecs_filter_desc_t' +| | `-FullComment 0x56046812da10 +| | `-ParagraphComment 0x56046812d9e0 +| | `-TextComment 0x56046812d9b0 Text=" Filter for observer " +| |-FieldDecl 0x560468029108 col:18 events 'ecs_entity_t[8]' +| | `-FullComment 0x56046812dae0 +| | `-ParagraphComment 0x56046812dab0 +| | `-TextComment 0x56046812da80 Text=" Events to observe (OnAdd, OnRemove, OnSet, UnSet) " +| |-FieldDecl 0x560468029198 col:10 yield_existing 'bool' +| | `-FullComment 0x56046812dc00 +| | `-ParagraphComment 0x56046812dbd0 +| | |-TextComment 0x56046812db50 Text=" When observer is created, generate events from existing data. For example," +| | |-TextComment 0x56046812db70 Text=" EcsOnAdd Position would match all existing instances of Position." +| | `-TextComment 0x56046812db90 Text=" This is only supported for events that are iterable (see EcsIterable) " +| |-FieldDecl 0x560468029228 col:23 callback 'ecs_iter_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x56046812dcd0 +| | `-ParagraphComment 0x56046812dca0 +| | `-TextComment 0x56046812dc70 Text=" Callback to invoke on an event, invoked when the observer matches. " +| |-FieldDecl 0x5604680292b8 col:22 run 'ecs_run_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x56046812de60 +| | `-ParagraphComment 0x56046812de30 +| | |-TextComment 0x56046812dd40 Text=" Callback invoked on an event. When left to NULL the default runner" +| | |-TextComment 0x56046812dd60 Text=" is used which matches the event with the observer's filter, and calls" +| | |-TextComment 0x56046812dd80 Text=" 'callback' when it matches. " +| | |-TextComment 0x56046812dda0 Text=" A reason to override the run function is to improve performance, if there" +| | |-TextComment 0x56046812ddc0 Text=" are more efficient way to test whether an event matches the observer than" +| | `-TextComment 0x56046812dde0 Text=" the general purpose query matcher. " +| |-FieldDecl 0x5604680298b0 col:11 ctx 'void *' +| | `-FullComment 0x56046812df30 +| | `-ParagraphComment 0x56046812df00 +| | `-TextComment 0x56046812ded0 Text=" User context to pass to callback " +| |-FieldDecl 0x560468029940 col:11 binding_ctx 'void *' +| | `-FullComment 0x56046812e000 +| | `-ParagraphComment 0x56046812dfd0 +| | `-TextComment 0x56046812dfa0 Text=" Context to be used for language bindings " +| |-FieldDecl 0x5604680299c8 col:20 ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| | `-FullComment 0x56046812e0d0 +| | `-ParagraphComment 0x56046812e0a0 +| | `-TextComment 0x56046812e070 Text=" Callback to free ctx " +| |-FieldDecl 0x560468029a58 col:20 binding_ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| | `-FullComment 0x5604681301c0 +| | `-ParagraphComment 0x56046812e170 +| | `-TextComment 0x56046812e140 Text=" Callback to free binding_ctx " +| |-FieldDecl 0x560468029ae8 col:17 observable 'ecs_poly_t *' +| | `-FullComment 0x560468130290 +| | `-ParagraphComment 0x560468130260 +| | `-TextComment 0x560468130230 Text=" Observable with which to register the observer " +| |-FieldDecl 0x560468029b78 col:14 last_event_id 'int32_t *' +| | `-FullComment 0x560468130380 +| | `-ParagraphComment 0x560468130350 +| | |-TextComment 0x560468130300 Text=" Optional shared last event id for multiple observers. Ensures only one" +| | `-TextComment 0x560468130320 Text=" of the observers with the shared id gets triggered for an event " +| `-FieldDecl 0x560468029c08 col:13 term_index 'int32_t':'int' +| `-FullComment 0x560468130450 +| `-ParagraphComment 0x560468130420 +| `-TextComment 0x5604681303f0 Text=" Used for internal purposes " +|-TypedefDecl 0x560468029cb8 col:3 referenced ecs_observer_desc_t 'struct ecs_observer_desc_t':'struct ecs_observer_desc_t' +| |-ElaboratedType 0x560468029c60 'struct ecs_observer_desc_t' sugar +| | `-RecordType 0x560468028ec0 'struct ecs_observer_desc_t' +| | `-Record 0x560468028e40 'ecs_observer_desc_t' +| `-FullComment 0x560468130610 +| |-ParagraphComment 0x5604681304f0 +| | `-TextComment 0x5604681304c0 Text=" Used with ecs_observer_init. " +| |-ParagraphComment 0x560468130540 +| | `-TextComment 0x560468130510 Text=" " +| |-VerbatimLineComment 0x560468130560 Text=" observers" +| `-ParagraphComment 0x5604681305d0 +| `-TextComment 0x5604681305a0 Text=" " +|-RecordDecl 0x560468029d50 line:4128:16 struct ecs_value_t definition +| |-FullComment 0x560468130870 +| | |-ParagraphComment 0x5604681306b0 +| | | `-TextComment 0x560468130680 Text=" " +| | |-VerbatimLineComment 0x5604681306d0 Text=" misc_types Miscellaneous types" +| | |-ParagraphComment 0x560468130740 +| | | `-TextComment 0x560468130710 Text=" " +| | `-BlockCommandComment 0x560468130760 Name="brief" +| | `-ParagraphComment 0x560468130830 +| | |-TextComment 0x560468130790 Text=" Types used to create entities, observers, queries and more." +| | |-TextComment 0x5604681307b0 Text=" " +| | |-TextComment 0x5604681307d0 Text="@" +| | `-TextComment 0x5604681307f0 Text="{" +| |-FieldDecl 0x560468029e00 col:18 type 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x560468029e68 col:11 ptr 'void *' +|-TypedefDecl 0x560468029f18 col:3 referenced ecs_value_t 'struct ecs_value_t':'struct ecs_value_t' +| |-ElaboratedType 0x560468029ec0 'struct ecs_value_t' sugar +| | `-RecordType 0x560468029dd0 'struct ecs_value_t' +| | `-Record 0x560468029d50 'ecs_value_t' +| `-FullComment 0x560468130ad0 +| |-ParagraphComment 0x560468130910 +| | `-TextComment 0x5604681308e0 Text=" " +| |-VerbatimLineComment 0x560468130930 Text=" misc_types Miscellaneous types" +| |-ParagraphComment 0x5604681309a0 +| | `-TextComment 0x560468130970 Text=" " +| `-BlockCommandComment 0x5604681309c0 Name="brief" +| `-ParagraphComment 0x560468130a90 +| |-TextComment 0x5604681309f0 Text=" Types used to create entities, observers, queries and more." +| |-TextComment 0x560468130a10 Text=" " +| |-TextComment 0x560468130a30 Text="@" +| `-TextComment 0x560468130a50 Text="{" +|-RecordDecl 0x560468029fb0 line:4134:16 struct ecs_world_info_t definition +| |-FullComment 0x560468130ba0 +| | `-ParagraphComment 0x560468130b70 +| | `-TextComment 0x560468130b40 Text=" Type that contains information about the world. " +| |-FieldDecl 0x56046802a060 col:18 last_component_id 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468130c70 +| | `-ParagraphComment 0x560468130c40 +| | `-TextComment 0x560468130c10 Text=" Last issued component entity id " +| |-FieldDecl 0x56046802a0e8 col:18 last_id 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468130d40 +| | `-ParagraphComment 0x560468130d10 +| | `-TextComment 0x560468130ce0 Text=" Last issued entity id " +| |-FieldDecl 0x56046802a178 col:18 min_id 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468130e10 +| | `-ParagraphComment 0x560468130de0 +| | `-TextComment 0x560468130db0 Text=" First allowed entity id " +| |-FieldDecl 0x56046802a208 col:18 max_id 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468130ee0 +| | `-ParagraphComment 0x560468130eb0 +| | `-TextComment 0x560468130e80 Text=" Last allowed entity id " +| |-FieldDecl 0x56046802a2a0 col:17 delta_time_raw 'float' +| | `-FullComment 0x560468130fb0 +| | `-ParagraphComment 0x560468130f80 +| | `-TextComment 0x560468130f50 Text=" Raw delta time (no time scaling) " +| |-FieldDecl 0x56046802a330 col:17 delta_time 'float' +| | `-FullComment 0x560468131080 +| | `-ParagraphComment 0x560468131050 +| | `-TextComment 0x560468131020 Text=" Time passed to or computed by ecs_progress " +| |-FieldDecl 0x56046802a3c0 col:17 time_scale 'float' +| | `-FullComment 0x560468131150 +| | `-ParagraphComment 0x560468131120 +| | `-TextComment 0x5604681310f0 Text=" Time scale applied to delta_time " +| |-FieldDecl 0x56046802a450 col:17 target_fps 'float' +| | `-FullComment 0x560468131220 +| | `-ParagraphComment 0x5604681311f0 +| | `-TextComment 0x5604681311c0 Text=" Target fps " +| |-FieldDecl 0x56046802a4e0 col:17 frame_time_total 'float' +| | `-FullComment 0x5604681312f0 +| | `-ParagraphComment 0x5604681312c0 +| | `-TextComment 0x560468131290 Text=" Total time spent processing a frame " +| |-FieldDecl 0x56046802a570 col:17 system_time_total 'float' +| | `-FullComment 0x5604681313c0 +| | `-ParagraphComment 0x560468131390 +| | `-TextComment 0x560468131360 Text=" Total time spent in systems " +| |-FieldDecl 0x56046802a600 col:17 emit_time_total 'float' +| | `-FullComment 0x560468131490 +| | `-ParagraphComment 0x560468131460 +| | `-TextComment 0x560468131430 Text=" Total time spent notifying observers " +| |-FieldDecl 0x56046802a690 col:17 merge_time_total 'float' +| | `-FullComment 0x560468131560 +| | `-ParagraphComment 0x560468131530 +| | `-TextComment 0x560468131500 Text=" Total time spent in merges " +| |-FieldDecl 0x56046802a720 col:17 world_time_total 'float' +| | `-FullComment 0x560468131630 +| | `-ParagraphComment 0x560468131600 +| | `-TextComment 0x5604681315d0 Text=" Time elapsed in simulation " +| |-FieldDecl 0x56046802a7b0 col:17 world_time_total_raw 'float' +| | `-FullComment 0x560468131700 +| | `-ParagraphComment 0x5604681316d0 +| | `-TextComment 0x5604681316a0 Text=" Time elapsed in simulation (no scaling) " +| |-FieldDecl 0x56046802ae40 col:17 rematch_time_total 'float' +| | `-FullComment 0x5604681317d0 +| | `-ParagraphComment 0x5604681317a0 +| | `-TextComment 0x560468131770 Text=" Time spent on query rematching " +| |-FieldDecl 0x56046802aec8 col:13 frame_count_total 'int64_t':'long' +| | `-FullComment 0x5604681318a0 +| | `-ParagraphComment 0x560468131870 +| | `-TextComment 0x560468131840 Text=" Total number of frames " +| |-FieldDecl 0x56046802af58 col:13 merge_count_total 'int64_t':'long' +| | `-FullComment 0x560468131970 +| | `-ParagraphComment 0x560468131940 +| | `-TextComment 0x560468131910 Text=" Total number of merges " +| |-FieldDecl 0x56046802afe8 col:13 rematch_count_total 'int64_t':'long' +| | `-FullComment 0x560468131a40 +| | `-ParagraphComment 0x560468131a10 +| | `-TextComment 0x5604681319e0 Text=" Total number of rematches " +| |-FieldDecl 0x56046802b078 col:13 id_create_total 'int64_t':'long' +| | `-FullComment 0x560468131b10 +| | `-ParagraphComment 0x560468131ae0 +| | `-TextComment 0x560468131ab0 Text=" Total number of times a new id was created " +| |-FieldDecl 0x56046802b108 col:13 id_delete_total 'int64_t':'long' +| | `-FullComment 0x560468131be0 +| | `-ParagraphComment 0x560468131bb0 +| | `-TextComment 0x560468131b80 Text=" Total number of times an id was deleted " +| |-FieldDecl 0x56046802b198 col:13 table_create_total 'int64_t':'long' +| | `-FullComment 0x560468131cb0 +| | `-ParagraphComment 0x560468131c80 +| | `-TextComment 0x560468131c50 Text=" Total number of times a table was created " +| |-FieldDecl 0x56046802b228 col:13 table_delete_total 'int64_t':'long' +| | `-FullComment 0x560468131d80 +| | `-ParagraphComment 0x560468131d50 +| | `-TextComment 0x560468131d20 Text=" Total number of times a table was deleted " +| |-FieldDecl 0x56046802b2b8 col:13 pipeline_build_count_total 'int64_t':'long' +| | `-FullComment 0x560468131e50 +| | `-ParagraphComment 0x560468131e20 +| | `-TextComment 0x560468131df0 Text=" Total number of pipeline builds " +| |-FieldDecl 0x56046802b348 col:13 systems_ran_frame 'int64_t':'long' +| | `-FullComment 0x560468131f20 +| | `-ParagraphComment 0x560468131ef0 +| | `-TextComment 0x560468131ec0 Text=" Total number of systems ran in last frame " +| |-FieldDecl 0x56046802b3d8 col:13 observers_ran_frame 'int64_t':'long' +| | `-FullComment 0x560468131ff0 +| | `-ParagraphComment 0x560468131fc0 +| | `-TextComment 0x560468131f90 Text=" Total number of times observer was invoked " +| |-FieldDecl 0x56046802b468 col:13 id_count 'int32_t':'int' +| | `-FullComment 0x5604681320c0 +| | `-ParagraphComment 0x560468132090 +| | `-TextComment 0x560468132060 Text=" Number of ids in the world (excluding wildcards) " +| |-FieldDecl 0x56046802b4f8 col:13 tag_id_count 'int32_t':'int' +| | `-FullComment 0x560468132190 +| | `-ParagraphComment 0x560468132160 +| | `-TextComment 0x560468132130 Text=" Number of tag (no data) ids in the world " +| |-FieldDecl 0x56046802b588 col:13 component_id_count 'int32_t':'int' +| | `-FullComment 0x560468132270 +| | `-ParagraphComment 0x560468132240 +| | `-TextComment 0x560468132210 Text=" Number of component (data) ids in the world " +| |-FieldDecl 0x56046802b618 col:13 pair_id_count 'int32_t':'int' +| | `-FullComment 0x560468132340 +| | `-ParagraphComment 0x560468132310 +| | `-TextComment 0x5604681322e0 Text=" Number of pair ids in the world " +| |-FieldDecl 0x56046802b6a8 col:13 wildcard_id_count 'int32_t':'int' +| | `-FullComment 0x560468132410 +| | `-ParagraphComment 0x5604681323e0 +| | `-TextComment 0x5604681323b0 Text=" Number of wildcard ids " +| |-FieldDecl 0x56046802b738 col:13 table_count 'int32_t':'int' +| | `-FullComment 0x5604681324e0 +| | `-ParagraphComment 0x5604681324b0 +| | `-TextComment 0x560468132480 Text=" Number of tables " +| |-FieldDecl 0x56046802b7c8 col:13 tag_table_count 'int32_t':'int' +| | `-FullComment 0x5604681325b0 +| | `-ParagraphComment 0x560468132580 +| | `-TextComment 0x560468132550 Text=" Number of tag-only tables " +| |-FieldDecl 0x56046802b858 col:13 trivial_table_count 'int32_t':'int' +| | `-FullComment 0x560468132680 +| | `-ParagraphComment 0x560468132650 +| | `-TextComment 0x560468132620 Text=" Number of tables with trivial components (no lifecycle callbacks) " +| |-FieldDecl 0x56046802b8e8 col:13 empty_table_count 'int32_t':'int' +| | `-FullComment 0x560468132750 +| | `-ParagraphComment 0x560468132720 +| | `-TextComment 0x5604681326f0 Text=" Number of tables without entities " +| |-FieldDecl 0x56046802b978 col:13 table_record_count 'int32_t':'int' +| | `-FullComment 0x560468132820 +| | `-ParagraphComment 0x5604681327f0 +| | `-TextComment 0x5604681327c0 Text=" Total number of table records (entries in table caches) " +| |-FieldDecl 0x56046802ba08 col:13 table_storage_count 'int32_t':'int' +| | `-FullComment 0x5604681328f0 +| | `-ParagraphComment 0x5604681328c0 +| | `-TextComment 0x560468132890 Text=" Total number of table storages " +| |-RecordDecl 0x56046802ba88 line:4178:5 struct definition +| | |-FieldDecl 0x56046802bb40 col:17 add_count 'int64_t':'long' +| | | `-FullComment 0x5604681329c0 +| | | `-ParagraphComment 0x560468132990 +| | | `-TextComment 0x560468132960 Text=" add commands processed " +| | |-FieldDecl 0x56046802bbc8 col:17 remove_count 'int64_t':'long' +| | | `-FullComment 0x560468132a90 +| | | `-ParagraphComment 0x560468132a60 +| | | `-TextComment 0x560468132a30 Text=" remove commands processed " +| | |-FieldDecl 0x56046802bc58 col:17 delete_count 'int64_t':'long' +| | | `-FullComment 0x560468132b60 +| | | `-ParagraphComment 0x560468132b30 +| | | `-TextComment 0x560468132b00 Text=" delete commands processed " +| | |-FieldDecl 0x56046802bce8 col:17 clear_count 'int64_t':'long' +| | | `-FullComment 0x560468132c30 +| | | `-ParagraphComment 0x560468132c00 +| | | `-TextComment 0x560468132bd0 Text=" clear commands processed " +| | |-FieldDecl 0x56046802bd78 col:17 set_count 'int64_t':'long' +| | | `-FullComment 0x560468132d00 +| | | `-ParagraphComment 0x560468132cd0 +| | | `-TextComment 0x560468132ca0 Text=" set commands processed " +| | |-FieldDecl 0x56046802ca10 col:17 get_mut_count 'int64_t':'long' +| | | `-FullComment 0x560468132dd0 +| | | `-ParagraphComment 0x560468132da0 +| | | `-TextComment 0x560468132d70 Text=" get_mut/emplace commands processed " +| | |-FieldDecl 0x56046802ca98 col:17 modified_count 'int64_t':'long' +| | | `-FullComment 0x560468132ea0 +| | | `-ParagraphComment 0x560468132e70 +| | | `-TextComment 0x560468132e40 Text=" modified commands processed " +| | |-FieldDecl 0x56046802cb28 col:17 other_count 'int64_t':'long' +| | | `-FullComment 0x560468132f70 +| | | `-ParagraphComment 0x560468132f40 +| | | `-TextComment 0x560468132f10 Text=" other commands processed " +| | |-FieldDecl 0x56046802cbb8 col:17 discard_count 'int64_t':'long' +| | | `-FullComment 0x560468133040 +| | | `-ParagraphComment 0x560468133010 +| | | `-TextComment 0x560468132fe0 Text=" commands discarded, happens when entity is no longer alive when running the command " +| | |-FieldDecl 0x56046802cc48 col:17 batched_entity_count 'int64_t':'long' +| | | `-FullComment 0x560468133110 +| | | `-ParagraphComment 0x5604681330e0 +| | | `-TextComment 0x5604681330b0 Text=" entities for which commands were batched " +| | `-FieldDecl 0x56046802ccd8 col:17 batched_command_count 'int64_t':'long' +| | `-FullComment 0x5604681331e0 +| | `-ParagraphComment 0x5604681331b0 +| | `-TextComment 0x560468133180 Text=" commands batched " +| |-FieldDecl 0x56046802cdb8 col:7 cmd 'struct (unnamed struct at flecs.h:4178:5)':'struct ecs_world_info_t::(unnamed at flecs.h:4178:5)' +| `-FieldDecl 0x56046802ce20 col:17 name_prefix 'const char *' +| `-FullComment 0x560468133320 +| `-ParagraphComment 0x5604681332f0 +| |-TextComment 0x560468133250 Text=" Value set by ecs_set_name_prefix. Used" +| |-TextComment 0x560468133270 Text=" to remove library prefixes of symbol" +| |-TextComment 0x560468133290 Text=" names (such as Ecs, ecs_) when " +| `-TextComment 0x5604681332b0 Text=" registering them as names. " +|-TypedefDecl 0x56046802cef8 col:3 referenced ecs_world_info_t 'struct ecs_world_info_t':'struct ecs_world_info_t' +| |-ElaboratedType 0x56046802cea0 'struct ecs_world_info_t' sugar +| | `-RecordType 0x56046802a030 'struct ecs_world_info_t' +| | `-Record 0x560468029fb0 'ecs_world_info_t' +| `-FullComment 0x5604681333f0 +| `-ParagraphComment 0x5604681333c0 +| `-TextComment 0x560468133390 Text=" Type that contains information about the world. " +|-RecordDecl 0x56046802cf90 line:4199:16 struct ecs_query_group_info_t definition +| |-FullComment 0x5604681334c0 +| | `-ParagraphComment 0x560468133490 +| | `-TextComment 0x560468133460 Text=" Type that contains information about a query group. " +| |-FieldDecl 0x56046802d040 col:13 match_count 'int32_t':'int' +| | `-FullComment 0x560468133590 +| | `-ParagraphComment 0x560468133560 +| | `-TextComment 0x560468133530 Text=" How often tables have been matched/unmatched " +| |-FieldDecl 0x56046802d0c8 col:13 table_count 'int32_t':'int' +| | `-FullComment 0x560468133660 +| | `-ParagraphComment 0x560468133630 +| | `-TextComment 0x560468133600 Text=" Number of tables in group " +| `-FieldDecl 0x56046802d160 col:11 ctx 'void *' +| `-FullComment 0x560468133730 +| `-ParagraphComment 0x560468133700 +| `-TextComment 0x5604681336d0 Text=" Group context, returned by on_group_create " +|-TypedefDecl 0x56046802d238 col:3 referenced ecs_query_group_info_t 'struct ecs_query_group_info_t':'struct ecs_query_group_info_t' +| |-ElaboratedType 0x56046802d1e0 'struct ecs_query_group_info_t' sugar +| | `-RecordType 0x56046802d010 'struct ecs_query_group_info_t' +| | `-Record 0x56046802cf90 'ecs_query_group_info_t' +| `-FullComment 0x560468133800 +| `-ParagraphComment 0x5604681337d0 +| `-TextComment 0x5604681337a0 Text=" Type that contains information about a query group. " +|-RecordDecl 0x56046802d330 line:4214:16 struct EcsIdentifier definition +| |-FullComment 0x5604681338d0 +| | `-ParagraphComment 0x5604681338a0 +| | `-TextComment 0x560468133870 Text=" A (string) identifier. Used as pair with EcsName and EcsSymbol tags " +| |-FieldDecl 0x56046802d3e8 col:11 value 'char *' +| | `-FullComment 0x5604681339a0 +| | `-ParagraphComment 0x560468133970 +| | `-TextComment 0x560468133940 Text=" Identifier string " +| |-FieldDecl 0x56046802d478 col:16 length 'ecs_size_t':'int' +| | `-FullComment 0x560468133a70 +| | `-ParagraphComment 0x560468133a40 +| | `-TextComment 0x560468133a10 Text=" Length of identifier " +| |-FieldDecl 0x56046802d508 col:14 hash 'uint64_t':'unsigned long' +| | `-FullComment 0x560468133b40 +| | `-ParagraphComment 0x560468133b10 +| | `-TextComment 0x560468133ae0 Text=" Hash of current value " +| |-FieldDecl 0x56046802d598 col:14 index_hash 'uint64_t':'unsigned long' +| | `-FullComment 0x560468133c10 +| | `-ParagraphComment 0x560468133be0 +| | `-TextComment 0x560468133bb0 Text=" Hash of existing record in current index " +| `-FieldDecl 0x56046802d628 col:20 index 'ecs_hashmap_t *' +| `-FullComment 0x560468133ce0 +| `-ParagraphComment 0x560468133cb0 +| `-TextComment 0x560468133c80 Text=" Current index " +|-TypedefDecl 0x56046802d708 col:3 EcsIdentifier 'struct EcsIdentifier':'struct EcsIdentifier' +| |-ElaboratedType 0x56046802d6b0 'struct EcsIdentifier' sugar +| | `-RecordType 0x56046802d3b0 'struct EcsIdentifier' +| | `-Record 0x56046802d330 'EcsIdentifier' +| `-FullComment 0x560468133db0 +| `-ParagraphComment 0x560468133d80 +| `-TextComment 0x560468133d50 Text=" A (string) identifier. Used as pair with EcsName and EcsSymbol tags " +|-RecordDecl 0x56046802d7a0 line:4223:16 struct EcsComponent definition +| |-FullComment 0x560468133e80 +| | `-ParagraphComment 0x560468133e50 +| | `-TextComment 0x560468133e20 Text=" Component information. " +| |-FieldDecl 0x56046802d850 col:16 size 'ecs_size_t':'int' +| | `-FullComment 0x560468133f50 +| | `-ParagraphComment 0x560468133f20 +| | `-TextComment 0x560468133ef0 Text=" Component size " +| `-FieldDecl 0x56046802d8d8 col:16 alignment 'ecs_size_t':'int' +| `-FullComment 0x560468134020 +| `-ParagraphComment 0x560468133ff0 +| `-TextComment 0x560468133fc0 Text=" Component alignment " +|-TypedefDecl 0x56046802d9b8 col:3 referenced EcsComponent 'struct EcsComponent':'struct EcsComponent' +| |-ElaboratedType 0x56046802d960 'struct EcsComponent' sugar +| | `-RecordType 0x56046802d820 'struct EcsComponent' +| | `-Record 0x56046802d7a0 'EcsComponent' +| `-FullComment 0x5604681340f0 +| `-ParagraphComment 0x5604681340c0 +| `-TextComment 0x560468134090 Text=" Component information. " +|-RecordDecl 0x560467fecf80 line:4229:16 struct EcsPoly definition +| |-FullComment 0x5604681341e0 +| | `-ParagraphComment 0x560468134190 +| | `-TextComment 0x560468134160 Text=" Component for storing a poly object " +| `-FieldDecl 0x560467fed030 col:17 poly 'ecs_poly_t *' +| `-FullComment 0x5604681342b0 +| `-ParagraphComment 0x560468134280 +| `-TextComment 0x560468134250 Text=" Pointer to poly object " +|-TypedefDecl 0x560467fed108 col:3 EcsPoly 'struct EcsPoly':'struct EcsPoly' +| |-ElaboratedType 0x560467fed0b0 'struct EcsPoly' sugar +| | `-RecordType 0x560467fed000 'struct EcsPoly' +| | `-Record 0x560467fecf80 'EcsPoly' +| `-FullComment 0x560468134380 +| `-ParagraphComment 0x560468134350 +| `-TextComment 0x560468134320 Text=" Component for storing a poly object " +|-TypedefDecl 0x560467fed1b0 col:24 EcsIterable 'ecs_iterable_t':'struct ecs_iterable_t' +| |-TypedefType 0x560468008df0 'ecs_iterable_t' sugar +| | |-Typedef 0x560468006588 'ecs_iterable_t' +| | `-ElaboratedType 0x560468006530 'struct ecs_iterable_t' sugar +| | `-RecordType 0x560468006490 'struct ecs_iterable_t' +| | `-Record 0x560468006408 'ecs_iterable_t' +| `-FullComment 0x560468134450 +| `-ParagraphComment 0x560468134420 +| `-TextComment 0x5604681343f0 Text=" Component for iterable entities " +|-VarDecl 0x560467fed308 col:33 ECS_PAIR 'const ecs_id_t':'const unsigned long' extern +| `-FullComment 0x560468134520 +| `-ParagraphComment 0x5604681344f0 +| `-TextComment 0x5604681344c0 Text=" Indicates that the id is a pair. " +|-VarDecl 0x560467fed3a8 col:33 ECS_OVERRIDE 'const ecs_id_t':'const unsigned long' extern +| `-FullComment 0x5604681345f0 +| `-ParagraphComment 0x5604681345c0 +| `-TextComment 0x560468134590 Text=" Automatically override component when it is inherited " +|-VarDecl 0x560467fed448 col:33 ECS_TOGGLE 'const ecs_id_t':'const unsigned long' extern +| `-FullComment 0x5604681346c0 +| `-ParagraphComment 0x560468134690 +| `-TextComment 0x560468134660 Text=" Adds bitset to storage which allows component to be enabled/disabled " +|-VarDecl 0x560467fed4e8 col:33 ECS_AND 'const ecs_id_t':'const unsigned long' extern +| `-FullComment 0x560468134790 +| `-ParagraphComment 0x560468134760 +| `-TextComment 0x560468134730 Text=" Include all components from entity to which AND is applied " +|-VarDecl 0x560467fed5b8 :43:1> col:1 FLECS__EEcsComponent 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed630 :44:1> col:1 FLECS__EEcsIdentifier 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed6a8 :45:1> col:1 FLECS__EEcsIterable 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed720 :46:1> col:1 FLECS__EEcsPoly 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed798 col:37 EcsQuery 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed810 col:37 EcsObserver 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed888 col:37 EcsSystem 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed900 :47:1> col:1 FLECS__EEcsTickSource 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed978 :48:1> col:1 FLECS__EEcsPipelineQuery 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fed9f0 :49:1> col:1 FLECS__EEcsTimer 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467feda68 :50:1> col:1 FLECS__EEcsRateFilter 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560467fedb08 col:37 EcsFlecs 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134860 +| `-ParagraphComment 0x560468134830 +| `-TextComment 0x560468134800 Text=" Root scope for builtin flecs entities " +|-VarDecl 0x560467fedba8 col:37 EcsFlecsCore 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134930 +| `-ParagraphComment 0x560468134900 +| `-TextComment 0x5604681348d0 Text=" Core module scope " +|-VarDecl 0x560467fedc48 col:37 EcsWorld 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134a00 +| `-ParagraphComment 0x5604681349d0 +| `-TextComment 0x5604681349a0 Text=" Entity associated with world (used for "attaching" components to world) " +|-VarDecl 0x560467fedce8 col:37 EcsWildcard 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134ad0 +| `-ParagraphComment 0x560468134aa0 +| `-TextComment 0x560468134a70 Text=" Wildcard entity ("*"). Matches any id, returns all matches. " +|-VarDecl 0x560467fedd88 col:37 EcsAny 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134ba0 +| `-ParagraphComment 0x560468134b70 +| `-TextComment 0x560468134b40 Text=" Any entity ("_"). Matches any id, returns only the first. " +|-VarDecl 0x560467fede28 col:37 EcsThis 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134c70 +| `-ParagraphComment 0x560468134c40 +| `-TextComment 0x560468134c10 Text=" This entity. Default source for queries. " +|-VarDecl 0x560467fedec8 col:37 EcsVariable 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134d40 +| `-ParagraphComment 0x560468134d10 +| `-TextComment 0x560468134ce0 Text=" Variable entity ("$"). Used in expressions to prefix variable names " +|-VarDecl 0x560468032c28 col:37 EcsTransitive 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134e60 +| `-ParagraphComment 0x560468134e30 +| |-TextComment 0x560468134db0 Text=" Marks a relationship as transitive. " +| |-TextComment 0x560468134dd0 Text=" Behavior: " +| `-TextComment 0x560468134df0 Text=" if R(X, Y) and R(Y, Z) then R(X, Z)" +|-VarDecl 0x560468032cc8 col:37 EcsReflexive 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468134f80 +| `-ParagraphComment 0x560468134f50 +| |-TextComment 0x560468134ed0 Text=" Marks a relatoinship as reflexive." +| |-TextComment 0x560468134ef0 Text=" Behavior: " +| `-TextComment 0x560468134f10 Text=" R(X, X) == true" +|-VarDecl 0x560468032d68 col:37 EcsFinal 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135110 +| |-ParagraphComment 0x560468135070 +| | |-TextComment 0x560468134ff0 Text=" Ensures that entity/component cannot be used as target in IsA relationship." +| | |-TextComment 0x560468135010 Text=" Final can improve the performance of rule-based queries, as they will not " +| | `-TextComment 0x560468135030 Text=" attempt to substitute a final component with its subsets." +| `-ParagraphComment 0x5604681350e0 +| |-TextComment 0x560468135090 Text=" Behavior: " +| `-TextComment 0x5604681350b0 Text=" if IsA(X, Y) and Final(Y) throw error" +|-VarDecl 0x560468032e08 col:37 EcsDontInherit 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135250 +| |-ParagraphComment 0x5604681351b0 +| | `-TextComment 0x560468135180 Text=" Ensures that component is never inherited from an IsA target." +| `-ParagraphComment 0x560468135220 +| |-TextComment 0x5604681351d0 Text=" Behavior:" +| `-TextComment 0x5604681351f0 Text=" if DontInherit(X) and X(B) and IsA(A, B) then X(A) is false." +|-VarDecl 0x560468032ea8 col:37 EcsSymmetric 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135370 +| `-ParagraphComment 0x560468135340 +| |-TextComment 0x5604681352c0 Text=" Marks relationship as commutative." +| |-TextComment 0x5604681352e0 Text=" Behavior:" +| `-TextComment 0x560468135300 Text=" if R(X, Y) then R(Y, X)" +|-VarDecl 0x560468032f48 col:37 EcsExclusive 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681354d0 +| |-ParagraphComment 0x560468135430 +| | |-TextComment 0x5604681353e0 Text=" Can be added to relationship to indicate that the relationship can only occur" +| | `-TextComment 0x560468135400 Text=" once on an entity. Adding a 2nd instance will replace the 1st. " +| `-ParagraphComment 0x5604681354a0 +| |-TextComment 0x560468135450 Text=" Behavior:" +| `-TextComment 0x560468135470 Text=" R(X, Y) + R(X, Z) = R(X, Z)" +|-VarDecl 0x560468032fe8 col:37 EcsAcyclic 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681355a0 +| `-ParagraphComment 0x560468135570 +| `-TextComment 0x560468135540 Text=" Marks a relationship as acyclic. Acyclic relationships may not form cycles. " +|-VarDecl 0x560468033088 col:37 EcsWith 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135710 +| |-ParagraphComment 0x560468135640 +| | `-TextComment 0x560468135610 Text=" Ensure that a component always is added together with another component." +| `-ParagraphComment 0x5604681356e0 +| |-TextComment 0x560468135660 Text=" Behavior:" +| |-TextComment 0x560468135680 Text=" If With(R, O) and R(X) then O(X)" +| `-TextComment 0x5604681356a0 Text=" If With(R, O) and R(X, Y) then O(X, Y)" +|-VarDecl 0x560468033128 col:37 EcsOneOf 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135880 +| |-ParagraphComment 0x5604681357b0 +| | `-TextComment 0x560468135780 Text=" Ensure that relationship target is child of specified entity." +| `-ParagraphComment 0x560468135850 +| |-TextComment 0x5604681357d0 Text=" Behavior:" +| |-TextComment 0x5604681357f0 Text=" If OneOf(R, O) and R(X, Y), Y must be a child of O" +| `-TextComment 0x560468135810 Text=" If OneOf(R) and R(X, Y), Y must be a child of R" +|-VarDecl 0x5604680331c8 col:37 EcsTag 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135970 +| `-ParagraphComment 0x560468135940 +| |-TextComment 0x5604681358f0 Text=" Can be added to relationship to indicate that it should never hold data, even" +| `-TextComment 0x560468135910 Text=" when it or the relationship target is a component. " +|-VarDecl 0x560468033268 col:37 EcsUnion 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135a90 +| `-ParagraphComment 0x560468135a60 +| |-TextComment 0x5604681359e0 Text=" Tag to indicate that relationship is stored as union. Union relationships enable" +| |-TextComment 0x560468135a00 Text=" changing the target of a union without switching tables. Union relationships" +| `-TextComment 0x560468135a20 Text=" are also marked as exclusive. " +|-VarDecl 0x560468033308 col:37 EcsName 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135b60 +| `-ParagraphComment 0x560468135b30 +| `-TextComment 0x560468135b00 Text=" Tag to indicate name identifier " +|-VarDecl 0x5604680333a8 col:37 EcsSymbol 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135c30 +| `-ParagraphComment 0x560468135c00 +| `-TextComment 0x560468135bd0 Text=" Tag to indicate symbol identifier " +|-VarDecl 0x560468033448 col:37 EcsAlias 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135d00 +| `-ParagraphComment 0x560468135cd0 +| `-TextComment 0x560468135ca0 Text=" Tag to indicate alias identifier " +|-VarDecl 0x5604680334e8 col:37 EcsChildOf 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135dd0 +| `-ParagraphComment 0x560468135da0 +| `-TextComment 0x560468135d70 Text=" Used to express parent-child relationships. " +|-VarDecl 0x560468033588 col:37 EcsIsA 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135ea0 +| `-ParagraphComment 0x560468135e70 +| `-TextComment 0x560468135e40 Text=" Used to express inheritance relationships. " +|-VarDecl 0x560468033628 col:37 EcsDependsOn 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468135f70 +| `-ParagraphComment 0x560468135f40 +| `-TextComment 0x560468135f10 Text=" Used to express dependency relationships " +|-VarDecl 0x5604680336c8 col:37 EcsSlotOf 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136040 +| `-ParagraphComment 0x560468136010 +| `-TextComment 0x560468135fe0 Text=" Used to express a slot (used with prefab inheritance) " +|-VarDecl 0x560468033768 col:37 EcsModule 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136110 +| `-ParagraphComment 0x5604681360e0 +| `-TextComment 0x5604681360b0 Text=" Tag added to module entities " +|-VarDecl 0x560468033808 col:37 EcsPrivate 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681361f0 +| `-ParagraphComment 0x5604681361b0 +| `-TextComment 0x560468136180 Text=" Tag to indicate an entity/component/system is private to a module " +|-VarDecl 0x5604680338a8 col:37 EcsPrefab 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681362e0 +| `-ParagraphComment 0x5604681362b0 +| |-TextComment 0x560468136260 Text=" Tag added to prefab entities. Any entity with this tag is automatically" +| `-TextComment 0x560468136280 Text=" ignored by filters/queries, unless EcsPrefab is explicitly added. " +|-VarDecl 0x560468033948 col:37 EcsDisabled 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681363b0 +| `-ParagraphComment 0x560468136380 +| `-TextComment 0x560468136350 Text=" When this tag is added to an entity it is skipped by all queries/filters " +|-VarDecl 0x5604680339e8 col:37 EcsOnAdd 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136480 +| `-ParagraphComment 0x560468136450 +| `-TextComment 0x560468136420 Text=" Event. Triggers when an id (component, tag, pair) is added to an entity " +|-VarDecl 0x560468033a88 col:37 EcsOnRemove 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136550 +| `-ParagraphComment 0x560468136520 +| `-TextComment 0x5604681364f0 Text=" Event. Triggers when an id (component, tag, pair) is removed from an entity " +|-VarDecl 0x560468033b28 col:37 EcsOnSet 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136620 +| `-ParagraphComment 0x5604681365f0 +| `-TextComment 0x5604681365c0 Text=" Event. Triggers when a component is set for an entity " +|-VarDecl 0x560468033c00 col:37 EcsUnSet 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681366f0 +| `-ParagraphComment 0x5604681366c0 +| `-TextComment 0x560468136690 Text=" Event. Triggers when a component is unset for an entity " +|-VarDecl 0x560468033ca8 col:37 EcsMonitor 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681367c0 +| `-ParagraphComment 0x560468136790 +| `-TextComment 0x560468136760 Text=" Event. Exactly-once observer for when an entity matches/unmatches a filter " +|-VarDecl 0x560468033d48 col:37 EcsOnDelete 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681368e0 +| `-ParagraphComment 0x5604681368b0 +| |-TextComment 0x560468136830 Text=" Event. Triggers when an entity is deleted." +| |-TextComment 0x560468136850 Text=" Also used as relationship for defining cleanup behavior, see: " +| `-TextComment 0x560468136870 Text=" https://github.com/SanderMertens/flecs/blob/master/docs/Relationships.md#cleanup-properties" +|-VarDecl 0x560468033e48 col:37 EcsOnTableEmpty 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681369b0 +| `-ParagraphComment 0x560468136980 +| `-TextComment 0x560468136950 Text=" Event. Triggers when a table becomes empty (doesn't emit on creation). " +|-VarDecl 0x560468033ee8 col:37 EcsOnTableFill 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136a80 +| `-ParagraphComment 0x560468136a50 +| `-TextComment 0x560468136a20 Text=" Event. Triggers when a table becomes non-empty. " +|-VarDecl 0x560468033f88 col:37 EcsOnDeleteTarget 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136ba0 +| `-ParagraphComment 0x560468136b70 +| |-TextComment 0x560468136af0 Text=" Relationship used to define what should happen when a target entity (second" +| |-TextComment 0x560468136b10 Text=" element of a pair) is deleted. For details see: " +| `-TextComment 0x560468136b30 Text=" https://github.com/SanderMertens/flecs/blob/master/docs/Relationships.md#cleanup-properties" +|-VarDecl 0x560468034028 col:37 EcsRemove 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136c90 +| `-ParagraphComment 0x560468136c60 +| |-TextComment 0x560468136c10 Text=" Remove cleanup policy. Must be used as target in pair with EcsOnDelete or" +| `-TextComment 0x560468136c30 Text=" EcsOnDeleteTarget. " +|-VarDecl 0x5604680340c8 col:37 EcsDelete 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136d80 +| `-ParagraphComment 0x560468136d50 +| |-TextComment 0x560468136d00 Text=" Delete cleanup policy. Must be used as target in pair with EcsOnDelete or" +| `-TextComment 0x560468136d20 Text=" EcsOnDeleteTarget. " +|-VarDecl 0x560468034168 col:37 EcsPanic 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136e70 +| `-ParagraphComment 0x560468136e40 +| |-TextComment 0x560468136df0 Text=" Panic cleanup policy. Must be used as target in pair with EcsOnDelete or" +| `-TextComment 0x560468136e10 Text=" EcsOnDeleteTarget. " +|-VarDecl 0x560468034208 col:37 EcsDefaultChildComponent 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x560468136fe0 +| `-ParagraphComment 0x560468136fb0 +| |-TextComment 0x560468136ee0 Text=" Used like (EcsDefaultChildComponent, Component). When added to an entity," +| |-TextComment 0x560468136f00 Text=" this informs serialization formats which component to use when a value is" +| |-TextComment 0x560468136f20 Text=" assigned to an entity without specifying the component. This is intended as" +| |-TextComment 0x560468136f40 Text=" a hint, serialization formats are not required to use it. Adding this " +| `-TextComment 0x560468136f60 Text=" component does not change the behavior of core ECS operations. " +|-VarDecl 0x5604680342a8 col:37 EcsEmpty 'const ecs_entity_t':'const unsigned long' extern +| `-FullComment 0x5604681370b0 +| `-ParagraphComment 0x560468137080 +| `-TextComment 0x560468137050 Text=" Tag used to indicate query is empty " +|-VarDecl 0x560468034320 :51:1> col:1 FLECS__EEcsPipeline 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560468034398 col:37 EcsOnStart 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560468034410 col:37 EcsPreFrame 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560468034488 col:37 EcsOnLoad 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560468034500 col:37 EcsPostLoad 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560468034578 col:37 EcsPreUpdate 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680345f0 col:37 EcsOnUpdate 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560468034668 col:37 EcsOnValidate 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680346e0 col:37 EcsPostUpdate 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560468034758 col:37 EcsPreStore 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680347d0 col:37 EcsOnStore 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x560468034848 col:37 EcsPostFrame 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680348c0 col:37 EcsPhase 'const ecs_entity_t':'const unsigned long' extern +|-FunctionDecl 0x560468036060 col:14 ecs_init 'ecs_world_t *(void)' +| `-FullComment 0x560468137320 +| |-ParagraphComment 0x5604681371c0 +| | |-TextComment 0x560468137120 Text=" Create a new world." +| | |-TextComment 0x560468137140 Text=" A world manages all the ECS data and supporting infrastructure. Applications " +| | |-TextComment 0x560468137160 Text=" must have at least one world. Entities, component and system handles are " +| | `-TextComment 0x560468137180 Text=" local to a world and should not be shared between worlds." +| |-ParagraphComment 0x560468137210 +| | `-TextComment 0x5604681371e0 Text=" This operation creates a world with all builtin modules loaded. " +| |-ParagraphComment 0x560468137260 +| | `-TextComment 0x560468137230 Text=" " +| `-BlockCommandComment 0x560468137280 Name="return" +| `-ParagraphComment 0x5604681372e0 +| `-TextComment 0x5604681372b0 Text=" A new world" +|-FunctionDecl 0x5604680361c0 col:14 ecs_mini 'ecs_world_t *(void)' +| `-FullComment 0x5604681374d0 +| |-ParagraphComment 0x5604681373c0 +| | `-TextComment 0x560468137390 Text=" Same as ecs_init, but with minimal set of modules loaded." +| |-ParagraphComment 0x560468137410 +| | `-TextComment 0x5604681373e0 Text=" " +| `-BlockCommandComment 0x560468137430 Name="return" +| `-ParagraphComment 0x560468137490 +| `-TextComment 0x560468137460 Text=" A new tiny world" +|-FunctionDecl 0x5604680364a8 line:4573:14 ecs_init_w_args 'ecs_world_t *(int, char **)' +| |-ParmVarDecl 0x5604680362a0 col:9 argc 'int' +| |-ParmVarDecl 0x560468036390 col:11 argv 'char **':'char **' +| `-FullComment 0x5604681376f0 +| |-ParagraphComment 0x5604681375e0 +| | |-TextComment 0x560468137540 Text=" Create a new world with arguments." +| | |-TextComment 0x560468137560 Text=" Same as ecs_init, but allows passing in command line arguments. These can be" +| | |-TextComment 0x560468137580 Text=" used to dynamically enable flecs features to an application. Currently these" +| | `-TextComment 0x5604681375a0 Text=" arguments are not used." +| |-ParagraphComment 0x560468137630 +| | `-TextComment 0x560468137600 Text=" " +| `-BlockCommandComment 0x560468137650 Name="return" +| `-ParagraphComment 0x5604681376b0 +| `-TextComment 0x560468137680 Text=" A new world" +|-FunctionDecl 0x560468036690 line:4584:5 ecs_fini 'int (ecs_world_t *)' +| |-ParmVarDecl 0x560468036598 col:18 world 'ecs_world_t *' +| `-FullComment 0x560468137990 +| |-ParagraphComment 0x5604681377b0 +| | |-TextComment 0x560468137760 Text=" Delete a world." +| | `-TextComment 0x560468137780 Text=" This operation deletes the world, and everything it contains." +| |-ParagraphComment 0x560468137800 +| | `-TextComment 0x5604681377d0 Text=" " +| |-ParamCommandComment 0x560468137820 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681378d0 +| | |-TextComment 0x560468137880 Text=" The world to delete." +| | `-TextComment 0x5604681378a0 Text=" " +| `-BlockCommandComment 0x5604681378f0 Name="return" +| `-ParagraphComment 0x560468137950 +| `-TextComment 0x560468137920 Text=" Zero if successful, non-zero if failed." +|-FunctionDecl 0x560468036868 line:4593:6 ecs_is_fini 'bool (const ecs_world_t *)' +| |-ParmVarDecl 0x560468036778 col:24 world 'const ecs_world_t *' +| `-FullComment 0x560468137c10 +| |-ParagraphComment 0x560468137a30 +| | `-TextComment 0x560468137a00 Text=" Returns whether the world is being deleted." +| |-ParagraphComment 0x560468137a80 +| | `-TextComment 0x560468137a50 Text=" " +| |-ParamCommandComment 0x560468137aa0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468137b50 +| | |-TextComment 0x560468137b00 Text=" The world." +| | `-TextComment 0x560468137b20 Text=" " +| `-BlockCommandComment 0x560468137b70 Name="return" +| `-ParagraphComment 0x560468137bd0 +| `-TextComment 0x560468137ba0 Text=" True if being deleted, false if not." +|-FunctionDecl 0x560468036b88 line:4604:6 ecs_atfini 'void (ecs_world_t *, ecs_fini_action_t, void *)' +| |-ParmVarDecl 0x560468036948 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680369e0 col:23 action 'ecs_fini_action_t':'void (*)(ecs_world_t *, void *)' +| |-ParmVarDecl 0x560468036a60 col:11 ctx 'void *' +| `-FullComment 0x560468137ff0 +| |-ParagraphComment 0x560468137d00 +| | |-TextComment 0x560468137c80 Text=" Register action to be executed when world is destroyed." +| | |-TextComment 0x560468137ca0 Text=" Fini actions are typically used when a module needs to clean up before a" +| | `-TextComment 0x560468137cc0 Text=" world shuts down." +| |-ParagraphComment 0x560468137d50 +| | `-TextComment 0x560468137d20 Text=" " +| |-ParamCommandComment 0x560468137d70 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468137e20 +| | |-TextComment 0x560468137dd0 Text=" The world." +| | `-TextComment 0x560468137df0 Text=" " +| |-ParamCommandComment 0x560468137e40 [in] implicitly Param="action" ParamIndex=1 +| | `-ParagraphComment 0x560468137ef0 +| | |-TextComment 0x560468137ea0 Text=" The function to execute." +| | `-TextComment 0x560468137ec0 Text=" " +| `-ParamCommandComment 0x560468137f10 [in] implicitly Param="ctx" ParamIndex=2 +| `-ParagraphComment 0x560468137fa0 +| `-TextComment 0x560468137f70 Text=" Userdata to pass to the function " +|-FunctionDecl 0x560468036e70 line:4635:13 ecs_frame_begin 'float (ecs_world_t *, float)' +| |-ParmVarDecl 0x560468036cd8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468036d58 col:17 delta_time 'float' +| `-FullComment 0x560468138540 +| |-ParagraphComment 0x560468138100 +| | |-TextComment 0x560468138060 Text=" Begin frame. " +| | |-TextComment 0x560468138080 Text=" When an application does not use ecs_progress to control the main loop, it" +| | |-TextComment 0x5604681380a0 Text=" can still use Flecs features such as FPS limiting and time measurements. This" +| | `-TextComment 0x5604681380c0 Text=" operation needs to be invoked whenever a new frame is about to get processed." +| |-ParagraphComment 0x560468138150 +| | `-TextComment 0x560468138120 Text=" Calls to ecs_frame_begin must always be followed by ecs_frame_end." +| |-ParagraphComment 0x560468138220 +| | |-TextComment 0x560468138170 Text=" The function accepts a delta_time parameter, which will get passed to " +| | |-TextComment 0x560468138190 Text=" systems. This value is also used to compute the amount of time the function" +| | |-TextComment 0x5604681381b0 Text=" needs to sleep to ensure it does not exceed the target_fps, when it is set." +| | `-TextComment 0x5604681381d0 Text=" When 0 is provided for delta_time, the time will be measured." +| |-ParagraphComment 0x560468138270 +| | `-TextComment 0x560468138240 Text=" This function should only be ran from the main thread." +| |-ParagraphComment 0x5604681382c0 +| | `-TextComment 0x560468138290 Text=" " +| |-ParamCommandComment 0x5604681382e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468138390 +| | |-TextComment 0x560468138340 Text=" The world." +| | `-TextComment 0x560468138360 Text=" " +| |-ParamCommandComment 0x5604681383b0 [in] implicitly Param="delta_time" ParamIndex=1 +| | `-ParagraphComment 0x560468138460 +| | |-TextComment 0x560468138410 Text=" Time elapsed since the last frame." +| | `-TextComment 0x560468138430 Text=" " +| `-BlockCommandComment 0x560468138480 Name="return" +| `-ParagraphComment 0x5604681384e0 +| `-TextComment 0x5604681384b0 Text=" The provided delta_time, or measured time if 0 was provided." +|-FunctionDecl 0x5604680372b0 line:4646:6 ecs_frame_end 'void (ecs_world_t *)' +| |-ParmVarDecl 0x560468036f58 col:18 world 'ecs_world_t *' +| `-FullComment 0x560468138770 +| |-ParagraphComment 0x560468138630 +| | |-TextComment 0x5604681385b0 Text=" End frame. " +| | |-TextComment 0x5604681385d0 Text=" This operation must be called at the end of the frame, and always after" +| | `-TextComment 0x5604681385f0 Text=" ecs_frame_begin." +| |-ParagraphComment 0x560468138680 +| | `-TextComment 0x560468138650 Text=" " +| `-ParamCommandComment 0x5604681386a0 [in] implicitly Param="world" ParamIndex=0 +| `-ParagraphComment 0x560468138730 +| `-TextComment 0x560468138700 Text=" The world." +|-FunctionDecl 0x560468037530 line:4657:6 ecs_run_post_frame 'void (ecs_world_t *, ecs_fini_action_t, void *)' +| |-ParmVarDecl 0x560468037398 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468037410 col:23 action 'ecs_fini_action_t':'void (*)(ecs_world_t *, void *)' +| |-ParmVarDecl 0x560468037490 col:11 ctx 'void *' +| `-FullComment 0x560468138b50 +| |-ParagraphComment 0x560468138860 +| | |-TextComment 0x5604681387e0 Text=" Register action to be executed once after frame." +| | |-TextComment 0x560468138800 Text=" Post frame actions are typically used for calling operations that cannot be" +| | `-TextComment 0x560468138820 Text=" invoked during iteration, such as changing the number of threads." +| |-ParagraphComment 0x5604681388b0 +| | `-TextComment 0x560468138880 Text=" " +| |-ParamCommandComment 0x5604681388d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468138980 +| | |-TextComment 0x560468138930 Text=" The world." +| | `-TextComment 0x560468138950 Text=" " +| |-ParamCommandComment 0x5604681389a0 [in] implicitly Param="action" ParamIndex=1 +| | `-ParagraphComment 0x560468138a50 +| | |-TextComment 0x560468138a00 Text=" The function to execute." +| | `-TextComment 0x560468138a20 Text=" " +| `-ParamCommandComment 0x560468138a70 [in] implicitly Param="ctx" ParamIndex=2 +| `-ParagraphComment 0x560468138b00 +| `-TextComment 0x560468138ad0 Text=" Userdata to pass to the function " +|-FunctionDecl 0x5604680376b8 line:4669:6 ecs_quit 'void (ecs_world_t *)' +| |-ParmVarDecl 0x560468037628 col:18 world 'ecs_world_t *' +| `-FullComment 0x560468138d80 +| |-ParagraphComment 0x560468138c40 +| | |-TextComment 0x560468138bc0 Text=" Signal exit" +| | |-TextComment 0x560468138be0 Text=" This operation signals that the application should quit. It will cause" +| | `-TextComment 0x560468138c00 Text=" ecs_progress to return false." +| |-ParagraphComment 0x560468138c90 +| | `-TextComment 0x560468138c60 Text=" " +| `-ParamCommandComment 0x560468138cb0 [in] implicitly Param="world" ParamIndex=0 +| `-ParagraphComment 0x560468138d40 +| `-TextComment 0x560468138d10 Text=" The world to quit." +|-FunctionDecl 0x560468037828 line:4677:6 ecs_should_quit 'bool (const ecs_world_t *)' +| |-ParmVarDecl 0x560468037798 col:24 world 'const ecs_world_t *' +| `-FullComment 0x560468138f60 +| |-ParagraphComment 0x560468138e20 +| | `-TextComment 0x560468138df0 Text=" Return whether a quit has been signaled." +| |-ParagraphComment 0x560468138e70 +| | `-TextComment 0x560468138e40 Text=" " +| `-ParamCommandComment 0x560468138e90 [in] implicitly Param="world" ParamIndex=0 +| `-ParagraphComment 0x560468138f20 +| `-TextComment 0x560468138ef0 Text=" The world." +|-FunctionDecl 0x560468037a98 line:4691:16 ecs_measure_frame_time 'void (ecs_world_t *, bool)' +| |-ParmVarDecl 0x560468037908 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468037980 col:10 enable 'bool' +| `-FullComment 0x560468139310 +| |-ParagraphComment 0x560468139050 +| | |-TextComment 0x560468138fd0 Text=" Measure frame time. " +| | |-TextComment 0x560468138ff0 Text=" Frame time measurements measure the total time passed in a single frame, and " +| | `-TextComment 0x560468139010 Text=" how much of that time was spent on systems and on merging." +| |-ParagraphComment 0x5604681390f0 +| | |-TextComment 0x560468139070 Text=" Frame time measurements add a small constant-time overhead to an application." +| | |-TextComment 0x560468139090 Text=" When an application sets a target FPS, frame time measurements are enabled by" +| | `-TextComment 0x5604681390b0 Text=" default." +| |-ParagraphComment 0x560468139140 +| | `-TextComment 0x560468139110 Text=" " +| |-ParamCommandComment 0x560468139160 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468139210 +| | |-TextComment 0x5604681391c0 Text=" The world." +| | `-TextComment 0x5604681391e0 Text=" " +| `-ParamCommandComment 0x560468139230 [in] implicitly Param="enable" ParamIndex=1 +| `-ParagraphComment 0x5604681392c0 +| `-TextComment 0x560468139290 Text=" Whether to enable or disable frame time measuring." +|-FunctionDecl 0x560468037c98 line:4705:16 ecs_measure_system_time 'void (ecs_world_t *, bool)' +| |-ParmVarDecl 0x560468037b88 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468037c00 col:10 enable 'bool' +| `-FullComment 0x560468139690 +| |-ParagraphComment 0x5604681393d0 +| | |-TextComment 0x560468139380 Text=" Measure system time. " +| | `-TextComment 0x5604681393a0 Text=" System time measurements measure the time spent in each system." +| |-ParagraphComment 0x560468139470 +| | |-TextComment 0x5604681393f0 Text=" System time measurements add overhead to every system invocation and " +| | |-TextComment 0x560468139410 Text=" therefore have a small but measurable impact on application performance." +| | `-TextComment 0x560468139430 Text=" System time measurements must be enabled before obtaining system statistics." +| |-ParagraphComment 0x5604681394c0 +| | `-TextComment 0x560468139490 Text=" " +| |-ParamCommandComment 0x5604681394e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468139590 +| | |-TextComment 0x560468139540 Text=" The world." +| | `-TextComment 0x560468139560 Text=" " +| `-ParamCommandComment 0x5604681395b0 [in] implicitly Param="enable" ParamIndex=1 +| `-ParagraphComment 0x560468139640 +| `-TextComment 0x560468139610 Text=" Whether to enable or disable system time measuring." +|-FunctionDecl 0x560468037f18 line:4725:6 ecs_set_target_fps 'void (ecs_world_t *, float)' +| |-ParmVarDecl 0x560468037d88 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468037e08 col:17 fps 'float' +| `-FullComment 0x560468139ad0 +| |-ParagraphComment 0x5604681397a0 +| | |-TextComment 0x560468139700 Text=" Set target frames per second (FPS) for application." +| | |-TextComment 0x560468139720 Text=" Setting the target FPS ensures that ecs_progress is not invoked faster than" +| | |-TextComment 0x560468139740 Text=" the specified FPS. When enabled, ecs_progress tracks the time passed since" +| | `-TextComment 0x560468139760 Text=" the last invocation, and sleeps the remaining time of the frame (if any)." +| |-ParagraphComment 0x560468139810 +| | |-TextComment 0x5604681397c0 Text=" This feature ensures systems are ran at a consistent interval, as well as" +| | `-TextComment 0x5604681397e0 Text=" conserving CPU time by not running systems more often than required." +| |-ParagraphComment 0x5604681398b0 +| | |-TextComment 0x560468139830 Text=" Note that ecs_progress only sleeps if there is time left in the frame. Both" +| | |-TextComment 0x560468139850 Text=" time spent in flecs as time spent outside of flecs are taken into" +| | `-TextComment 0x560468139870 Text=" account." +| |-ParagraphComment 0x560468139900 +| | `-TextComment 0x5604681398d0 Text=" " +| |-ParamCommandComment 0x560468139920 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681399d0 +| | |-TextComment 0x560468139980 Text=" The world." +| | `-TextComment 0x5604681399a0 Text=" " +| `-ParamCommandComment 0x5604681399f0 [in] implicitly Param="fps" ParamIndex=1 +| `-ParagraphComment 0x560468139a80 +| `-TextComment 0x560468139a50 Text=" The target FPS." +|-FunctionDecl 0x560468038158 line:4766:6 ecs_readonly_begin 'bool (ecs_world_t *)' +| |-ParmVarDecl 0x560468038068 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046813a120 +| |-ParagraphComment 0x560468139be0 +| | |-TextComment 0x560468139b40 Text=" Begin readonly mode." +| | |-TextComment 0x560468139b60 Text=" Readonly mode guarantees that no mutations will occur on the world, which" +| | |-TextComment 0x560468139b80 Text=" makes the world safe to access from multiple threads. While the world is in" +| | `-TextComment 0x560468139ba0 Text=" readonly mode, operations are deferred." +| |-ParagraphComment 0x560468139ca0 +| | |-TextComment 0x560468139c00 Text=" Note that while similar to ecs_defer_begin, deferring only does not guarantee" +| | |-TextComment 0x560468139c20 Text=" the world is not mutated. Operations that are not deferred (like creating a" +| | |-TextComment 0x560468139c40 Text=" query) update data structures on the world and are allowed when deferring is" +| | `-TextComment 0x560468139c60 Text=" enabled, but not when the world is in readonly mode." +| |-ParagraphComment 0x560468139cf0 +| | `-TextComment 0x560468139cc0 Text=" A call to ecs_readonly_begin must be followed up with ecs_readonly_end." +| |-ParagraphComment 0x560468139d60 +| | |-TextComment 0x560468139d10 Text=" The ecs_progress() function automatically enables readonly mode while systems" +| | `-TextComment 0x560468139d30 Text=" are executed." +| |-ParagraphComment 0x560468139e00 +| | |-TextComment 0x560468139d80 Text=" When a world has more than one stage, the specific stage must be provided to" +| | |-TextComment 0x560468139da0 Text=" mutating ECS operations. Failing to do so will throw a readonly assert. A" +| | `-TextComment 0x560468139dc0 Text=" world typically has more than one stage when using threads. An example:" +| |-ParagraphComment 0x560468139e70 +| | |-TextComment 0x560468139e20 Text=" ecs_set_stage_count(world, 2);" +| | `-TextComment 0x560468139e40 Text=" ecs_stage_t *stage = ecs_get_stage(world, 1);" +| |-ParagraphComment 0x560468139f10 +| | |-TextComment 0x560468139e90 Text=" ecs_readonly_begin(world);" +| | |-TextComment 0x560468139eb0 Text=" ecs_add(world, e, Tag); // readonly assert" +| | `-TextComment 0x560468139ed0 Text=" ecs_add(stage, e, Tag); // OK" +| |-ParagraphComment 0x560468139f60 +| | `-TextComment 0x560468139f30 Text=" " +| |-ParamCommandComment 0x560468139f80 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813a030 +| | |-TextComment 0x560468139fe0 Text=" The world" +| | `-TextComment 0x56046813a000 Text=" " +| `-BlockCommandComment 0x56046813a050 Name="return" +| `-ParagraphComment 0x56046813a0b0 +| `-TextComment 0x56046813a080 Text=" Whether world is in readonly mode." +|-FunctionDecl 0x560468038568 line:4777:6 ecs_readonly_end 'void (ecs_world_t *)' +| |-ParmVarDecl 0x560468038238 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046813a390 +| |-ParagraphComment 0x56046813a250 +| | |-TextComment 0x56046813a190 Text=" End readonly mode." +| | |-TextComment 0x56046813a1b0 Text=" This operation ends readonly mode, and must be called after " +| | |-TextComment 0x56046813a1d0 Text=" ecs_readonly_begin. Operations that were deferred while the world was in" +| | `-TextComment 0x56046813a210 Text=" readonly mode will be flushed." +| |-ParagraphComment 0x56046813a2a0 +| | `-TextComment 0x56046813a270 Text=" " +| `-ParamCommandComment 0x56046813a2c0 [in] implicitly Param="world" ParamIndex=0 +| `-ParagraphComment 0x56046813a350 +| `-TextComment 0x56046813a320 Text=" The world" +|-FunctionDecl 0x5604680386d8 line:4791:6 ecs_merge 'void (ecs_world_t *)' +| |-ParmVarDecl 0x560468038648 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046813a660 +| |-ParagraphComment 0x56046813a4d0 +| | |-TextComment 0x56046813a400 Text=" Merge world or stage." +| | |-TextComment 0x56046813a420 Text=" When automatic merging is disabled, an application can call this" +| | |-TextComment 0x56046813a440 Text=" operation on either an individual stage, or on the world which will merge" +| | |-TextComment 0x56046813a460 Text=" all stages. This operation may only be called when staging is not enabled" +| | `-TextComment 0x56046813a480 Text=" (either after progress() or after readonly_end())." +| |-ParagraphComment 0x56046813a520 +| | `-TextComment 0x56046813a4f0 Text=" This operation may be called on an already merged stage or world." +| |-ParagraphComment 0x56046813a570 +| | `-TextComment 0x56046813a540 Text=" " +| `-ParamCommandComment 0x56046813a590 [in] implicitly Param="world" ParamIndex=0 +| `-ParagraphComment 0x56046813a620 +| `-TextComment 0x56046813a5f0 Text=" The world." +|-FunctionDecl 0x560468038848 line:4804:6 ecs_defer_begin 'bool (ecs_world_t *)' +| |-ParmVarDecl 0x5604680387b8 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046813a990 +| |-ParagraphComment 0x56046813a750 +| | |-TextComment 0x56046813a6d0 Text=" Defer operations until end of frame. " +| | |-TextComment 0x56046813a6f0 Text=" When this operation is invoked while iterating, operations inbetween the" +| | `-TextComment 0x56046813a710 Text=" defer_begin and defer_end operations are executed at the end of the frame." +| |-ParagraphComment 0x56046813a7a0 +| | `-TextComment 0x56046813a770 Text=" This operation is thread safe." +| |-ParagraphComment 0x56046813a7f0 +| | `-TextComment 0x56046813a7c0 Text=" " +| |-ParamCommandComment 0x56046813a810 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813a8c0 +| | |-TextComment 0x56046813a870 Text=" The world." +| | `-TextComment 0x56046813a890 Text=" " +| `-BlockCommandComment 0x56046813a8e0 Name="return" +| `-ParagraphComment 0x56046813a940 +| `-TextComment 0x56046813a910 Text=" true if world changed from non-deferred mode to deferred mode." +|-FunctionDecl 0x5604680389b8 line:4813:6 ecs_is_deferred 'bool (const ecs_world_t *)' +| |-ParmVarDecl 0x560468038928 col:24 world 'const ecs_world_t *' +| `-FullComment 0x56046813ac10 +| |-ParagraphComment 0x56046813aa30 +| | `-TextComment 0x56046813aa00 Text=" Test if deferring is enabled for current stage." +| |-ParagraphComment 0x56046813aa80 +| | `-TextComment 0x56046813aa50 Text=" " +| |-ParamCommandComment 0x56046813aaa0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813ab50 +| | |-TextComment 0x56046813ab00 Text=" The world." +| | `-TextComment 0x56046813ab20 Text=" " +| `-BlockCommandComment 0x56046813ab70 Name="return" +| `-ParagraphComment 0x56046813abd0 +| `-TextComment 0x56046813aba0 Text=" True if deferred, false if not." +|-FunctionDecl 0x560468038b28 line:4825:6 ecs_defer_end 'bool (ecs_world_t *)' +| |-ParmVarDecl 0x560468038a98 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046813af10 +| |-ParagraphComment 0x56046813acd0 +| | |-TextComment 0x56046813ac80 Text=" End block of operations to defer. " +| | `-TextComment 0x56046813aca0 Text=" See defer_begin." +| |-ParagraphComment 0x56046813ad20 +| | `-TextComment 0x56046813acf0 Text=" This operation is thread safe." +| |-ParagraphComment 0x56046813ad70 +| | `-TextComment 0x56046813ad40 Text=" " +| |-ParamCommandComment 0x56046813ad90 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813ae40 +| | |-TextComment 0x56046813adf0 Text=" The world." +| | `-TextComment 0x56046813ae10 Text=" " +| `-BlockCommandComment 0x56046813ae60 Name="return" +| `-ParagraphComment 0x56046813aec0 +| `-TextComment 0x56046813ae90 Text=" true if world changed from deferred mode to non-deferred mode." +|-FunctionDecl 0x560468038c98 line:4838:6 ecs_defer_suspend 'void (ecs_world_t *)' +| |-ParmVarDecl 0x560468038c08 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046813b1b0 +| |-ParagraphComment 0x56046813b000 +| | |-TextComment 0x56046813af80 Text=" Suspend deferring but do not flush queue." +| | |-TextComment 0x56046813afa0 Text=" This operation can be used to do an undeferred operation while not flushing" +| | `-TextComment 0x56046813afc0 Text=" the operations in the queue." +| |-ParagraphComment 0x56046813b070 +| | |-TextComment 0x56046813b020 Text=" An application should invoke ecs_defer_resume before ecs_defer_end is called." +| | `-TextComment 0x56046813b040 Text=" The operation may only be called when deferring is enabled." +| |-ParagraphComment 0x56046813b0c0 +| | `-TextComment 0x56046813b090 Text=" " +| `-ParamCommandComment 0x56046813b0e0 [in] implicitly Param="world" ParamIndex=0 +| `-ParagraphComment 0x56046813b170 +| `-TextComment 0x56046813b140 Text=" The world." +|-FunctionDecl 0x560468038e08 line:4847:6 ecs_defer_resume 'void (ecs_world_t *)' +| |-ParmVarDecl 0x560468038d78 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046813b3b0 +| |-ParagraphComment 0x56046813b270 +| | |-TextComment 0x56046813b220 Text=" Resume deferring." +| | `-TextComment 0x56046813b240 Text=" See ecs_defer_suspend." +| |-ParagraphComment 0x56046813b2c0 +| | `-TextComment 0x56046813b290 Text=" " +| `-ParamCommandComment 0x56046813b2e0 [in] implicitly Param="world" ParamIndex=0 +| `-ParagraphComment 0x56046813b370 +| `-TextComment 0x56046813b340 Text=" The world." +|-FunctionDecl 0x560468038ff8 line:4867:6 ecs_set_automerge 'void (ecs_world_t *, bool)' +| |-ParmVarDecl 0x560468038ee8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468038f60 col:10 automerge 'bool' +| `-FullComment 0x56046813b820 +| |-ParagraphComment 0x56046813b4c0 +| | |-TextComment 0x56046813b420 Text=" Enable/disable automerging for world or stage." +| | |-TextComment 0x56046813b440 Text=" When automerging is enabled, staged data will automatically be merged with" +| | |-TextComment 0x56046813b460 Text=" the world when staging ends. This happens at the end of progress(), at a" +| | `-TextComment 0x56046813b480 Text=" sync point or when readonly_end() is called." +| |-ParagraphComment 0x56046813b560 +| | |-TextComment 0x56046813b4e0 Text=" Applications can exercise more control over when data from a stage is merged" +| | |-TextComment 0x56046813b500 Text=" by disabling automerging. This requires an application to explicitly call" +| | `-TextComment 0x56046813b520 Text=" merge() on the stage." +| |-ParagraphComment 0x56046813b600 +| | |-TextComment 0x56046813b580 Text=" When this function is invoked on the world, it sets all current stages to" +| | |-TextComment 0x56046813b5a0 Text=" the provided value and sets the default for new stages. When this function is" +| | `-TextComment 0x56046813b5c0 Text=" invoked on a stage, automerging is only set for that specific stage." +| |-ParagraphComment 0x56046813b650 +| | `-TextComment 0x56046813b620 Text=" " +| |-ParamCommandComment 0x56046813b670 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813b720 +| | |-TextComment 0x56046813b6d0 Text=" The world." +| | `-TextComment 0x56046813b6f0 Text=" " +| `-ParamCommandComment 0x56046813b740 [in] implicitly Param="automerge" ParamIndex=1 +| `-ParagraphComment 0x56046813b7d0 +| `-TextComment 0x56046813b7a0 Text=" Whether to enable or disable automerging." +|-FunctionDecl 0x560468039278 line:4885:6 ecs_set_stage_count 'void (ecs_world_t *, int32_t)' +| |-ParmVarDecl 0x5604680390e8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468039160 col:13 stages 'int32_t':'int' +| `-FullComment 0x56046813bc20 +| |-ParagraphComment 0x56046813b960 +| | |-TextComment 0x56046813b890 Text=" Configure world to have N stages." +| | |-TextComment 0x56046813b8b0 Text=" This initializes N stages, which allows applications to defer operations to" +| | |-TextComment 0x56046813b8d0 Text=" multiple isolated defer queues. This is typically used for applications with" +| | |-TextComment 0x56046813b8f0 Text=" multiple threads, where each thread gets its own queue, and commands are" +| | `-TextComment 0x56046813b910 Text=" merged when threads are synchronized." +| |-ParagraphComment 0x56046813ba00 +| | |-TextComment 0x56046813b980 Text=" Note that the ecs_set_threads function already creates the appropriate" +| | |-TextComment 0x56046813b9a0 Text=" number of stages. The set_stage_count() operation is useful for applications that" +| | `-TextComment 0x56046813b9c0 Text=" want to manage their own stages and/or threads." +| |-ParagraphComment 0x56046813ba50 +| | `-TextComment 0x56046813ba20 Text=" " +| |-ParamCommandComment 0x56046813ba70 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813bb20 +| | |-TextComment 0x56046813bad0 Text=" The world." +| | `-TextComment 0x56046813baf0 Text=" " +| `-ParamCommandComment 0x56046813bb40 [in] implicitly Param="stages" ParamIndex=1 +| `-ParagraphComment 0x56046813bbd0 +| `-TextComment 0x56046813bba0 Text=" The number of stages." +|-FunctionDecl 0x560468039458 line:4896:9 ecs_get_stage_count 'int32_t (const ecs_world_t *)' +| |-ParmVarDecl 0x560468039368 col:24 world 'const ecs_world_t *' +| `-FullComment 0x56046813bec0 +| |-ParagraphComment 0x56046813bce0 +| | |-TextComment 0x56046813bc90 Text=" Get number of configured stages." +| | `-TextComment 0x56046813bcb0 Text=" Return number of stages set by ecs_set_stage_count." +| |-ParagraphComment 0x56046813bd30 +| | `-TextComment 0x56046813bd00 Text=" " +| |-ParamCommandComment 0x56046813bd50 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813be00 +| | |-TextComment 0x56046813bdb0 Text=" The world." +| | `-TextComment 0x56046813bdd0 Text=" " +| `-BlockCommandComment 0x56046813be20 Name="return" +| `-ParagraphComment 0x56046813be80 +| `-TextComment 0x56046813be50 Text=" The number of stages used for threading." +|-FunctionDecl 0x560468039860 line:4907:9 ecs_get_stage_id 'int32_t (const ecs_world_t *)' +| |-ParmVarDecl 0x5604680397d0 col:24 world 'const ecs_world_t *' +| `-FullComment 0x56046813c190 +| |-ParagraphComment 0x56046813bfb0 +| | |-TextComment 0x56046813bf30 Text=" Get current stage id." +| | |-TextComment 0x56046813bf50 Text=" The stage id can be used by an application to learn about which stage it is" +| | `-TextComment 0x56046813bf70 Text=" using, which typically corresponds with the worker thread id." +| |-ParagraphComment 0x56046813c000 +| | `-TextComment 0x56046813bfd0 Text=" " +| |-ParamCommandComment 0x56046813c020 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813c0d0 +| | |-TextComment 0x56046813c080 Text=" The world." +| | `-TextComment 0x56046813c0a0 Text=" " +| `-BlockCommandComment 0x56046813c0f0 Name="return" +| `-ParagraphComment 0x56046813c150 +| `-TextComment 0x56046813c120 Text=" The stage id." +|-FunctionDecl 0x560468039ad8 line:4926:14 ecs_get_stage 'ecs_world_t *(const ecs_world_t *, int32_t)' +| |-ParmVarDecl 0x560468039948 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680399c0 col:13 stage_id 'int32_t':'int' +| `-FullComment 0x56046813c670 +| |-ParagraphComment 0x56046813c2c0 +| | |-TextComment 0x56046813c220 Text=" Get stage-specific world pointer." +| | |-TextComment 0x56046813c240 Text=" Flecs threads can safely invoke the API as long as they have a private " +| | |-TextComment 0x56046813c260 Text=" context to write to, also referred to as the stage. This function returns a" +| | `-TextComment 0x56046813c280 Text=" pointer to a stage, disguised as a world pointer." +| |-ParagraphComment 0x56046813c3b0 +| | |-TextComment 0x56046813c2e0 Text=" Note that this function does not(!) create a new world. It simply wraps the" +| | |-TextComment 0x56046813c300 Text=" existing world in a thread-specific context, which the API knows how to" +| | |-TextComment 0x56046813c320 Text=" unwrap. The reason the stage is returned as an ecs_world_t is so that it" +| | |-TextComment 0x56046813c340 Text=" can be passed transparently to the existing API functions, vs. having to " +| | `-TextComment 0x56046813c360 Text=" create a dediated API for threading." +| |-ParagraphComment 0x56046813c400 +| | `-TextComment 0x56046813c3d0 Text=" " +| |-ParamCommandComment 0x56046813c420 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813c4d0 +| | |-TextComment 0x56046813c480 Text=" The world." +| | `-TextComment 0x56046813c4a0 Text=" " +| |-ParamCommandComment 0x56046813c4f0 [in] implicitly Param="stage_id" ParamIndex=1 +| | `-ParagraphComment 0x56046813c5a0 +| | |-TextComment 0x56046813c550 Text=" The index of the stage to retrieve." +| | `-TextComment 0x56046813c570 Text=" " +| `-BlockCommandComment 0x56046813c5c0 Name="return" +| `-ParagraphComment 0x56046813c620 +| `-TextComment 0x56046813c5f0 Text=" A thread-specific pointer to the world. " +|-FunctionDecl 0x560468039c58 line:4938:6 ecs_stage_is_readonly 'bool (const ecs_world_t *)' +| |-ParmVarDecl 0x560468039bc8 col:24 world 'const ecs_world_t *' +| `-FullComment 0x56046813c940 +| |-ParagraphComment 0x56046813c760 +| | |-TextComment 0x56046813c6e0 Text=" Test whether the current world is readonly." +| | |-TextComment 0x56046813c700 Text=" This function allows the code to test whether the currently used world" +| | `-TextComment 0x56046813c720 Text=" is readonly or whether it allows for writing. " +| |-ParagraphComment 0x56046813c7b0 +| | `-TextComment 0x56046813c780 Text=" " +| |-ParamCommandComment 0x56046813c7d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813c880 +| | |-TextComment 0x56046813c830 Text=" A pointer to a stage or the world." +| | `-TextComment 0x56046813c850 Text=" " +| `-BlockCommandComment 0x56046813c8a0 Name="return" +| `-ParagraphComment 0x56046813c900 +| `-TextComment 0x56046813c8d0 Text=" True if the world or stage is readonly." +|-FunctionDecl 0x560468039e28 line:4960:14 ecs_async_stage_new 'ecs_world_t *(ecs_world_t *)' +| |-ParmVarDecl 0x560468039d38 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046813cdd0 +| |-ParagraphComment 0x56046813ca50 +| | |-TextComment 0x56046813c9b0 Text=" Create asynchronous stage." +| | |-TextComment 0x56046813c9d0 Text=" An asynchronous stage can be used to asynchronously queue operations for" +| | |-TextComment 0x56046813c9f0 Text=" later merging with the world. An asynchronous stage is similar to a regular" +| | `-TextComment 0x56046813ca10 Text=" stage, except that it does not allow reading from the world." +| |-ParagraphComment 0x56046813cb10 +| | |-TextComment 0x56046813ca70 Text=" Asynchronous stages are never merged automatically, and must therefore be" +| | |-TextComment 0x56046813ca90 Text=" manually merged with the ecs_merge function. It is not necessary to call" +| | |-TextComment 0x56046813cab0 Text=" defer_begin or defer_end before and after enqueuing commands, as an " +| | `-TextComment 0x56046813cad0 Text=" asynchronous stage unconditionally defers operations." +| |-ParagraphComment 0x56046813cb80 +| | |-TextComment 0x56046813cb30 Text=" The application must ensure that no commands are added to the stage while the" +| | `-TextComment 0x56046813cb50 Text=" stage is being merged." +| |-ParagraphComment 0x56046813cbd0 +| | `-TextComment 0x56046813cba0 Text=" An asynchronous stage must be cleaned up by ecs_async_stage_free. " +| |-ParagraphComment 0x56046813cc20 +| | `-TextComment 0x56046813cbf0 Text=" " +| |-ParamCommandComment 0x56046813cc40 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813ccf0 +| | |-TextComment 0x56046813cca0 Text=" The world." +| | `-TextComment 0x56046813ccc0 Text=" " +| `-BlockCommandComment 0x56046813cd10 Name="return" +| `-ParagraphComment 0x56046813cd70 +| `-TextComment 0x56046813cd40 Text=" The stage." +|-FunctionDecl 0x560468039f98 line:4970:6 ecs_async_stage_free 'void (ecs_world_t *)' +| |-ParmVarDecl 0x560468039f08 col:18 stage 'ecs_world_t *' +| `-FullComment 0x56046813d000 +| |-ParagraphComment 0x56046813cec0 +| | |-TextComment 0x56046813ce40 Text=" Free asynchronous stage." +| | |-TextComment 0x56046813ce60 Text=" The provided stage must be an asynchronous stage. If a non-asynchronous stage" +| | `-TextComment 0x56046813ce80 Text=" is provided, the operation will fail." +| |-ParagraphComment 0x56046813cf10 +| | `-TextComment 0x56046813cee0 Text=" " +| `-ParamCommandComment 0x56046813cf30 [in] implicitly Param="stage" ParamIndex=0 +| `-ParagraphComment 0x56046813cfc0 +| `-TextComment 0x56046813cf90 Text=" The stage to free." +|-FunctionDecl 0x56046803a108 line:4980:6 ecs_stage_is_async 'bool (ecs_world_t *)' +| |-ParmVarDecl 0x56046803a078 col:18 stage 'ecs_world_t *' +| `-FullComment 0x56046813d2a0 +| |-ParagraphComment 0x56046813d0a0 +| | `-TextComment 0x56046813d070 Text=" Test whether provided stage is asynchronous." +| |-ParagraphComment 0x56046813d0f0 +| | `-TextComment 0x56046813d0c0 Text=" " +| |-ParamCommandComment 0x56046813d110 [in] implicitly Param="stage" ParamIndex=0 +| | `-ParagraphComment 0x56046813d1c0 +| | |-TextComment 0x56046813d170 Text=" The stage." +| | `-TextComment 0x56046813d190 Text=" " +| `-BlockCommandComment 0x56046813d1e0 Name="return" +| `-ParagraphComment 0x56046813d260 +| |-TextComment 0x56046813d210 Text=" True when the stage is asynchronous, false for a regular stage or " +| `-TextComment 0x56046813d230 Text=" world." +|-FunctionDecl 0x56046803a360 line:4998:6 ecs_set_context 'void (ecs_world_t *, void *)' +| |-ParmVarDecl 0x56046803a248 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803a2c8 col:11 ctx 'void *' +| `-FullComment 0x56046813d5a0 +| |-ParagraphComment 0x56046813d390 +| | |-TextComment 0x56046813d310 Text=" Set a world context." +| | |-TextComment 0x56046813d330 Text=" This operation allows an application to register custom data with a world" +| | `-TextComment 0x56046813d350 Text=" that can be accessed anywhere where the application has the world." +| |-ParagraphComment 0x56046813d3e0 +| | `-TextComment 0x56046813d3b0 Text=" " +| |-ParamCommandComment 0x56046813d400 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813d4b0 +| | |-TextComment 0x56046813d460 Text=" The world." +| | `-TextComment 0x56046813d480 Text=" " +| `-ParamCommandComment 0x56046813d4d0 [in] implicitly Param="ctx" ParamIndex=1 +| `-ParagraphComment 0x56046813d560 +| `-TextComment 0x56046813d530 Text=" A pointer to a user defined structure." +|-FunctionDecl 0x56046803a540 line:5010:7 ecs_get_context 'void *(const ecs_world_t *)' +| |-ParmVarDecl 0x56046803a448 col:24 world 'const ecs_world_t *' +| `-FullComment 0x56046813d860 +| |-ParagraphComment 0x56046813d660 +| | |-TextComment 0x56046813d610 Text=" Get the world context." +| | `-TextComment 0x56046813d630 Text=" This operation retrieves a previously set world context." +| |-ParagraphComment 0x56046813d6b0 +| | `-TextComment 0x56046813d680 Text=" " +| |-ParamCommandComment 0x56046813d6d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813d780 +| | |-TextComment 0x56046813d730 Text=" The world." +| | `-TextComment 0x56046813d750 Text=" " +| `-BlockCommandComment 0x56046813d7a0 Name="return" +| `-ParagraphComment 0x56046813d820 +| |-TextComment 0x56046813d7d0 Text=" The context set with ecs_set_context. If no context was set, the" +| `-TextComment 0x56046813d7f0 Text=" function returns NULL." +|-FunctionDecl 0x56046803aa60 line:5020:25 ecs_get_world_info 'const ecs_world_info_t *(const ecs_world_t *)' +| |-ParmVarDecl 0x56046803a650 col:24 world 'const ecs_world_t *' +| `-FullComment 0x56046813db00 +| |-ParagraphComment 0x56046813d900 +| | `-TextComment 0x56046813d8d0 Text=" Get world info." +| |-ParagraphComment 0x56046813d950 +| | `-TextComment 0x56046813d920 Text=" " +| |-ParamCommandComment 0x56046813d970 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813da20 +| | |-TextComment 0x56046813d9d0 Text=" The world." +| | `-TextComment 0x56046813d9f0 Text=" " +| `-BlockCommandComment 0x56046813da40 Name="return" +| `-ParagraphComment 0x56046813dac0 +| |-TextComment 0x56046813da70 Text=" Pointer to the world info. This pointer will remain valid for as long" +| `-TextComment 0x56046813da90 Text=" as the world is valid." +|-FunctionDecl 0x56046803ac58 line:5032:6 ecs_dim 'void (ecs_world_t *, int32_t)' +| |-ParmVarDecl 0x56046803ab48 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803abc0 col:13 entity_count 'int32_t':'int' +| `-FullComment 0x56046813de20 +| |-ParagraphComment 0x56046813dc10 +| | |-TextComment 0x56046813db70 Text=" Dimension the world for a specified number of entities." +| | |-TextComment 0x56046813db90 Text=" This operation will preallocate memory in the world for the specified number" +| | |-TextComment 0x56046813dbb0 Text=" of entities. Specifying a number lower than the current number of entities in" +| | `-TextComment 0x56046813dbd0 Text=" the world will have no effect." +| |-ParagraphComment 0x56046813dc60 +| | `-TextComment 0x56046813dc30 Text=" " +| |-ParamCommandComment 0x56046813dc80 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813dd30 +| | |-TextComment 0x56046813dce0 Text=" The world." +| | `-TextComment 0x56046813dd00 Text=" " +| `-ParamCommandComment 0x56046813dd50 [in] implicitly Param="entity_count" ParamIndex=1 +| `-ParagraphComment 0x56046813dde0 +| `-TextComment 0x56046813ddb0 Text=" The number of entities to preallocate." +|-FunctionDecl 0x56046803af58 line:5052:6 ecs_set_entity_range 'void (ecs_world_t *, ecs_entity_t, ecs_entity_t)' +| |-ParmVarDecl 0x56046803ad48 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803adc0 col:18 id_start 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046803ae38 col:18 id_end 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046813e330 +| |-ParagraphComment 0x56046813df60 +| | |-TextComment 0x56046813de90 Text=" Set a range for issueing new entity ids." +| | |-TextComment 0x56046813deb0 Text=" This function constrains the entity identifiers returned by ecs_new to the " +| | |-TextComment 0x56046813ded0 Text=" specified range. This operation can be used to ensure that multiple processes" +| | |-TextComment 0x56046813def0 Text=" can run in the same simulation without requiring a central service that" +| | `-TextComment 0x56046813df10 Text=" coordinates issueing identifiers." +| |-ParagraphComment 0x56046813e020 +| | |-TextComment 0x56046813df80 Text=" If id_end is set to 0, the range is infinite. If id_end is set to a non-zero" +| | |-TextComment 0x56046813dfa0 Text=" value, it has to be larger than id_start. If id_end is set and ecs_new is" +| | |-TextComment 0x56046813dfc0 Text=" invoked after an id is issued that is equal to id_end, the application will" +| | `-TextComment 0x56046813dfe0 Text=" abort." +| |-ParagraphComment 0x56046813e070 +| | `-TextComment 0x56046813e040 Text=" " +| |-ParamCommandComment 0x56046813e090 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813e140 +| | |-TextComment 0x56046813e0f0 Text=" The world." +| | `-TextComment 0x56046813e110 Text=" " +| |-ParamCommandComment 0x56046813e160 [in] implicitly Param="id_start" ParamIndex=1 +| | `-ParagraphComment 0x56046813e230 +| | |-TextComment 0x56046813e1c0 Text=" The start of the range." +| | `-TextComment 0x56046813e1e0 Text=" " +| `-ParamCommandComment 0x56046813e250 [in] implicitly Param="id_end" ParamIndex=2 +| `-ParagraphComment 0x56046813e2e0 +| `-TextComment 0x56046813e2b0 Text=" The end of the range." +|-FunctionDecl 0x56046803b1d8 line:5068:6 ecs_enable_range_check 'bool (ecs_world_t *, bool)' +| |-ParmVarDecl 0x56046803b048 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803b0c0 col:10 enable 'bool' +| `-FullComment 0x56046813e730 +| |-ParagraphComment 0x56046813e470 +| | |-TextComment 0x56046813e3a0 Text=" Enable/disable range limits." +| | |-TextComment 0x56046813e3c0 Text=" When an application is both a receiver of range-limited entities and a" +| | |-TextComment 0x56046813e3e0 Text=" producer of range-limited entities, range checking needs to be temporarily" +| | |-TextComment 0x56046813e400 Text=" disabled when inserting received entities. Range checking is disabled on a " +| | `-TextComment 0x56046813e420 Text=" stage, so setting this value is thread safe." +| |-ParagraphComment 0x56046813e4c0 +| | `-TextComment 0x56046813e490 Text=" " +| |-ParamCommandComment 0x56046813e4e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813e590 +| | |-TextComment 0x56046813e540 Text=" The world." +| | `-TextComment 0x56046813e560 Text=" " +| |-ParamCommandComment 0x56046813e5b0 [in] implicitly Param="enable" ParamIndex=1 +| | `-ParagraphComment 0x56046813e660 +| | |-TextComment 0x56046813e610 Text=" True if range checking should be enabled, false to disable." +| | `-TextComment 0x56046813e630 Text=" " +| `-BlockCommandComment 0x56046813e680 Name="return" +| `-ParagraphComment 0x56046813e6e0 +| `-TextComment 0x56046813e6b0 Text=" The previous value." +|-FunctionDecl 0x56046803b458 line:5086:6 ecs_run_aperiodic 'void (ecs_world_t *, ecs_flags32_t)' +| |-ParmVarDecl 0x56046803b2c8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803b340 col:19 flags 'ecs_flags32_t':'unsigned int' +| `-FullComment 0x56046813eb30 +| |-ParagraphComment 0x56046813e870 +| | |-TextComment 0x56046813e7a0 Text=" Force aperiodic actions." +| | |-TextComment 0x56046813e7c0 Text=" The world may delay certain operations until they are necessary for the" +| | |-TextComment 0x56046813e7e0 Text=" application to function correctly. This may cause observable side effects" +| | |-TextComment 0x56046813e800 Text=" such as delayed triggering of events, which can be inconvenient when for" +| | `-TextComment 0x56046813e820 Text=" example running a test suite." +| |-ParagraphComment 0x56046813e910 +| | |-TextComment 0x56046813e890 Text=" The flags parameter specifies which aperiodic actions to run. Specify 0 to" +| | |-TextComment 0x56046813e8b0 Text=" run all actions. Supported flags start with 'EcsAperiodic'. Flags identify" +| | `-TextComment 0x56046813e8d0 Text=" internal mechanisms and may change unannounced." +| |-ParagraphComment 0x56046813e960 +| | `-TextComment 0x56046813e930 Text=" " +| |-ParamCommandComment 0x56046813e980 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813ea30 +| | |-TextComment 0x56046813e9e0 Text=" The world." +| | `-TextComment 0x56046813ea00 Text=" " +| `-ParamCommandComment 0x56046813ea50 [in] implicitly Param="flags" ParamIndex=1 +| `-ParagraphComment 0x56046813eae0 +| `-TextComment 0x56046813eab0 Text=" The flags specifying which actions to run." +|-FunctionDecl 0x56046803b918 line:5124:9 ecs_delete_empty_tables 'int32_t (ecs_world_t *, ecs_id_t, uint16_t, uint16_t, int32_t, double)' +| |-ParmVarDecl 0x56046803b548 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803b5c0 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x56046803b638 col:14 clear_generation 'uint16_t':'unsigned short' +| |-ParmVarDecl 0x56046803b6b0 col:14 delete_generation 'uint16_t':'unsigned short' +| |-ParmVarDecl 0x56046803b728 col:13 min_id_count 'int32_t':'int' +| |-ParmVarDecl 0x56046803b7a8 col:12 time_budget_seconds 'double' +| `-FullComment 0x56046813f5d0 +| |-ParagraphComment 0x56046813ec70 +| | |-TextComment 0x56046813eba0 Text=" Cleanup empty tables." +| | |-TextComment 0x56046813ebc0 Text=" This operation cleans up empty tables that meet certain conditions. Having" +| | |-TextComment 0x56046813ebe0 Text=" large amounts of empty tables does not negatively impact performance of the" +| | |-TextComment 0x56046813ec00 Text=" ECS, but can take up considerable amounts of memory, especially in " +| | `-TextComment 0x56046813ec20 Text=" applications with many components, and many components per entity." +| |-ParagraphComment 0x56046813ed10 +| | |-TextComment 0x56046813ec90 Text=" The generation specifies the minimum number of times this operation has" +| | |-TextComment 0x56046813ecb0 Text=" to be called before an empty table is cleaned up. If a table becomes non" +| | `-TextComment 0x56046813ecd0 Text=" empty, the generation is reset." +| |-ParagraphComment 0x56046813edd0 +| | |-TextComment 0x56046813ed30 Text=" The operation allows for both a "clear" generation and a "delete"" +| | |-TextComment 0x56046813ed50 Text=" generation. When the clear generation is reached, the table's " +| | |-TextComment 0x56046813ed70 Text=" resources are freed (like component arrays) but the table itself is not" +| | `-TextComment 0x56046813ed90 Text=" deleted. When the delete generation is reached, the empty table is deleted." +| |-ParagraphComment 0x56046813ee70 +| | |-TextComment 0x56046813edf0 Text=" By specifying a non-zero id the cleanup logic can be limited to tables with" +| | |-TextComment 0x56046813ee10 Text=" a specific (component) id. The operation will only increase the generation" +| | `-TextComment 0x56046813ee30 Text=" count of matching tables." +| |-ParagraphComment 0x56046813ef10 +| | |-TextComment 0x56046813ee90 Text=" The min_id_count specifies a lower bound for the number of components a table" +| | |-TextComment 0x56046813eeb0 Text=" should have. Often the more components a table has, the more specific it is " +| | `-TextComment 0x56046813eed0 Text=" and therefore less likely to be reused." +| |-ParagraphComment 0x56046813ef60 +| | `-TextComment 0x56046813ef30 Text=" The time budget specifies how long the operation should take at most." +| |-ParagraphComment 0x56046813efb0 +| | `-TextComment 0x56046813ef80 Text=" " +| |-ParamCommandComment 0x56046813efd0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046813f080 +| | |-TextComment 0x56046813f030 Text=" The world." +| | `-TextComment 0x56046813f050 Text=" " +| |-ParamCommandComment 0x56046813f0a0 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x56046813f150 +| | |-TextComment 0x56046813f100 Text=" Optional component filter for the tables to evaluate." +| | `-TextComment 0x56046813f120 Text=" " +| |-ParamCommandComment 0x56046813f170 [in] implicitly Param="clear_generation" ParamIndex=2 +| | `-ParagraphComment 0x56046813f230 +| | |-TextComment 0x56046813f1e0 Text=" Free table data when generation > clear_generation." +| | `-TextComment 0x56046813f200 Text=" " +| |-ParamCommandComment 0x56046813f250 [in] implicitly Param="delete_generation" ParamIndex=3 +| | `-ParagraphComment 0x56046813f310 +| | |-TextComment 0x56046813f2c0 Text=" Delete table when generation > delete_generation." +| | `-TextComment 0x56046813f2e0 Text=" " +| |-ParamCommandComment 0x56046813f330 [in] implicitly Param="min_id_count" ParamIndex=4 +| | `-ParagraphComment 0x56046813f3e0 +| | |-TextComment 0x56046813f390 Text=" Minimum number of component ids the table should have." +| | `-TextComment 0x56046813f3b0 Text=" " +| |-ParamCommandComment 0x56046813f400 [in] implicitly Param="time_budget_seconds" ParamIndex=5 +| | `-ParagraphComment 0x56046813f4c0 +| | |-TextComment 0x56046813f470 Text=" Amount of time operation is allowed to spend." +| | `-TextComment 0x56046813f490 Text=" " +| `-BlockCommandComment 0x56046813f4e0 Name="return" +| `-ParagraphComment 0x56046813f540 +| `-TextComment 0x56046813f510 Text=" Number of deleted tables." +|-FunctionDecl 0x56046803bce8 line:5138:20 ecs_get_world 'const ecs_world_t *(const ecs_poly_t *)' +| |-ParmVarDecl 0x56046803bbf0 col:23 poly 'const ecs_poly_t *' +| `-FullComment 0x56046813f850 +| |-ParagraphComment 0x56046813f670 +| | `-TextComment 0x56046813f640 Text=" Get world from poly." +| |-ParagraphComment 0x56046813f6c0 +| | `-TextComment 0x56046813f690 Text=" " +| |-ParamCommandComment 0x56046813f6e0 [in] implicitly Param="poly" ParamIndex=0 +| | `-ParagraphComment 0x56046813f790 +| | |-TextComment 0x56046813f740 Text=" A pointer to a poly object." +| | `-TextComment 0x56046813f760 Text=" " +| `-BlockCommandComment 0x56046813f7b0 Name="return" +| `-ParagraphComment 0x56046813f810 +| `-TextComment 0x56046813f7e0 Text=" The world." +|-FunctionDecl 0x56046803be88 line:5147:14 ecs_get_entity 'ecs_entity_t (const ecs_poly_t *)' +| |-ParmVarDecl 0x56046803bdc8 col:23 poly 'const ecs_poly_t *' +| `-FullComment 0x56046813fad0 +| |-ParagraphComment 0x56046813f8f0 +| | `-TextComment 0x56046813f8c0 Text=" Get entity from poly." +| |-ParagraphComment 0x56046813f940 +| | `-TextComment 0x56046813f910 Text=" " +| |-ParamCommandComment 0x56046813f960 [in] implicitly Param="poly" ParamIndex=0 +| | `-ParagraphComment 0x56046813fa10 +| | |-TextComment 0x56046813f9c0 Text=" A pointer to a poly object." +| | `-TextComment 0x56046813f9e0 Text=" " +| `-BlockCommandComment 0x56046813fa30 Name="return" +| `-ParagraphComment 0x56046813fa90 +| `-TextComment 0x56046813fa60 Text=" Entity associated with the poly object." +|-FunctionDecl 0x56046803c0f8 line:5161:6 _ecs_poly_is 'bool (const ecs_poly_t *, int32_t)' +| |-ParmVarDecl 0x56046803bf68 col:23 object 'const ecs_poly_t *' +| |-ParmVarDecl 0x56046803bfe0 col:13 type 'int32_t':'int' +| `-FullComment 0x56046813fed0 +| |-ParagraphComment 0x56046813fbc0 +| | |-TextComment 0x56046813fb40 Text=" Test if pointer is of specified type." +| | |-TextComment 0x56046813fb60 Text=" Usage:" +| | `-TextComment 0x56046813fb80 Text=" ecs_poly_is(ptr, ecs_world_t)" +| |-ParagraphComment 0x56046813fc10 +| | `-TextComment 0x56046813fbe0 Text=" This operation only works for poly types." +| |-ParagraphComment 0x56046813fc60 +| | `-TextComment 0x56046813fc30 Text=" " +| |-ParamCommandComment 0x56046813fc80 [in] implicitly Param="object" ParamIndex=0 +| | `-ParagraphComment 0x56046813fd30 +| | |-TextComment 0x56046813fce0 Text=" The object to test." +| | `-TextComment 0x56046813fd00 Text=" " +| |-ParamCommandComment 0x56046813fd50 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x56046813fe00 +| | |-TextComment 0x56046813fdb0 Text=" The id of the type." +| | `-TextComment 0x56046813fdd0 Text=" " +| `-BlockCommandComment 0x56046813fe20 Name="return" +| `-ParagraphComment 0x56046813fe80 +| `-TextComment 0x56046813fe50 Text=" True if the pointer is of the specified type." +|-FunctionDecl 0x56046803c378 line:5176:10 ecs_make_pair 'ecs_id_t (ecs_entity_t, ecs_entity_t)' +| |-ParmVarDecl 0x56046803c1e8 col:18 first 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046803c260 col:18 second 'ecs_entity_t':'unsigned long' +| `-FullComment 0x5604681401d0 +| |-ParagraphComment 0x56046813ffc0 +| | |-TextComment 0x56046813ff40 Text=" Make a pair id." +| | |-TextComment 0x56046813ff60 Text=" This function is equivalent to using the ecs_pair macro, and is added for" +| | `-TextComment 0x56046813ff80 Text=" convenience to make it easier for non C/C++ bindings to work with pairs." +| |-ParagraphComment 0x560468140010 +| | `-TextComment 0x56046813ffe0 Text=" " +| |-ParamCommandComment 0x560468140030 [in] implicitly Param="first" ParamIndex=0 +| | `-ParagraphComment 0x5604681400e0 +| | |-TextComment 0x560468140090 Text=" The first element of the pair of the pair." +| | `-TextComment 0x5604681400b0 Text=" " +| `-ParamCommandComment 0x560468140100 [in] implicitly Param="second" ParamIndex=1 +| `-ParagraphComment 0x560468140190 +| `-TextComment 0x560468140160 Text=" The target of the pair." +|-FunctionDecl 0x56046803c618 line:5205:14 ecs_new_id 'ecs_entity_t (ecs_world_t *)' +| |-ParmVarDecl 0x56046803c528 col:18 world 'ecs_world_t *' +| `-FullComment 0x560468140500 +| |-ParagraphComment 0x560468140320 +| | |-TextComment 0x560468140280 Text=" Create new entity id." +| | |-TextComment 0x5604681402a0 Text=" This operation returns an unused entity id. This operation is guaranteed to" +| | |-TextComment 0x5604681402c0 Text=" return an empty entity as it does not use values set by ecs_set_scope or" +| | `-TextComment 0x5604681402e0 Text=" ecs_set_with." +| |-ParagraphComment 0x560468140370 +| | `-TextComment 0x560468140340 Text=" " +| |-ParamCommandComment 0x560468140390 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468140440 +| | |-TextComment 0x5604681403f0 Text=" The world." +| | `-TextComment 0x560468140410 Text=" " +| `-BlockCommandComment 0x560468140460 Name="return" +| `-ParagraphComment 0x5604681404c0 +| `-TextComment 0x560468140490 Text=" The new entity id." +|-FunctionDecl 0x56046803c788 line:5226:14 ecs_new_low_id 'ecs_entity_t (ecs_world_t *)' +| |-ParmVarDecl 0x56046803c6f8 col:18 world 'ecs_world_t *' +| `-FullComment 0x560468140970 +| |-ParagraphComment 0x560468140610 +| | |-TextComment 0x560468140570 Text=" Create new low id." +| | |-TextComment 0x560468140590 Text=" This operation returns a new low id. Entity ids start after the" +| | |-TextComment 0x5604681405b0 Text=" ECS_HI_COMPONENT_ID constant. This reserves a range of low ids for things " +| | `-TextComment 0x5604681405d0 Text=" like components, and allows parts of the code to optimize operations." +| |-ParagraphComment 0x5604681406b0 +| | |-TextComment 0x560468140630 Text=" Note that ECS_HI_COMPONENT_ID does not represent the maximum number of " +| | |-TextComment 0x560468140650 Text=" components that can be created, only the maximum number of components that" +| | `-TextComment 0x560468140670 Text=" can take advantage of these optimizations." +| |-ParagraphComment 0x560468140720 +| | |-TextComment 0x5604681406d0 Text=" This operation is guaranteed to return an empty entity as it does not use " +| | `-TextComment 0x5604681406f0 Text=" values set by ecs_set_scope or ecs_set_with." +| |-ParagraphComment 0x560468140770 +| | `-TextComment 0x560468140740 Text=" This operation does not recycle ids." +| |-ParagraphComment 0x5604681407c0 +| | `-TextComment 0x560468140790 Text=" " +| |-ParamCommandComment 0x5604681407e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468140890 +| | |-TextComment 0x560468140840 Text=" The world." +| | `-TextComment 0x560468140860 Text=" " +| `-BlockCommandComment 0x5604681408b0 Name="return" +| `-ParagraphComment 0x560468140910 +| `-TextComment 0x5604681408e0 Text=" The new component id." +|-FunctionDecl 0x56046803c9f8 line:5238:14 ecs_new_w_id 'ecs_entity_t (ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x56046803c868 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803c8e0 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468140d20 +| |-ParagraphComment 0x560468140a60 +| | |-TextComment 0x5604681409e0 Text=" Create new entity with (component) id." +| | |-TextComment 0x560468140a00 Text=" This operation creates a new entity with an optional (component) id. When 0" +| | `-TextComment 0x560468140a20 Text=" is passed to the id paramter, no component is added to the new entity." +| |-ParagraphComment 0x560468140ab0 +| | `-TextComment 0x560468140a80 Text=" " +| |-ParamCommandComment 0x560468140ad0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468140b80 +| | |-TextComment 0x560468140b30 Text=" The world." +| | `-TextComment 0x560468140b50 Text=" " +| |-ParamCommandComment 0x560468140ba0 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468140c50 +| | |-TextComment 0x560468140c00 Text=" The component id to initialize the new entity with." +| | `-TextComment 0x560468140c20 Text=" " +| `-BlockCommandComment 0x560468140c70 Name="return" +| `-ParagraphComment 0x560468140cd0 +| `-TextComment 0x560468140ca0 Text=" The new entity." +|-FunctionDecl 0x56046803dfe8 line:5261:14 ecs_entity_init 'ecs_entity_t (ecs_world_t *, const ecs_entity_desc_t *)' +| |-ParmVarDecl 0x56046803cae8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803ded0 col:30 desc 'const ecs_entity_desc_t *' +| `-FullComment 0x560468141270 +| |-ParagraphComment 0x560468140e60 +| | |-TextComment 0x560468140d90 Text=" Find or create an entity. " +| | |-TextComment 0x560468140db0 Text=" This operation creates a new entity, or modifies an existing one. When a name" +| | |-TextComment 0x560468140dd0 Text=" is set in the ecs_entity_desc_t::name field and ecs_entity_desc_t::entity is" +| | |-TextComment 0x560468140df0 Text=" not set, the operation will first attempt to find an existing entity by that" +| | `-TextComment 0x560468140e10 Text=" name. If no entity with that name can be found, it will be created." +| |-ParagraphComment 0x560468140f00 +| | |-TextComment 0x560468140e80 Text=" If both a name and entity handle are provided, the operation will check if" +| | |-TextComment 0x560468140ea0 Text=" the entity name matches with the provided name. If the names do not match," +| | `-TextComment 0x560468140ec0 Text=" the function will fail and return 0." +| |-ParagraphComment 0x560468140f50 +| | `-TextComment 0x560468140f20 Text=" If an id to a non-existing entity is provided, that entity id become alive." +| |-ParagraphComment 0x560468140fa0 +| | `-TextComment 0x560468140f70 Text=" See the documentation of ecs_entity_desc_t for more details. " +| |-ParagraphComment 0x560468140ff0 +| | `-TextComment 0x560468140fc0 Text=" " +| |-ParamCommandComment 0x560468141010 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681410c0 +| | |-TextComment 0x560468141070 Text=" The world." +| | `-TextComment 0x560468141090 Text=" " +| |-ParamCommandComment 0x5604681410e0 [in] implicitly Param="desc" ParamIndex=1 +| | `-ParagraphComment 0x560468141190 +| | |-TextComment 0x560468141140 Text=" Entity init parameters." +| | `-TextComment 0x560468141160 Text=" " +| `-BlockCommandComment 0x5604681411b0 Name="return" +| `-ParagraphComment 0x560468141210 +| `-TextComment 0x5604681411e0 Text=" A handle to the new or existing entity, or 0 if failed." +|-FunctionDecl 0x56046803e308 line:5292:21 ecs_bulk_init 'const ecs_entity_t *(ecs_world_t *, const ecs_bulk_desc_t *)' +| |-ParmVarDecl 0x56046803e0d8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803e1c8 col:28 desc 'const ecs_bulk_desc_t *' +| `-FullComment 0x560468141900 +| |-ParagraphComment 0x560468141360 +| | |-TextComment 0x5604681412e0 Text=" Bulk create/populate new entities." +| | |-TextComment 0x560468141300 Text=" This operation bulk inserts a list of new or predefined entities into a" +| | `-TextComment 0x560468141320 Text=" single table." +| |-ParagraphComment 0x560468141400 +| | |-TextComment 0x560468141380 Text=" The operation does not take ownership of component arrays provided by the" +| | |-TextComment 0x5604681413a0 Text=" application. Components that are non-trivially copyable will be moved into" +| | `-TextComment 0x5604681413c0 Text=" the storage." +| |-ParagraphComment 0x560468141470 +| | |-TextComment 0x560468141420 Text=" The operation will emit OnAdd events for each added id, and OnSet events for" +| | `-TextComment 0x560468141440 Text=" each component that has been set." +| |-ParagraphComment 0x560468141510 +| | |-TextComment 0x560468141490 Text=" If no entity ids are provided by the application, the returned array of ids" +| | |-TextComment 0x5604681414b0 Text=" points to an internal datastructure which changes when new entities are" +| | `-TextComment 0x5604681414d0 Text=" created/deleted." +| |-ParagraphComment 0x560468141620 +| | |-TextComment 0x560468141530 Text=" If as a result of the operation triggers are invoked that deletes" +| | |-TextComment 0x560468141550 Text=" entities and no entity ids were provided by the application, the returned" +| | |-TextComment 0x560468141570 Text=" array of identifiers may be incorrect. To avoid this problem, an application" +| | |-TextComment 0x560468141590 Text=" can first call ecs_bulk_init to create empty entities, copy the array to one" +| | |-TextComment 0x5604681415b0 Text=" that is owned by the application, and then use this array to populate the" +| | `-TextComment 0x5604681415d0 Text=" entities." +| |-ParagraphComment 0x560468141670 +| | `-TextComment 0x560468141640 Text=" " +| |-ParamCommandComment 0x560468141690 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468141740 +| | |-TextComment 0x5604681416f0 Text=" The world." +| | `-TextComment 0x560468141710 Text=" " +| |-ParamCommandComment 0x560468141760 [in] implicitly Param="desc" ParamIndex=1 +| | `-ParagraphComment 0x560468141810 +| | |-TextComment 0x5604681417c0 Text=" Bulk creation parameters." +| | `-TextComment 0x5604681417e0 Text=" " +| `-BlockCommandComment 0x560468141830 Name="return" +| `-ParagraphComment 0x560468141890 +| `-TextComment 0x560468141860 Text=" Array with the list of entity ids created/populated." +|-FunctionDecl 0x56046803e608 line:5306:21 ecs_bulk_new_w_id 'const ecs_entity_t *(ecs_world_t *, ecs_id_t, int32_t)' +| |-ParmVarDecl 0x56046803e3f8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803e470 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x56046803e4e8 col:13 count 'int32_t':'int' +| `-FullComment 0x560468141d80 +| |-ParagraphComment 0x5604681419f0 +| | |-TextComment 0x560468141970 Text=" Create N new entities." +| | |-TextComment 0x560468141990 Text=" This operation is the same as ecs_new_w_id, but creates N entities" +| | `-TextComment 0x5604681419b0 Text=" instead of one and does not recycle ids." +| |-ParagraphComment 0x560468141a40 +| | `-TextComment 0x560468141a10 Text=" " +| |-ParamCommandComment 0x560468141a60 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468141b10 +| | |-TextComment 0x560468141ac0 Text=" The world." +| | `-TextComment 0x560468141ae0 Text=" " +| |-ParamCommandComment 0x560468141b30 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468141be0 +| | |-TextComment 0x560468141b90 Text=" The component id to create the entities with." +| | `-TextComment 0x560468141bb0 Text=" " +| |-ParamCommandComment 0x560468141c00 [in] implicitly Param="count" ParamIndex=2 +| | `-ParagraphComment 0x560468141cb0 +| | |-TextComment 0x560468141c60 Text=" The number of entities to create." +| | `-TextComment 0x560468141c80 Text=" " +| `-BlockCommandComment 0x560468141cd0 Name="return" +| `-ParagraphComment 0x560468141d30 +| `-TextComment 0x560468141d00 Text=" The first entity id of the newly created entities." +|-FunctionDecl 0x56046803e9a8 line:5323:14 ecs_clone 'ecs_entity_t (ecs_world_t *, ecs_entity_t, ecs_entity_t, bool)' +| |-ParmVarDecl 0x56046803e6f8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803e770 col:18 dst 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046803e7e8 col:18 src 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046803e860 col:10 copy_value 'bool' +| `-FullComment 0x560468142310 +| |-ParagraphComment 0x560468141e90 +| | |-TextComment 0x560468141df0 Text=" Clone an entity" +| | |-TextComment 0x560468141e10 Text=" This operation clones the components of one entity into another entity. If" +| | |-TextComment 0x560468141e30 Text=" no destination entity is provided, a new entity will be created. Component" +| | `-TextComment 0x560468141e50 Text=" values are not copied unless copy_value is true." +| |-ParagraphComment 0x560468141ee0 +| | `-TextComment 0x560468141eb0 Text=" " +| |-ParamCommandComment 0x560468141f00 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468141fb0 +| | |-TextComment 0x560468141f60 Text=" The world." +| | `-TextComment 0x560468141f80 Text=" " +| |-ParamCommandComment 0x560468141fd0 [in] implicitly Param="dst" ParamIndex=1 +| | `-ParagraphComment 0x560468142080 +| | |-TextComment 0x560468142030 Text=" The entity to copy the components to." +| | `-TextComment 0x560468142050 Text=" " +| |-ParamCommandComment 0x5604681420a0 [in] implicitly Param="src" ParamIndex=2 +| | `-ParagraphComment 0x560468142150 +| | |-TextComment 0x560468142100 Text=" The entity to copy the components from." +| | `-TextComment 0x560468142120 Text=" " +| |-ParamCommandComment 0x560468142170 [in] implicitly Param="copy_value" ParamIndex=3 +| | `-ParagraphComment 0x560468142220 +| | |-TextComment 0x5604681421d0 Text=" If true, the value of components will be copied to dst." +| | `-TextComment 0x5604681421f0 Text=" " +| `-BlockCommandComment 0x560468142250 Name="return" +| `-ParagraphComment 0x5604681422b0 +| `-TextComment 0x560468142280 Text=" The destination entity." +|-FunctionDecl 0x56046803ec38 line:5339:6 ecs_delete 'void (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046803eaa8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803eb20 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468142660 +| |-ParagraphComment 0x560468142450 +| | |-TextComment 0x560468142380 Text=" Delete an entity." +| | |-TextComment 0x5604681423a0 Text=" This operation will delete an entity and all of its components. The entity id" +| | |-TextComment 0x5604681423c0 Text=" will be recycled. Repeatedly calling ecs_delete without ecs_new or" +| | |-TextComment 0x5604681423e0 Text=" ecs_new_w_id will cause a memory leak as it will cause" +| | `-TextComment 0x560468142400 Text=" the list with ids that can be recycled to grow unbounded." +| |-ParagraphComment 0x5604681424a0 +| | `-TextComment 0x560468142470 Text=" " +| |-ParamCommandComment 0x5604681424c0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468142570 +| | |-TextComment 0x560468142520 Text=" The world." +| | `-TextComment 0x560468142540 Text=" " +| `-ParamCommandComment 0x560468142590 [in] implicitly Param="entity" ParamIndex=1 +| `-ParagraphComment 0x560468142620 +| `-TextComment 0x5604681425f0 Text=" The entity." +|-FunctionDecl 0x56046803f020 line:5351:6 ecs_delete_with 'void (ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x56046803ed28 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803eda0 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468142960 +| |-ParagraphComment 0x560468142750 +| | |-TextComment 0x5604681426d0 Text=" Delete all entities with the specified id." +| | |-TextComment 0x5604681426f0 Text=" This will delete all entities (tables) that have the specified id. The id " +| | `-TextComment 0x560468142710 Text=" may be a wildcard and/or a pair." +| |-ParagraphComment 0x5604681427a0 +| | `-TextComment 0x560468142770 Text=" " +| |-ParamCommandComment 0x5604681427c0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468142870 +| | |-TextComment 0x560468142820 Text=" The world." +| | `-TextComment 0x560468142840 Text=" " +| `-ParamCommandComment 0x560468142890 [in] implicitly Param="id" ParamIndex=1 +| `-ParagraphComment 0x560468142920 +| `-TextComment 0x5604681428f0 Text=" The id." +|-FunctionDecl 0x56046803f338 line:5372:6 ecs_add_id 'void (ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x56046803f168 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803f1e0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046803f258 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468142d40 +| |-ParagraphComment 0x560468142a50 +| | |-TextComment 0x5604681429d0 Text=" Add a (component) id to an entity." +| | |-TextComment 0x5604681429f0 Text=" This operation adds a single (component) id to an entity. If the entity " +| | `-TextComment 0x560468142a10 Text=" already has the id, this operation has no side effects." +| |-ParagraphComment 0x560468142aa0 +| | `-TextComment 0x560468142a70 Text=" " +| |-ParamCommandComment 0x560468142ac0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468142b70 +| | |-TextComment 0x560468142b20 Text=" The world." +| | `-TextComment 0x560468142b40 Text=" " +| |-ParamCommandComment 0x560468142b90 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468142c40 +| | |-TextComment 0x560468142bf0 Text=" The entity." +| | `-TextComment 0x560468142c10 Text=" " +| `-ParamCommandComment 0x560468142c60 [in] implicitly Param="id" ParamIndex=2 +| `-ParagraphComment 0x560468142cf0 +| `-TextComment 0x560468142cc0 Text=" The id to add." +|-FunctionDecl 0x56046803f5b8 line:5386:6 ecs_remove_id 'void (ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x56046803f428 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803f4a0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046803f518 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468143120 +| |-ParagraphComment 0x560468142e30 +| | |-TextComment 0x560468142db0 Text=" Remove a (component) id from an entity." +| | |-TextComment 0x560468142dd0 Text=" This operation removes a single (component) id to an entity. If the entity " +| | `-TextComment 0x560468142df0 Text=" does not have the id, this operation has no side effects." +| |-ParagraphComment 0x560468142e80 +| | `-TextComment 0x560468142e50 Text=" " +| |-ParamCommandComment 0x560468142ea0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468142f50 +| | |-TextComment 0x560468142f00 Text=" The world." +| | `-TextComment 0x560468142f20 Text=" " +| |-ParamCommandComment 0x560468142f70 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468143020 +| | |-TextComment 0x560468142fd0 Text=" The entity." +| | `-TextComment 0x560468142ff0 Text=" " +| `-ParamCommandComment 0x560468143040 [in] implicitly Param="id" ParamIndex=2 +| `-ParagraphComment 0x5604681430d0 +| `-TextComment 0x5604681430a0 Text=" The id to remove." +|-FunctionDecl 0x56046803f838 line:5414:6 ecs_override_id 'void (ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x56046803f6a8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803f720 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046803f798 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468143730 +| |-ParagraphComment 0x560468143260 +| | |-TextComment 0x560468143190 Text=" Add override for (component) id." +| | |-TextComment 0x5604681431b0 Text=" Adding an override to an entity ensures that when the entity is instantiated" +| | |-TextComment 0x5604681431d0 Text=" (by adding an IsA relationship to it) the component with the override is" +| | |-TextComment 0x5604681431f0 Text=" copied to a component that is private to the instance. By default components" +| | `-TextComment 0x560468143210 Text=" reachable through an IsA relationship are shared." +| |-ParagraphComment 0x560468143350 +| | |-TextComment 0x560468143280 Text=" Adding an override does not add the component. If an override is added to an" +| | |-TextComment 0x5604681432a0 Text=" entity that does not have the component, it will still be added to the" +| | |-TextComment 0x5604681432c0 Text=" instance, but with an uninitialized value (unless the component has a ctor)." +| | |-TextComment 0x5604681432e0 Text=" When the entity does have the entity, the component of the instance will be" +| | `-TextComment 0x560468143300 Text=" initialized with the value of the component on the entity." +| |-ParagraphComment 0x5604681433c0 +| | |-TextComment 0x560468143370 Text=" This is the same as what happens when calling ecs_add_id for an id that is" +| | `-TextComment 0x560468143390 Text=" inherited (reachable through an IsA relationship)." +| |-ParagraphComment 0x560468143430 +| | |-TextComment 0x5604681433e0 Text=" This operation is equivalent to doing:" +| | `-TextComment 0x560468143400 Text=" ecs_add_id(world, entity, ECS_OVERRIDE | id);" +| |-ParagraphComment 0x560468143480 +| | `-TextComment 0x560468143450 Text=" " +| |-ParamCommandComment 0x5604681434a0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468143550 +| | |-TextComment 0x560468143500 Text=" The world." +| | `-TextComment 0x560468143520 Text=" " +| |-ParamCommandComment 0x560468143570 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468143620 +| | |-TextComment 0x5604681435d0 Text=" The entity." +| | `-TextComment 0x5604681435f0 Text=" " +| `-ParamCommandComment 0x560468143640 [in] implicitly Param="id" ParamIndex=2 +| `-ParagraphComment 0x5604681436d0 +| `-TextComment 0x5604681436a0 Text=" The id to override." +|-FunctionDecl 0x56046803fa38 line:5428:6 ecs_clear 'void (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046803f928 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803f9a0 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468143a50 +| |-ParagraphComment 0x560468143840 +| | |-TextComment 0x5604681437a0 Text=" Clear all components." +| | |-TextComment 0x5604681437c0 Text=" This operation will clear all components from an entity but will not delete" +| | |-TextComment 0x5604681437e0 Text=" the entity itself. This effectively prevents the entity id from being " +| | `-TextComment 0x560468143800 Text=" recycled." +| |-ParagraphComment 0x560468143890 +| | `-TextComment 0x560468143860 Text=" " +| |-ParamCommandComment 0x5604681438b0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468143960 +| | |-TextComment 0x560468143910 Text=" The world." +| | `-TextComment 0x560468143930 Text=" " +| `-ParamCommandComment 0x560468143980 [in] implicitly Param="entity" ParamIndex=1 +| `-ParagraphComment 0x560468143a10 +| `-TextComment 0x5604681439e0 Text=" The entity." +|-FunctionDecl 0x56046803fc38 line:5441:6 ecs_remove_all 'void (ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x56046803fb28 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803fba0 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468143d50 +| |-ParagraphComment 0x560468143b40 +| | |-TextComment 0x560468143ac0 Text=" Remove all instances of the specified id." +| | |-TextComment 0x560468143ae0 Text=" This will remove the specified id from all entities (tables). Teh id may be" +| | `-TextComment 0x560468143b00 Text=" a wildcard and/or a pair." +| |-ParagraphComment 0x560468143b90 +| | `-TextComment 0x560468143b60 Text=" " +| |-ParamCommandComment 0x560468143bb0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468143c60 +| | |-TextComment 0x560468143c10 Text=" The world." +| | `-TextComment 0x560468143c30 Text=" " +| `-ParamCommandComment 0x560468143c80 [in] implicitly Param="id" ParamIndex=1 +| `-ParagraphComment 0x560468143d10 +| `-TextComment 0x560468143ce0 Text=" The id." +|-FunctionDecl 0x56046803fe38 line:5453:14 ecs_set_with 'ecs_entity_t (ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x56046803fd28 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046803fda0 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x5604681440d0 +| |-ParagraphComment 0x560468143e10 +| | |-TextComment 0x560468143dc0 Text=" Set current with id." +| | `-TextComment 0x560468143de0 Text=" New entities are automatically created with the specified id." +| |-ParagraphComment 0x560468143e60 +| | `-TextComment 0x560468143e30 Text=" " +| |-ParamCommandComment 0x560468143e80 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468143f30 +| | |-TextComment 0x560468143ee0 Text=" The world." +| | `-TextComment 0x560468143f00 Text=" " +| |-ParamCommandComment 0x560468143f50 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468144000 +| | |-TextComment 0x560468143fb0 Text=" The id." +| | `-TextComment 0x560468143fd0 Text=" " +| `-BlockCommandComment 0x560468144020 Name="return" +| `-ParagraphComment 0x560468144080 +| `-TextComment 0x560468144050 Text=" The previous id." +|-FunctionDecl 0x560468040270 line:5464:10 ecs_get_with 'ecs_id_t (const ecs_world_t *)' +| |-ParmVarDecl 0x56046803ff28 col:24 world 'const ecs_world_t *' +| `-FullComment 0x560468144390 +| |-ParagraphComment 0x560468144190 +| | |-TextComment 0x560468144140 Text=" Get current with id." +| | `-TextComment 0x560468144160 Text=" Get the id set with ecs_set_with." +| |-ParagraphComment 0x5604681441e0 +| | `-TextComment 0x5604681441b0 Text=" " +| |-ParamCommandComment 0x560468144200 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681442d0 +| | |-TextComment 0x560468144280 Text=" The world." +| | `-TextComment 0x5604681442a0 Text=" " +| `-BlockCommandComment 0x5604681442f0 Name="return" +| `-ParagraphComment 0x560468144350 +| `-TextComment 0x560468144320 Text=" The last id provided to ecs_set_with." +|-FunctionDecl 0x5604680405c8 line:5485:6 ecs_enable 'void (ecs_world_t *, ecs_entity_t, bool)' +| |-ParmVarDecl 0x5604680403b8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468040430 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680404a8 col:10 enabled 'bool' +| `-FullComment 0x560468144790 +| |-ParagraphComment 0x5604681444a0 +| | |-TextComment 0x560468144400 Text=" Enable or disable entity." +| | |-TextComment 0x560468144420 Text=" This operation enables or disables an entity by adding or removing the" +| | |-TextComment 0x560468144440 Text=" EcsDisabled tag. A disabled entity will not be matched with any systems," +| | `-TextComment 0x560468144460 Text=" unless the system explicitly specifies the EcsDisabled tag." +| |-ParagraphComment 0x5604681444f0 +| | `-TextComment 0x5604681444c0 Text=" " +| |-ParamCommandComment 0x560468144510 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681445c0 +| | |-TextComment 0x560468144570 Text=" The world." +| | `-TextComment 0x560468144590 Text=" " +| |-ParamCommandComment 0x5604681445e0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468144690 +| | |-TextComment 0x560468144640 Text=" The entity to enable or disable." +| | `-TextComment 0x560468144660 Text=" " +| `-ParamCommandComment 0x5604681446b0 [in] implicitly Param="enabled" ParamIndex=2 +| `-ParagraphComment 0x560468144740 +| `-TextComment 0x560468144710 Text=" true to enable the entity, false to disable." +|-FunctionDecl 0x560468040968 line:5504:6 ecs_enable_id 'void (ecs_world_t *, ecs_entity_t, ecs_id_t, bool)' +| |-ParmVarDecl 0x5604680406b8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468040730 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680407a8 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x560468040820 col:10 enable 'bool' +| `-FullComment 0x560468144ce0 +| |-ParagraphComment 0x560468144920 +| | |-TextComment 0x560468144800 Text=" Enable or disable component." +| | |-TextComment 0x560468144820 Text=" Enabling or disabling a component does not add or remove a component from an" +| | |-TextComment 0x560468144840 Text=" entity, but prevents it from being matched with queries. This operation can" +| | |-TextComment 0x560468144860 Text=" be useful when a component must be temporarily disabled without destroying" +| | |-TextComment 0x560468144880 Text=" its value. It is also a more performant operation for when an application" +| | |-TextComment 0x5604681448a0 Text=" needs to add/remove components at high frequency, as enabling/disabling is" +| | `-TextComment 0x5604681448c0 Text=" cheaper than a regular add or remove." +| |-ParagraphComment 0x560468144970 +| | `-TextComment 0x560468144940 Text=" " +| |-ParamCommandComment 0x560468144990 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468144a40 +| | |-TextComment 0x5604681449f0 Text=" The world." +| | `-TextComment 0x560468144a10 Text=" " +| |-ParamCommandComment 0x560468144a60 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468144b10 +| | |-TextComment 0x560468144ac0 Text=" The entity." +| | `-TextComment 0x560468144ae0 Text=" " +| |-ParamCommandComment 0x560468144b30 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x560468144be0 +| | |-TextComment 0x560468144b90 Text=" The component." +| | `-TextComment 0x560468144bb0 Text=" " +| `-ParamCommandComment 0x560468144c00 [in] implicitly Param="enable" ParamIndex=3 +| `-ParagraphComment 0x560468144c90 +| `-TextComment 0x560468144c60 Text=" True to enable the component, false to disable." +|-FunctionDecl 0x560468040c78 line:5521:6 ecs_is_enabled_id 'bool (const ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x560468040a68 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468040ae0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468040b58 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468145180 +| |-ParagraphComment 0x560468144df0 +| | |-TextComment 0x560468144d50 Text=" Test if component is enabled." +| | |-TextComment 0x560468144d70 Text=" Test whether a component is currently enabled or disabled. This operation" +| | |-TextComment 0x560468144d90 Text=" will return true when the entity has the component and if it has not been" +| | `-TextComment 0x560468144db0 Text=" disabled by ecs_enable_component." +| |-ParagraphComment 0x560468144e40 +| | `-TextComment 0x560468144e10 Text=" " +| |-ParamCommandComment 0x560468144e60 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468144f10 +| | |-TextComment 0x560468144ec0 Text=" The world." +| | `-TextComment 0x560468144ee0 Text=" " +| |-ParamCommandComment 0x560468144f30 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468144fe0 +| | |-TextComment 0x560468144f90 Text=" The entity." +| | `-TextComment 0x560468144fb0 Text=" " +| |-ParamCommandComment 0x560468145000 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x5604681450b0 +| | |-TextComment 0x560468145060 Text=" The component." +| | `-TextComment 0x560468145080 Text=" " +| `-BlockCommandComment 0x5604681450d0 Name="return" +| `-ParagraphComment 0x560468145130 +| `-TextComment 0x560468145100 Text=" True if the component is enabled, otherwise false." +|-FunctionDecl 0x560468040fe0 line:5544:13 ecs_get_id 'const void *(const ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x560468040dc8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468040e40 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468040eb8 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468145600 +| |-ParagraphComment 0x560468145270 +| | |-TextComment 0x5604681451f0 Text=" Get an immutable pointer to a component." +| | |-TextComment 0x560468145210 Text=" This operation obtains a const pointer to the requested component. The" +| | `-TextComment 0x560468145230 Text=" operation accepts the component entity id." +| |-ParagraphComment 0x5604681452c0 +| | `-TextComment 0x560468145290 Text=" " +| |-ParamCommandComment 0x5604681452e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468145390 +| | |-TextComment 0x560468145340 Text=" The world." +| | `-TextComment 0x560468145360 Text=" " +| |-ParamCommandComment 0x5604681453b0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468145460 +| | |-TextComment 0x560468145410 Text=" The entity." +| | `-TextComment 0x560468145430 Text=" " +| |-ParamCommandComment 0x560468145480 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x560468145530 +| | |-TextComment 0x5604681454e0 Text=" The id of the component to get." +| | `-TextComment 0x560468145500 Text=" " +| `-BlockCommandComment 0x560468145550 Name="return" +| `-ParagraphComment 0x5604681455b0 +| `-TextComment 0x560468145580 Text=" The component pointer, NULL if the entity does not have the component." +|-FunctionDecl 0x560468041538 line:5560:11 ecs_ref_init_id 'ecs_ref_t (const ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x5604680410d8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468041150 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680411c8 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468145aa0 +| |-ParagraphComment 0x560468145710 +| | |-TextComment 0x560468145670 Text=" Create a component ref." +| | |-TextComment 0x560468145690 Text=" A ref is a handle to an entity + component which caches a small amount of" +| | |-TextComment 0x5604681456b0 Text=" data to reduce overhead of repeatedly accessing the component. Use " +| | `-TextComment 0x5604681456d0 Text=" ecs_ref_get to get the component data." +| |-ParagraphComment 0x560468145760 +| | `-TextComment 0x560468145730 Text=" " +| |-ParamCommandComment 0x560468145780 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468145830 +| | |-TextComment 0x5604681457e0 Text=" The world." +| | `-TextComment 0x560468145800 Text=" " +| |-ParamCommandComment 0x560468145850 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468145900 +| | |-TextComment 0x5604681458b0 Text=" The entity." +| | `-TextComment 0x5604681458d0 Text=" " +| |-ParamCommandComment 0x560468145920 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x5604681459d0 +| | |-TextComment 0x560468145980 Text=" The id of the component." +| | `-TextComment 0x5604681459a0 Text=" " +| `-BlockCommandComment 0x5604681459f0 Name="return" +| `-ParagraphComment 0x560468145a50 +| `-TextComment 0x560468145a20 Text=" The reference." +|-FunctionDecl 0x560468041840 line:5574:7 ecs_ref_get_id 'void *(const ecs_world_t *, ecs_ref_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468041628 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680416a0 col:16 ref 'ecs_ref_t *' +| |-ParmVarDecl 0x560468041718 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468145ef0 +| |-ParagraphComment 0x560468145b60 +| | |-TextComment 0x560468145b10 Text=" Get component from ref." +| | `-TextComment 0x560468145b30 Text=" Get component pointer from ref. The ref must be created with ecs_ref_init." +| |-ParagraphComment 0x560468145bb0 +| | `-TextComment 0x560468145b80 Text=" " +| |-ParamCommandComment 0x560468145bd0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468145c80 +| | |-TextComment 0x560468145c30 Text=" The world." +| | `-TextComment 0x560468145c50 Text=" " +| |-ParamCommandComment 0x560468145ca0 [in] implicitly Param="ref" ParamIndex=1 +| | `-ParagraphComment 0x560468145d50 +| | |-TextComment 0x560468145d00 Text=" The ref." +| | `-TextComment 0x560468145d20 Text=" " +| |-ParamCommandComment 0x560468145d70 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x560468145e20 +| | |-TextComment 0x560468145dd0 Text=" The component id." +| | `-TextComment 0x560468145df0 Text=" " +| `-BlockCommandComment 0x560468145e40 Name="return" +| `-ParagraphComment 0x560468145ea0 +| `-TextComment 0x560468145e70 Text=" The component pointer, NULL if the entity does not have the component." +|-FunctionDecl 0x560468041ac8 line:5587:6 ecs_ref_update 'void (const ecs_world_t *, ecs_ref_t *)' +| |-ParmVarDecl 0x560468041938 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680419b0 col:16 ref 'ecs_ref_t *' +| `-FullComment 0x5604681461f0 +| |-ParagraphComment 0x560468145fe0 +| | |-TextComment 0x560468145f60 Text=" Update ref." +| | |-TextComment 0x560468145f80 Text=" Ensures contents of ref are up to date. Same as ecs_ref_get_id, but does not" +| | `-TextComment 0x560468145fa0 Text=" return pointer to component id. " +| |-ParagraphComment 0x560468146030 +| | `-TextComment 0x560468146000 Text=" " +| |-ParamCommandComment 0x560468146050 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468146100 +| | |-TextComment 0x5604681460b0 Text=" The world." +| | `-TextComment 0x5604681460d0 Text=" " +| `-ParamCommandComment 0x560468146120 [in] implicitly Param="ref" ParamIndex=1 +| `-ParagraphComment 0x5604681461b0 +| `-TextComment 0x560468146180 Text=" The ref." +|-FunctionDecl 0x560468041dd0 line:5605:7 ecs_get_mut_id 'void *(ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x560468041bb8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468041c30 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468041ca8 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468146720 +| |-ParagraphComment 0x560468146310 +| | |-TextComment 0x560468146270 Text=" Get a mutable pointer to a component." +| | |-TextComment 0x560468146290 Text=" This operation is similar to ecs_get_id but it returns a mutable " +| | |-TextComment 0x5604681462b0 Text=" pointer. If this operation is invoked from inside a system, the entity will" +| | `-TextComment 0x5604681462d0 Text=" be staged and a pointer to the staged component will be returned." +| |-ParagraphComment 0x560468146380 +| | |-TextComment 0x560468146330 Text=" If the entity did not yet have the component, the component will be added by" +| | `-TextComment 0x560468146350 Text=" this operation. In this case the is_added out parameter will be set to true." +| |-ParagraphComment 0x5604681463d0 +| | `-TextComment 0x5604681463a0 Text=" " +| |-ParamCommandComment 0x5604681463f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681464a0 +| | |-TextComment 0x560468146450 Text=" The world." +| | `-TextComment 0x560468146470 Text=" " +| |-ParamCommandComment 0x5604681464c0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468146570 +| | |-TextComment 0x560468146520 Text=" The entity." +| | `-TextComment 0x560468146540 Text=" " +| |-ParamCommandComment 0x560468146590 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x560468146640 +| | |-TextComment 0x5604681465f0 Text=" The entity id of the component to obtain." +| | `-TextComment 0x560468146610 Text=" " +| `-BlockCommandComment 0x560468146660 Name="return" +| `-ParagraphComment 0x5604681466c0 +| `-TextComment 0x560468146690 Text=" The component pointer." +|-FunctionDecl 0x560468042058 line:5629:15 ecs_write_begin 'ecs_record_t *(ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468041ec8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468041f40 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468146c60 +| |-ParagraphComment 0x560468146810 +| | |-TextComment 0x560468146790 Text=" Begin exclusive write access to entity." +| | |-TextComment 0x5604681467b0 Text=" This operation provides safe exclusive access to the components of an entity" +| | `-TextComment 0x5604681467d0 Text=" without the overhead of deferring operations." +| |-ParagraphComment 0x5604681468d0 +| | |-TextComment 0x560468146830 Text=" When this operation is called simultaneously for the same entity more than" +| | |-TextComment 0x560468146850 Text=" once it will throw an assert. Note that for this to happen, asserts must be" +| | |-TextComment 0x560468146870 Text=" enabled. It is up to the application to ensure that access is exclusive, for" +| | `-TextComment 0x560468146890 Text=" example by using a read-write mutex." +| |-ParagraphComment 0x560468146940 +| | |-TextComment 0x5604681468f0 Text=" Exclusive access is enforced at the table level, so only one entity can be" +| | `-TextComment 0x560468146910 Text=" exclusively accessed per table. The exclusive access check is thread safe." +| |-ParagraphComment 0x560468146990 +| | `-TextComment 0x560468146960 Text=" This operation must be followed up with ecs_write_end." +| |-ParagraphComment 0x5604681469e0 +| | `-TextComment 0x5604681469b0 Text=" " +| |-ParamCommandComment 0x560468146a00 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468146ab0 +| | |-TextComment 0x560468146a60 Text=" The world." +| | `-TextComment 0x560468146a80 Text=" " +| |-ParamCommandComment 0x560468146ad0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468146b80 +| | |-TextComment 0x560468146b30 Text=" The entity." +| | `-TextComment 0x560468146b50 Text=" " +| `-BlockCommandComment 0x560468146ba0 Name="return" +| `-ParagraphComment 0x560468146c00 +| `-TextComment 0x560468146bd0 Text=" A record to the entity." +|-FunctionDecl 0x560468042238 line:5640:6 ecs_write_end 'void (ecs_record_t *)' +| |-ParmVarDecl 0x560468042148 col:19 record 'ecs_record_t *' +| `-FullComment 0x560468146e90 +| |-ParagraphComment 0x560468146d50 +| | |-TextComment 0x560468146cd0 Text=" End exclusive write access to entity." +| | |-TextComment 0x560468146cf0 Text=" This operation ends exclusive access, and must be called after " +| | `-TextComment 0x560468146d10 Text=" ecs_write_begin." +| |-ParagraphComment 0x560468146da0 +| | `-TextComment 0x560468146d70 Text=" " +| `-ParamCommandComment 0x560468146dc0 [in] implicitly Param="record" ParamIndex=0 +| `-ParagraphComment 0x560468146e50 +| `-TextComment 0x560468146e20 Text=" Record to the entity." +|-FunctionDecl 0x5604680426b8 line:5663:21 ecs_read_begin 'const ecs_record_t *(ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468042318 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468042390 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468147400 +| |-ParagraphComment 0x560468146f80 +| | |-TextComment 0x560468146f00 Text=" Begin read access to entity." +| | |-TextComment 0x560468146f20 Text=" This operation provides safe read access to the components of an entity." +| | `-TextComment 0x560468146f40 Text=" Multiple simultaneous reads are allowed per entity." +| |-ParagraphComment 0x560468147040 +| | |-TextComment 0x560468146fa0 Text=" This operation ensures that code attempting to mutate the entity's table will" +| | |-TextComment 0x560468146fc0 Text=" throw an assert. Note that for this to happen, asserts must be enabled. It is" +| | |-TextComment 0x560468146fe0 Text=" up to the application to ensure that this does not happen, for example by" +| | `-TextComment 0x560468147000 Text=" using a read-write mutex." +| |-ParagraphComment 0x5604681470e0 +| | |-TextComment 0x560468147060 Text=" This operation does *not* provide the same guarantees as a read-write mutex," +| | |-TextComment 0x560468147080 Text=" as it is possible to call ecs_read_begin after calling ecs_write_begin. It is" +| | `-TextComment 0x5604681470a0 Text=" up to application has to ensure that this does not happen." +| |-ParagraphComment 0x560468147130 +| | `-TextComment 0x560468147100 Text=" This operation must be followed up with ecs_read_end." +| |-ParagraphComment 0x560468147180 +| | `-TextComment 0x560468147150 Text=" " +| |-ParamCommandComment 0x5604681471a0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468147250 +| | |-TextComment 0x560468147200 Text=" The world." +| | `-TextComment 0x560468147220 Text=" " +| |-ParamCommandComment 0x560468147270 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468147320 +| | |-TextComment 0x5604681472d0 Text=" The entity." +| | `-TextComment 0x5604681472f0 Text=" " +| `-BlockCommandComment 0x560468147340 Name="return" +| `-ParagraphComment 0x5604681473a0 +| `-TextComment 0x560468147370 Text=" A record to the entity." +|-FunctionDecl 0x560468042898 line:5673:6 ecs_read_end 'void (const ecs_record_t *)' +| |-ParmVarDecl 0x5604680427a8 col:25 record 'const ecs_record_t *' +| `-FullComment 0x560468147600 +| |-ParagraphComment 0x5604681474c0 +| | |-TextComment 0x560468147470 Text=" End read access to entity." +| | `-TextComment 0x560468147490 Text=" This operation ends read access, and must be called after ecs_read_begin." +| |-ParagraphComment 0x560468147510 +| | `-TextComment 0x5604681474e0 Text=" " +| `-ParamCommandComment 0x560468147530 [in] implicitly Param="record" ParamIndex=0 +| `-ParagraphComment 0x5604681475c0 +| `-TextComment 0x560468147590 Text=" Record to the entity." +|-FunctionDecl 0x560468042b90 line:5690:13 ecs_record_get_id 'const void *(ecs_world_t *, const ecs_record_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468042978 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680429f0 col:25 record 'const ecs_record_t *' +| |-ParmVarDecl 0x560468042a68 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468147b20 +| |-ParagraphComment 0x560468147710 +| | |-TextComment 0x560468147670 Text=" Get component from entity record." +| | |-TextComment 0x560468147690 Text=" This operation returns a pointer to a component for the entity " +| | |-TextComment 0x5604681476b0 Text=" associated with the provided record. For safe access to the component, obtain" +| | `-TextComment 0x5604681476d0 Text=" the record with ecs_read_begin or ecs_write_begin." +| |-ParagraphComment 0x560468147780 +| | |-TextComment 0x560468147730 Text=" Obtaining a component from a record is faster than obtaining it from the" +| | `-TextComment 0x560468147750 Text=" entity handle, as it reduces the number of lookups required." +| |-ParagraphComment 0x5604681477d0 +| | `-TextComment 0x5604681477a0 Text=" " +| |-ParamCommandComment 0x5604681477f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681478a0 +| | |-TextComment 0x560468147850 Text=" The world." +| | `-TextComment 0x560468147870 Text=" " +| |-ParamCommandComment 0x5604681478c0 [in] implicitly Param="record" ParamIndex=1 +| | `-ParagraphComment 0x560468147970 +| | |-TextComment 0x560468147920 Text=" Record to the entity." +| | `-TextComment 0x560468147940 Text=" " +| |-ParamCommandComment 0x560468147990 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x560468147a40 +| | |-TextComment 0x5604681479f0 Text=" The (component) id." +| | `-TextComment 0x560468147a10 Text=" " +| `-BlockCommandComment 0x560468147a60 Name="return" +| `-ParagraphComment 0x560468147ac0 +| `-TextComment 0x560468147a90 Text=" Pointer to component, or NULL if entity does not have the component." +|-FunctionDecl 0x560468042ea0 line:5704:7 ecs_record_get_mut_id 'void *(ecs_world_t *, ecs_record_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468042c88 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468042d00 col:19 record 'ecs_record_t *' +| |-ParmVarDecl 0x560468042d78 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468147f70 +| |-ParagraphComment 0x560468147be0 +| | |-TextComment 0x560468147b90 Text=" Same as ecs_record_get_id, but returns a mutable pointer." +| | `-TextComment 0x560468147bb0 Text=" For safe access to the component, obtain the record with ecs_write_begin." +| |-ParagraphComment 0x560468147c30 +| | `-TextComment 0x560468147c00 Text=" " +| |-ParamCommandComment 0x560468147c50 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468147d00 +| | |-TextComment 0x560468147cb0 Text=" The world." +| | `-TextComment 0x560468147cd0 Text=" " +| |-ParamCommandComment 0x560468147d20 [in] implicitly Param="record" ParamIndex=1 +| | `-ParagraphComment 0x560468147dd0 +| | |-TextComment 0x560468147d80 Text=" Record to the entity." +| | `-TextComment 0x560468147da0 Text=" " +| |-ParamCommandComment 0x560468147df0 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x560468147ea0 +| | |-TextComment 0x560468147e50 Text=" The (component) id." +| | `-TextComment 0x560468147e70 Text=" " +| `-BlockCommandComment 0x560468147ec0 Name="return" +| `-ParagraphComment 0x560468147f20 +| `-TextComment 0x560468147ef0 Text=" Pointer to component, or NULL if entity does not have the component." +|-FunctionDecl 0x560468043130 line:5723:7 ecs_emplace_id 'void *(ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x560468042f98 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468043010 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468043088 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x5604681484a0 +| |-ParagraphComment 0x560468148080 +| | |-TextComment 0x560468147fe0 Text=" Emplace a component." +| | |-TextComment 0x560468148000 Text=" Emplace is similar to get_mut except that the component constructor is not" +| | |-TextComment 0x560468148020 Text=" invoked for the returned pointer, allowing the component to be "constructed"" +| | `-TextComment 0x560468148040 Text=" directly in the storage." +| |-ParagraphComment 0x5604681480f0 +| | |-TextComment 0x5604681480a0 Text=" Emplace can only be used if the entity does not yet have the component. If" +| | `-TextComment 0x5604681480c0 Text=" the entity has the component, the operation will fail." +| |-ParagraphComment 0x560468148140 +| | `-TextComment 0x560468148110 Text=" " +| |-ParamCommandComment 0x560468148160 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468148210 +| | |-TextComment 0x5604681481c0 Text=" The world." +| | `-TextComment 0x5604681481e0 Text=" " +| |-ParamCommandComment 0x560468148230 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x5604681482f0 +| | |-TextComment 0x5604681482a0 Text=" The entity." +| | `-TextComment 0x5604681482c0 Text=" " +| |-ParamCommandComment 0x560468148310 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x5604681483c0 +| | |-TextComment 0x560468148370 Text=" The component to obtain." +| | `-TextComment 0x560468148390 Text=" " +| `-BlockCommandComment 0x5604681483e0 Name="return" +| `-ParagraphComment 0x560468148440 +| `-TextComment 0x560468148410 Text=" The (uninitialized) component pointer." +|-FunctionDecl 0x5604680433b8 line:5739:6 ecs_modified_id 'void (ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x560468043228 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680432a0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468043318 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x5604681488d0 +| |-ParagraphComment 0x560468148590 +| | |-TextComment 0x560468148510 Text=" Signal that a component has been modified." +| | |-TextComment 0x560468148530 Text=" This operation allows an application to signal to Flecs that a component has" +| | `-TextComment 0x560468148550 Text=" been modified. As a result, OnSet systems will be invoked." +| |-ParagraphComment 0x5604681485e0 +| | `-TextComment 0x5604681485b0 Text=" This operation is commonly used together with ecs_get_mut." +| |-ParagraphComment 0x560468148630 +| | `-TextComment 0x560468148600 Text=" " +| |-ParamCommandComment 0x560468148650 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468148700 +| | |-TextComment 0x5604681486b0 Text=" The world." +| | `-TextComment 0x5604681486d0 Text=" " +| |-ParamCommandComment 0x560468148720 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x5604681487d0 +| | |-TextComment 0x560468148780 Text=" The entity." +| | `-TextComment 0x5604681487a0 Text=" " +| `-ParamCommandComment 0x5604681487f0 [in] implicitly Param="id" ParamIndex=2 +| `-ParagraphComment 0x560468148880 +| `-TextComment 0x560468148850 Text=" The id of the component that was modified." +|-FunctionDecl 0x5604680439b8 line:5758:14 ecs_set_id 'ecs_entity_t (ecs_world_t *, ecs_entity_t, ecs_id_t, size_t, const void *)' +| |-ParmVarDecl 0x5604680434a8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468043520 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468043598 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x5604680437e0 col:12 size 'size_t':'unsigned long' +| |-ParmVarDecl 0x560468043860 col:17 ptr 'const void *' +| `-FullComment 0x560468148f60 +| |-ParagraphComment 0x5604681489c0 +| | |-TextComment 0x560468148940 Text=" Set the value of a component." +| | |-TextComment 0x560468148960 Text=" This operation allows an application to set the value of a component. The" +| | `-TextComment 0x560468148980 Text=" operation is equivalent to calling ecs_get_mut and ecs_modified." +| |-ParagraphComment 0x560468148a10 +| | `-TextComment 0x5604681489e0 Text=" If the provided entity is 0, a new entity will be created." +| |-ParagraphComment 0x560468148a60 +| | `-TextComment 0x560468148a30 Text=" " +| |-ParamCommandComment 0x560468148a80 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468148b30 +| | |-TextComment 0x560468148ae0 Text=" The world." +| | `-TextComment 0x560468148b00 Text=" " +| |-ParamCommandComment 0x560468148b50 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468148c00 +| | |-TextComment 0x560468148bb0 Text=" The entity." +| | `-TextComment 0x560468148bd0 Text=" " +| |-ParamCommandComment 0x560468148c20 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x560468148cd0 +| | |-TextComment 0x560468148c80 Text=" The id of the component to set." +| | `-TextComment 0x560468148ca0 Text=" " +| |-ParamCommandComment 0x560468148cf0 [in] implicitly Param="size" ParamIndex=3 +| | `-ParagraphComment 0x560468148da0 +| | |-TextComment 0x560468148d50 Text=" The size of the pointer to the value." +| | `-TextComment 0x560468148d70 Text=" " +| |-ParamCommandComment 0x560468148dc0 [in] implicitly Param="ptr" ParamIndex=4 +| | `-ParagraphComment 0x560468148e70 +| | |-TextComment 0x560468148e20 Text=" The pointer to the value." +| | `-TextComment 0x560468148e40 Text=" " +| `-BlockCommandComment 0x560468148e90 Name="return" +| `-ParagraphComment 0x560468148ef0 +| `-TextComment 0x560468148ec0 Text=" The entity. A new entity if no entity was provided." +|-FunctionDecl 0x560468043ca8 line:5792:6 ecs_is_valid 'bool (const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468043b18 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468043b90 col:18 e 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468149490 +| |-ParagraphComment 0x560468149020 +| | |-TextComment 0x560468148fd0 Text=" Test whether an entity is valid." +| | `-TextComment 0x560468148ff0 Text=" Entities that are valid can be used with API functions." +| |-ParagraphComment 0x560468149090 +| | |-TextComment 0x560468149040 Text=" An entity is valid if it is not 0 and if it is alive. If the provided id is" +| | `-TextComment 0x560468149060 Text=" a pair, the contents of the pair will be checked for validity." +| |-ParagraphComment 0x560468149150 +| | |-TextComment 0x5604681490b0 Text=" is_valid will return true for ids that don't exist (alive or not alive). This" +| | |-TextComment 0x5604681490d0 Text=" allows for using ids that have never been created by ecs_new or similar. In" +| | |-TextComment 0x5604681490f0 Text=" this the function differs from ecs_is_alive, which will return false for" +| | `-TextComment 0x560468149110 Text=" entities that do not yet exist." +| |-ParagraphComment 0x5604681491c0 +| | |-TextComment 0x560468149170 Text=" The operation will return false for an id that exists and is not alive, as" +| | `-TextComment 0x560468149190 Text=" using this id with an API operation would cause it to assert." +| |-ParagraphComment 0x560468149210 +| | `-TextComment 0x5604681491e0 Text=" " +| |-ParamCommandComment 0x560468149230 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681492e0 +| | |-TextComment 0x560468149290 Text=" The world." +| | `-TextComment 0x5604681492b0 Text=" " +| |-ParamCommandComment 0x560468149300 [in] implicitly Param="e" ParamIndex=1 +| | `-ParagraphComment 0x5604681493b0 +| | |-TextComment 0x560468149360 Text=" The entity." +| | `-TextComment 0x560468149380 Text=" " +| `-BlockCommandComment 0x5604681493d0 Name="return" +| `-ParagraphComment 0x560468149430 +| `-TextComment 0x560468149400 Text=" True if the entity is valid, false if the entity is not valid." +|-FunctionDecl 0x560468043ea8 line:5805:6 ecs_is_alive 'bool (const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468043d98 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468043e10 col:18 e 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468149840 +| |-ParagraphComment 0x560468149580 +| | |-TextComment 0x560468149500 Text=" Test whether an entity is alive." +| | |-TextComment 0x560468149520 Text=" An entity is alive when it has been returned by ecs_new (or similar) or if" +| | `-TextComment 0x560468149540 Text=" it is not empty (componentts have been explicitly added to the id)." +| |-ParagraphComment 0x5604681495d0 +| | `-TextComment 0x5604681495a0 Text=" " +| |-ParamCommandComment 0x5604681495f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681496a0 +| | |-TextComment 0x560468149650 Text=" The world." +| | `-TextComment 0x560468149670 Text=" " +| |-ParamCommandComment 0x5604681496c0 [in] implicitly Param="e" ParamIndex=1 +| | `-ParagraphComment 0x560468149770 +| | |-TextComment 0x560468149720 Text=" The entity." +| | `-TextComment 0x560468149740 Text=" " +| `-BlockCommandComment 0x560468149790 Name="return" +| `-ParagraphComment 0x5604681497f0 +| `-TextComment 0x5604681497c0 Text=" True if the entity is alive, false if the entity is not alive." +|-FunctionDecl 0x560468044088 line:5815:10 ecs_strip_generation 'ecs_id_t (ecs_entity_t)' +| |-ParmVarDecl 0x560468043f98 col:18 e 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468149ac0 +| |-ParagraphComment 0x5604681498e0 +| | `-TextComment 0x5604681498b0 Text=" Remove generation from entity id." +| |-ParagraphComment 0x560468149930 +| | `-TextComment 0x560468149900 Text=" " +| |-ParamCommandComment 0x560468149950 [in] implicitly Param="e" ParamIndex=0 +| | `-ParagraphComment 0x560468149a00 +| | |-TextComment 0x5604681499b0 Text=" The entity id." +| | `-TextComment 0x5604681499d0 Text=" " +| `-BlockCommandComment 0x560468149a20 Name="return" +| `-ParagraphComment 0x560468149a80 +| `-TextComment 0x560468149a50 Text=" The entity id without the generation count." +|-FunctionDecl 0x560468044278 line:5830:6 ecs_set_entity_generation 'void (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468044168 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680441e0 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468149e70 +| |-ParagraphComment 0x560468149bb0 +| | |-TextComment 0x560468149b30 Text=" Override the generation of an entity." +| | |-TextComment 0x560468149b50 Text=" The generation count of an entity is increased each time an entity is deleted" +| | `-TextComment 0x560468149b70 Text=" and is used to test whether an entity id is alive." +| |-ParagraphComment 0x560468149c50 +| | |-TextComment 0x560468149bd0 Text=" This operation overrides the current generation of an entity with the" +| | |-TextComment 0x560468149bf0 Text=" specified generation, which can be useful if an entity is externally managed," +| | `-TextComment 0x560468149c10 Text=" like for external pools, savefiles or netcode." +| |-ParagraphComment 0x560468149ca0 +| | `-TextComment 0x560468149c70 Text=" " +| |-ParamCommandComment 0x560468149cc0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468149d70 +| | |-TextComment 0x560468149d20 Text=" The world." +| | `-TextComment 0x560468149d40 Text=" " +| `-ParamCommandComment 0x560468149d90 [in] implicitly Param="entity" ParamIndex=1 +| `-ParagraphComment 0x560468149e20 +| `-TextComment 0x560468149df0 Text=" Entity for which to set the generation with the new generation." +|-FunctionDecl 0x5604680444f8 line:5851:14 ecs_get_alive 'ecs_entity_t (const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468044368 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680443e0 col:18 e 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814a370 +| |-ParagraphComment 0x560468149f80 +| | |-TextComment 0x560468149ee0 Text=" Get alive identifier." +| | |-TextComment 0x560468149f00 Text=" In some cases an application may need to work with identifiers from which" +| | |-TextComment 0x560468149f20 Text=" the generation has been stripped. A typical scenario in which this happens is" +| | `-TextComment 0x560468149f40 Text=" when iterating relationships in an entity type." +| |-ParagraphComment 0x56046814a040 +| | |-TextComment 0x560468149fa0 Text=" For example, when obtaining the parent id from a ChildOf relationship, the parent" +| | |-TextComment 0x560468149fc0 Text=" (second element of the pair) will have been stored in a 32 bit value, which " +| | |-TextComment 0x560468149fe0 Text=" cannot store the entity generation. This function can retrieve the identifier" +| | `-TextComment 0x56046814a000 Text=" with the current generation for that id." +| |-ParagraphComment 0x56046814a090 +| | `-TextComment 0x56046814a060 Text=" If the provided identifier is not alive, the function will return 0." +| |-ParagraphComment 0x56046814a0e0 +| | `-TextComment 0x56046814a0b0 Text=" " +| |-ParamCommandComment 0x56046814a100 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814a1b0 +| | |-TextComment 0x56046814a160 Text=" The world." +| | `-TextComment 0x56046814a180 Text=" " +| |-ParamCommandComment 0x56046814a1d0 [in] implicitly Param="e" ParamIndex=1 +| | `-ParagraphComment 0x56046814a290 +| | |-TextComment 0x56046814a230 Text=" The for which to obtain the current alive entity id." +| | `-TextComment 0x56046814a250 Text=" " +| `-BlockCommandComment 0x56046814a2b0 Name="return" +| `-ParagraphComment 0x56046814a310 +| `-TextComment 0x56046814a2e0 Text=" The alive entity id if there is one, or 0 if the id is not alive." +|-FunctionDecl 0x5604680446f8 line:5876:6 ecs_ensure 'void (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680445e8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468044660 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814a870 +| |-ParagraphComment 0x56046814a480 +| | |-TextComment 0x56046814a3e0 Text=" Ensure id is alive." +| | |-TextComment 0x56046814a400 Text=" This operation ensures that the provided id is alive. This is useful in" +| | |-TextComment 0x56046814a420 Text=" scenarios where an application has an existing id that has not been created" +| | `-TextComment 0x56046814a440 Text=" with ecs_new (such as a global constant or an id from a remote application)." +| |-ParagraphComment 0x56046814a4f0 +| | |-TextComment 0x56046814a4a0 Text=" When this operation is successful it guarantees that the provided id exists, " +| | `-TextComment 0x56046814a4c0 Text=" is valid and is alive." +| |-ParagraphComment 0x56046814a560 +| | |-TextComment 0x56046814a510 Text=" Before this operation the id must either not be alive or have a generation" +| | `-TextComment 0x56046814a530 Text=" that is equal to the passed in entity." +| |-ParagraphComment 0x56046814a5d0 +| | |-TextComment 0x56046814a580 Text=" If the provided id has a non-zero generation count and the id does not exist" +| | `-TextComment 0x56046814a5a0 Text=" in the world, the id will be created with the specified generation." +| |-ParagraphComment 0x56046814a640 +| | |-TextComment 0x56046814a5f0 Text=" If the provided id is alive and has a generation count that does not match" +| | `-TextComment 0x56046814a610 Text=" the provided id, the operation will fail." +| |-ParagraphComment 0x56046814a690 +| | `-TextComment 0x56046814a660 Text=" " +| |-ParamCommandComment 0x56046814a6b0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814a760 +| | |-TextComment 0x56046814a710 Text=" The world." +| | `-TextComment 0x56046814a730 Text=" " +| `-ParamCommandComment 0x56046814a780 [in] implicitly Param="entity" ParamIndex=1 +| `-ParagraphComment 0x56046814a810 +| `-TextComment 0x56046814a7e0 Text=" The entity id to make alive." +|-FunctionDecl 0x560467f6cfe0 line:5899:6 ecs_ensure_id 'void (ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x560467f6ced0 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560467f6cf48 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x56046814ad40 +| |-ParagraphComment 0x56046814a960 +| | |-TextComment 0x56046814a8e0 Text=" Same as ecs_ensure, but for (component) ids." +| | |-TextComment 0x56046814a900 Text=" An id can be an entity or pair, and can contain id flags. This operation" +| | `-TextComment 0x56046814a920 Text=" ensures that the entity (or entities, for a pair) are alive." +| |-ParagraphComment 0x56046814a9d0 +| | |-TextComment 0x56046814a980 Text=" When this operation is successful it guarantees that the provided id can be" +| | `-TextComment 0x56046814a9a0 Text=" used in operations that accept an id." +| |-ParagraphComment 0x56046814aa70 +| | |-TextComment 0x56046814a9f0 Text=" Since entities in a pair do not encode their generation ids, this operation" +| | |-TextComment 0x56046814aa10 Text=" will not fail when an entity with non-zero generation count already exists in" +| | `-TextComment 0x56046814aa30 Text=" the world. " +| |-ParagraphComment 0x56046814ab10 +| | |-TextComment 0x56046814aa90 Text=" This is different from ecs_ensure, which will fail if attempted with an id" +| | |-TextComment 0x56046814aab0 Text=" that has generation 0 and an entity with a non-zero generation is currently " +| | `-TextComment 0x56046814aad0 Text=" alive." +| |-ParagraphComment 0x56046814ab60 +| | `-TextComment 0x56046814ab30 Text=" " +| |-ParamCommandComment 0x56046814ab80 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814ac30 +| | |-TextComment 0x56046814abe0 Text=" The world." +| | `-TextComment 0x56046814ac00 Text=" " +| `-ParamCommandComment 0x56046814ac50 [in] implicitly Param="id" ParamIndex=1 +| `-ParagraphComment 0x56046814ace0 +| `-TextComment 0x56046814acb0 Text=" The id to make alive." +|-FunctionDecl 0x560467f6d1d8 line:5911:6 ecs_exists 'bool (const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560467f6d0c8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6d140 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814b0c0 +| |-ParagraphComment 0x56046814ae00 +| | |-TextComment 0x56046814adb0 Text=" Test whether an entity exists." +| | `-TextComment 0x56046814add0 Text=" Similar as ecs_is_alive, but ignores entity generation count." +| |-ParagraphComment 0x56046814ae50 +| | `-TextComment 0x56046814ae20 Text=" " +| |-ParamCommandComment 0x56046814ae70 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814af20 +| | |-TextComment 0x56046814aed0 Text=" The world." +| | `-TextComment 0x56046814aef0 Text=" " +| |-ParamCommandComment 0x56046814af40 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814aff0 +| | |-TextComment 0x56046814afa0 Text=" The entity." +| | `-TextComment 0x56046814afc0 Text=" " +| `-BlockCommandComment 0x56046814b010 Name="return" +| `-ParagraphComment 0x56046814b070 +| `-TextComment 0x56046814b040 Text=" True if the entity exists, false if the entity does not exist." +|-FunctionDecl 0x560467f6d538 line:5930:19 ecs_get_type 'const ecs_type_t *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560467f6d350 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6d3c8 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814b420 +| |-ParagraphComment 0x56046814b160 +| | `-TextComment 0x56046814b130 Text=" Get the type of an entity." +| |-ParagraphComment 0x56046814b1b0 +| | `-TextComment 0x56046814b180 Text=" " +| |-ParamCommandComment 0x56046814b1d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814b280 +| | |-TextComment 0x56046814b230 Text=" The world." +| | `-TextComment 0x56046814b250 Text=" " +| |-ParamCommandComment 0x56046814b2a0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814b350 +| | |-TextComment 0x56046814b300 Text=" The entity." +| | `-TextComment 0x56046814b320 Text=" " +| `-BlockCommandComment 0x56046814b370 Name="return" +| `-ParagraphComment 0x56046814b3d0 +| `-TextComment 0x56046814b3a0 Text=" The type of the entity, NULL if the entity has no components." +|-FunctionDecl 0x560467f6d7b8 line:5941:14 ecs_get_table 'ecs_table_t *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560467f6d628 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6d6a0 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814b780 +| |-ParagraphComment 0x56046814b4c0 +| | `-TextComment 0x56046814b490 Text=" Get the table of an entity." +| |-ParagraphComment 0x56046814b510 +| | `-TextComment 0x56046814b4e0 Text=" " +| |-ParamCommandComment 0x56046814b530 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814b5e0 +| | |-TextComment 0x56046814b590 Text=" The world." +| | `-TextComment 0x56046814b5b0 Text=" " +| |-ParamCommandComment 0x56046814b600 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814b6b0 +| | |-TextComment 0x56046814b660 Text=" The entity." +| | `-TextComment 0x56046814b680 Text=" " +| `-BlockCommandComment 0x56046814b6d0 Name="return" +| `-ParagraphComment 0x56046814b730 +| `-TextComment 0x56046814b700 Text=" The table of the entity, NULL if the entity has no components/tags." +|-FunctionDecl 0x560467f6da40 line:5953:7 ecs_type_str 'char *(const ecs_world_t *, const ecs_type_t *)' +| |-ParmVarDecl 0x560467f6d8a8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6d920 col:23 type 'const ecs_type_t *' +| `-FullComment 0x56046814bb00 +| |-ParagraphComment 0x56046814b840 +| | |-TextComment 0x56046814b7f0 Text=" Convert type to string." +| | `-TextComment 0x56046814b810 Text=" The result of this operation must be freed with ecs_os_free." +| |-ParagraphComment 0x56046814b890 +| | `-TextComment 0x56046814b860 Text=" " +| |-ParamCommandComment 0x56046814b8b0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814b960 +| | |-TextComment 0x56046814b910 Text=" The world." +| | `-TextComment 0x56046814b930 Text=" " +| |-ParamCommandComment 0x56046814b980 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x56046814ba30 +| | |-TextComment 0x56046814b9e0 Text=" The type." +| | `-TextComment 0x56046814ba00 Text=" " +| `-BlockCommandComment 0x56046814ba50 Name="return" +| `-ParagraphComment 0x56046814bab0 +| `-TextComment 0x56046814ba80 Text=" The stringified type." +|-FunctionDecl 0x560467f6dcc0 line:5966:7 ecs_table_str 'char *(const ecs_world_t *, const ecs_table_t *)' +| |-ParmVarDecl 0x560467f6db28 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6dba0 col:24 table 'const ecs_table_t *' +| `-FullComment 0x56046814beb0 +| |-ParagraphComment 0x56046814bbf0 +| | |-TextComment 0x56046814bb70 Text=" Convert table to string." +| | |-TextComment 0x56046814bb90 Text=" Same as ecs_type_str(world, ecs_table_get_type(table)). The result of this" +| | `-TextComment 0x56046814bbb0 Text=" operation must be freed with ecs_os_free." +| |-ParagraphComment 0x56046814bc40 +| | `-TextComment 0x56046814bc10 Text=" " +| |-ParamCommandComment 0x56046814bc60 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814bd10 +| | |-TextComment 0x56046814bcc0 Text=" The world." +| | `-TextComment 0x56046814bce0 Text=" " +| |-ParamCommandComment 0x56046814bd30 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046814bde0 +| | |-TextComment 0x56046814bd90 Text=" The table." +| | `-TextComment 0x56046814bdb0 Text=" " +| `-BlockCommandComment 0x56046814be00 Name="return" +| `-ParagraphComment 0x56046814be60 +| `-TextComment 0x56046814be30 Text=" The stringified table type." +|-FunctionDecl 0x560467f6e180 line:5982:7 ecs_entity_str 'char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560467f6dda8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6de20 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814c2f0 +| |-ParagraphComment 0x56046814bfc0 +| | |-TextComment 0x56046814bf20 Text=" Convert entity to string." +| | |-TextComment 0x56046814bf40 Text=" Same as combining:" +| | |-TextComment 0x56046814bf60 Text=" - ecs_get_fullpath(world, entity)" +| | `-TextComment 0x56046814bf80 Text=" - ecs_type_str(world, ecs_get_type(world, entity))" +| |-ParagraphComment 0x56046814c010 +| | `-TextComment 0x56046814bfe0 Text=" The result of this operation must be freed with ecs_os_free." +| |-ParagraphComment 0x56046814c060 +| | `-TextComment 0x56046814c030 Text=" " +| |-ParamCommandComment 0x56046814c080 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814c130 +| | |-TextComment 0x56046814c0e0 Text=" The world." +| | `-TextComment 0x56046814c100 Text=" " +| |-ParamCommandComment 0x56046814c150 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814c200 +| | |-TextComment 0x56046814c1b0 Text=" The entity." +| | `-TextComment 0x56046814c1d0 Text=" " +| `-BlockCommandComment 0x56046814c220 Name="return" +| `-ParagraphComment 0x56046814c2a0 +| `-TextComment 0x56046814c250 Text=" The entity path with stringified type." +|-FunctionDecl 0x560467f6e3f8 line:5996:6 ecs_has_id 'bool (const ecs_world_t *, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x560467f6e268 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6e2e0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6e358 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x56046814c770 +| |-ParagraphComment 0x56046814c3e0 +| | |-TextComment 0x56046814c360 Text=" Test if an entity has an entity." +| | |-TextComment 0x56046814c380 Text=" This operation returns true if the entity has the provided entity in its " +| | `-TextComment 0x56046814c3a0 Text=" type." +| |-ParagraphComment 0x56046814c430 +| | `-TextComment 0x56046814c400 Text=" " +| |-ParamCommandComment 0x56046814c450 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814c500 +| | |-TextComment 0x56046814c4b0 Text=" The world." +| | `-TextComment 0x56046814c4d0 Text=" " +| |-ParamCommandComment 0x56046814c520 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814c5d0 +| | |-TextComment 0x56046814c580 Text=" The entity." +| | `-TextComment 0x56046814c5a0 Text=" " +| |-ParamCommandComment 0x56046814c5f0 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x56046814c6a0 +| | |-TextComment 0x56046814c650 Text=" The id to test for." +| | `-TextComment 0x56046814c670 Text=" " +| `-BlockCommandComment 0x56046814c6c0 Name="return" +| `-ParagraphComment 0x56046814c720 +| `-TextComment 0x56046814c6f0 Text=" True if the entity has the entity, false if not." +|-FunctionDecl 0x560467f6e798 line:6016:14 ecs_get_target 'ecs_entity_t (const ecs_world_t *, ecs_entity_t, ecs_entity_t, int32_t)' +| |-ParmVarDecl 0x560467f6e4e8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6e560 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6e5d8 col:18 rel 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6e650 col:13 index 'int32_t':'int' +| `-FullComment 0x56046814cd60 +| |-ParagraphComment 0x56046814c880 +| | |-TextComment 0x56046814c7e0 Text=" Get the target of a relationship." +| | |-TextComment 0x56046814c800 Text=" This will return a target (second element of a pair) of the entity for the " +| | |-TextComment 0x56046814c820 Text=" specified relationship. The index allows for iterating through the targets, if a " +| | `-TextComment 0x56046814c840 Text=" single entity has multiple targets for the same relationship." +| |-ParagraphComment 0x56046814c8f0 +| | |-TextComment 0x56046814c8a0 Text=" If the index is larger than the total number of instances the entity has for" +| | `-TextComment 0x56046814c8c0 Text=" the relationship, the operation will return 0." +| |-ParagraphComment 0x56046814c940 +| | `-TextComment 0x56046814c910 Text=" " +| |-ParamCommandComment 0x56046814c960 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814ca10 +| | |-TextComment 0x56046814c9c0 Text=" The world." +| | `-TextComment 0x56046814c9e0 Text=" " +| |-ParamCommandComment 0x56046814ca30 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814cae0 +| | |-TextComment 0x56046814ca90 Text=" The entity." +| | `-TextComment 0x56046814cab0 Text=" " +| |-ParamCommandComment 0x56046814cb00 [in] implicitly Param="rel" ParamIndex=2 +| | `-ParagraphComment 0x56046814cbb0 +| | |-TextComment 0x56046814cb60 Text=" The relationship between the entity and the target." +| | `-TextComment 0x56046814cb80 Text=" " +| |-ParamCommandComment 0x56046814cbd0 [in] implicitly Param="index" ParamIndex=3 +| | `-ParagraphComment 0x56046814cc80 +| | |-TextComment 0x56046814cc30 Text=" The index of the relationship instance." +| | `-TextComment 0x56046814cc50 Text=" " +| `-BlockCommandComment 0x56046814cca0 Name="return" +| `-ParagraphComment 0x56046814cd00 +| `-TextComment 0x56046814ccd0 Text=" The target for the relationship at the specified index." +|-FunctionDecl 0x560467f6eb48 line:6041:14 ecs_get_target_for_id 'ecs_entity_t (const ecs_world_t *, ecs_entity_t, ecs_entity_t, ecs_id_t)' +| |-ParmVarDecl 0x560467f6e898 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6e910 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6e988 col:18 rel 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6ea00 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x56046814d400 +| |-ParagraphComment 0x56046814cea0 +| | |-TextComment 0x56046814cdd0 Text=" Get the target of a relationship for a given id." +| | |-TextComment 0x56046814cdf0 Text=" This operation returns the first entity that has the provided id by following" +| | |-TextComment 0x56046814ce10 Text=" the specified relationship. If the entity itself has the id then entity will" +| | |-TextComment 0x56046814ce30 Text=" be returned. If the id cannot be found on the entity or by following the" +| | `-TextComment 0x56046814ce50 Text=" relationship, the operation will return 0." +| |-ParagraphComment 0x56046814cf10 +| | |-TextComment 0x56046814cec0 Text=" This operation can be used to lookup, for example, which prefab is providing" +| | `-TextComment 0x56046814cee0 Text=" a component by specifying the IsA relationship:" +| |-ParagraphComment 0x56046814cf80 +| | |-TextComment 0x56046814cf30 Text=" // Is Position provided by the entity or one of its base entities?" +| | `-TextComment 0x56046814cf50 Text=" ecs_get_target_for_id(world, entity, EcsIsA, ecs_id(Position))" +| |-ParagraphComment 0x56046814cfd0 +| | `-TextComment 0x56046814cfa0 Text=" " +| |-ParamCommandComment 0x56046814cff0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814d0a0 +| | |-TextComment 0x56046814d050 Text=" The world." +| | `-TextComment 0x56046814d070 Text=" " +| |-ParamCommandComment 0x56046814d0c0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814d170 +| | |-TextComment 0x56046814d120 Text=" The entity." +| | `-TextComment 0x56046814d140 Text=" " +| |-ParamCommandComment 0x56046814d190 [in] implicitly Param="rel" ParamIndex=2 +| | `-ParagraphComment 0x56046814d240 +| | |-TextComment 0x56046814d1f0 Text=" The relationship to follow." +| | `-TextComment 0x56046814d210 Text=" " +| |-ParamCommandComment 0x56046814d260 [in] implicitly Param="id" ParamIndex=3 +| | `-ParagraphComment 0x56046814d310 +| | |-TextComment 0x56046814d2c0 Text=" The id to lookup." +| | `-TextComment 0x56046814d2e0 Text=" " +| `-BlockCommandComment 0x56046814d330 Name="return" +| `-ParagraphComment 0x56046814d390 +| `-TextComment 0x56046814d360 Text=" The entity for which the target has been found." +|-FunctionDecl 0x560467f6ee58 line:6058:9 ecs_get_depth 'int32_t (const ecs_world_t *, ecs_entity_t, ecs_entity_t)' +| |-ParmVarDecl 0x560467f6ec48 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6ecc0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6ed38 col:18 rel 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814d8a0 +| |-ParagraphComment 0x56046814d510 +| | |-TextComment 0x56046814d470 Text=" Return depth for entity in tree for relationship rel." +| | |-TextComment 0x56046814d490 Text=" Depth is determined by counting the number of targets encountered while " +| | |-TextComment 0x56046814d4b0 Text=" traversing up the relationship tree for rel. Only acyclic relationships are" +| | `-TextComment 0x56046814d4d0 Text=" supported." +| |-ParagraphComment 0x56046814d560 +| | `-TextComment 0x56046814d530 Text=" " +| |-ParamCommandComment 0x56046814d580 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814d630 +| | |-TextComment 0x56046814d5e0 Text=" The world." +| | `-TextComment 0x56046814d600 Text=" " +| |-ParamCommandComment 0x56046814d650 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814d700 +| | |-TextComment 0x56046814d6b0 Text=" The entity." +| | `-TextComment 0x56046814d6d0 Text=" " +| |-ParamCommandComment 0x56046814d720 [in] implicitly Param="rel" ParamIndex=2 +| | `-ParagraphComment 0x56046814d7d0 +| | |-TextComment 0x56046814d780 Text=" The relationship." +| | `-TextComment 0x56046814d7a0 Text=" " +| `-BlockCommandComment 0x56046814d7f0 Name="return" +| `-ParagraphComment 0x56046814d850 +| `-TextComment 0x56046814d820 Text=" The depth of the entity in the tree." +|-FunctionDecl 0x560467f6f250 line:6071:9 ecs_count_id 'int32_t (const ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x560467f6ef48 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6efc0 col:14 entity 'ecs_id_t':'unsigned long' +| `-FullComment 0x56046814dc20 +| |-ParagraphComment 0x56046814d960 +| | |-TextComment 0x56046814d910 Text=" Count entities that have the specified id." +| | `-TextComment 0x56046814d930 Text=" Returns the number of entities that have the specified id." +| |-ParagraphComment 0x56046814d9b0 +| | `-TextComment 0x56046814d980 Text=" " +| |-ParamCommandComment 0x56046814d9d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814da80 +| | |-TextComment 0x56046814da30 Text=" The world." +| | `-TextComment 0x56046814da50 Text=" " +| |-ParamCommandComment 0x56046814daa0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814db50 +| | |-TextComment 0x56046814db00 Text=" The id to search for." +| | `-TextComment 0x56046814db20 Text=" " +| `-BlockCommandComment 0x56046814db70 Name="return" +| `-ParagraphComment 0x56046814dbd0 +| `-TextComment 0x56046814dba0 Text=" The number of entities that have the id." +|-FunctionDecl 0x560467f6f530 line:6092:13 ecs_get_name 'const char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560467f6f398 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6f410 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814dfa0 +| |-ParagraphComment 0x56046814dce0 +| | |-TextComment 0x56046814dc90 Text=" Get the name of an entity." +| | `-TextComment 0x56046814dcb0 Text=" This will return the name stored in (EcsIdentifier, EcsName)." +| |-ParagraphComment 0x56046814dd30 +| | `-TextComment 0x56046814dd00 Text=" " +| |-ParamCommandComment 0x56046814dd50 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814de00 +| | |-TextComment 0x56046814ddb0 Text=" The world." +| | `-TextComment 0x56046814ddd0 Text=" " +| |-ParamCommandComment 0x56046814de20 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814ded0 +| | |-TextComment 0x56046814de80 Text=" The entity." +| | `-TextComment 0x56046814dea0 Text=" " +| `-BlockCommandComment 0x56046814def0 Name="return" +| `-ParagraphComment 0x56046814df50 +| `-TextComment 0x56046814df20 Text=" The type of the entity, NULL if the entity has no name." +|-FunctionDecl 0x560467f6f730 line:6104:13 ecs_get_symbol 'const char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560467f6f618 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f6f690 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046814e330 +| |-ParagraphComment 0x56046814e060 +| | |-TextComment 0x56046814e010 Text=" Get the symbol of an entity." +| | `-TextComment 0x56046814e030 Text=" This will return the symbol stored in (EcsIdentifier, EcsSymbol)." +| |-ParagraphComment 0x56046814e0b0 +| | `-TextComment 0x56046814e080 Text=" " +| |-ParamCommandComment 0x56046814e0d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814e180 +| | |-TextComment 0x56046814e130 Text=" The world." +| | `-TextComment 0x56046814e150 Text=" " +| |-ParamCommandComment 0x56046814e1a0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814e250 +| | |-TextComment 0x56046814e200 Text=" The entity." +| | `-TextComment 0x56046814e220 Text=" " +| `-BlockCommandComment 0x56046814e270 Name="return" +| `-ParagraphComment 0x56046814e2e0 +| `-TextComment 0x56046814e2b0 Text=" The type of the entity, NULL if the entity has no name." +|-FunctionDecl 0x560467f6fa38 line:6120:14 ecs_set_name 'ecs_entity_t (ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x560467f6f818 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560467f6f890 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6f910 col:17 name 'const char *' +| `-FullComment 0x56046814e810 +| |-ParagraphComment 0x56046814e420 +| | |-TextComment 0x56046814e3a0 Text=" Set the name of an entity." +| | |-TextComment 0x56046814e3c0 Text=" This will set or overwrite the name of an entity. If no entity is provided," +| | `-TextComment 0x56046814e3e0 Text=" a new entity will be created." +| |-ParagraphComment 0x56046814e470 +| | `-TextComment 0x56046814e440 Text=" The name is stored in (EcsIdentifier, EcsName)." +| |-ParagraphComment 0x56046814e4c0 +| | `-TextComment 0x56046814e490 Text=" " +| |-ParamCommandComment 0x56046814e4e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814e590 +| | |-TextComment 0x56046814e540 Text=" The world." +| | `-TextComment 0x56046814e560 Text=" " +| |-ParamCommandComment 0x56046814e5b0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814e660 +| | |-TextComment 0x56046814e610 Text=" The entity." +| | `-TextComment 0x56046814e630 Text=" " +| |-ParamCommandComment 0x56046814e680 [in] implicitly Param="name" ParamIndex=2 +| | `-ParagraphComment 0x56046814e730 +| | |-TextComment 0x56046814e6e0 Text=" The name." +| | `-TextComment 0x56046814e700 Text=" " +| `-BlockCommandComment 0x56046814e750 Name="return" +| `-ParagraphComment 0x56046814e7b0 +| `-TextComment 0x56046814e780 Text=" The provided entity, or a new entity if 0 was provided." +|-FunctionDecl 0x560467f6fcc0 line:6137:14 ecs_set_symbol 'ecs_entity_t (ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x560467f6fb28 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560467f6fba0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6fc20 col:17 symbol 'const char *' +| `-FullComment 0x56046814ecf0 +| |-ParagraphComment 0x56046814e900 +| | |-TextComment 0x56046814e880 Text=" Set the symbol of an entity." +| | |-TextComment 0x56046814e8a0 Text=" This will set or overwrite the symbol of an entity. If no entity is provided," +| | `-TextComment 0x56046814e8c0 Text=" a new entity will be created." +| |-ParagraphComment 0x56046814e950 +| | `-TextComment 0x56046814e920 Text=" The symbol is stored in (EcsIdentifier, EcsSymbol)." +| |-ParagraphComment 0x56046814e9a0 +| | `-TextComment 0x56046814e970 Text=" " +| |-ParamCommandComment 0x56046814e9c0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814ea70 +| | |-TextComment 0x56046814ea20 Text=" The world." +| | `-TextComment 0x56046814ea40 Text=" " +| |-ParamCommandComment 0x56046814ea90 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814eb40 +| | |-TextComment 0x56046814eaf0 Text=" The entity." +| | `-TextComment 0x56046814eb10 Text=" " +| |-ParamCommandComment 0x56046814eb60 [in] implicitly Param="symbol" ParamIndex=2 +| | `-ParagraphComment 0x56046814ec10 +| | |-TextComment 0x56046814ebc0 Text=" The symbol." +| | `-TextComment 0x56046814ebe0 Text=" " +| `-BlockCommandComment 0x56046814ec30 Name="return" +| `-ParagraphComment 0x56046814ec90 +| `-TextComment 0x56046814ec60 Text=" The provided entity, or a new entity if 0 was provided." +|-FunctionDecl 0x560467f6ffd8 line:6154:6 ecs_set_alias 'void (ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x560467f6fdb8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560467f6fe30 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f6feb0 col:17 alias 'const char *' +| `-FullComment 0x56046814f140 +| |-ParagraphComment 0x56046814ee00 +| | |-TextComment 0x56046814ed60 Text=" Set alias for entity. " +| | |-TextComment 0x56046814ed80 Text=" An entity can be looked up using its alias from the root scope without " +| | |-TextComment 0x56046814eda0 Text=" providing the fully qualified name if its parent. An entity can only have" +| | `-TextComment 0x56046814edc0 Text=" a single alias." +| |-ParagraphComment 0x56046814ee50 +| | `-TextComment 0x56046814ee20 Text=" The symbol is stored in (EcsIdentifier, EcsAlias)." +| |-ParagraphComment 0x56046814eea0 +| | `-TextComment 0x56046814ee70 Text=" " +| |-ParamCommandComment 0x56046814eec0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814ef70 +| | |-TextComment 0x56046814ef20 Text=" The world." +| | `-TextComment 0x56046814ef40 Text=" " +| |-ParamCommandComment 0x56046814ef90 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046814f040 +| | |-TextComment 0x56046814eff0 Text=" The entity." +| | `-TextComment 0x56046814f010 Text=" " +| `-ParamCommandComment 0x56046814f060 [in] implicitly Param="alias" ParamIndex=2 +| `-ParagraphComment 0x56046814f0f0 +| `-TextComment 0x56046814f0c0 Text=" The alias." +|-FunctionDecl 0x560467f70498 line:6168:14 ecs_lookup 'ecs_entity_t (const ecs_world_t *, const char *)' +| |-ParmVarDecl 0x560467f700c8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f70148 col:17 name 'const char *' +| `-FullComment 0x56046814f4f0 +| |-ParagraphComment 0x56046814f230 +| | |-TextComment 0x56046814f1b0 Text=" Lookup an entity by name." +| | |-TextComment 0x56046814f1d0 Text=" Returns an entity that matches the specified name. Only looks for entities in" +| | `-TextComment 0x56046814f1f0 Text=" the current scope (root if no scope is provided)." +| |-ParagraphComment 0x56046814f280 +| | `-TextComment 0x56046814f250 Text=" " +| |-ParamCommandComment 0x56046814f2a0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814f350 +| | |-TextComment 0x56046814f300 Text=" The world." +| | `-TextComment 0x56046814f320 Text=" " +| |-ParamCommandComment 0x56046814f370 [in] implicitly Param="name" ParamIndex=1 +| | `-ParagraphComment 0x56046814f420 +| | |-TextComment 0x56046814f3d0 Text=" The entity name." +| | `-TextComment 0x56046814f3f0 Text=" " +| `-BlockCommandComment 0x56046814f440 Name="return" +| `-ParagraphComment 0x56046814f4a0 +| `-TextComment 0x56046814f470 Text=" The entity with the specified name, or 0 if no entity was found." +|-FunctionDecl 0x560467f707a8 line:6182:14 ecs_lookup_child 'ecs_entity_t (const ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x560467f70588 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f70600 col:18 parent 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f70680 col:17 name 'const char *' +| `-FullComment 0x56046814f8c0 +| |-ParagraphComment 0x56046814f600 +| | |-TextComment 0x56046814f560 Text=" Lookup a child entity by name." +| | |-TextComment 0x56046814f580 Text=" Returns an entity that matches the specified name. Only looks for entities in" +| | |-TextComment 0x56046814f5a0 Text=" the provided parent. If no parent is provided, look in the current scope (" +| | `-TextComment 0x56046814f5c0 Text=" root if no scope is provided)." +| |-ParagraphComment 0x56046814f650 +| | `-TextComment 0x56046814f620 Text=" " +| |-ParamCommandComment 0x56046814f670 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814f720 +| | |-TextComment 0x56046814f6d0 Text=" The world." +| | `-TextComment 0x56046814f6f0 Text=" " +| |-ParamCommandComment 0x56046814f740 [in] implicitly Param="name" ParamIndex=2 +| | `-ParagraphComment 0x56046814f7f0 +| | |-TextComment 0x56046814f7a0 Text=" The entity name." +| | `-TextComment 0x56046814f7c0 Text=" " +| `-BlockCommandComment 0x56046814f810 Name="return" +| `-ParagraphComment 0x56046814f870 +| `-TextComment 0x56046814f840 Text=" The entity with the specified name, or 0 if no entity was found." +|-FunctionDecl 0x560467f70c78 line:6206:14 ecs_lookup_path_w_sep 'ecs_entity_t (const ecs_world_t *, ecs_entity_t, const char *, const char *, const char *, bool)' +| |-ParmVarDecl 0x560467f70898 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f70910 col:18 parent 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f70990 col:17 path 'const char *' +| |-ParmVarDecl 0x560467f70a10 col:17 sep 'const char *' +| |-ParmVarDecl 0x560467f70a90 col:17 prefix 'const char *' +| |-ParmVarDecl 0x560467f70b08 col:10 recursive 'bool' +| `-FullComment 0x5604681500b0 +| |-ParagraphComment 0x56046814f9d0 +| | |-TextComment 0x56046814f930 Text=" Lookup an entity from a path." +| | |-TextComment 0x56046814f950 Text=" Lookup an entity from a provided path, relative to the provided parent. The" +| | |-TextComment 0x56046814f970 Text=" operation will use the provided separator to tokenize the path expression. If" +| | `-TextComment 0x56046814f990 Text=" the provided path contains the prefix, the search will start from the root." +| |-ParagraphComment 0x56046814fa90 +| | |-TextComment 0x56046814f9f0 Text=" If the entity is not found in the provided parent, the operation will " +| | |-TextComment 0x56046814fa10 Text=" continue to search in the parent of the parent, until the root is reached. If" +| | |-TextComment 0x56046814fa30 Text=" the entity is still not found, the lookup will search in the flecs.core" +| | `-TextComment 0x56046814fa50 Text=" scope. If the entity is not found there either, the function returns 0." +| |-ParagraphComment 0x56046814fae0 +| | `-TextComment 0x56046814fab0 Text=" " +| |-ParamCommandComment 0x56046814fb00 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046814fbb0 +| | |-TextComment 0x56046814fb60 Text=" The world." +| | `-TextComment 0x56046814fb80 Text=" " +| |-ParamCommandComment 0x56046814fbd0 [in] implicitly Param="parent" ParamIndex=1 +| | `-ParagraphComment 0x56046814fc80 +| | |-TextComment 0x56046814fc30 Text=" The entity from which to resolve the path." +| | `-TextComment 0x56046814fc50 Text=" " +| |-ParamCommandComment 0x56046814fca0 [in] implicitly Param="path" ParamIndex=2 +| | `-ParagraphComment 0x56046814fd50 +| | |-TextComment 0x56046814fd00 Text=" The path to resolve." +| | `-TextComment 0x56046814fd20 Text=" " +| |-ParamCommandComment 0x56046814fd70 [in] implicitly Param="sep" ParamIndex=3 +| | `-ParagraphComment 0x56046814fe20 +| | |-TextComment 0x56046814fdd0 Text=" The path separator." +| | `-TextComment 0x56046814fdf0 Text=" " +| |-ParamCommandComment 0x56046814fe40 [in] implicitly Param="prefix" ParamIndex=4 +| | `-ParagraphComment 0x56046814fef0 +| | |-TextComment 0x56046814fea0 Text=" The path prefix." +| | `-TextComment 0x56046814fec0 Text=" " +| |-ParamCommandComment 0x56046814ff10 [in] implicitly Param="recursive" ParamIndex=5 +| | `-ParagraphComment 0x56046814ffc0 +| | |-TextComment 0x56046814ff70 Text=" Recursively traverse up the tree until entity is found." +| | `-TextComment 0x56046814ff90 Text=" " +| `-BlockCommandComment 0x56046814ffe0 Name="return" +| `-ParagraphComment 0x560468150040 +| `-TextComment 0x560468150010 Text=" The entity if found, else 0." +|-FunctionDecl 0x560467f70fa8 line:6222:14 ecs_lookup_symbol 'ecs_entity_t (const ecs_world_t *, const char *, bool)' +| |-ParmVarDecl 0x560467f70d88 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f70e08 col:17 symbol 'const char *' +| |-ParmVarDecl 0x560467f70e80 col:10 lookup_as_path 'bool' +| `-FullComment 0x560468150240 +| |-ParagraphComment 0x5604681501a0 +| | |-TextComment 0x560468150120 Text=" Lookup an entity by its symbol name." +| | |-TextComment 0x560468150140 Text=" This looks up an entity by symbol stored in (EcsIdentifier, EcsSymbol). The" +| | `-TextComment 0x560468150160 Text=" operation does not take into account hierarchies." +| `-ParagraphComment 0x560468150210 +| |-TextComment 0x5604681501c0 Text=" This operation can be useful to resolve, for example, a type by its C " +| `-TextComment 0x5604681501e0 Text=" identifier, which does not include the Flecs namespacing." +|-FunctionDecl 0x560467f71540 line:6247:7 ecs_get_path_w_sep 'char *(const ecs_world_t *, ecs_entity_t, ecs_entity_t, const char *, const char *)' +| |-ParmVarDecl 0x560467f71098 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f71110 col:18 parent 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f71188 col:18 child 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f71208 col:17 sep 'const char *' +| |-ParmVarDecl 0x560467f71288 col:17 prefix 'const char *' +| `-FullComment 0x5604681509d0 +| |-ParagraphComment 0x560468150390 +| | |-TextComment 0x5604681502c0 Text=" Get a path identifier for an entity." +| | |-TextComment 0x5604681502e0 Text=" This operation creates a path that contains the names of the entities from" +| | |-TextComment 0x560468150300 Text=" the specified parent to the provided entity, separated by the provided " +| | |-TextComment 0x560468150320 Text=" separator. If no parent is provided the path will be relative to the root. If" +| | `-TextComment 0x560468150340 Text=" a prefix is provided, the path will be prefixed by the prefix." +| |-ParagraphComment 0x560468150430 +| | |-TextComment 0x5604681503b0 Text=" If the parent is equal to the provided child, the operation will return an" +| | |-TextComment 0x5604681503d0 Text=" empty string. If a nonzero component is provided, the path will be created by " +| | `-TextComment 0x5604681503f0 Text=" looking for parents with that component." +| |-ParagraphComment 0x560468150480 +| | `-TextComment 0x560468150450 Text=" The returned path should be freed by the application." +| |-ParagraphComment 0x5604681504d0 +| | `-TextComment 0x5604681504a0 Text=" " +| |-ParamCommandComment 0x5604681504f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681505a0 +| | |-TextComment 0x560468150550 Text=" The world." +| | `-TextComment 0x560468150570 Text=" " +| |-ParamCommandComment 0x5604681505c0 [in] implicitly Param="parent" ParamIndex=1 +| | `-ParagraphComment 0x560468150670 +| | |-TextComment 0x560468150620 Text=" The entity from which to create the path." +| | `-TextComment 0x560468150640 Text=" " +| |-ParamCommandComment 0x560468150690 [in] implicitly Param="child" ParamIndex=2 +| | `-ParagraphComment 0x560468150740 +| | |-TextComment 0x5604681506f0 Text=" The entity to which to create the path." +| | `-TextComment 0x560468150710 Text=" " +| |-ParamCommandComment 0x560468150760 [in] implicitly Param="sep" ParamIndex=3 +| | `-ParagraphComment 0x560468150810 +| | |-TextComment 0x5604681507c0 Text=" The separator to use between path elements." +| | `-TextComment 0x5604681507e0 Text=" " +| |-ParamCommandComment 0x560468150830 [in] implicitly Param="prefix" ParamIndex=4 +| | `-ParagraphComment 0x5604681508e0 +| | |-TextComment 0x560468150890 Text=" The initial character to use for root elements." +| | `-TextComment 0x5604681508b0 Text=" " +| `-BlockCommandComment 0x560468150900 Name="return" +| `-ParagraphComment 0x560468150960 +| `-TextComment 0x560468150930 Text=" The relative entity path." +|-FunctionDecl 0x560467f71a28 line:6264:6 ecs_get_path_w_sep_buf 'void (const ecs_world_t *, ecs_entity_t, ecs_entity_t, const char *, const char *, ecs_strbuf_t *)' +| |-ParmVarDecl 0x560467f71648 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560467f716c0 col:18 parent 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f71738 col:18 child 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f717b8 col:17 sep 'const char *' +| |-ParmVarDecl 0x560467f71838 col:17 prefix 'const char *' +| |-ParmVarDecl 0x560467f718b0 col:19 buf 'ecs_strbuf_t *' +| `-FullComment 0x560468151000 +| |-ParagraphComment 0x560468150a90 +| | |-TextComment 0x560468150a40 Text=" Write path identifier to buffer." +| | `-TextComment 0x560468150a60 Text=" Same as ecs_get_path_w_sep, but writes result to an ecs_strbuf_t." +| |-ParagraphComment 0x560468150ae0 +| | `-TextComment 0x560468150ab0 Text=" " +| |-ParamCommandComment 0x560468150b00 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468150bb0 +| | |-TextComment 0x560468150b60 Text=" The world." +| | `-TextComment 0x560468150b80 Text=" " +| |-ParamCommandComment 0x560468150bd0 [in] implicitly Param="parent" ParamIndex=1 +| | `-ParagraphComment 0x560468150c80 +| | |-TextComment 0x560468150c30 Text=" The entity from which to create the path." +| | `-TextComment 0x560468150c50 Text=" " +| |-ParamCommandComment 0x560468150ca0 [in] implicitly Param="child" ParamIndex=2 +| | `-ParagraphComment 0x560468150d50 +| | |-TextComment 0x560468150d00 Text=" The entity to which to create the path." +| | `-TextComment 0x560468150d20 Text=" " +| |-ParamCommandComment 0x560468150d70 [in] implicitly Param="sep" ParamIndex=3 +| | `-ParagraphComment 0x560468150e20 +| | |-TextComment 0x560468150dd0 Text=" The separator to use between path elements." +| | `-TextComment 0x560468150df0 Text=" " +| |-ParamCommandComment 0x560468150e40 [in] implicitly Param="prefix" ParamIndex=4 +| | `-ParagraphComment 0x560468150ef0 +| | |-TextComment 0x560468150ea0 Text=" The initial character to use for root elements." +| | `-TextComment 0x560468150ec0 Text=" " +| `-ParamCommandComment 0x560468150f10 [in] implicitly Param="buf" ParamIndex=5 +| `-ParagraphComment 0x560468150fa0 +| `-TextComment 0x560468150f70 Text=" The buffer to write to." +|-FunctionDecl 0x560467f71e88 line:6288:14 ecs_new_from_path_w_sep 'ecs_entity_t (ecs_world_t *, ecs_entity_t, const char *, const char *, const char *)' +| |-ParmVarDecl 0x560467f71b38 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560467f71bb0 col:18 parent 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f71c30 col:17 path 'const char *' +| |-ParmVarDecl 0x560467f71cb0 col:17 sep 'const char *' +| |-ParmVarDecl 0x560467f71d30 col:17 prefix 'const char *' +| `-FullComment 0x5604681516d0 +| |-ParagraphComment 0x560468151110 +| | |-TextComment 0x560468151070 Text=" Find or create entity from path." +| | |-TextComment 0x560468151090 Text=" This operation will find or create an entity from a path, and will create any" +| | |-TextComment 0x5604681510b0 Text=" intermediate entities if required. If the entity already exists, no entities" +| | `-TextComment 0x5604681510d0 Text=" will be created." +| |-ParagraphComment 0x560468151180 +| | |-TextComment 0x560468151130 Text=" If the path starts with the prefix, then the entity will be created from the" +| | `-TextComment 0x560468151150 Text=" root scope." +| |-ParagraphComment 0x5604681511d0 +| | `-TextComment 0x5604681511a0 Text=" " +| |-ParamCommandComment 0x5604681511f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681512a0 +| | |-TextComment 0x560468151250 Text=" The world." +| | `-TextComment 0x560468151270 Text=" " +| |-ParamCommandComment 0x5604681512c0 [in] implicitly Param="parent" ParamIndex=1 +| | `-ParagraphComment 0x560468151370 +| | |-TextComment 0x560468151320 Text=" The entity relative to which the entity should be created." +| | `-TextComment 0x560468151340 Text=" " +| |-ParamCommandComment 0x560468151390 [in] implicitly Param="path" ParamIndex=2 +| | `-ParagraphComment 0x560468151440 +| | |-TextComment 0x5604681513f0 Text=" The path to create the entity for." +| | `-TextComment 0x560468151410 Text=" " +| |-ParamCommandComment 0x560468151460 [in] implicitly Param="sep" ParamIndex=3 +| | `-ParagraphComment 0x560468151510 +| | |-TextComment 0x5604681514c0 Text=" The separator used in the path." +| | `-TextComment 0x5604681514e0 Text=" " +| |-ParamCommandComment 0x560468151530 [in] implicitly Param="prefix" ParamIndex=4 +| | `-ParagraphComment 0x5604681515e0 +| | |-TextComment 0x560468151590 Text=" The prefix used in the path." +| | `-TextComment 0x5604681515b0 Text=" " +| `-BlockCommandComment 0x560468151600 Name="return" +| `-ParagraphComment 0x560468151660 +| `-TextComment 0x560468151630 Text=" The entity." +|-FunctionDecl 0x560467f72368 line:6310:14 ecs_add_path_w_sep 'ecs_entity_t (ecs_world_t *, ecs_entity_t, ecs_entity_t, const char *, const char *, const char *)' +| |-ParmVarDecl 0x560467f71f88 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560467f72000 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f72078 col:18 parent 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560467f720f8 col:17 path 'const char *' +| |-ParmVarDecl 0x560467f72178 col:17 sep 'const char *' +| |-ParmVarDecl 0x560467f721f8 col:17 prefix 'const char *' +| `-FullComment 0x560468151e30 +| |-ParagraphComment 0x5604681517c0 +| | |-TextComment 0x560468151740 Text=" Add specified path to entity." +| | |-TextComment 0x560468151760 Text=" This operation is similar to ecs_new_from_path, but will instead add the path" +| | `-TextComment 0x560468151780 Text=" to an existing entity." +| |-ParagraphComment 0x560468151810 +| | `-TextComment 0x5604681517e0 Text=" If an entity already exists for the path, it will be returned instead." +| |-ParagraphComment 0x560468151860 +| | `-TextComment 0x560468151830 Text=" " +| |-ParamCommandComment 0x560468151880 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468151930 +| | |-TextComment 0x5604681518e0 Text=" The world." +| | `-TextComment 0x560468151900 Text=" " +| |-ParamCommandComment 0x560468151950 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468151a00 +| | |-TextComment 0x5604681519b0 Text=" The entity to which to add the path." +| | `-TextComment 0x5604681519d0 Text=" " +| |-ParamCommandComment 0x560468151a20 [in] implicitly Param="parent" ParamIndex=2 +| | `-ParagraphComment 0x560468151ad0 +| | |-TextComment 0x560468151a80 Text=" The entity relative to which the entity should be created." +| | `-TextComment 0x560468151aa0 Text=" " +| |-ParamCommandComment 0x560468151af0 [in] implicitly Param="path" ParamIndex=3 +| | `-ParagraphComment 0x560468151ba0 +| | |-TextComment 0x560468151b50 Text=" The path to create the entity for." +| | `-TextComment 0x560468151b70 Text=" " +| |-ParamCommandComment 0x560468151bc0 [in] implicitly Param="sep" ParamIndex=4 +| | `-ParagraphComment 0x560468151c70 +| | |-TextComment 0x560468151c20 Text=" The separator used in the path." +| | `-TextComment 0x560468151c40 Text=" " +| |-ParamCommandComment 0x560468151c90 [in] implicitly Param="prefix" ParamIndex=5 +| | `-ParagraphComment 0x560468151d40 +| | |-TextComment 0x560468151cf0 Text=" The prefix used in the path." +| | `-TextComment 0x560468151d10 Text=" " +| `-BlockCommandComment 0x560468151d60 Name="return" +| `-ParagraphComment 0x560468151dc0 +| `-TextComment 0x560468151d90 Text=" The entity." +|-FunctionDecl 0x560468050978 line:6330:14 ecs_set_scope 'ecs_entity_t (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560467f72478 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680508a0 col:18 scope 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468152250 +| |-ParagraphComment 0x560468151f40 +| | |-TextComment 0x560468151ea0 Text=" Set the current scope." +| | |-TextComment 0x560468151ec0 Text=" This operation sets the scope of the current stage to the provided entity." +| | |-TextComment 0x560468151ee0 Text=" As a result new entities will be created in this scope, and lookups will be" +| | `-TextComment 0x560468151f00 Text=" relative to the provided scope." +| |-ParagraphComment 0x560468151f90 +| | `-TextComment 0x560468151f60 Text=" It is considered good practice to restore the scope to the old value." +| |-ParagraphComment 0x560468151fe0 +| | `-TextComment 0x560468151fb0 Text=" " +| |-ParamCommandComment 0x560468152000 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681520b0 +| | |-TextComment 0x560468152060 Text=" The world." +| | `-TextComment 0x560468152080 Text=" " +| |-ParamCommandComment 0x5604681520d0 [in] implicitly Param="scope" ParamIndex=1 +| | `-ParagraphComment 0x560468152180 +| | |-TextComment 0x560468152130 Text=" The entity to use as scope." +| | `-TextComment 0x560468152150 Text=" " +| `-BlockCommandComment 0x5604681521a0 Name="return" +| `-ParagraphComment 0x560468152200 +| `-TextComment 0x5604681521d0 Text=" The previous scope." +|-FunctionDecl 0x560468050b28 line:6342:14 ecs_get_scope 'ecs_entity_t (const ecs_world_t *)' +| |-ParmVarDecl 0x560468050a68 col:24 world 'const ecs_world_t *' +| `-FullComment 0x560468152530 +| |-ParagraphComment 0x560468152350 +| | |-TextComment 0x5604681522d0 Text=" Get the current scope." +| | |-TextComment 0x5604681522f0 Text=" Get the scope set by ecs_set_scope. If no scope is set, this operation will" +| | `-TextComment 0x560468152310 Text=" return 0." +| |-ParagraphComment 0x5604681523a0 +| | `-TextComment 0x560468152370 Text=" " +| |-ParamCommandComment 0x5604681523c0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468152470 +| | |-TextComment 0x560468152420 Text=" The world." +| | `-TextComment 0x560468152440 Text=" " +| `-BlockCommandComment 0x560468152490 Name="return" +| `-ParagraphComment 0x5604681524f0 +| `-TextComment 0x5604681524c0 Text=" The current scope." +|-FunctionDecl 0x560468050da0 line:6355:13 ecs_set_name_prefix 'const char *(ecs_world_t *, const char *)' +| |-ParmVarDecl 0x560468050c08 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468050c88 col:17 prefix 'const char *' +| `-FullComment 0x560468152900 +| |-ParagraphComment 0x560468152640 +| | |-TextComment 0x5604681525a0 Text=" Set a name prefix for newly created entities." +| | |-TextComment 0x5604681525c0 Text=" This is a utility that lets C modules use prefixed names for C types and" +| | |-TextComment 0x5604681525e0 Text=" C functions, while using names for the entity names that do not have the " +| | `-TextComment 0x560468152600 Text=" prefix. The name prefix is currently only used by ECS_COMPONENT." +| |-ParagraphComment 0x560468152690 +| | `-TextComment 0x560468152660 Text=" " +| |-ParamCommandComment 0x5604681526b0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468152760 +| | |-TextComment 0x560468152710 Text=" The world." +| | `-TextComment 0x560468152730 Text=" " +| |-ParamCommandComment 0x560468152780 [in] implicitly Param="prefix" ParamIndex=1 +| | `-ParagraphComment 0x560468152830 +| | |-TextComment 0x5604681527e0 Text=" The name prefix to use." +| | `-TextComment 0x560468152800 Text=" " +| `-BlockCommandComment 0x560468152850 Name="return" +| `-ParagraphComment 0x5604681528b0 +| `-TextComment 0x560468152880 Text=" The previous prefix." +|-FunctionDecl 0x560468051018 line:6384:15 ecs_set_lookup_path 'ecs_entity_t *(ecs_world_t *, const ecs_entity_t *)' +| |-ParmVarDecl 0x560468050e88 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468050f00 col:25 lookup_path 'const ecs_entity_t *' +| `-FullComment 0x560468152f40 +| |-ParagraphComment 0x560468152a10 +| | |-TextComment 0x560468152970 Text=" Set search path for lookup operations." +| | |-TextComment 0x560468152990 Text=" This operation accepts an array of entity ids that will be used as search" +| | |-TextComment 0x5604681529b0 Text=" scopes by lookup operations. The operation returns the current search path." +| | `-TextComment 0x5604681529d0 Text=" It is good practice to restore the old search path." +| |-ParagraphComment 0x560468152a60 +| | `-TextComment 0x560468152a30 Text=" The search path will be evaluated starting from the last element." +| |-ParagraphComment 0x560468152b20 +| | |-TextComment 0x560468152a80 Text=" The default search path includes flecs.core. When a custom search path is" +| | |-TextComment 0x560468152aa0 Text=" provided it overwrites the existing search path. Operations that rely on" +| | |-TextComment 0x560468152ac0 Text=" looking up names from flecs.core without providing the namespace may fail if" +| | `-TextComment 0x560468152ae0 Text=" the custom search path does not include flecs.core (EcsFlecsCore)." +| |-ParagraphComment 0x560468152bc0 +| | |-TextComment 0x560468152b40 Text=" The search path array is not copied into managed memory. The application must" +| | |-TextComment 0x560468152b60 Text=" ensure that the provided array is valid for as long as it is used as the" +| | `-TextComment 0x560468152b80 Text=" search path." +| |-ParagraphComment 0x560468152c60 +| | |-TextComment 0x560468152be0 Text=" The provided array must be terminated with a 0 element. This enables an" +| | |-TextComment 0x560468152c00 Text=" application to push/pop elements to an existing array without invoking the" +| | `-TextComment 0x560468152c20 Text=" ecs_set_lookup_path operation again." +| |-ParagraphComment 0x560468152cb0 +| | `-TextComment 0x560468152c80 Text=" " +| |-ParamCommandComment 0x560468152cd0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468152d80 +| | |-TextComment 0x560468152d30 Text=" The world." +| | `-TextComment 0x560468152d50 Text=" " +| |-ParamCommandComment 0x560468152da0 [in] implicitly Param="lookup_path" ParamIndex=1 +| | `-ParagraphComment 0x560468152e50 +| | |-TextComment 0x560468152e00 Text=" 0-terminated array with entity ids for the lookup path." +| | `-TextComment 0x560468152e20 Text=" " +| `-BlockCommandComment 0x560468152e70 Name="return" +| `-ParagraphComment 0x560468152ed0 +| `-TextComment 0x560468152ea0 Text=" Current lookup path array." +|-FunctionDecl 0x5604680511f8 line:6395:15 ecs_get_lookup_path 'ecs_entity_t *(const ecs_world_t *)' +| |-ParmVarDecl 0x560468051108 col:24 world 'const ecs_world_t *' +| `-FullComment 0x5604681531e0 +| |-ParagraphComment 0x560468153000 +| | |-TextComment 0x560468152fb0 Text=" Get current lookup path." +| | `-TextComment 0x560468152fd0 Text=" Returns value set by ecs_set_lookup_path." +| |-ParagraphComment 0x560468153050 +| | `-TextComment 0x560468153020 Text=" " +| |-ParamCommandComment 0x560468153070 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468153120 +| | |-TextComment 0x5604681530d0 Text=" The world." +| | `-TextComment 0x5604681530f0 Text=" " +| `-BlockCommandComment 0x560468153140 Name="return" +| `-ParagraphComment 0x5604681531a0 +| `-TextComment 0x560468153170 Text=" The current lookup path." +|-FunctionDecl 0x560468051568 line:6422:14 ecs_component_init 'ecs_entity_t (ecs_world_t *, const ecs_component_desc_t *)' +| |-ParmVarDecl 0x560468051368 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468051458 col:33 desc 'const ecs_component_desc_t *' +| `-FullComment 0x560468153660 +| |-ParagraphComment 0x5604681532d0 +| | |-TextComment 0x560468153250 Text=" Find or create a component. " +| | |-TextComment 0x560468153270 Text=" This operation creates a new component, or finds an existing one. The find or" +| | `-TextComment 0x560468153290 Text=" create behavior is the same as ecs_entity_init." +| |-ParagraphComment 0x560468153340 +| | |-TextComment 0x5604681532f0 Text=" When an existing component is found, the size and alignment are verified with" +| | `-TextComment 0x560468153310 Text=" the provided values. If the values do not match, the operation will fail." +| |-ParagraphComment 0x560468153390 +| | `-TextComment 0x560468153360 Text=" See the documentation of ecs_component_desc_t for more details. " +| |-ParagraphComment 0x5604681533e0 +| | `-TextComment 0x5604681533b0 Text=" " +| |-ParamCommandComment 0x560468153400 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681534b0 +| | |-TextComment 0x560468153460 Text=" The world." +| | `-TextComment 0x560468153480 Text=" " +| |-ParamCommandComment 0x5604681534d0 [in] implicitly Param="desc" ParamIndex=1 +| | `-ParagraphComment 0x560468153580 +| | |-TextComment 0x560468153530 Text=" Component init parameters." +| | `-TextComment 0x560468153550 Text=" " +| `-BlockCommandComment 0x5604681535a0 Name="return" +| `-ParagraphComment 0x560468153600 +| `-TextComment 0x5604681535d0 Text=" A handle to the new or existing component, or 0 if failed." +|-FunctionDecl 0x560468056908 line:6438:6 ecs_set_hooks_id 'void (ecs_world_t *, ecs_entity_t, const ecs_type_hooks_t *)' +| |-ParmVarDecl 0x560468051658 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680516d0 col:18 id 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680517a8 col:29 hooks 'const ecs_type_hooks_t *' +| `-FullComment 0x560468153ab0 +| |-ParagraphComment 0x560468153770 +| | |-TextComment 0x5604681536d0 Text=" Register hooks for component." +| | |-TextComment 0x5604681536f0 Text=" Hooks allow for the execution of user code when components are constructed," +| | |-TextComment 0x560468153710 Text=" copied, moved, destructed, added, removed or set. Hooks can be assigned as" +| | `-TextComment 0x560468153730 Text=" as long as a component has not yet been used (added to an entity)." +| |-ParagraphComment 0x5604681537c0 +| | `-TextComment 0x560468153790 Text=" The hooks that are currently set can be accessed with ecs_get_type_info." +| |-ParagraphComment 0x560468153810 +| | `-TextComment 0x5604681537e0 Text=" " +| |-ParamCommandComment 0x560468153830 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681538e0 +| | |-TextComment 0x560468153890 Text=" The world." +| | `-TextComment 0x5604681538b0 Text=" " +| |-ParamCommandComment 0x560468153900 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x5604681539b0 +| | |-TextComment 0x560468153960 Text=" The component id for which to register the actions" +| | `-TextComment 0x560468153980 Text=" " +| `-ParamCommandComment 0x5604681539d0 [in] implicitly Param="hooks" ParamIndex=2 +| `-ParagraphComment 0x560468153a60 +| `-TextComment 0x560468153a30 Text=" Type that contains the component actions." +|-FunctionDecl 0x560468056b88 line:6450:25 ecs_get_hooks_id 'const ecs_type_hooks_t *(ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680569f8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468056a70 col:18 id 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468153e10 +| |-ParagraphComment 0x560468153b50 +| | `-TextComment 0x560468153b20 Text=" Get hooks for component." +| |-ParagraphComment 0x560468153ba0 +| | `-TextComment 0x560468153b70 Text=" " +| |-ParamCommandComment 0x560468153bc0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468153c70 +| | |-TextComment 0x560468153c20 Text=" The world." +| | `-TextComment 0x560468153c40 Text=" " +| |-ParamCommandComment 0x560468153c90 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468153d40 +| | |-TextComment 0x560468153cf0 Text=" The component id for which to retrieve the hooks." +| | `-TextComment 0x560468153d10 Text=" " +| `-BlockCommandComment 0x560468153d60 Name="return" +| `-ParagraphComment 0x560468153dc0 +| `-TextComment 0x560468153d90 Text=" The hooks for the component, or NULL if not registered." +|-FunctionDecl 0x560468056e28 line:6477:14 ecs_id_is_tag 'ecs_entity_t (const ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468056cd8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468056d50 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x5604681542e0 +| |-ParagraphComment 0x560468153f00 +| | |-TextComment 0x560468153e80 Text=" Returns whether specified id a tag." +| | |-TextComment 0x560468153ea0 Text=" This operation returns whether the specified type is a tag (a component " +| | `-TextComment 0x560468153ec0 Text=" without data/size)." +| |-ParagraphComment 0x560468153ff0 +| | |-TextComment 0x560468153f20 Text=" An id is a tag when:" +| | |-TextComment 0x560468153f40 Text=" - it is an entity without the EcsComponent component" +| | |-TextComment 0x560468153f60 Text=" - it has an EcsComponent with size member set to 0" +| | |-TextComment 0x560468153f80 Text=" - it is a pair where both elements are a tag" +| | `-TextComment 0x560468153fa0 Text=" - it is a pair where the first element has the EcsTag tag" +| |-ParagraphComment 0x560468154040 +| | `-TextComment 0x560468154010 Text=" " +| |-ParamCommandComment 0x560468154060 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468154110 +| | |-TextComment 0x5604681540c0 Text=" The world." +| | `-TextComment 0x5604681540e0 Text=" " +| |-ParamCommandComment 0x560468154130 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x5604681541e0 +| | |-TextComment 0x560468154190 Text=" The id." +| | `-TextComment 0x5604681541b0 Text=" " +| `-BlockCommandComment 0x560468154200 Name="return" +| `-ParagraphComment 0x560468154260 +| `-TextComment 0x560468154230 Text=" Whether the provided id is a tag." +|-FunctionDecl 0x5604680570a8 line:6490:6 ecs_id_in_use 'bool (ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468056f18 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468056f90 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468154690 +| |-ParagraphComment 0x5604681543d0 +| | |-TextComment 0x560468154350 Text=" Returns whether specified id is in use." +| | |-TextComment 0x560468154370 Text=" This operation returns whether an id is in use in the world. An id is in use" +| | `-TextComment 0x560468154390 Text=" if it has been added to one or more tables." +| |-ParagraphComment 0x560468154420 +| | `-TextComment 0x5604681543f0 Text=" " +| |-ParamCommandComment 0x560468154440 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681544f0 +| | |-TextComment 0x5604681544a0 Text=" The world." +| | `-TextComment 0x5604681544c0 Text=" " +| |-ParamCommandComment 0x560468154510 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x5604681545c0 +| | |-TextComment 0x560468154570 Text=" The id." +| | `-TextComment 0x560468154590 Text=" " +| `-BlockCommandComment 0x5604681545e0 Name="return" +| `-ParagraphComment 0x560468154640 +| `-TextComment 0x560468154610 Text=" Whether the id is in use." +|-FunctionDecl 0x560468057328 line:6504:24 ecs_get_type_info 'const ecs_type_info_t *(const ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468057198 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468057210 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468154a60 +| |-ParagraphComment 0x5604681547a0 +| | |-TextComment 0x560468154700 Text=" Get the type for an id." +| | |-TextComment 0x560468154720 Text=" This function returnsthe type information for an id. The specified id can be" +| | |-TextComment 0x560468154740 Text=" any valid id. For the rules on how type information is determined based on" +| | `-TextComment 0x560468154760 Text=" id, see ecs_get_typeid." +| |-ParagraphComment 0x5604681547f0 +| | `-TextComment 0x5604681547c0 Text=" " +| |-ParamCommandComment 0x560468154810 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681548c0 +| | |-TextComment 0x560468154870 Text=" The world." +| | `-TextComment 0x560468154890 Text=" " +| |-ParamCommandComment 0x5604681548e0 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468154990 +| | |-TextComment 0x560468154940 Text=" The id." +| | `-TextComment 0x560468154960 Text=" " +| `-BlockCommandComment 0x5604681549b0 Name="return" +| `-ParagraphComment 0x560468154a10 +| `-TextComment 0x5604681549e0 Text=" The type information of the id." +|-FunctionDecl 0x560468057528 line:6528:14 ecs_get_typeid 'ecs_entity_t (const ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468057418 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468057490 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468154fc0 +| |-ParagraphComment 0x560468154b70 +| | |-TextComment 0x560468154ad0 Text=" Get the type for an id." +| | |-TextComment 0x560468154af0 Text=" This operation returns the component id for an id, if the id is associated" +| | |-TextComment 0x560468154b10 Text=" with a type. For a regular component with a non-zero size (an entity with the" +| | `-TextComment 0x560468154b30 Text=" EcsComponent component) the operation will return the entity itself." +| |-ParagraphComment 0x560468154be0 +| | |-TextComment 0x560468154b90 Text=" For an entity that does not have the EcsComponent component, or with an" +| | `-TextComment 0x560468154bb0 Text=" EcsComponent value with size 0, the operation will return 0." +| |-ParagraphComment 0x560468154cf0 +| | |-TextComment 0x560468154c00 Text=" For a pair id the operation will return the type associated with the pair, by" +| | |-TextComment 0x560468154c20 Text=" applying the following rules in order:" +| | |-TextComment 0x560468154c40 Text=" - The first pair element is returned if it is a component" +| | |-TextComment 0x560468154c60 Text=" - 0 is returned if the relationship entity has the Tag property" +| | |-TextComment 0x560468154c80 Text=" - The second pair element is returned if it is a component" +| | `-TextComment 0x560468154ca0 Text=" - 0 is returned." +| |-ParagraphComment 0x560468154d40 +| | `-TextComment 0x560468154d10 Text=" " +| |-ParamCommandComment 0x560468154d60 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468154e10 +| | |-TextComment 0x560468154dc0 Text=" The world." +| | `-TextComment 0x560468154de0 Text=" " +| |-ParamCommandComment 0x560468154e30 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468154ee0 +| | |-TextComment 0x560468154e90 Text=" The id." +| | `-TextComment 0x560468154eb0 Text=" " +| `-BlockCommandComment 0x560468154f00 Name="return" +| `-ParagraphComment 0x560468154f60 +| `-TextComment 0x560468154f30 Text=" The type id of the id." +|-FunctionDecl 0x5604680577a8 line:6540:6 ecs_id_match 'bool (ecs_id_t, ecs_id_t)' +| |-ParmVarDecl 0x560468057618 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x560468057690 col:14 pattern 'ecs_id_t':'unsigned long' +| `-FullComment 0x5604681552c0 +| |-ParagraphComment 0x5604681550b0 +| | |-TextComment 0x560468155030 Text=" Utility to match an id with a pattern." +| | |-TextComment 0x560468155050 Text=" This operation returns true if the provided pattern matches the provided" +| | `-TextComment 0x560468155070 Text=" id. The pattern may contain a wildcard (or wildcards, when a pair)." +| |-ParagraphComment 0x560468155100 +| | `-TextComment 0x5604681550d0 Text=" " +| |-ParamCommandComment 0x560468155120 [in] implicitly Param="id" ParamIndex=0 +| | `-ParagraphComment 0x5604681551d0 +| | |-TextComment 0x560468155180 Text=" The id." +| | `-TextComment 0x5604681551a0 Text=" " +| `-ParamCommandComment 0x5604681551f0 [in] implicitly Param="pattern" ParamIndex=1 +| `-ParagraphComment 0x560468155280 +| `-TextComment 0x560468155250 Text=" The pattern to compare with." +|-FunctionDecl 0x5604680579d8 line:6550:6 ecs_id_is_pair 'bool (ecs_id_t)' +| |-ParmVarDecl 0x5604680578e0 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468155540 +| |-ParagraphComment 0x560468155360 +| | `-TextComment 0x560468155330 Text=" Utility to check if id is a pair." +| |-ParagraphComment 0x5604681553b0 +| | `-TextComment 0x560468155380 Text=" " +| |-ParamCommandComment 0x5604681553d0 [in] implicitly Param="id" ParamIndex=0 +| | `-ParagraphComment 0x560468155480 +| | |-TextComment 0x560468155430 Text=" The id." +| | `-TextComment 0x560468155450 Text=" " +| `-BlockCommandComment 0x5604681554a0 Name="return" +| `-ParagraphComment 0x560468155500 +| `-TextComment 0x5604681554d0 Text=" True if id is a pair." +|-FunctionDecl 0x560468057b48 line:6559:6 ecs_id_is_wildcard 'bool (ecs_id_t)' +| |-ParmVarDecl 0x560468057ab8 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x5604681557c0 +| |-ParagraphComment 0x5604681555e0 +| | `-TextComment 0x5604681555b0 Text=" Utility to check if id is a wildcard." +| |-ParagraphComment 0x560468155630 +| | `-TextComment 0x560468155600 Text=" " +| |-ParamCommandComment 0x560468155650 [in] implicitly Param="id" ParamIndex=0 +| | `-ParagraphComment 0x560468155700 +| | |-TextComment 0x5604681556b0 Text=" The id." +| | `-TextComment 0x5604681556d0 Text=" " +| `-BlockCommandComment 0x560468155720 Name="return" +| `-ParagraphComment 0x560468155780 +| `-TextComment 0x560468155750 Text=" True if id is a wildcard or a pair containing a wildcard." +|-FunctionDecl 0x560468057d78 line:6576:6 ecs_id_is_valid 'bool (const ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468057c28 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468057ca0 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468155c30 +| |-ParagraphComment 0x560468155900 +| | |-TextComment 0x560468155830 Text=" Utility to check if id is valid." +| | |-TextComment 0x560468155850 Text=" A valid id is an id that can be added to an entity. Invalid ids are:" +| | |-TextComment 0x560468155870 Text=" - ids that contain wildcards" +| | |-TextComment 0x560468155890 Text=" - ids that contain invalid entities" +| | `-TextComment 0x5604681558b0 Text=" - ids that are 0 or contain 0 entities" +| |-ParagraphComment 0x560468155970 +| | |-TextComment 0x560468155920 Text=" Note that the same rules apply to removing from an entity, with the exception" +| | `-TextComment 0x560468155940 Text=" of wildcards." +| |-ParagraphComment 0x5604681559c0 +| | `-TextComment 0x560468155990 Text=" " +| |-ParamCommandComment 0x5604681559e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468155a90 +| | |-TextComment 0x560468155a40 Text=" The world." +| | `-TextComment 0x560468155a60 Text=" " +| |-ParamCommandComment 0x560468155ab0 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468155b60 +| | |-TextComment 0x560468155b10 Text=" The id." +| | `-TextComment 0x560468155b30 Text=" " +| `-BlockCommandComment 0x560468155b80 Name="return" +| `-ParagraphComment 0x560468155be0 +| `-TextComment 0x560468155bb0 Text=" True if the id is valid." +|-FunctionDecl 0x560468057ff8 line:6589:15 ecs_id_get_flags 'ecs_flags32_t (const ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468057e68 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468057ee0 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468155fe0 +| |-ParagraphComment 0x560468155d20 +| | |-TextComment 0x560468155ca0 Text=" Get flags associated with id." +| | |-TextComment 0x560468155cc0 Text=" This operation returns the internal flags (see api_flags.h) that are " +| | `-TextComment 0x560468155ce0 Text=" associated with the provided id." +| |-ParagraphComment 0x560468155d70 +| | `-TextComment 0x560468155d40 Text=" " +| |-ParamCommandComment 0x560468155d90 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468155e40 +| | |-TextComment 0x560468155df0 Text=" The world." +| | `-TextComment 0x560468155e10 Text=" " +| |-ParamCommandComment 0x560468155e60 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468155f10 +| | |-TextComment 0x560468155ec0 Text=" The id." +| | `-TextComment 0x560468155ee0 Text=" " +| `-BlockCommandComment 0x560468155f30 Name="return" +| `-ParagraphComment 0x560468155f90 +| `-TextComment 0x560468155f60 Text=" Flags associated with the id, or 0 if the id is not in use." +|-FunctionDecl 0x5604680581e0 line:6600:13 ecs_id_flag_str 'const char *(ecs_id_t)' +| |-ParmVarDecl 0x5604680580e8 col:14 id_flags 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468156280 +| |-ParagraphComment 0x5604681560a0 +| | |-TextComment 0x560468156050 Text=" Convert id flag to string." +| | `-TextComment 0x560468156070 Text=" This operation converts a id flag to a string." +| |-ParagraphComment 0x5604681560f0 +| | `-TextComment 0x5604681560c0 Text=" " +| |-ParamCommandComment 0x560468156110 [in] implicitly Param="id_flags" ParamIndex=0 +| | `-ParagraphComment 0x5604681561c0 +| | |-TextComment 0x560468156170 Text=" The id flag." +| | `-TextComment 0x560468156190 Text=" " +| `-BlockCommandComment 0x5604681561e0 Name="return" +| `-ParagraphComment 0x560468156240 +| `-TextComment 0x560468156210 Text=" The id flag string, or NULL if no valid id is provided." +|-FunctionDecl 0x560468058420 line:6611:7 ecs_id_str 'char *(const ecs_world_t *, ecs_id_t)' +| |-ParmVarDecl 0x5604680582c8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468058340 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x560468156640 +| |-ParagraphComment 0x560468156380 +| | |-TextComment 0x560468156330 Text=" Convert id to string." +| | `-TextComment 0x560468156350 Text=" This operation interprets the structure of an id and converts it to a string." +| |-ParagraphComment 0x5604681563d0 +| | `-TextComment 0x5604681563a0 Text=" " +| |-ParamCommandComment 0x5604681563f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681564a0 +| | |-TextComment 0x560468156450 Text=" The world." +| | `-TextComment 0x560468156470 Text=" " +| |-ParamCommandComment 0x5604681564c0 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x560468156570 +| | |-TextComment 0x560468156520 Text=" The id to convert to a string." +| | `-TextComment 0x560468156540 Text=" " +| `-BlockCommandComment 0x560468156590 Name="return" +| `-ParagraphComment 0x5604681565f0 +| `-TextComment 0x5604681565c0 Text=" The id converted to a string." +|-FunctionDecl 0x560468058718 line:6623:6 ecs_id_str_buf 'void (const ecs_world_t *, ecs_id_t, ecs_strbuf_t *)' +| |-ParmVarDecl 0x560468058508 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468058580 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x5604680585f8 col:19 buf 'ecs_strbuf_t *' +| `-FullComment 0x5604681569f0 +| |-ParagraphComment 0x560468156700 +| | |-TextComment 0x5604681566b0 Text=" Write id string to buffer." +| | `-TextComment 0x5604681566d0 Text=" Same as ecs_id_str but writes result to ecs_strbuf_t." +| |-ParagraphComment 0x560468156750 +| | `-TextComment 0x560468156720 Text=" " +| |-ParamCommandComment 0x560468156770 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468156820 +| | |-TextComment 0x5604681567d0 Text=" The world." +| | `-TextComment 0x5604681567f0 Text=" " +| |-ParamCommandComment 0x560468156840 [in] implicitly Param="id" ParamIndex=1 +| | `-ParagraphComment 0x5604681568f0 +| | |-TextComment 0x5604681568a0 Text=" The id to convert to a string." +| | `-TextComment 0x5604681568c0 Text=" " +| `-ParamCommandComment 0x560468156910 [in] implicitly Param="buf" ParamIndex=2 +| `-ParagraphComment 0x5604681569a0 +| `-TextComment 0x560468156970 Text=" The buffer to write to." +|-FunctionDecl 0x560468058a08 line:6646:12 ecs_term_iter 'ecs_iter_t (const ecs_world_t *, ecs_term_t *)' +| |-ParmVarDecl 0x560468058868 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680588f0 col:17 term 'ecs_term_t *' +| `-FullComment 0x560468156dc0 +| |-ParagraphComment 0x560468156b00 +| | |-TextComment 0x560468156a60 Text=" Iterator for a single (component) id." +| | |-TextComment 0x560468156a80 Text=" A term iterator returns all entities (tables) that match a single (component)" +| | |-TextComment 0x560468156aa0 Text=" id. The search for the matching set of entities (tables) is performed in " +| | `-TextComment 0x560468156ac0 Text=" constant time." +| |-ParagraphComment 0x560468156b50 +| | `-TextComment 0x560468156b20 Text=" " +| |-ParamCommandComment 0x560468156b70 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468156c20 +| | |-TextComment 0x560468156bd0 Text=" The world." +| | `-TextComment 0x560468156bf0 Text=" " +| |-ParamCommandComment 0x560468156c40 [in] implicitly Param="term" ParamIndex=1 +| | `-ParagraphComment 0x560468156cf0 +| | |-TextComment 0x560468156ca0 Text=" The term." +| | `-TextComment 0x560468156cc0 Text=" " +| `-BlockCommandComment 0x560468156d10 Name="return" +| `-ParagraphComment 0x560468156d70 +| `-TextComment 0x560468156d40 Text=" The iterator." +|-FunctionDecl 0x560468058ce8 line:6659:12 ecs_term_chain_iter 'ecs_iter_t (const ecs_iter_t *, ecs_term_t *)' +| |-ParmVarDecl 0x560468058b58 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x560468058bd0 col:17 term 'ecs_term_t *' +| `-FullComment 0x560468157170 +| |-ParagraphComment 0x560468156eb0 +| | |-TextComment 0x560468156e30 Text=" Return a chained term iterator." +| | |-TextComment 0x560468156e50 Text=" A chained iterator applies a filter to the results of the input iterator. The" +| | `-TextComment 0x560468156e70 Text=" resulting iterator must be iterated with ecs_term_next." +| |-ParagraphComment 0x560468156f00 +| | `-TextComment 0x560468156ed0 Text=" " +| |-ParamCommandComment 0x560468156f20 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468156fd0 +| | |-TextComment 0x560468156f80 Text=" The input iterator" +| | `-TextComment 0x560468156fa0 Text=" " +| |-ParamCommandComment 0x560468156ff0 [in] implicitly Param="term" ParamIndex=1 +| | `-ParagraphComment 0x5604681570a0 +| | |-TextComment 0x560468157050 Text=" The term filter to apply to the iterator." +| | `-TextComment 0x560468157070 Text=" " +| `-BlockCommandComment 0x5604681570c0 Name="return" +| `-ParagraphComment 0x560468157120 +| `-TextComment 0x5604681570f0 Text=" The chained iterator. " +|-FunctionDecl 0x560468058e68 line:6673:6 ecs_term_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x560468058dd8 col:17 it 'ecs_iter_t *' +| `-FullComment 0x560468157490 +| |-ParagraphComment 0x5604681572b0 +| | |-TextComment 0x5604681571e0 Text=" Progress a term iterator." +| | |-TextComment 0x560468157200 Text=" This operation progresses the term iterator to the next table. The " +| | |-TextComment 0x560468157220 Text=" iterator must have been initialized with `ecs_term_iter`. This operation " +| | |-TextComment 0x560468157240 Text=" must be invoked at least once before interpreting the contents of the " +| | `-TextComment 0x560468157260 Text=" iterator." +| |-ParagraphComment 0x560468157300 +| | `-TextComment 0x5604681572d0 Text=" " +| |-ParamCommandComment 0x560468157320 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x5604681573d0 +| | |-TextComment 0x560468157380 Text=" The iterator." +| | `-TextComment 0x5604681573a0 Text=" " +| `-BlockCommandComment 0x5604681573f0 Name="returns" +| `-ParagraphComment 0x560468157450 +| `-TextComment 0x560468157420 Text=" True if more data is available, false if not." +|-FunctionDecl 0x5604680590d8 line:6685:12 ecs_children 'ecs_iter_t (const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468058f48 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468058fc0 col:18 parent 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468157840 +| |-ParagraphComment 0x560468157580 +| | |-TextComment 0x560468157500 Text=" Iterator for a parent's children." +| | |-TextComment 0x560468157520 Text=" This operation is equivalent to a term iterator for (ChildOf, parent). " +| | `-TextComment 0x560468157540 Text=" Iterate the result with ecs_children_next." +| |-ParagraphComment 0x5604681575d0 +| | `-TextComment 0x5604681575a0 Text=" " +| |-ParamCommandComment 0x5604681575f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681576a0 +| | |-TextComment 0x560468157650 Text=" The world." +| | `-TextComment 0x560468157670 Text=" " +| |-ParamCommandComment 0x5604681576c0 [in] implicitly Param="parent" ParamIndex=1 +| | `-ParagraphComment 0x560468157770 +| | |-TextComment 0x560468157720 Text=" The parent for which to iterate the children." +| | `-TextComment 0x560468157740 Text=" " +| `-BlockCommandComment 0x560468157790 Name="return" +| `-ParagraphComment 0x5604681577f0 +| `-TextComment 0x5604681577c0 Text=" The iterator." +|-FunctionDecl 0x560468059258 line:6696:6 ecs_children_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x5604680591c8 col:17 it 'ecs_iter_t *' +| `-FullComment 0x560468157ae0 +| |-ParagraphComment 0x560468157900 +| | |-TextComment 0x5604681578b0 Text=" Progress a children iterator." +| | `-TextComment 0x5604681578d0 Text=" Equivalent to ecs_term_next." +| |-ParagraphComment 0x560468157950 +| | `-TextComment 0x560468157920 Text=" " +| |-ParamCommandComment 0x560468157970 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468157a20 +| | |-TextComment 0x5604681579d0 Text=" The iterator." +| | `-TextComment 0x5604681579f0 Text=" " +| `-BlockCommandComment 0x560468157a40 Name="returns" +| `-ParagraphComment 0x560468157aa0 +| `-TextComment 0x560468157a70 Text=" True if more data is available, false if not." +|-FunctionDecl 0x560468059488 line:6705:6 ecs_term_id_is_set 'bool (const ecs_term_id_t *)' +| |-ParmVarDecl 0x560468059398 col:26 id 'const ecs_term_id_t *' +| `-FullComment 0x560468157d60 +| |-ParagraphComment 0x560468157b80 +| | `-TextComment 0x560468157b50 Text=" Test whether term id is set." +| |-ParagraphComment 0x560468157bd0 +| | `-TextComment 0x560468157ba0 Text=" " +| |-ParamCommandComment 0x560468157bf0 [in] implicitly Param="id" ParamIndex=0 +| | `-ParagraphComment 0x560468157ca0 +| | |-TextComment 0x560468157c50 Text=" The term id." +| | `-TextComment 0x560468157c70 Text=" " +| `-BlockCommandComment 0x560468157cc0 Name="return" +| `-ParagraphComment 0x560468157d20 +| `-TextComment 0x560468157cf0 Text=" True when set, false when not set." +|-FunctionDecl 0x5604680596b8 line:6720:6 ecs_term_is_initialized 'bool (const ecs_term_t *)' +| |-ParmVarDecl 0x5604680595c8 col:23 term 'const ecs_term_t *' +| `-FullComment 0x5604681580e0 +| |-ParagraphComment 0x560468157e50 +| | |-TextComment 0x560468157dd0 Text=" Test whether a term is set." +| | |-TextComment 0x560468157df0 Text=" This operation can be used to test whether a term has been initialized with" +| | `-TextComment 0x560468157e10 Text=" values or whether it is empty." +| |-ParagraphComment 0x560468157ef0 +| | |-TextComment 0x560468157e70 Text=" An application generally does not need to invoke this operation. It is useful" +| | |-TextComment 0x560468157e90 Text=" when initializing a 0-initialized array of terms (like in ecs_term_desc_t) as" +| | `-TextComment 0x560468157eb0 Text=" this operation can be used to find the last initialized element." +| |-ParagraphComment 0x560468157f40 +| | `-TextComment 0x560468157f10 Text=" " +| |-ParamCommandComment 0x560468157f60 [in] implicitly Param="term" ParamIndex=0 +| | `-ParagraphComment 0x560468158010 +| | |-TextComment 0x560468157fc0 Text=" The term." +| | `-TextComment 0x560468157fe0 Text=" " +| `-BlockCommandComment 0x560468158030 Name="return" +| `-ParagraphComment 0x560468158090 +| `-TextComment 0x560468158060 Text=" True when set, false when not set." +|-FunctionDecl 0x560468059800 line:6724:6 ecs_term_match_this 'bool (const ecs_term_t *)' +| `-ParmVarDecl 0x560468059770 col:23 term 'const ecs_term_t *' +|-FunctionDecl 0x560468059990 line:6728:6 ecs_term_match_0 'bool (const ecs_term_t *)' +| `-ParmVarDecl 0x560468059900 col:23 term 'const ecs_term_t *' +|-FunctionDecl 0x560468059c10 line:6750:5 ecs_term_finalize 'int (const ecs_world_t *, ecs_term_t *)' +| |-ParmVarDecl 0x560468059a78 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468059af0 col:17 term 'ecs_term_t *' +| `-FullComment 0x56046812e4f0 +| |-ParagraphComment 0x560468158240 +| | |-TextComment 0x560468158150 Text=" Finalize term." +| | |-TextComment 0x560468158170 Text=" Ensure that all fields of a term are consistent and filled out. This " +| | |-TextComment 0x560468158190 Text=" operation should be invoked before using and after assigning members to, or " +| | |-TextComment 0x5604681581b0 Text=" parsing a term. When a term contains unresolved identifiers, this operation" +| | |-TextComment 0x5604681581d0 Text=" will resolve and assign the identifiers. If the term contains any identifiers" +| | `-TextComment 0x5604681581f0 Text=" that cannot be resolved, the operation will fail." +| |-ParagraphComment 0x56046812e1b0 +| | |-TextComment 0x560468158260 Text=" An application generally does not need to invoke this operation as the APIs" +| | |-TextComment 0x560468158280 Text=" that use terms (such as filters, queries and triggers) will finalize terms" +| | `-TextComment 0x5604681582a0 Text=" when they are created." +| |-ParagraphComment 0x56046812e220 +| | |-TextComment 0x56046812e1d0 Text=" The name and expr parameters are optional, and only used for giving more " +| | `-TextComment 0x56046812e1f0 Text=" descriptive error messages." +| |-ParagraphComment 0x56046812e270 +| | `-TextComment 0x56046812e240 Text=" " +| |-ParamCommandComment 0x56046812e290 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046812e340 +| | |-TextComment 0x56046812e2f0 Text=" The world." +| | `-TextComment 0x56046812e310 Text=" " +| |-ParamCommandComment 0x56046812e360 [in] implicitly Param="term" ParamIndex=1 +| | `-ParagraphComment 0x56046812e410 +| | |-TextComment 0x56046812e3c0 Text=" The term to finalize." +| | `-TextComment 0x56046812e3e0 Text=" " +| `-BlockCommandComment 0x56046812e430 Name="return" +| `-ParagraphComment 0x56046812e490 +| `-TextComment 0x56046812e460 Text=" Zero if success, nonzero if an error occurred." +|-FunctionDecl 0x560468059de8 line:6763:12 ecs_term_copy 'ecs_term_t (const ecs_term_t *)' +| |-ParmVarDecl 0x560468059cf8 col:23 src 'const ecs_term_t *' +| `-FullComment 0x56046812e7e0 +| |-ParagraphComment 0x56046812e600 +| | |-TextComment 0x56046812e560 Text=" Copy resources of a term to another term." +| | |-TextComment 0x56046812e580 Text=" This operation copies one term to another term. If the source term contains" +| | |-TextComment 0x56046812e5a0 Text=" allocated resources (such as identifiers), they will be duplicated so that" +| | `-TextComment 0x56046812e5c0 Text=" no memory is shared between the terms." +| |-ParagraphComment 0x56046812e650 +| | `-TextComment 0x56046812e620 Text=" " +| |-ParamCommandComment 0x56046812e670 [in] implicitly Param="src" ParamIndex=0 +| | `-ParagraphComment 0x56046812e720 +| | |-TextComment 0x56046812e6d0 Text=" The term to copy from." +| | `-TextComment 0x56046812e6f0 Text=" " +| `-BlockCommandComment 0x56046812e740 Name="return" +| `-ParagraphComment 0x56046812e7a0 +| `-TextComment 0x56046812e770 Text=" The destination term." +|-FunctionDecl 0x560468059fb8 line:6777:12 ecs_term_move 'ecs_term_t (ecs_term_t *)' +| |-ParmVarDecl 0x560468059ec8 col:17 src 'ecs_term_t *' +| `-FullComment 0x56046812eb30 +| |-ParagraphComment 0x56046812e8d0 +| | |-TextComment 0x56046812e850 Text=" Move resources of a term to another term." +| | |-TextComment 0x56046812e870 Text=" Same as copy, but moves resources from src, if src->move is set to true. If" +| | `-TextComment 0x56046812e890 Text=" src->move is not set to true, this operation will do a copy." +| |-ParagraphComment 0x56046812e940 +| | |-TextComment 0x56046812e8f0 Text=" The conditional move reduces redundant allocations in scenarios where a list " +| | `-TextComment 0x56046812e910 Text=" of terms is partially created with allocated resources." +| |-ParagraphComment 0x56046812e990 +| | `-TextComment 0x56046812e960 Text=" " +| |-ParamCommandComment 0x56046812e9b0 [in] implicitly Param="src" ParamIndex=0 +| | `-ParagraphComment 0x56046812ea60 +| | |-TextComment 0x56046812ea10 Text=" The term to move from." +| | `-TextComment 0x56046812ea30 Text=" " +| `-BlockCommandComment 0x56046812ea80 Name="return" +| `-ParagraphComment 0x56046812eae0 +| `-TextComment 0x56046812eab0 Text=" The destination term." +|-FunctionDecl 0x56046805a188 line:6787:6 ecs_term_fini 'void (ecs_term_t *)' +| |-ParmVarDecl 0x56046805a098 col:17 term 'ecs_term_t *' +| `-FullComment 0x56046812ed60 +| |-ParagraphComment 0x56046812ec20 +| | |-TextComment 0x56046812eba0 Text=" Free resources of term." +| | |-TextComment 0x56046812ebc0 Text=" This operation frees all resources (such as identifiers) of a term. The term" +| | `-TextComment 0x56046812ebe0 Text=" itself is not freed." +| |-ParagraphComment 0x56046812ec70 +| | `-TextComment 0x56046812ec40 Text=" " +| `-ParamCommandComment 0x56046812ec90 [in] implicitly Param="term" ParamIndex=0 +| `-ParagraphComment 0x56046812ed20 +| `-TextComment 0x56046812ecf0 Text=" The term to free." +|-FunctionDecl 0x56046805a448 line:6814:16 ecs_filter_init 'ecs_filter_t *(ecs_world_t *, const ecs_filter_desc_t *)' +| |-ParmVarDecl 0x56046805a268 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046805a338 col:30 desc 'const ecs_filter_desc_t *' +| `-FullComment 0x56046812f4b0 +| |-ParagraphComment 0x56046812ee70 +| | |-TextComment 0x56046812edd0 Text=" Initialize filter " +| | |-TextComment 0x56046812edf0 Text=" A filter is a lightweight object that can be used to query for entities in" +| | |-TextComment 0x56046812ee10 Text=" a world. Filters, as opposed to queries, do not cache results. They are " +| | `-TextComment 0x56046812ee30 Text=" therefore slower to iterate, but are faster to create." +| |-ParagraphComment 0x56046812eee0 +| | |-TextComment 0x56046812ee90 Text=" When a filter is copied by value, make sure to use "ecs_filter_move" to " +| | `-TextComment 0x56046812eeb0 Text=" ensure that the terms pointer still points to the inline array:" +| |-ParagraphComment 0x56046812efd0 +| | |-TextComment 0x56046812ef00 Text=" ecs_filter_move(" +| | |-TextComment 0x56046812ef20 Text="&dst" +| | |-TextComment 0x56046812ef40 Text="_filter, " +| | |-TextComment 0x56046812ef60 Text="&src" +| | `-TextComment 0x56046812ef80 Text="_filter)" +| |-ParagraphComment 0x56046812f040 +| | |-TextComment 0x56046812eff0 Text=" Alternatively, the ecs_filter_move function can be called with both arguments" +| | `-TextComment 0x56046812f010 Text=" set to the same filter, to ensure the pointer is valid:" +| |-ParagraphComment 0x56046812f130 +| | |-TextComment 0x56046812f060 Text=" ecs_filter_move(" +| | |-TextComment 0x56046812f080 Text="&f" +| | |-TextComment 0x56046812f0a0 Text=", " +| | |-TextComment 0x56046812f0c0 Text="&f" +| | `-TextComment 0x56046812f0e0 Text=")" +| |-ParagraphComment 0x56046812f1d0 +| | |-TextComment 0x56046812f150 Text=" It is possible to create a filter without allocating any memory, by setting" +| | |-TextComment 0x56046812f170 Text=" the .storage member in ecs_filter_desc_t. See the documentation for the " +| | `-TextComment 0x56046812f190 Text=" member for more details." +| |-ParagraphComment 0x56046812f220 +| | `-TextComment 0x56046812f1f0 Text=" " +| |-ParamCommandComment 0x56046812f240 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046812f2f0 +| | |-TextComment 0x56046812f2a0 Text=" The world." +| | `-TextComment 0x56046812f2c0 Text=" " +| |-ParamCommandComment 0x56046812f310 [in] implicitly Param="desc" ParamIndex=1 +| | `-ParagraphComment 0x56046812f3c0 +| | |-TextComment 0x56046812f370 Text=" Properties for the filter to create." +| | `-TextComment 0x56046812f390 Text=" " +| `-BlockCommandComment 0x56046812f3e0 Name="return" +| `-ParagraphComment 0x56046812f440 +| `-TextComment 0x56046812f410 Text=" The filter if successful, NULL if not successful." +|-FunctionDecl 0x56046805a628 line:6824:6 ecs_filter_fini 'void (ecs_filter_t *)' +| |-ParmVarDecl 0x56046805a538 col:19 filter 'ecs_filter_t *' +| `-FullComment 0x56046812f6b0 +| |-ParagraphComment 0x56046812f570 +| | |-TextComment 0x56046812f520 Text=" Deinitialize filter." +| | `-TextComment 0x56046812f540 Text=" Free resources associated with filter." +| |-ParagraphComment 0x56046812f5c0 +| | `-TextComment 0x56046812f590 Text=" " +| `-ParamCommandComment 0x56046812f5e0 [in] implicitly Param="filter" ParamIndex=0 +| `-ParagraphComment 0x56046812f670 +| `-TextComment 0x56046812f640 Text=" The filter to deinitialize." +|-FunctionDecl 0x56046805a910 line:6841:5 ecs_filter_finalize 'int (const ecs_world_t *, ecs_filter_t *)' +| |-ParmVarDecl 0x56046805a708 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046805a780 col:19 filter 'ecs_filter_t *' +| `-FullComment 0x56046812faa0 +| |-ParagraphComment 0x56046812f7c0 +| | |-TextComment 0x56046812f720 Text=" Finalize filter." +| | |-TextComment 0x56046812f740 Text=" When manually assigning an array of terms to the filter struct (so not when" +| | |-TextComment 0x56046812f760 Text=" using ecs_filter_init), this operation should be used to ensure that all " +| | `-TextComment 0x56046812f780 Text=" terms are assigned properly and all (derived) fields have been set." +| |-ParagraphComment 0x56046812f860 +| | |-TextComment 0x56046812f7e0 Text=" When ecs_filter_init is used to create the filter, this function should not" +| | |-TextComment 0x56046812f800 Text=" be called. The purpose of this operation is to support creation of filters" +| | `-TextComment 0x56046812f820 Text=" without allocating memory." +| |-ParagraphComment 0x56046812f8b0 +| | `-TextComment 0x56046812f880 Text=" " +| |-ParamCommandComment 0x56046812f8d0 [in] implicitly Param="filter" ParamIndex=1 +| | `-ParagraphComment 0x56046812f980 +| | |-TextComment 0x56046812f930 Text=" The filter to finalize." +| | `-TextComment 0x56046812f950 Text=" " +| `-BlockCommandComment 0x56046812f9a0 Name="return" +| `-ParagraphComment 0x56046812fa50 +| |-TextComment 0x56046812f9d0 Text=" Zero if filter is valid, non-zero if it contains errors." +| |-TextComment 0x56046812f9f0 Text=" " +| `-TextComment 0x56046812fa10 Text="@" +|-FunctionDecl 0x56046805aae8 line:6857:9 ecs_filter_find_this_var 'int32_t (const ecs_filter_t *)' +| |-ParmVarDecl 0x56046805a9f8 col:25 filter 'const ecs_filter_t *' +| `-FullComment 0x56046812fe20 +| |-ParagraphComment 0x56046812fb90 +| | |-TextComment 0x56046812fb10 Text=" Find index for This variable." +| | |-TextComment 0x56046812fb30 Text=" This operation looks up the index of the This variable. This index can" +| | `-TextComment 0x56046812fb50 Text=" be used in operations like ecs_iter_set_var and ecs_iter_get_var." +| |-ParagraphComment 0x56046812fc30 +| | |-TextComment 0x56046812fbb0 Text=" The operation will return -1 if the variable was not found. This happens when" +| | |-TextComment 0x56046812fbd0 Text=" a filter only has terms that are not matched on the This variable, like a" +| | `-TextComment 0x56046812fbf0 Text=" filter that exclusively matches singleton components." +| |-ParagraphComment 0x56046812fc80 +| | `-TextComment 0x56046812fc50 Text=" " +| |-ParamCommandComment 0x56046812fca0 [in] implicitly Param="filter" ParamIndex=0 +| | `-ParagraphComment 0x56046812fd50 +| | |-TextComment 0x56046812fd00 Text=" The rule." +| | `-TextComment 0x56046812fd20 Text=" " +| `-BlockCommandComment 0x56046812fd70 Name="return" +| `-ParagraphComment 0x56046812fdd0 +| `-TextComment 0x56046812fda0 Text=" The index of the This variable." +|-FunctionDecl 0x56046805ad60 line:6865:7 ecs_term_str 'char *(const ecs_world_t *, const ecs_term_t *)' +| |-ParmVarDecl 0x56046805abc8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046805ac40 col:23 term 'const ecs_term_t *' +| `-FullComment 0x56046812ff90 +| `-ParagraphComment 0x56046812ff60 +| |-TextComment 0x56046812fe90 Text=" Convert ter, to string expression." +| |-TextComment 0x56046812feb0 Text=" Convert term to a string expression. The resulting expression is equivalent" +| |-TextComment 0x56046812fed0 Text=" to the same term, with the exception of And " +| |-TextComment 0x56046812fef0 Text="&" +| `-TextComment 0x56046812ff10 Text=" Or operators." +|-FunctionDecl 0x56046805afe0 line:6874:7 ecs_filter_str 'char *(const ecs_world_t *, const ecs_filter_t *)' +| |-ParmVarDecl 0x56046805ae48 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046805aec0 col:25 filter 'const ecs_filter_t *' +| `-FullComment 0x5604681300b0 +| `-ParagraphComment 0x560468130080 +| |-TextComment 0x560468130000 Text=" Convert filter to string expression." +| |-TextComment 0x560468130020 Text=" Convert filter terms to a string expression. The resulting expression can be" +| `-TextComment 0x560468130040 Text=" parsed to create the same filter." +|-FunctionDecl 0x56046805b258 line:6888:12 ecs_filter_iter 'ecs_iter_t (const ecs_world_t *, const ecs_filter_t *)' +| |-ParmVarDecl 0x56046805b0c8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046805b140 col:25 filter 'const ecs_filter_t *' +| `-FullComment 0x56046815c5f0 +| |-ParagraphComment 0x56046815c330 +| | |-TextComment 0x560468130120 Text=" Return a filter iterator." +| | |-TextComment 0x560468130140 Text=" A filter iterator lets an application iterate over entities that match the" +| | |-TextComment 0x560468130160 Text=" specified filter. If NULL is provided for the filter, the iterator will" +| | `-TextComment 0x560468130180 Text=" iterate all tables in the world." +| |-ParagraphComment 0x56046815c380 +| | `-TextComment 0x56046815c350 Text=" " +| |-ParamCommandComment 0x56046815c3a0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046815c450 +| | |-TextComment 0x56046815c400 Text=" The world." +| | `-TextComment 0x56046815c420 Text=" " +| |-ParamCommandComment 0x56046815c470 [in] implicitly Param="filter" ParamIndex=1 +| | `-ParagraphComment 0x56046815c520 +| | |-TextComment 0x56046815c4d0 Text=" The filter." +| | `-TextComment 0x56046815c4f0 Text=" " +| `-BlockCommandComment 0x56046815c540 Name="return" +| `-ParagraphComment 0x56046815c5a0 +| `-TextComment 0x56046815c570 Text=" An iterator that can be used with ecs_filter_next." +|-FunctionDecl 0x56046805b4d8 line:6901:12 ecs_filter_chain_iter 'ecs_iter_t (const ecs_iter_t *, const ecs_filter_t *)' +| |-ParmVarDecl 0x56046805b348 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x56046805b3c0 col:25 filter 'const ecs_filter_t *' +| `-FullComment 0x56046815c9a0 +| |-ParagraphComment 0x56046815c6e0 +| | |-TextComment 0x56046815c660 Text=" Return a chained filter iterator." +| | |-TextComment 0x56046815c680 Text=" A chained iterator applies a filter to the results of the input iterator. The" +| | `-TextComment 0x56046815c6a0 Text=" resulting iterator must be iterated with ecs_filter_next." +| |-ParagraphComment 0x56046815c730 +| | `-TextComment 0x56046815c700 Text=" " +| |-ParamCommandComment 0x56046815c750 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x56046815c800 +| | |-TextComment 0x56046815c7b0 Text=" The input iterator" +| | `-TextComment 0x56046815c7d0 Text=" " +| |-ParamCommandComment 0x56046815c820 [in] implicitly Param="filter" ParamIndex=1 +| | `-ParagraphComment 0x56046815c8d0 +| | |-TextComment 0x56046815c880 Text=" The filter to apply to the iterator." +| | `-TextComment 0x56046815c8a0 Text=" " +| `-BlockCommandComment 0x56046815c8f0 Name="return" +| `-ParagraphComment 0x56046815c950 +| `-TextComment 0x56046815c920 Text=" The chained iterator. " +|-FunctionDecl 0x56046805b758 line:6925:9 ecs_filter_pivot_term 'int32_t (const ecs_world_t *, const ecs_filter_t *)' +| |-ParmVarDecl 0x56046805b5c8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046805b640 col:25 filter 'const ecs_filter_t *' +| `-FullComment 0x56046815cf10 +| |-ParagraphComment 0x56046815ca90 +| | |-TextComment 0x56046815ca10 Text=" Get pivot term for filter." +| | |-TextComment 0x56046815ca30 Text=" The pivot term is the term that matches the smallest set of tables, and is" +| | `-TextComment 0x56046815ca50 Text=" a good default starting point for a search." +| |-ParagraphComment 0x56046815cb30 +| | |-TextComment 0x56046815cab0 Text=" The following conditions must be met for a term to be considered as pivot:" +| | |-TextComment 0x56046815cad0 Text=" - It must have a This subject" +| | `-TextComment 0x56046815caf0 Text=" - It must have the And operator" +| |-ParagraphComment 0x56046815cba0 +| | |-TextComment 0x56046815cb50 Text=" When a filter does not have any terms that match those conditions, it will" +| | `-TextComment 0x56046815cb70 Text=" return -1." +| |-ParagraphComment 0x56046815cc40 +| | |-TextComment 0x56046815cbc0 Text=" If one or more terms in the filter have no matching tables the filter won't" +| | |-TextComment 0x56046815cbe0 Text=" yield any results. In this case the operation will return -2 which gives a" +| | `-TextComment 0x56046815cc00 Text=" search function the option to early out." +| |-ParagraphComment 0x56046815cc90 +| | `-TextComment 0x56046815cc60 Text=" " +| |-ParamCommandComment 0x56046815ccb0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046815cd60 +| | |-TextComment 0x56046815cd10 Text=" The world." +| | `-TextComment 0x56046815cd30 Text=" " +| |-ParamCommandComment 0x56046815cd80 [in] implicitly Param="filter" ParamIndex=1 +| | `-ParagraphComment 0x56046815ce30 +| | |-TextComment 0x56046815cde0 Text=" The filter." +| | `-TextComment 0x56046815ce00 Text=" " +| `-BlockCommandComment 0x56046815ce50 Name="return" +| `-ParagraphComment 0x56046815ceb0 +| `-TextComment 0x56046815ce80 Text=" Index of the pivot term (use with filter->terms)" +|-FunctionDecl 0x56046805b920 line:6939:6 ecs_filter_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x56046805b848 col:17 it 'ecs_iter_t *' +| `-FullComment 0x56046815d230 +| |-ParagraphComment 0x56046815d050 +| | |-TextComment 0x56046815cf80 Text=" Iterate tables matched by filter." +| | |-TextComment 0x56046815cfa0 Text=" This operation progresses the filter iterator to the next table. The " +| | |-TextComment 0x56046815cfc0 Text=" iterator must have been initialized with `ecs_filter_iter`. This operation " +| | |-TextComment 0x56046815cfe0 Text=" must be invoked at least once before interpreting the contents of the " +| | `-TextComment 0x56046815d000 Text=" iterator." +| |-ParagraphComment 0x56046815d0a0 +| | `-TextComment 0x56046815d070 Text=" " +| |-ParamCommandComment 0x56046815d0c0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x56046815d170 +| | |-TextComment 0x56046815d120 Text=" The iterator" +| | `-TextComment 0x56046815d140 Text=" " +| `-BlockCommandComment 0x56046815d190 Name="return" +| `-ParagraphComment 0x56046815d1f0 +| `-TextComment 0x56046815d1c0 Text=" True if more data is available, false if not." +|-FunctionDecl 0x56046805ba98 line:6946:6 ecs_filter_next_instanced 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x56046805ba08 col:17 it 'ecs_iter_t *' +| `-FullComment 0x56046815d320 +| `-ParagraphComment 0x56046815d2f0 +| |-TextComment 0x56046815d2a0 Text=" Same as ecs_filter_next, but always instanced." +| `-TextComment 0x56046815d2c0 Text=" See instanced property of ecs_filter_desc_t." +|-FunctionDecl 0x56046805bd08 line:6951:6 ecs_filter_move 'void (ecs_filter_t *, ecs_filter_t *)' +| |-ParmVarDecl 0x56046805bb78 col:19 dst 'ecs_filter_t *' +| |-ParmVarDecl 0x56046805bbf0 col:19 src 'ecs_filter_t *' +| `-FullComment 0x56046815d3f0 +| `-ParagraphComment 0x56046815d3c0 +| `-TextComment 0x56046815d390 Text=" Move resources of one filter to another. " +|-FunctionDecl 0x56046805bf88 line:6957:6 ecs_filter_copy 'void (ecs_filter_t *, const ecs_filter_t *)' +| |-ParmVarDecl 0x56046805bdf8 col:19 dst 'ecs_filter_t *' +| |-ParmVarDecl 0x56046805be70 col:25 src 'const ecs_filter_t *' +| `-FullComment 0x56046815d4c0 +| `-ParagraphComment 0x56046815d490 +| `-TextComment 0x56046815d460 Text=" Copy resources of one filter to another. " +|-FunctionDecl 0x56046805c2d8 line:7004:14 ecs_query_init 'ecs_query_t *(ecs_world_t *, const ecs_query_desc_t *)' +| |-ParmVarDecl 0x56046805c0d8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046805c1c8 col:29 desc 'const ecs_query_desc_t *' +| `-FullComment 0x56046815dc90 +| |-ParagraphComment 0x56046815d5d0 +| | |-TextComment 0x56046815d530 Text=" Create a query." +| | |-TextComment 0x56046815d550 Text=" This operation creates a query. Queries are used to iterate over entities" +| | |-TextComment 0x56046815d570 Text=" that match a filter and are the fastest way to find and iterate over entities" +| | `-TextComment 0x56046815d590 Text=" and their components." +| |-ParagraphComment 0x56046815d6c0 +| | |-TextComment 0x56046815d5f0 Text=" Queries should be created once, and reused multiple times. While iterating a" +| | |-TextComment 0x56046815d610 Text=" query is a cheap operation, creating and deleting a query is expensive. The" +| | |-TextComment 0x56046815d630 Text=" reason for this is that queries are "prematched", which means that a query" +| | |-TextComment 0x56046815d650 Text=" stores state about which entities (or rather, tables) match with the query." +| | `-TextComment 0x56046815d670 Text=" Building up this state happens during query creation." +| |-ParagraphComment 0x56046815d7d0 +| | |-TextComment 0x56046815d6e0 Text=" Once a query is created, matching only happens when new tables are created." +| | |-TextComment 0x56046815d700 Text=" In most applications this is an infrequent process, since it only occurs when" +| | |-TextComment 0x56046815d720 Text=" a new combination of components is introduced. While matching is expensive," +| | |-TextComment 0x56046815d740 Text=" it is importent to note that matching does not happen on a per-entity basis," +| | |-TextComment 0x56046815d760 Text=" but on a per-table basis. This means that the average time spent on matching" +| | `-TextComment 0x56046815d780 Text=" per frame should rapidly approach zero over the lifetime of an application." +| |-ParagraphComment 0x56046815d910 +| | |-TextComment 0x56046815d7f0 Text=" A query provides direct access to the component arrays. When an application" +| | |-TextComment 0x56046815d810 Text=" creates/deletes entities or adds/removes components, these arrays can shift" +| | |-TextComment 0x56046815d830 Text=" component values around, or may grow in size. This can cause unexpected or" +| | |-TextComment 0x56046815d850 Text=" undefined behavior to occur if these operations are performed while " +| | |-TextComment 0x56046815d870 Text=" iterating. To prevent this from happening an application should either not" +| | |-TextComment 0x56046815d890 Text=" perform these operations while iterating, or use deferred operations (see" +| | `-TextComment 0x56046815d8b0 Text=" ecs_defer_begin and ecs_defer_end)." +| |-ParagraphComment 0x56046815d9b0 +| | |-TextComment 0x56046815d930 Text=" Queries can be created and deleted dynamically. If a query was not deleted" +| | |-TextComment 0x56046815d950 Text=" (using ecs_query_fini) before the world is deleted, it will be deleted " +| | `-TextComment 0x56046815d970 Text=" automatically." +| |-ParagraphComment 0x56046815da00 +| | `-TextComment 0x56046815d9d0 Text=" " +| |-ParamCommandComment 0x56046815da20 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046815dad0 +| | |-TextComment 0x56046815da80 Text=" The world." +| | `-TextComment 0x56046815daa0 Text=" " +| |-ParamCommandComment 0x56046815daf0 [in] implicitly Param="desc" ParamIndex=1 +| | `-ParagraphComment 0x56046815dba0 +| | |-TextComment 0x56046815db50 Text=" A structure describing the query properties." +| | `-TextComment 0x56046815db70 Text=" " +| `-BlockCommandComment 0x56046815dbc0 Name="return" +| `-ParagraphComment 0x56046815dc20 +| `-TextComment 0x56046815dbf0 Text=" The new query." +|-FunctionDecl 0x56046805c4b8 line:7016:6 ecs_query_fini 'void (ecs_query_t *)' +| |-ParmVarDecl 0x56046805c3c8 col:18 query 'ecs_query_t *' +| `-FullComment 0x56046815dee0 +| |-ParagraphComment 0x56046815dda0 +| | |-TextComment 0x56046815dd00 Text=" Destroy a query." +| | |-TextComment 0x56046815dd20 Text=" This operation destroys a query and its resources. If the query is used as" +| | |-TextComment 0x56046815dd40 Text=" the parent of subqueries, those subqueries will be orphaned and must be" +| | `-TextComment 0x56046815dd60 Text=" deinitialized as well." +| |-ParagraphComment 0x56046815ddf0 +| | `-TextComment 0x56046815ddc0 Text=" " +| `-ParamCommandComment 0x56046815de10 [in] implicitly Param="query" ParamIndex=0 +| `-ParagraphComment 0x56046815dea0 +| `-TextComment 0x56046815de70 Text=" The query." +|-FunctionDecl 0x56046805c688 line:7026:21 ecs_query_get_filter 'const ecs_filter_t *(ecs_query_t *)' +| |-ParmVarDecl 0x56046805c598 col:18 query 'ecs_query_t *' +| `-FullComment 0x56046815e110 +| |-ParagraphComment 0x56046815dfd0 +| | |-TextComment 0x56046815df50 Text=" Get filter from a query." +| | |-TextComment 0x56046815df70 Text=" This operation obtains a pointer to the internally constructed filter" +| | `-TextComment 0x56046815df90 Text=" of the query and can be used to introspect the query terms." +| |-ParagraphComment 0x56046815e020 +| | `-TextComment 0x56046815dff0 Text=" " +| `-ParamCommandComment 0x56046815e040 [in] implicitly Param="query" ParamIndex=0 +| `-ParagraphComment 0x56046815e0d0 +| `-TextComment 0x56046815e0a0 Text=" The query." +|-FunctionDecl 0x56046805c930 line:7057:12 ecs_query_iter 'ecs_iter_t (const ecs_world_t *, ecs_query_t *)' +| |-ParmVarDecl 0x56046805c768 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046805c7e0 col:18 query 'ecs_query_t *' +| `-FullComment 0x56046815e7e0 +| |-ParagraphComment 0x56046815e220 +| | |-TextComment 0x56046815e180 Text=" Return a query iterator." +| | |-TextComment 0x56046815e1a0 Text=" A query iterator lets an application iterate over entities that match the" +| | |-TextComment 0x56046815e1c0 Text=" specified query. If a sorting function is specified, the query will check" +| | `-TextComment 0x56046815e1e0 Text=" whether a resort is required upon creating the iterator." +| |-ParagraphComment 0x56046815e2c0 +| | |-TextComment 0x56046815e240 Text=" Creating a query iterator is a cheap operation that does not allocate any" +| | |-TextComment 0x56046815e260 Text=" resources. An application does not need to deinitialize or free a query " +| | `-TextComment 0x56046815e280 Text=" iterator before it goes out of scope." +| |-ParagraphComment 0x56046815e350 +| | |-TextComment 0x56046815e2e0 Text=" To iterate the iterator, an application should use ecs_query_next to progress" +| | `-TextComment 0x56046815e320 Text=" the iterator and test if it has data." +| |-ParagraphComment 0x56046815e410 +| | |-TextComment 0x56046815e370 Text=" Query iteration requires an outer and an inner loop. The outer loop uses" +| | |-TextComment 0x56046815e390 Text=" ecs_query_next to test if new tables are available. The inner loop iterates" +| | |-TextComment 0x56046815e3b0 Text=" the entities in the table, and is usually a for loop that uses iter.count to" +| | `-TextComment 0x56046815e3d0 Text=" loop through the entities and component arrays." +| |-ParagraphComment 0x56046815e500 +| | |-TextComment 0x56046815e430 Text=" The two loops are necessary because of how data is stored internally. " +| | |-TextComment 0x56046815e450 Text=" Entities are grouped by the components they have, in tables. A single query " +| | |-TextComment 0x56046815e470 Text=" can (and often does) match with multiple tables. Because each table has its" +| | |-TextComment 0x56046815e490 Text=" own set of arrays, an application has to reobtain pointers to those arrays" +| | `-TextComment 0x56046815e4b0 Text=" for each matching table." +| |-ParagraphComment 0x56046815e550 +| | `-TextComment 0x56046815e520 Text=" " +| |-ParamCommandComment 0x56046815e570 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046815e620 +| | |-TextComment 0x56046815e5d0 Text=" The world or stage, when iterating in readonly mode." +| | `-TextComment 0x56046815e5f0 Text=" " +| |-ParamCommandComment 0x56046815e640 [in] implicitly Param="query" ParamIndex=1 +| | `-ParagraphComment 0x56046815e6f0 +| | |-TextComment 0x56046815e6a0 Text=" The query to iterate." +| | `-TextComment 0x56046815e6c0 Text=" " +| `-BlockCommandComment 0x56046815e710 Name="return" +| `-ParagraphComment 0x56046815e770 +| `-TextComment 0x56046815e740 Text=" The query iterator." +|-FunctionDecl 0x56046805caa8 line:7071:6 ecs_query_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x56046805ca18 col:17 iter 'ecs_iter_t *' +| `-FullComment 0x56046815eb00 +| |-ParagraphComment 0x56046815e920 +| | |-TextComment 0x56046815e850 Text=" Progress the query iterator." +| | |-TextComment 0x56046815e870 Text=" This operation progresses the query iterator to the next table. The " +| | |-TextComment 0x56046815e890 Text=" iterator must have been initialized with `ecs_query_iter`. This operation " +| | |-TextComment 0x56046815e8b0 Text=" must be invoked at least once before interpreting the contents of the " +| | `-TextComment 0x56046815e8d0 Text=" iterator." +| |-ParagraphComment 0x56046815e970 +| | `-TextComment 0x56046815e940 Text=" " +| |-ParamCommandComment 0x56046815e990 [in] implicitly Param="iter" ParamIndex=0 +| | `-ParagraphComment 0x56046815ea40 +| | |-TextComment 0x56046815e9f0 Text=" The iterator." +| | `-TextComment 0x56046815ea10 Text=" " +| `-BlockCommandComment 0x56046815ea60 Name="returns" +| `-ParagraphComment 0x56046815eac0 +| `-TextComment 0x56046815ea90 Text=" True if more data is available, false if not." +|-FunctionDecl 0x56046805cc18 line:7078:6 ecs_query_next_instanced 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x56046805cb88 col:17 iter 'ecs_iter_t *' +| `-FullComment 0x56046815ebf0 +| `-ParagraphComment 0x56046815ebc0 +| |-TextComment 0x56046815eb70 Text=" Same as ecs_query_next, but always instanced." +| `-TextComment 0x56046815eb90 Text=" See "instanced" property of ecs_filter_desc_t." +|-FunctionDecl 0x56046805cd88 line:7092:6 ecs_query_next_table 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x56046805ccf8 col:17 iter 'ecs_iter_t *' +| `-FullComment 0x56046815ef40 +| |-ParagraphComment 0x56046815ece0 +| | |-TextComment 0x56046815ec60 Text=" Fast alternative to ecs_query_next that only returns matched tables." +| | |-TextComment 0x56046815ec80 Text=" This operation only populates the ecs_iter_t::table field. To access the" +| | `-TextComment 0x56046815eca0 Text=" matched components, call ecs_query_populate." +| |-ParagraphComment 0x56046815ed50 +| | |-TextComment 0x56046815ed00 Text=" If this operation is used with a query that has inout/out terms, those terms" +| | `-TextComment 0x56046815ed20 Text=" will not be marked dirty unless ecs_query_populate is called. " +| |-ParagraphComment 0x56046815eda0 +| | `-TextComment 0x56046815ed70 Text=" " +| |-ParamCommandComment 0x56046815edc0 [in] implicitly Param="iter" ParamIndex=0 +| | `-ParagraphComment 0x56046815ee70 +| | |-TextComment 0x56046815ee20 Text=" The iterator." +| | `-TextComment 0x56046815ee40 Text=" " +| `-BlockCommandComment 0x56046815ee90 Name="returns" +| `-ParagraphComment 0x56046815eef0 +| `-TextComment 0x56046815eec0 Text=" True if more data is available, false if not." +|-FunctionDecl 0x56046805cef8 line:7113:6 ecs_query_populate 'void (ecs_iter_t *)' +| |-ParmVarDecl 0x56046805ce68 col:17 iter 'ecs_iter_t *' +| `-FullComment 0x56046815f330 +| |-ParagraphComment 0x56046815f030 +| | |-TextComment 0x56046815efb0 Text=" Populate iterator fields." +| | |-TextComment 0x56046815efd0 Text=" This operation can be combined with ecs_query_next_table to populate the" +| | `-TextComment 0x56046815eff0 Text=" iterator fields for the current table." +| |-ParagraphComment 0x56046815f0d0 +| | |-TextComment 0x56046815f050 Text=" Populating fields conditionally can save time when a query uses change " +| | |-TextComment 0x56046815f070 Text=" detection, and only needs iterator data when the table has changed. When this" +| | `-TextComment 0x56046815f090 Text=" operation is called, inout/out terms will be marked dirty." +| |-ParagraphComment 0x56046815f170 +| | |-TextComment 0x56046815f0f0 Text=" In cases where inout/out terms are conditionally written and no changes" +| | |-TextComment 0x56046815f110 Text=" were made after calling ecs_query_populate, the ecs_query_skip function can" +| | `-TextComment 0x56046815f130 Text=" be called to prevent the matched table components from being marked dirty." +| |-ParagraphComment 0x56046815f1e0 +| | |-TextComment 0x56046815f190 Text=" This operation does should not be used with queries that match disabled " +| | `-TextComment 0x56046815f1b0 Text=" components, union relationships, or with queries that use order_by." +| |-ParagraphComment 0x56046815f230 +| | `-TextComment 0x56046815f200 Text=" " +| `-ParamCommandComment 0x56046815f250 [in] implicitly Param="iter" ParamIndex=0 +| `-ParagraphComment 0x56046815f2e0 +| `-TextComment 0x56046815f2b0 Text=" The iterator." +|-FunctionDecl 0x56046805d168 line:7146:6 ecs_query_changed 'bool (ecs_query_t *, const ecs_iter_t *)' +| |-ParmVarDecl 0x56046805cfd8 col:18 query 'ecs_query_t *' +| |-ParmVarDecl 0x56046805d050 col:23 it 'const ecs_iter_t *' +| `-FullComment 0x56046815fa30 +| |-ParagraphComment 0x56046815f490 +| | |-TextComment 0x56046815f3a0 Text=" Returns whether the query data changed since the last iteration." +| | |-TextComment 0x56046815f3c0 Text=" The operation will return true after:" +| | |-TextComment 0x56046815f3e0 Text=" - new entities have been matched with" +| | |-TextComment 0x56046815f400 Text=" - new tables have been matched/unmatched with" +| | |-TextComment 0x56046815f420 Text=" - matched entities were deleted" +| | `-TextComment 0x56046815f440 Text=" - matched components were changed" +| |-ParagraphComment 0x56046815f530 +| | |-TextComment 0x56046815f4b0 Text=" The operation will not return true after a write-only (EcsOut) or filter" +| | |-TextComment 0x56046815f4d0 Text=" (EcsInOutNone) term has changed, when a term is not matched with the" +| | `-TextComment 0x56046815f4f0 Text=" current table (This subject) or for tag terms." +| |-ParagraphComment 0x56046815f5a0 +| | |-TextComment 0x56046815f550 Text=" The changed state of a table is reset after it is iterated. If a iterator was" +| | `-TextComment 0x56046815f570 Text=" not iterated until completion, tables may still be marked as changed." +| |-ParagraphComment 0x56046815f610 +| | |-TextComment 0x56046815f5c0 Text=" If no iterator is provided the operation will return the changed state of the" +| | `-TextComment 0x56046815f5e0 Text=" all matched tables of the query. " +| |-ParagraphComment 0x56046815f6b0 +| | |-TextComment 0x56046815f630 Text=" If an iterator is provided, the operation will return the changed state of " +| | |-TextComment 0x56046815f650 Text=" the currently returned iterator result. The following preconditions must be" +| | `-TextComment 0x56046815f670 Text=" met before using an iterator with change detection:" +| |-ParagraphComment 0x56046815f750 +| | |-TextComment 0x56046815f6d0 Text=" - The iterator is a query iterator (created with ecs_query_iter)" +| | |-TextComment 0x56046815f6f0 Text=" - The iterator must be valid (ecs_query_next must have returned true)" +| | `-TextComment 0x56046815f710 Text=" - The iterator must be instanced" +| |-ParagraphComment 0x56046815f7a0 +| | `-TextComment 0x56046815f770 Text=" " +| |-ParamCommandComment 0x56046815f7c0 [in] implicitly Param="query" ParamIndex=0 +| | `-ParagraphComment 0x56046815f870 +| | |-TextComment 0x56046815f820 Text=" The query (optional if 'it' is provided)." +| | `-TextComment 0x56046815f840 Text=" " +| |-ParamCommandComment 0x56046815f890 [in] implicitly Param="it" ParamIndex=1 +| | `-ParagraphComment 0x56046815f940 +| | |-TextComment 0x56046815f8f0 Text=" The iterator result to test (optional if 'query' is provided)." +| | `-TextComment 0x56046815f910 Text=" " +| `-BlockCommandComment 0x56046815f960 Name="return" +| `-ParagraphComment 0x56046815f9c0 +| `-TextComment 0x56046815f990 Text=" true if entities changed, otherwise false." +|-FunctionDecl 0x56046805d2e8 line:7161:6 ecs_query_skip 'void (ecs_iter_t *)' +| |-ParmVarDecl 0x56046805d258 col:17 it 'ecs_iter_t *' +| `-FullComment 0x56046815fd20 +| |-ParagraphComment 0x56046815fb40 +| | |-TextComment 0x56046815faa0 Text=" Skip a table while iterating." +| | |-TextComment 0x56046815fac0 Text=" This operation lets the query iterator know that a table was skipped while" +| | |-TextComment 0x56046815fae0 Text=" iterating. A skipped table will not reset its changed state, and the query" +| | `-TextComment 0x56046815fb00 Text=" will not update the dirty flags of the table for its out columns." +| |-ParagraphComment 0x56046815fbe0 +| | |-TextComment 0x56046815fb60 Text=" Only valid iterators must be provided (next has to be called at least once " +| | |-TextComment 0x56046815fb80 Text="&" +| | `-TextComment 0x56046815fba0 Text=" return true) and the iterator must be a query iterator." +| |-ParagraphComment 0x56046815fc30 +| | `-TextComment 0x56046815fc00 Text=" " +| `-ParamCommandComment 0x56046815fc50 [in] implicitly Param="it" ParamIndex=0 +| `-ParagraphComment 0x56046815fce0 +| `-TextComment 0x56046815fcb0 Text=" The iterator result to skip." +|-FunctionDecl 0x56046805d558 line:7187:6 ecs_query_set_group 'void (ecs_iter_t *, uint64_t)' +| |-ParmVarDecl 0x56046805d3c8 col:17 it 'ecs_iter_t *' +| |-ParmVarDecl 0x56046805d440 col:14 group_id 'uint64_t':'unsigned long' +| `-FullComment 0x560468160280 +| |-ParagraphComment 0x56046815fe30 +| | |-TextComment 0x56046815fd90 Text=" Set group to iterate for query iterator." +| | |-TextComment 0x56046815fdb0 Text=" This operation limits the results returned by the query to only the selected" +| | |-TextComment 0x56046815fdd0 Text=" group id. The query must have a group_by function, and the iterator must" +| | `-TextComment 0x56046815fdf0 Text=" be a query iterator." +| |-ParagraphComment 0x56046815fef0 +| | |-TextComment 0x56046815fe50 Text=" Groups are sets of tables that are stored together in the query cache based" +| | |-TextComment 0x56046815fe70 Text=" on a group id, which is calculated per table by the group_by function. To " +| | |-TextComment 0x56046815fe90 Text=" iterate a group, an iterator only needs to know the first and last cache node" +| | `-TextComment 0x56046815feb0 Text=" for that group, which can both be found in a fast O(1) operation." +| |-ParagraphComment 0x56046815ffb0 +| | |-TextComment 0x56046815ff10 Text=" As a result, group iteration is one of the most efficient mechanisms to " +| | |-TextComment 0x56046815ff30 Text=" filter out large numbers of entities, even if those entities are distributed" +| | |-TextComment 0x56046815ff50 Text=" across many tables. This makes it a good fit for things like dividing up" +| | `-TextComment 0x56046815ff70 Text=" a world into cells, and only iterating cells close to a player." +| |-ParagraphComment 0x560468160050 +| | |-TextComment 0x56046815ffd0 Text=" The group to iterate must be set before the first call to ecs_query_next. No" +| | |-TextComment 0x56046815fff0 Text=" operations that can add/remove components should be invoked between calling " +| | `-TextComment 0x560468160010 Text=" ecs_query_set_group and ecs_query_next." +| |-ParagraphComment 0x5604681600a0 +| | `-TextComment 0x560468160070 Text=" " +| |-ParamCommandComment 0x5604681600c0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468160170 +| | |-TextComment 0x560468160120 Text=" The query iterator." +| | `-TextComment 0x560468160140 Text=" " +| `-ParamCommandComment 0x560468160190 [in] implicitly Param="group_id" ParamIndex=1 +| `-ParagraphComment 0x560468160220 +| `-TextComment 0x5604681601f0 Text=" The group to iterate." +|-FunctionDecl 0x56046805d7e0 line:7200:7 ecs_query_get_group_ctx 'void *(ecs_query_t *, uint64_t)' +| |-ParmVarDecl 0x56046805d648 col:18 query 'ecs_query_t *' +| |-ParmVarDecl 0x56046805d6c0 col:14 group_id 'uint64_t':'unsigned long' +| `-FullComment 0x560468160650 +| |-ParagraphComment 0x560468160390 +| | |-TextComment 0x5604681602f0 Text=" Get context of query group." +| | |-TextComment 0x560468160330 Text=" This operation returns the context of a query group as returned by the " +| | `-TextComment 0x560468160350 Text=" on_group_create callback." +| |-ParagraphComment 0x5604681603e0 +| | `-TextComment 0x5604681603b0 Text=" " +| |-ParamCommandComment 0x560468160400 [in] implicitly Param="query" ParamIndex=0 +| | `-ParagraphComment 0x5604681604b0 +| | |-TextComment 0x560468160460 Text=" The query." +| | `-TextComment 0x560468160480 Text=" " +| |-ParamCommandComment 0x5604681604d0 [in] implicitly Param="group_id" ParamIndex=1 +| | `-ParagraphComment 0x560468160580 +| | |-TextComment 0x560468160530 Text=" The group for which to obtain the context." +| | `-TextComment 0x560468160550 Text=" " +| `-BlockCommandComment 0x5604681605a0 Name="return" +| `-ParagraphComment 0x560468160600 +| `-TextComment 0x5604681605d0 Text=" The group context, NULL if the group doesn't exist." +|-FunctionDecl 0x56046805db28 line:7213:31 ecs_query_get_group_info 'const ecs_query_group_info_t *(ecs_query_t *, uint64_t)' +| |-ParmVarDecl 0x56046805d940 col:18 query 'ecs_query_t *' +| |-ParmVarDecl 0x56046805d9b8 col:14 group_id 'uint64_t':'unsigned long' +| `-FullComment 0x560468160a00 +| |-ParagraphComment 0x560468160740 +| | |-TextComment 0x5604681606c0 Text=" Get information about query group." +| | |-TextComment 0x5604681606e0 Text=" This operation returns information about a query group, including the group" +| | `-TextComment 0x560468160700 Text=" context returned by the on_group_create callback." +| |-ParagraphComment 0x560468160790 +| | `-TextComment 0x560468160760 Text=" " +| |-ParamCommandComment 0x5604681607b0 [in] implicitly Param="query" ParamIndex=0 +| | `-ParagraphComment 0x560468160860 +| | |-TextComment 0x560468160810 Text=" The query." +| | `-TextComment 0x560468160830 Text=" " +| |-ParamCommandComment 0x560468160880 [in] implicitly Param="group_id" ParamIndex=1 +| | `-ParagraphComment 0x560468160930 +| | |-TextComment 0x5604681608e0 Text=" The group for which to obtain the group info." +| | `-TextComment 0x560468160900 Text=" " +| `-BlockCommandComment 0x560468160950 Name="return" +| `-ParagraphComment 0x5604681609b0 +| `-TextComment 0x560468160980 Text=" The group info, NULL if the group doesn't exist." +|-FunctionDecl 0x56046805dd08 line:7226:6 ecs_query_orphaned 'bool (ecs_query_t *)' +| |-ParmVarDecl 0x56046805dc18 col:18 query 'ecs_query_t *' +| `-FullComment 0x560468160cf0 +| |-ParagraphComment 0x560468160b10 +| | |-TextComment 0x560468160a70 Text=" Returns whether query is orphaned." +| | |-TextComment 0x560468160a90 Text=" When the parent query of a subquery is deleted, it is left in an orphaned" +| | |-TextComment 0x560468160ab0 Text=" state. The only valid operation on an orphaned query is deleting it. Only" +| | `-TextComment 0x560468160ad0 Text=" subqueries can be orphaned." +| |-ParagraphComment 0x560468160b60 +| | `-TextComment 0x560468160b30 Text=" " +| |-ParamCommandComment 0x560468160b80 [in] implicitly Param="query" ParamIndex=0 +| | `-ParagraphComment 0x560468160c30 +| | |-TextComment 0x560468160be0 Text=" The query." +| | `-TextComment 0x560468160c00 Text=" " +| `-BlockCommandComment 0x560468160c50 Name="return" +| `-ParagraphComment 0x560468160cb0 +| `-TextComment 0x560468160c80 Text=" true if query is orphaned, otherwise false." +|-FunctionDecl 0x56046805df40 line:7235:7 ecs_query_str 'char *(const ecs_query_t *)' +| |-ParmVarDecl 0x56046805de48 col:24 query 'const ecs_query_t *' +| `-FullComment 0x560468160f70 +| |-ParagraphComment 0x560468160d90 +| | `-TextComment 0x560468160d60 Text=" Convert query to string." +| |-ParagraphComment 0x560468160de0 +| | `-TextComment 0x560468160db0 Text=" " +| |-ParamCommandComment 0x560468160e00 [in] implicitly Param="query" ParamIndex=0 +| | `-ParagraphComment 0x560468160eb0 +| | |-TextComment 0x560468160e60 Text=" The query." +| | `-TextComment 0x560468160e80 Text=" " +| `-BlockCommandComment 0x560468160ed0 Name="return" +| `-ParagraphComment 0x560468160f30 +| `-TextComment 0x560468160f00 Text=" The query string." +|-FunctionDecl 0x56046805e118 line:7244:9 ecs_query_table_count 'int32_t (const ecs_query_t *)' +| |-ParmVarDecl 0x56046805e028 col:24 query 'const ecs_query_t *' +| `-FullComment 0x5604681611f0 +| |-ParagraphComment 0x560468161010 +| | `-TextComment 0x560468160fe0 Text=" Returns number of tables query matched with." +| |-ParagraphComment 0x560468161060 +| | `-TextComment 0x560468161030 Text=" " +| |-ParamCommandComment 0x560468161080 [in] implicitly Param="query" ParamIndex=0 +| | `-ParagraphComment 0x560468161130 +| | |-TextComment 0x5604681610e0 Text=" The query." +| | `-TextComment 0x560468161100 Text=" " +| `-BlockCommandComment 0x560468161150 Name="return" +| `-ParagraphComment 0x5604681611b0 +| `-TextComment 0x560468161180 Text=" The number of matched tables." +|-FunctionDecl 0x56046805e288 line:7253:9 ecs_query_empty_table_count 'int32_t (const ecs_query_t *)' +| |-ParmVarDecl 0x56046805e1f8 col:24 query 'const ecs_query_t *' +| `-FullComment 0x560468161470 +| |-ParagraphComment 0x560468161290 +| | `-TextComment 0x560468161260 Text=" Returns number of empty tables query matched with." +| |-ParagraphComment 0x5604681612e0 +| | `-TextComment 0x5604681612b0 Text=" " +| |-ParamCommandComment 0x560468161300 [in] implicitly Param="query" ParamIndex=0 +| | `-ParagraphComment 0x5604681613b0 +| | |-TextComment 0x560468161360 Text=" The query." +| | `-TextComment 0x560468161380 Text=" " +| `-BlockCommandComment 0x5604681613d0 Name="return" +| `-ParagraphComment 0x560468161430 +| `-TextComment 0x560468161400 Text=" The number of matched empty tables." +|-FunctionDecl 0x56046805e3f8 line:7264:9 ecs_query_entity_count 'int32_t (const ecs_query_t *)' +| |-ParmVarDecl 0x56046805e368 col:24 query 'const ecs_query_t *' +| `-FullComment 0x560468161740 +| |-ParagraphComment 0x560468161560 +| | |-TextComment 0x5604681614e0 Text=" Returns number of entities query matched with." +| | |-TextComment 0x560468161500 Text=" This operation iterates all non-empty tables in the query cache to find the" +| | `-TextComment 0x560468161520 Text=" total number of entities." +| |-ParagraphComment 0x5604681615b0 +| | `-TextComment 0x560468161580 Text=" " +| |-ParamCommandComment 0x5604681615d0 [in] implicitly Param="query" ParamIndex=0 +| | `-ParagraphComment 0x560468161680 +| | |-TextComment 0x560468161630 Text=" The query." +| | `-TextComment 0x560468161650 Text=" " +| `-BlockCommandComment 0x5604681616a0 Name="return" +| `-ParagraphComment 0x560468161700 +| `-TextComment 0x5604681616d0 Text=" The number of matched entities." +|-RecordDecl 0x56046805e4f8 line:7275:16 struct ecs_event_desc_t definition +| |-FullComment 0x5604681619a0 +| | |-ParagraphComment 0x5604681617e0 +| | | `-TextComment 0x5604681617b0 Text=" " +| | |-VerbatimLineComment 0x560468161800 Text=" observer Observers" +| | |-ParagraphComment 0x560468161870 +| | | `-TextComment 0x560468161840 Text=" " +| | `-BlockCommandComment 0x560468161890 Name="brief" +| | `-ParagraphComment 0x560468161960 +| | |-TextComment 0x5604681618c0 Text=" Functions for working with events and observers." +| | |-TextComment 0x5604681618e0 Text=" " +| | |-TextComment 0x560468161900 Text="@" +| | `-TextComment 0x560468161920 Text="{" +| |-FieldDecl 0x56046805e5b0 col:18 event 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x56046805e610 col:23 ids 'const ecs_type_t *' +| |-FieldDecl 0x56046805e670 col:18 table 'ecs_table_t *' +| |-FieldDecl 0x56046805e6d0 col:18 other_table 'ecs_table_t *' +| |-FieldDecl 0x56046805e730 col:13 offset 'int32_t':'int' +| |-FieldDecl 0x56046805e790 col:13 count 'int32_t':'int' +| |-FieldDecl 0x56046805e7f0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x56046805e858 col:17 param 'const void *' +| |-FieldDecl 0x56046805e8b8 col:17 observable 'ecs_poly_t *' +| `-FieldDecl 0x56046805e950 col:19 flags 'ecs_flags32_t':'unsigned int' +|-TypedefDecl 0x56046805e9f8 col:3 referenced ecs_event_desc_t 'struct ecs_event_desc_t':'struct ecs_event_desc_t' +| |-ElaboratedType 0x56046805e9a0 'struct ecs_event_desc_t' sugar +| | `-RecordType 0x56046805e580 'struct ecs_event_desc_t' +| | `-Record 0x56046805e4f8 'ecs_event_desc_t' +| `-FullComment 0x560468161c00 +| |-ParagraphComment 0x560468161a40 +| | `-TextComment 0x560468161a10 Text=" " +| |-VerbatimLineComment 0x560468161a60 Text=" observer Observers" +| |-ParagraphComment 0x560468161ad0 +| | `-TextComment 0x560468161aa0 Text=" " +| `-BlockCommandComment 0x560468161af0 Name="brief" +| `-ParagraphComment 0x560468161bc0 +| |-TextComment 0x560468161b20 Text=" Functions for working with events and observers." +| |-TextComment 0x560468161b40 Text=" " +| |-TextComment 0x560468161b60 Text="@" +| `-TextComment 0x560468161b80 Text="{" +|-FunctionDecl 0x56046805eca8 line:7342:6 ecs_emit 'void (ecs_world_t *, ecs_event_desc_t *)' +| |-ParmVarDecl 0x56046805eaa0 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046805eb98 col:23 desc 'ecs_event_desc_t *' +| `-FullComment 0x560468162340 +| |-ParagraphComment 0x560468161d40 +| | |-TextComment 0x560468161c70 Text=" Send event." +| | |-TextComment 0x560468161c90 Text=" This sends an event to matching triggers " +| | |-TextComment 0x560468161cb0 Text="&" +| | |-TextComment 0x560468161cd0 Text=" is the mechanism used by flecs" +| | `-TextComment 0x560468161cf0 Text=" itself to send OnAdd, OnRemove, etc events." +| |-ParagraphComment 0x560468161db0 +| | |-TextComment 0x560468161d60 Text=" Applications can use this function to send custom events, where a custom" +| | `-TextComment 0x560468161d80 Text=" event can be any regular entity." +| |-ParagraphComment 0x560468161e50 +| | |-TextComment 0x560468161dd0 Text=" Applications should not send builtin flecs events, as this may violate" +| | |-TextComment 0x560468161df0 Text=" assumptions the code makes about the conditions under which those events are" +| | `-TextComment 0x560468161e10 Text=" sent." +| |-ParagraphComment 0x560468161ec0 +| | |-TextComment 0x560468161e70 Text=" Triggers are invoked synchronously. It is therefore safe to use stack-based" +| | `-TextComment 0x560468161e90 Text=" data as event context, which can be set in the "param" member." +| |-ParagraphComment 0x560468161f30 +| | |-TextComment 0x560468161ee0 Text=" To send a notification for a single entity, an application should set the" +| | `-TextComment 0x560468161f00 Text=" following members in the event descriptor:" +| |-ParagraphComment 0x560468161fd0 +| | |-TextComment 0x560468161f50 Text=" - table: set to the table of the entity" +| | |-TextComment 0x560468161f70 Text=" - offset: set to the row of the entity in the table" +| | `-TextComment 0x560468161f90 Text=" - count: set to 1" +| |-ParagraphComment 0x5604681620e0 +| | |-TextComment 0x560468161ff0 Text=" The table " +| | |-TextComment 0x560468162010 Text="&" +| | |-TextComment 0x560468162030 Text=" row of the entity can be obtained like this:" +| | |-TextComment 0x560468162050 Text=" ecs_record_t *r = ecs_record_find(world, e);" +| | |-TextComment 0x560468162070 Text=" desc.table = r->table;" +| | `-TextComment 0x560468162090 Text=" desc.offset = ECS_RECORD_TO_ROW(r->row);" +| |-ParagraphComment 0x560468162130 +| | `-TextComment 0x560468162100 Text=" " +| |-ParamCommandComment 0x560468162150 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468162200 +| | |-TextComment 0x5604681621b0 Text=" The world." +| | `-TextComment 0x5604681621d0 Text=" " +| `-ParamCommandComment 0x560468162220 [in] implicitly Param="desc" ParamIndex=1 +| `-ParagraphComment 0x5604681622b0 +| `-TextComment 0x560468162280 Text=" Event parameters." +|-FunctionDecl 0x56046805ef98 line:7356:14 ecs_observer_init 'ecs_entity_t (ecs_world_t *, const ecs_observer_desc_t *)' +| |-ParmVarDecl 0x56046805ed98 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046805ee88 col:32 desc 'const ecs_observer_desc_t *' +| `-FullComment 0x5604681626a0 +| |-ParagraphComment 0x560468162430 +| | |-TextComment 0x5604681623b0 Text=" Create observer." +| | |-TextComment 0x5604681623d0 Text=" Observers are like triggers, but can subscribe for multiple terms. An " +| | `-TextComment 0x5604681623f0 Text=" observer only triggers when the source of the event meets all terms." +| |-ParagraphComment 0x560468162480 +| | `-TextComment 0x560468162450 Text=" See the documentation for ecs_observer_desc_t for more details." +| |-ParagraphComment 0x5604681624d0 +| | `-TextComment 0x5604681624a0 Text=" " +| |-ParamCommandComment 0x5604681624f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681625a0 +| | |-TextComment 0x560468162550 Text=" The world." +| | `-TextComment 0x560468162570 Text=" " +| `-ParamCommandComment 0x5604681625c0 [in] implicitly Param="desc" ParamIndex=1 +| `-ParagraphComment 0x560468162650 +| `-TextComment 0x560468162620 Text=" The observer creation parameters." +|-FunctionDecl 0x56046805f118 line:7370:6 ecs_observer_default_run_action 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x56046805f088 col:17 it 'ecs_iter_t *' +| `-FullComment 0x5604681629c0 +| |-ParagraphComment 0x5604681627e0 +| | |-TextComment 0x560468162710 Text=" Default run action for observer." +| | |-TextComment 0x560468162730 Text=" This function can be called from a custom observer run action (see " +| | |-TextComment 0x560468162750 Text=" ecs_observer_desc_t::run for more details). This function ensures that the " +| | |-TextComment 0x560468162770 Text=" observer's filter is applied to the iterator's table, filters out duplicate " +| | `-TextComment 0x560468162790 Text=" events and implements EcsMonitor logic." +| |-ParagraphComment 0x560468162830 +| | `-TextComment 0x560468162800 Text=" " +| |-ParamCommandComment 0x560468162850 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468162900 +| | |-TextComment 0x5604681628b0 Text=" The iterator." +| | `-TextComment 0x5604681628d0 Text=" " +| `-BlockCommandComment 0x560468162920 Name="return" +| `-ParagraphComment 0x560468162980 +| `-TextComment 0x560468162950 Text=" True if the observer was invoked." +|-FunctionDecl 0x56046805f360 line:7374:7 ecs_get_observer_ctx 'void *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046805f1d0 col:24 world 'const ecs_world_t *' +| `-ParmVarDecl 0x56046805f248 col:18 observer 'ecs_entity_t':'unsigned long' +|-FunctionDecl 0x56046805f538 line:7379:7 ecs_get_observer_binding_ctx 'void *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046805f420 col:24 world 'const ecs_world_t *' +| `-ParmVarDecl 0x56046805f498 col:18 observer 'ecs_entity_t':'unsigned long' +|-FunctionDecl 0x56046805f898 line:7413:6 ecs_iter_poly 'void (const ecs_world_t *, const ecs_poly_t *, ecs_iter_t *, ecs_term_t *)' +| |-ParmVarDecl 0x56046805f688 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046805f700 col:23 poly 'const ecs_poly_t *' +| |-ParmVarDecl 0x56046805f778 col:17 iter 'ecs_iter_t *' +| |-ParmVarDecl 0x56046805f7f0 col:17 filter 'ecs_term_t *' +| `-FullComment 0x560468163070 +| |-ParagraphComment 0x560468162ab0 +| | |-TextComment 0x560468162a30 Text=" Create iterator from poly object." +| | |-TextComment 0x560468162a50 Text=" The provided poly object must have the iterable mixin. If an object is " +| | `-TextComment 0x560468162a70 Text=" provided that does not have the mixin, the function will assert. " +| |-ParagraphComment 0x560468162b50 +| | |-TextComment 0x560468162ad0 Text=" When a filter is provided, an array of two iterators must be passed to the " +| | |-TextComment 0x560468162af0 Text=" function. This allows the mixin implementation to create a chained iterator " +| | `-TextComment 0x560468162b10 Text=" when necessary, which requires two iterator objects." +| |-ParagraphComment 0x560468162bf0 +| | |-TextComment 0x560468162b70 Text=" If a filter is provided, the first element in the array of two iterators is" +| | |-TextComment 0x560468162b90 Text=" the one that should be iterated. The mixin implementation may or may not set" +| | `-TextComment 0x560468162bb0 Text=" the second element, depending on whether an iterator chain is required." +| |-ParagraphComment 0x560468162c90 +| | |-TextComment 0x560468162c10 Text=" Additionally, when a filter is provided the returned iterator will be for a" +| | |-TextComment 0x560468162c30 Text=" single term with the provided filter id. If the iterator is chained, the" +| | `-TextComment 0x560468162c50 Text=" previous iterator in the chain can be accessed through it->chain_it." +| |-ParagraphComment 0x560468162ce0 +| | `-TextComment 0x560468162cb0 Text=" " +| |-ParamCommandComment 0x560468162d00 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468162db0 +| | |-TextComment 0x560468162d60 Text=" The world or stage for which to create the iterator." +| | `-TextComment 0x560468162d80 Text=" " +| |-ParamCommandComment 0x560468162dd0 [in] implicitly Param="poly" ParamIndex=1 +| | `-ParagraphComment 0x560468162e80 +| | |-TextComment 0x560468162e30 Text=" The poly object from which to create the iterator." +| | `-TextComment 0x560468162e50 Text=" " +| |-ParamCommandComment 0x560468162ea0 [in] implicitly Param="iter" ParamIndex=2 +| | `-ParagraphComment 0x560468162f50 +| | |-TextComment 0x560468162f00 Text=" The iterator (out, ecs_iter_t[2] when filter is set)." +| | `-TextComment 0x560468162f20 Text=" " +| `-ParamCommandComment 0x560468162f70 [in] implicitly Param="filter" ParamIndex=3 +| `-ParagraphComment 0x560468163000 +| `-TextComment 0x560468162fd0 Text=" Optional term used for filtering the results." +|-FunctionDecl 0x560468060a58 line:7433:6 ecs_iter_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x5604680609c8 col:17 it 'ecs_iter_t *' +| `-FullComment 0x560468163440 +| |-ParagraphComment 0x5604681631b0 +| | |-TextComment 0x5604681630e0 Text=" Progress any iterator." +| | |-TextComment 0x560468163100 Text=" This operation is useful in combination with iterators for which it is not" +| | |-TextComment 0x560468163120 Text=" known what created them. Example use cases are functions that should accept" +| | |-TextComment 0x560468163140 Text=" any kind of iterator (such as serializers) or iterators created from poly" +| | `-TextComment 0x560468163160 Text=" objects." +| |-ParagraphComment 0x560468163250 +| | |-TextComment 0x5604681631d0 Text=" This operation is slightly slower than using a type-specific iterator (e.g." +| | |-TextComment 0x5604681631f0 Text=" ecs_filter_next, ecs_query_next) as it has to call a function pointer which" +| | `-TextComment 0x560468163210 Text=" introduces a level of indirection." +| |-ParagraphComment 0x5604681632a0 +| | `-TextComment 0x560468163270 Text=" " +| |-ParamCommandComment 0x5604681632c0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468163370 +| | |-TextComment 0x560468163320 Text=" The iterator." +| | `-TextComment 0x560468163340 Text=" " +| `-BlockCommandComment 0x560468163390 Name="return" +| `-ParagraphComment 0x5604681633f0 +| `-TextComment 0x5604681633c0 Text=" True if iterator has more results, false if not." +|-FunctionDecl 0x560468060bc8 line:7446:6 ecs_iter_fini 'void (ecs_iter_t *)' +| |-ParmVarDecl 0x560468060b38 col:17 it 'ecs_iter_t *' +| `-FullComment 0x5604681636e0 +| |-ParagraphComment 0x560468163500 +| | |-TextComment 0x5604681634b0 Text=" Cleanup iterator resources." +| | `-TextComment 0x5604681634d0 Text=" This operation cleans up any resources associated with the iterator." +| |-ParagraphComment 0x5604681635a0 +| | |-TextComment 0x560468163520 Text=" This operation should only be used when an iterator is not iterated until" +| | |-TextComment 0x560468163540 Text=" completion (next has not yet returned false). When an iterator is iterated" +| | `-TextComment 0x560468163560 Text=" until completion, resources are automatically freed." +| |-ParagraphComment 0x5604681635f0 +| | `-TextComment 0x5604681635c0 Text=" " +| `-ParamCommandComment 0x560468163610 [in] implicitly Param="it" ParamIndex=0 +| `-ParagraphComment 0x5604681636a0 +| `-TextComment 0x560468163670 Text=" The iterator." +|-FunctionDecl 0x560468060d98 line:7461:9 ecs_iter_count 'int32_t (ecs_iter_t *)' +| |-ParmVarDecl 0x560468060ca8 col:17 it 'ecs_iter_t *' +| `-FullComment 0x560468163a50 +| |-ParagraphComment 0x5604681637f0 +| | |-TextComment 0x560468163750 Text=" Count number of matched entities in query." +| | |-TextComment 0x560468163770 Text=" This operation returns the number of matched entities. If a query contains no" +| | |-TextComment 0x560468163790 Text=" matched entities but still yields results (e.g. it has no terms with This" +| | `-TextComment 0x5604681637b0 Text=" sources) the operation will return 0." +| |-ParagraphComment 0x560468163860 +| | |-TextComment 0x560468163810 Text=" To determine the number of matched entities, the operation iterates the" +| | `-TextComment 0x560468163830 Text=" iterator until it yields no more results." +| |-ParagraphComment 0x5604681638b0 +| | `-TextComment 0x560468163880 Text=" " +| |-ParamCommandComment 0x5604681638d0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468163980 +| | |-TextComment 0x560468163930 Text=" The iterator." +| | `-TextComment 0x560468163950 Text=" " +| `-BlockCommandComment 0x5604681639a0 Name="return" +| `-ParagraphComment 0x560468163a00 +| `-TextComment 0x5604681639d0 Text=" True if iterator has more results, false if not." +|-FunctionDecl 0x560468060f08 line:7477:6 ecs_iter_is_true 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x560468060e78 col:17 it 'ecs_iter_t *' +| `-FullComment 0x560468163df0 +| |-ParagraphComment 0x560468163b60 +| | |-TextComment 0x560468163ac0 Text=" Test if iterator is true." +| | |-TextComment 0x560468163ae0 Text=" This operation will return true if the iterator returns at least one result." +| | |-TextComment 0x560468163b00 Text=" This is especially useful in combination with fact-checking rules (see the" +| | `-TextComment 0x560468163b20 Text=" rules addon)." +| |-ParagraphComment 0x560468163c00 +| | |-TextComment 0x560468163b80 Text=" The operation requires a valid iterator. After the operation is invoked, the" +| | |-TextComment 0x560468163ba0 Text=" application should no longer invoke next on the iterator and should treat it" +| | `-TextComment 0x560468163bc0 Text=" as if the iterator is iterated until completion." +| |-ParagraphComment 0x560468163c50 +| | `-TextComment 0x560468163c20 Text=" " +| |-ParamCommandComment 0x560468163c70 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468163d20 +| | |-TextComment 0x560468163cd0 Text=" The iterator." +| | `-TextComment 0x560468163cf0 Text=" " +| `-BlockCommandComment 0x560468163d40 Name="return" +| `-ParagraphComment 0x560468163da0 +| `-TextComment 0x560468163d70 Text=" true if the iterator returns at least one result." +|-FunctionDecl 0x5604680610d8 line:7488:14 ecs_iter_first 'ecs_entity_t (ecs_iter_t *)' +| |-ParmVarDecl 0x560468060fe8 col:17 it 'ecs_iter_t *' +| `-FullComment 0x5604681640c0 +| |-ParagraphComment 0x560468163ee0 +| | |-TextComment 0x560468163e60 Text=" Get first matching entity from iterator." +| | |-TextComment 0x560468163e80 Text=" After this operation the application should treat the iterator as if it has" +| | `-TextComment 0x560468163ea0 Text=" been iterated until completion." +| |-ParagraphComment 0x560468163f30 +| | `-TextComment 0x560468163f00 Text=" " +| |-ParamCommandComment 0x560468163f50 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468164000 +| | |-TextComment 0x560468163fb0 Text=" The iterator." +| | `-TextComment 0x560468163fd0 Text=" " +| `-BlockCommandComment 0x560468164020 Name="return" +| `-ParagraphComment 0x560468164080 +| `-TextComment 0x560468164050 Text=" The first matching entity, or 0 if no entities were matched." +|-FunctionDecl 0x5604680613c8 line:7525:6 ecs_iter_set_var 'void (ecs_iter_t *, int32_t, ecs_entity_t)' +| |-ParmVarDecl 0x5604680611b8 col:17 it 'ecs_iter_t *' +| |-ParmVarDecl 0x560468061230 col:13 var_id 'int32_t':'int' +| |-ParmVarDecl 0x5604680612a8 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x5604681649f0 +| |-ParagraphComment 0x5604681641d0 +| | |-TextComment 0x560468164130 Text=" Set value for iterator variable." +| | |-TextComment 0x560468164150 Text=" This constrains the iterator to return only results for which the variable" +| | |-TextComment 0x560468164170 Text=" equals the specified value. The default value for all variables is " +| | `-TextComment 0x560468164190 Text=" EcsWildcard, which means the variable can assume any value." +| |-ParagraphComment 0x560468164220 +| | `-TextComment 0x5604681641f0 Text=" Example:" +| |-ParagraphComment 0x560468164390 +| | |-TextComment 0x560468164240 Text=" // Rule that matches (Eats, *)" +| | |-TextComment 0x560468164260 Text=" ecs_rule_t *r = ecs_rule_init(world, " +| | |-TextComment 0x560468164280 Text="&" +| | |-TextComment 0x5604681642a0 Text="(ecs_filter_desc_t){" +| | |-TextComment 0x5604681642c0 Text=" .terms = {" +| | |-TextComment 0x5604681642e0 Text=" { .first.id = Eats, .second.name = "_Food" }" +| | |-TextComment 0x560468164300 Text=" }" +| | `-TextComment 0x560468164320 Text=" });" +| |-ParagraphComment 0x5604681643e0 +| | `-TextComment 0x5604681643b0 Text=" int food_var = ecs_rule_find_var(r, "Food");" +| |-ParagraphComment 0x5604681644d0 +| | |-TextComment 0x560468164400 Text=" // Set Food to Apples, so we're only matching (Eats, Apples)" +| | |-TextComment 0x560468164420 Text=" ecs_iter_t it = ecs_rule_iter(world, r);" +| | |-TextComment 0x560468164440 Text=" ecs_iter_set_var(" +| | |-TextComment 0x560468164460 Text="&it" +| | `-TextComment 0x560468164480 Text=", food_var, Apples);" +| |-ParagraphComment 0x560468164660 +| | |-TextComment 0x5604681644f0 Text=" while (ecs_rule_next(" +| | |-TextComment 0x560468164510 Text="&it" +| | |-TextComment 0x560468164530 Text=")) {" +| | |-TextComment 0x560468164550 Text=" for (int i = 0; i " +| | |-TextComment 0x560468164570 Text="<" +| | |-TextComment 0x560468164590 Text=" it.count; i ++) {" +| | |-TextComment 0x5604681645b0 Text=" // iterate as usual" +| | |-TextComment 0x5604681645d0 Text=" }" +| | `-TextComment 0x5604681645f0 Text=" }" +| |-ParagraphComment 0x5604681646d0 +| | |-TextComment 0x560468164680 Text=" The variable must be initialized after creating the iterator and before the" +| | `-TextComment 0x5604681646a0 Text=" first call to next." +| |-ParagraphComment 0x560468164720 +| | `-TextComment 0x5604681646f0 Text=" " +| |-ParamCommandComment 0x560468164740 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x5604681647f0 +| | |-TextComment 0x5604681647a0 Text=" The iterator." +| | `-TextComment 0x5604681647c0 Text=" " +| |-ParamCommandComment 0x560468164810 [in] implicitly Param="var_id" ParamIndex=1 +| | `-ParagraphComment 0x5604681648c0 +| | |-TextComment 0x560468164870 Text=" The variable index." +| | `-TextComment 0x560468164890 Text=" " +| `-ParamCommandComment 0x5604681648e0 [in] implicitly Param="entity" ParamIndex=2 +| `-ParagraphComment 0x560468164970 +| `-TextComment 0x560468164940 Text=" The entity variable value." +|-FunctionDecl 0x5604680616c8 line:7538:6 ecs_iter_set_var_as_table 'void (ecs_iter_t *, int32_t, const ecs_table_t *)' +| |-ParmVarDecl 0x5604680614b8 col:17 it 'ecs_iter_t *' +| |-ParmVarDecl 0x560468061530 col:13 var_id 'int32_t':'int' +| |-ParmVarDecl 0x5604680615a8 col:24 table 'const ecs_table_t *' +| `-FullComment 0x560468164da0 +| |-ParagraphComment 0x560468164ab0 +| | |-TextComment 0x560468164a60 Text=" Same as ecs_iter_set_var, but for a table." +| | `-TextComment 0x560468164a80 Text=" This constrains the variable to all entities in a table." +| |-ParagraphComment 0x560468164b00 +| | `-TextComment 0x560468164ad0 Text=" " +| |-ParamCommandComment 0x560468164b20 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468164bd0 +| | |-TextComment 0x560468164b80 Text=" The iterator." +| | `-TextComment 0x560468164ba0 Text=" " +| |-ParamCommandComment 0x560468164bf0 [in] implicitly Param="var_id" ParamIndex=1 +| | `-ParagraphComment 0x560468164ca0 +| | |-TextComment 0x560468164c50 Text=" The variable index." +| | `-TextComment 0x560468164c70 Text=" " +| `-ParamCommandComment 0x560468164cc0 [in] implicitly Param="table" ParamIndex=2 +| `-ParagraphComment 0x560468164d50 +| `-TextComment 0x560468164d20 Text=" The table variable value." +|-FunctionDecl 0x560468061a38 line:7551:6 ecs_iter_set_var_as_range 'void (ecs_iter_t *, int32_t, const ecs_table_range_t *)' +| |-ParmVarDecl 0x5604680617b8 col:17 it 'ecs_iter_t *' +| |-ParmVarDecl 0x560468061830 col:13 var_id 'int32_t':'int' +| |-ParmVarDecl 0x560468061908 col:30 range 'const ecs_table_range_t *' +| `-FullComment 0x560468165150 +| |-ParagraphComment 0x560468164e60 +| | |-TextComment 0x560468164e10 Text=" Same as ecs_iter_set_var, but for a range of entities" +| | `-TextComment 0x560468164e30 Text=" This constrains the variable to a range of entities in a table." +| |-ParagraphComment 0x560468164eb0 +| | `-TextComment 0x560468164e80 Text=" " +| |-ParamCommandComment 0x560468164ed0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468164f80 +| | |-TextComment 0x560468164f30 Text=" The iterator." +| | `-TextComment 0x560468164f50 Text=" " +| |-ParamCommandComment 0x560468164fa0 [in] implicitly Param="var_id" ParamIndex=1 +| | `-ParagraphComment 0x560468165050 +| | |-TextComment 0x560468165000 Text=" The variable index." +| | `-TextComment 0x560468165020 Text=" " +| `-ParamCommandComment 0x560468165070 [in] implicitly Param="range" ParamIndex=2 +| `-ParagraphComment 0x560468165100 +| `-TextComment 0x5604681650d0 Text=" The range variable value." +|-FunctionDecl 0x560468061cb8 line:7568:14 ecs_iter_get_var 'ecs_entity_t (ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x560468061b28 col:17 it 'ecs_iter_t *' +| |-ParmVarDecl 0x560468061ba0 col:13 var_id 'int32_t':'int' +| `-FullComment 0x560468165500 +| |-ParagraphComment 0x560468165240 +| | |-TextComment 0x5604681651c0 Text=" Get value of iterator variable as entity." +| | |-TextComment 0x5604681651e0 Text=" A variable can be interpreted as entity if it is set to an entity, or if it" +| | `-TextComment 0x560468165200 Text=" is set to a table range with count 1." +| |-ParagraphComment 0x5604681652e0 +| | |-TextComment 0x560468165260 Text=" This operation can only be invoked on valid iterators. The variable index" +| | |-TextComment 0x560468165280 Text=" must be smaller than the total number of variables provided by the iterator" +| | `-TextComment 0x5604681652a0 Text=" (as set in ecs_iter_t::variable_count)." +| |-ParagraphComment 0x560468165330 +| | `-TextComment 0x560468165300 Text=" " +| |-ParamCommandComment 0x560468165350 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468165400 +| | |-TextComment 0x5604681653b0 Text=" The iterator." +| | `-TextComment 0x5604681653d0 Text=" " +| `-ParamCommandComment 0x560468165420 [in] implicitly Param="var_id" ParamIndex=1 +| `-ParagraphComment 0x5604681654b0 +| `-TextComment 0x560468165480 Text=" The variable index." +|-FunctionDecl 0x560468061f38 line:7585:14 ecs_iter_get_var_as_table 'ecs_table_t *(ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x560468061da8 col:17 it 'ecs_iter_t *' +| |-ParmVarDecl 0x560468061e20 col:13 var_id 'int32_t':'int' +| `-FullComment 0x5604681658d0 +| |-ParagraphComment 0x560468165610 +| | |-TextComment 0x560468165570 Text=" Get value of iterator variable as table." +| | |-TextComment 0x560468165590 Text=" A variable can be interpreted as table if it is set as table range with" +| | |-TextComment 0x5604681655b0 Text=" both offset and count set to 0, or if offset is 0 and count matches the" +| | `-TextComment 0x5604681655d0 Text=" number of elements in the table." +| |-ParagraphComment 0x5604681656b0 +| | |-TextComment 0x560468165630 Text=" This operation can only be invoked on valid iterators. The variable index" +| | |-TextComment 0x560468165650 Text=" must be smaller than the total number of variables provided by the iterator" +| | `-TextComment 0x560468165670 Text=" (as set in ecs_iter_t::variable_count)." +| |-ParagraphComment 0x560468165700 +| | `-TextComment 0x5604681656d0 Text=" " +| |-ParamCommandComment 0x560468165720 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x5604681657d0 +| | |-TextComment 0x560468165780 Text=" The iterator." +| | `-TextComment 0x5604681657a0 Text=" " +| `-ParamCommandComment 0x5604681657f0 [in] implicitly Param="var_id" ParamIndex=1 +| `-ParagraphComment 0x560468165880 +| `-TextComment 0x560468165850 Text=" The variable index." +|-FunctionDecl 0x5604680621b8 line:7602:19 ecs_iter_get_var_as_range 'ecs_table_range_t (ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x560468062028 col:17 it 'ecs_iter_t *' +| |-ParmVarDecl 0x5604680620a0 col:13 var_id 'int32_t':'int' +| `-FullComment 0x560468165ca0 +| |-ParagraphComment 0x5604681659e0 +| | |-TextComment 0x560468165940 Text=" Get value of iterator variable as table range." +| | |-TextComment 0x560468165960 Text=" A value can be interpreted as table range if it is set as table range, or if" +| | |-TextComment 0x560468165980 Text=" it is set to an entity with a non-empty type (the entity must have at least" +| | `-TextComment 0x5604681659a0 Text=" one component, tag or relationship in its type)." +| |-ParagraphComment 0x560468165a80 +| | |-TextComment 0x560468165a00 Text=" This operation can only be invoked on valid iterators. The variable index" +| | |-TextComment 0x560468165a20 Text=" must be smaller than the total number of variables provided by the iterator" +| | `-TextComment 0x560468165a40 Text=" (as set in ecs_iter_t::variable_count)." +| |-ParagraphComment 0x560468165ad0 +| | `-TextComment 0x560468165aa0 Text=" " +| |-ParamCommandComment 0x560468165af0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468165ba0 +| | |-TextComment 0x560468165b50 Text=" The iterator." +| | `-TextComment 0x560468165b70 Text=" " +| `-ParamCommandComment 0x560468165bc0 [in] implicitly Param="var_id" ParamIndex=1 +| `-ParagraphComment 0x560468165c50 +| `-TextComment 0x560468165c20 Text=" The variable index." +|-FunctionDecl 0x560468062438 line:7619:6 ecs_iter_var_is_constrained 'bool (ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x5604680622a8 col:17 it 'ecs_iter_t *' +| |-ParmVarDecl 0x560468062320 col:13 var_id 'int32_t':'int' +| `-FullComment 0x5604681660c0 +| |-ParagraphComment 0x560468165d90 +| | |-TextComment 0x560468165d10 Text=" Returns whether variable is constrained." +| | |-TextComment 0x560468165d30 Text=" This operation returns true for variables set by one of the ecs_iter_set_var*" +| | `-TextComment 0x560468165d50 Text=" operations." +| |-ParagraphComment 0x560468165e00 +| | |-TextComment 0x560468165db0 Text=" A constrained variable is guaranteed not to change values while results are" +| | `-TextComment 0x560468165dd0 Text=" being iterated." +| |-ParagraphComment 0x560468165e50 +| | `-TextComment 0x560468165e20 Text=" " +| |-ParamCommandComment 0x560468165e70 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468165f20 +| | |-TextComment 0x560468165ed0 Text=" The iterator." +| | `-TextComment 0x560468165ef0 Text=" " +| |-ParamCommandComment 0x560468165f40 [in] implicitly Param="var_id" ParamIndex=1 +| | `-ParagraphComment 0x560468165ff0 +| | |-TextComment 0x560468165fa0 Text=" The variable index." +| | `-TextComment 0x560468165fc0 Text=" " +| `-BlockCommandComment 0x560468166010 Name="return" +| `-ParagraphComment 0x560468166070 +| `-TextComment 0x560468166040 Text=" Whether the variable is constrained to a specified value." +|-FunctionDecl 0x560468062738 line:7639:12 ecs_page_iter 'ecs_iter_t (const ecs_iter_t *, int32_t, int32_t)' +| |-ParmVarDecl 0x560468062528 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x5604680625a0 col:13 offset 'int32_t':'int' +| |-ParmVarDecl 0x560468062618 col:13 limit 'int32_t':'int' +| `-FullComment 0x560468166650 +| |-ParagraphComment 0x5604681661b0 +| | |-TextComment 0x560468166130 Text=" Create a paged iterator." +| | |-TextComment 0x560468166150 Text=" Paged iterators limit the results to those starting from 'offset', and will" +| | `-TextComment 0x560468166170 Text=" return at most 'limit' results." +| |-ParagraphComment 0x560468166200 +| | `-TextComment 0x5604681661d0 Text=" The iterator must be iterated with ecs_page_next." +| |-ParagraphComment 0x5604681662a0 +| | |-TextComment 0x560468166220 Text=" A paged iterator acts as a passthrough for data exposed by the parent" +| | |-TextComment 0x560468166240 Text=" iterator, so that any data provided by the parent will also be provided by" +| | `-TextComment 0x560468166260 Text=" the paged iterator." +| |-ParagraphComment 0x5604681662f0 +| | `-TextComment 0x5604681662c0 Text=" " +| |-ParamCommandComment 0x560468166310 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x5604681663d0 +| | |-TextComment 0x560468166380 Text=" The source iterator." +| | `-TextComment 0x5604681663a0 Text=" " +| |-ParamCommandComment 0x5604681663f0 [in] implicitly Param="offset" ParamIndex=1 +| | `-ParagraphComment 0x5604681664a0 +| | |-TextComment 0x560468166450 Text=" The number of entities to skip." +| | `-TextComment 0x560468166470 Text=" " +| |-ParamCommandComment 0x5604681664c0 [in] implicitly Param="limit" ParamIndex=2 +| | `-ParagraphComment 0x560468166570 +| | |-TextComment 0x560468166520 Text=" The maximum number of entities to iterate." +| | `-TextComment 0x560468166540 Text=" " +| `-BlockCommandComment 0x560468166590 Name="return" +| `-ParagraphComment 0x5604681665f0 +| `-TextComment 0x5604681665c0 Text=" A page iterator." +|-FunctionDecl 0x5604680628b8 line:7651:6 ecs_page_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x560468062828 col:17 it 'ecs_iter_t *' +| `-FullComment 0x5604681668f0 +| |-ParagraphComment 0x560468166710 +| | |-TextComment 0x5604681666c0 Text=" Progress a paged iterator." +| | `-TextComment 0x5604681666e0 Text=" Progresses an iterator created by ecs_page_iter." +| |-ParagraphComment 0x560468166760 +| | `-TextComment 0x560468166730 Text=" " +| |-ParamCommandComment 0x560468166780 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468166830 +| | |-TextComment 0x5604681667e0 Text=" The iterator." +| | `-TextComment 0x560468166800 Text=" " +| `-BlockCommandComment 0x560468166850 Name="return" +| `-ParagraphComment 0x5604681668b0 +| `-TextComment 0x560468166880 Text=" true if iterator has more results, false if not." +|-FunctionDecl 0x560468062b58 line:7675:12 ecs_worker_iter 'ecs_iter_t (const ecs_iter_t *, int32_t, int32_t)' +| |-ParmVarDecl 0x5604680629c8 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x560468062a40 col:13 index 'int32_t':'int' +| |-ParmVarDecl 0x560468062ab8 col:13 count 'int32_t':'int' +| `-FullComment 0x560468166f40 +| |-ParagraphComment 0x560468166a00 +| | |-TextComment 0x560468166960 Text=" Create a worker iterator." +| | |-TextComment 0x560468166980 Text=" Worker iterators can be used to equally divide the number of matched entities " +| | |-TextComment 0x5604681669a0 Text=" across N resources (usually threads). Each resource will process the total" +| | `-TextComment 0x5604681669c0 Text=" number of matched entities divided by 'count'." +| |-ParagraphComment 0x560468166aa0 +| | |-TextComment 0x560468166a20 Text=" Entities are distributed across resources such that the distribution is" +| | |-TextComment 0x560468166a40 Text=" stable between queries. Two queries that match the same table are guaranteed" +| | `-TextComment 0x560468166a60 Text=" to match the same entities in that table." +| |-ParagraphComment 0x560468166af0 +| | `-TextComment 0x560468166ac0 Text=" The iterator must be iterated with ecs_worker_next." +| |-ParagraphComment 0x560468166b90 +| | |-TextComment 0x560468166b10 Text=" A worker iterator acts as a passthrough for data exposed by the parent" +| | |-TextComment 0x560468166b30 Text=" iterator, so that any data provided by the parent will also be provided by" +| | `-TextComment 0x560468166b50 Text=" the worker iterator." +| |-ParagraphComment 0x560468166be0 +| | `-TextComment 0x560468166bb0 Text=" " +| |-ParamCommandComment 0x560468166c00 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468166cb0 +| | |-TextComment 0x560468166c60 Text=" The source iterator." +| | `-TextComment 0x560468166c80 Text=" " +| |-ParamCommandComment 0x560468166cd0 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x560468166d80 +| | |-TextComment 0x560468166d30 Text=" The index of the current resource." +| | `-TextComment 0x560468166d50 Text=" " +| |-ParamCommandComment 0x560468166da0 [in] implicitly Param="count" ParamIndex=2 +| | `-ParagraphComment 0x560468166e50 +| | |-TextComment 0x560468166e00 Text=" The total number of resources to divide entities between." +| | `-TextComment 0x560468166e20 Text=" " +| `-BlockCommandComment 0x560468166e70 Name="return" +| `-ParagraphComment 0x560468166ed0 +| `-TextComment 0x560468166ea0 Text=" A worker iterator." +|-FunctionDecl 0x560468062cd8 line:7687:6 ecs_worker_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x560468062c48 col:17 it 'ecs_iter_t *' +| `-FullComment 0x5604681671e0 +| |-ParagraphComment 0x560468167000 +| | |-TextComment 0x560468166fb0 Text=" Progress a worker iterator." +| | `-TextComment 0x560468166fd0 Text=" Progresses an iterator created by ecs_worker_iter." +| |-ParagraphComment 0x560468167050 +| | `-TextComment 0x560468167020 Text=" " +| |-ParamCommandComment 0x560468167070 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468167120 +| | |-TextComment 0x5604681670d0 Text=" The iterator." +| | `-TextComment 0x5604681670f0 Text=" " +| `-BlockCommandComment 0x560468167140 Name="return" +| `-ParagraphComment 0x5604681671a0 +| `-TextComment 0x560468167170 Text=" true if iterator has more results, false if not." +|-FunctionDecl 0x560468062fd0 line:7714:7 ecs_field_w_size 'void *(const ecs_iter_t *, size_t, int32_t)' +| |-ParmVarDecl 0x560468062db8 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x560468062e30 col:12 size 'size_t':'unsigned long' +| |-ParmVarDecl 0x560468062ea8 col:13 index 'int32_t':'int' +| `-FullComment 0x5604681678a0 +| |-ParagraphComment 0x5604681672f0 +| | |-TextComment 0x560468167250 Text=" Obtain data for a query field." +| | |-TextComment 0x560468167270 Text=" This operation retrieves a pointer to an array of data that belongs to the" +| | |-TextComment 0x560468167290 Text=" term in the query. The index refers to the location of the term in the query," +| | `-TextComment 0x5604681672b0 Text=" and starts counting from one." +| |-ParagraphComment 0x560468167360 +| | |-TextComment 0x560468167310 Text=" For example, the query "Position, Velocity" will return the Position array" +| | `-TextComment 0x560468167330 Text=" for index 1, and the Velocity array for index 2." +| |-ParagraphComment 0x560468167450 +| | |-TextComment 0x560468167380 Text=" When the specified field is not owned by the entity this function returns a" +| | |-TextComment 0x5604681673a0 Text=" pointer instead of an array. This happens when the source of a field is not" +| | |-TextComment 0x5604681673c0 Text=" the entity being iterated, such as a shared component (from a prefab), a" +| | |-TextComment 0x5604681673e0 Text=" component from a parent, or another entity. The ecs_field_is_self operation" +| | `-TextComment 0x560468167400 Text=" can be used to test dynamically if a field is owned." +| |-ParagraphComment 0x5604681674f0 +| | |-TextComment 0x560468167470 Text=" The provided size must be either 0 or must match the size of the datatype" +| | |-TextComment 0x560468167490 Text=" of the returned array. If the size does not match, the operation may assert." +| | `-TextComment 0x5604681674b0 Text=" The size can be dynamically obtained with ecs_field_size." +| |-ParagraphComment 0x560468167540 +| | `-TextComment 0x560468167510 Text=" " +| |-ParamCommandComment 0x560468167560 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468167610 +| | |-TextComment 0x5604681675c0 Text=" The iterator." +| | `-TextComment 0x5604681675e0 Text=" " +| |-ParamCommandComment 0x560468167630 [in] implicitly Param="size" ParamIndex=1 +| | `-ParagraphComment 0x5604681676e0 +| | |-TextComment 0x560468167690 Text=" The type size of the requested data." +| | `-TextComment 0x5604681676b0 Text=" " +| |-ParamCommandComment 0x560468167700 [in] implicitly Param="index" ParamIndex=2 +| | `-ParagraphComment 0x5604681677b0 +| | |-TextComment 0x560468167760 Text=" The index of the field in the iterator." +| | `-TextComment 0x560468167780 Text=" " +| `-BlockCommandComment 0x5604681677d0 Name="return" +| `-ParagraphComment 0x560468167830 +| `-TextComment 0x560468167800 Text=" A pointer to the data of the field." +|-FunctionDecl 0x560468063258 line:7728:6 ecs_field_is_readonly 'bool (const ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x5604680630c8 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x560468063140 col:13 index 'int32_t':'int' +| `-FullComment 0x560468167c50 +| |-ParagraphComment 0x560468167990 +| | |-TextComment 0x560468167910 Text=" Test whether the field is readonly." +| | |-TextComment 0x560468167930 Text=" This operation returns whether the field is readonly. Readonly fields are" +| | `-TextComment 0x560468167950 Text=" annotated with [in], or are added as a const type in the C++ API." +| |-ParagraphComment 0x5604681679e0 +| | `-TextComment 0x5604681679b0 Text=" " +| |-ParamCommandComment 0x560468167a00 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468167ab0 +| | |-TextComment 0x560468167a60 Text=" The iterator." +| | `-TextComment 0x560468167a80 Text=" " +| |-ParamCommandComment 0x560468167ad0 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x560468167b80 +| | |-TextComment 0x560468167b30 Text=" The index of the field in the iterator." +| | `-TextComment 0x560468167b50 Text=" " +| `-BlockCommandComment 0x560468167ba0 Name="return" +| `-ParagraphComment 0x560468167c00 +| `-TextComment 0x560468167bd0 Text=" Whether the field is readonly." +|-FunctionDecl 0x560468063458 line:7743:6 ecs_field_is_writeonly 'bool (const ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x560468063348 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x5604680633c0 col:13 index 'int32_t':'int' +| `-FullComment 0x560468168050 +| |-ParagraphComment 0x560468167d40 +| | |-TextComment 0x560468167cc0 Text=" Test whether the field is writeonly." +| | |-TextComment 0x560468167ce0 Text=" This operation returns whether this is a writeonly field. Writeonly terms are" +| | `-TextComment 0x560468167d00 Text=" annotated with [out]." +| |-ParagraphComment 0x560468167d90 +| | `-TextComment 0x560468167d60 Text=" Serializers are not required to serialize the values of a writeonly field." +| |-ParagraphComment 0x560468167de0 +| | `-TextComment 0x560468167db0 Text=" " +| |-ParamCommandComment 0x560468167e00 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468167eb0 +| | |-TextComment 0x560468167e60 Text=" The iterator." +| | `-TextComment 0x560468167e80 Text=" " +| |-ParamCommandComment 0x560468167ed0 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x560468167f80 +| | |-TextComment 0x560468167f30 Text=" The index of the field in the iterator." +| | `-TextComment 0x560468167f50 Text=" " +| `-BlockCommandComment 0x560468167fa0 Name="return" +| `-ParagraphComment 0x560468168000 +| `-TextComment 0x560468167fd0 Text=" Whether the field is writeonly." +|-FunctionDecl 0x560468063658 line:7754:6 ecs_field_is_set 'bool (const ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x560468063548 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x5604680635c0 col:13 index 'int32_t':'int' +| `-FullComment 0x5604681683c0 +| |-ParagraphComment 0x5604681680f0 +| | `-TextComment 0x5604681680c0 Text=" Test whether field is set." +| |-ParagraphComment 0x560468168140 +| | `-TextComment 0x560468168110 Text=" " +| |-ParamCommandComment 0x560468168160 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468168210 +| | |-TextComment 0x5604681681c0 Text=" The iterator." +| | `-TextComment 0x5604681681e0 Text=" " +| |-ParamCommandComment 0x560468168230 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x5604681682e0 +| | |-TextComment 0x560468168290 Text=" The index of the field in the iterator." +| | `-TextComment 0x5604681682b0 Text=" " +| `-BlockCommandComment 0x560468168300 Name="return" +| `-ParagraphComment 0x560468168370 +| `-TextComment 0x560468168330 Text=" Whether the field is set." +|-FunctionDecl 0x5604680638d8 line:7765:10 ecs_field_id 'ecs_id_t (const ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x560468063748 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x5604680637c0 col:13 index 'int32_t':'int' +| `-FullComment 0x560468168720 +| |-ParagraphComment 0x560468168460 +| | `-TextComment 0x560468168430 Text=" Return id matched for field." +| |-ParagraphComment 0x5604681684b0 +| | `-TextComment 0x560468168480 Text=" " +| |-ParamCommandComment 0x5604681684d0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468168580 +| | |-TextComment 0x560468168530 Text=" The iterator." +| | `-TextComment 0x560468168550 Text=" " +| |-ParamCommandComment 0x5604681685a0 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x560468168650 +| | |-TextComment 0x560468168600 Text=" The index of the field in the iterator." +| | `-TextComment 0x560468168620 Text=" " +| `-BlockCommandComment 0x560468168670 Name="return" +| `-ParagraphComment 0x5604681686d0 +| `-TextComment 0x5604681686a0 Text=" The id matched for the field." +|-FunctionDecl 0x560468063b28 line:7777:14 ecs_field_src 'ecs_entity_t (const ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x5604680639d8 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x560468063a50 col:13 index 'int32_t':'int' +| `-FullComment 0x560468168aa0 +| |-ParagraphComment 0x5604681687e0 +| | |-TextComment 0x560468168790 Text=" Return field source." +| | `-TextComment 0x5604681687b0 Text=" The field source is the entity on which the field was matched." +| |-ParagraphComment 0x560468168830 +| | `-TextComment 0x560468168800 Text=" " +| |-ParamCommandComment 0x560468168850 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468168900 +| | |-TextComment 0x5604681688b0 Text=" The iterator." +| | `-TextComment 0x5604681688d0 Text=" " +| |-ParamCommandComment 0x560468168920 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x5604681689d0 +| | |-TextComment 0x560468168980 Text=" The index of the field in the iterator." +| | `-TextComment 0x5604681689a0 Text=" " +| `-BlockCommandComment 0x5604681689f0 Name="return" +| `-ParagraphComment 0x560468168a50 +| `-TextComment 0x560468168a20 Text=" The source for the field." +|-FunctionDecl 0x560468063d68 line:7790:8 ecs_field_size 'size_t (const ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x560468063c18 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x560468063c90 col:13 index 'int32_t':'int' +| `-FullComment 0x560468168e50 +| |-ParagraphComment 0x560468168b90 +| | |-TextComment 0x560468168b10 Text=" Return field type size." +| | |-TextComment 0x560468168b30 Text=" Return type size of the data returned by field. Returns 0 if field has no " +| | `-TextComment 0x560468168b50 Text=" data." +| |-ParagraphComment 0x560468168be0 +| | `-TextComment 0x560468168bb0 Text=" " +| |-ParamCommandComment 0x560468168c00 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468168cb0 +| | |-TextComment 0x560468168c60 Text=" The iterator." +| | `-TextComment 0x560468168c80 Text=" " +| |-ParamCommandComment 0x560468168cd0 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x560468168d80 +| | |-TextComment 0x560468168d30 Text=" The index of the field in the iterator." +| | `-TextComment 0x560468168d50 Text=" " +| `-BlockCommandComment 0x560468168da0 Name="return" +| `-ParagraphComment 0x560468168e00 +| `-TextComment 0x560468168dd0 Text=" The type size for the field." +|-FunctionDecl 0x560468063f68 line:7808:6 ecs_field_is_self 'bool (const ecs_iter_t *, int32_t)' +| |-ParmVarDecl 0x560468063e58 col:23 it 'const ecs_iter_t *' +| |-ParmVarDecl 0x560468063ed0 col:13 index 'int32_t':'int' +| `-FullComment 0x5604681692c0 +| |-ParagraphComment 0x560468168f60 +| | |-TextComment 0x560468168ec0 Text=" Test whether the field is matched on self." +| | |-TextComment 0x560468168ee0 Text=" This operation returns whether the field is matched on the currently iterated" +| | |-TextComment 0x560468168f00 Text=" entity. This function will return false when the field is owned by another" +| | `-TextComment 0x560468168f20 Text=" entity, such as a parent or a prefab." +| |-ParagraphComment 0x560468169000 +| | |-TextComment 0x560468168f80 Text=" When this operation returns false, the field must be accessed as a single " +| | |-TextComment 0x560468168fa0 Text=" value instead of an array. Fields for which this operation returns true" +| | `-TextComment 0x560468168fc0 Text=" return arrays with it->count values." +| |-ParagraphComment 0x560468169050 +| | `-TextComment 0x560468169020 Text=" " +| |-ParamCommandComment 0x560468169070 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468169120 +| | |-TextComment 0x5604681690d0 Text=" The iterator." +| | `-TextComment 0x5604681690f0 Text=" " +| |-ParamCommandComment 0x560468169140 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x5604681691f0 +| | |-TextComment 0x5604681691a0 Text=" The index of the field in the iterator." +| | `-TextComment 0x5604681691c0 Text=" " +| `-BlockCommandComment 0x560468169210 Name="return" +| `-ParagraphComment 0x560468169270 +| `-TextComment 0x560468169240 Text=" Whether the field is matched on self." +|-FunctionDecl 0x560468064150 line:7824:7 ecs_iter_str 'char *(const ecs_iter_t *)' +| |-ParmVarDecl 0x560468064058 col:23 it 'const ecs_iter_t *' +| `-FullComment 0x560468169640 +| |-ParagraphComment 0x5604681693b0 +| | |-TextComment 0x560468169330 Text=" Convert iterator to string." +| | |-TextComment 0x560468169350 Text=" Prints the contents of an iterator to a string. Useful for debugging and/or" +| | `-TextComment 0x560468169370 Text=" testing the output of an iterator." +| |-ParagraphComment 0x560468169450 +| | |-TextComment 0x5604681693d0 Text=" The function only converts the currently iterated data to a string. To " +| | |-TextComment 0x5604681693f0 Text=" convert all data, the application has to manually call the next function and" +| | `-TextComment 0x560468169410 Text=" call ecs_iter_str on each result." +| |-ParagraphComment 0x5604681694a0 +| | `-TextComment 0x560468169470 Text=" " +| |-ParamCommandComment 0x5604681694c0 [in] implicitly Param="it" ParamIndex=0 +| | `-ParagraphComment 0x560468169570 +| | |-TextComment 0x560468169520 Text=" The iterator." +| | `-TextComment 0x560468169540 Text=" " +| `-BlockCommandComment 0x560468169590 Name="return" +| `-ParagraphComment 0x5604681695f0 +| `-TextComment 0x5604681695c0 Text=" A string representing the contents of the iterator." +|-FunctionDecl 0x560468064388 line:7842:19 ecs_table_get_type 'const ecs_type_t *(const ecs_table_t *)' +| |-ParmVarDecl 0x560468064298 col:24 table 'const ecs_table_t *' +| `-FullComment 0x5604681698c0 +| |-ParagraphComment 0x5604681696e0 +| | `-TextComment 0x5604681696b0 Text=" Get type for table." +| |-ParagraphComment 0x560468169730 +| | `-TextComment 0x560468169700 Text=" " +| |-ParamCommandComment 0x560468169750 [in] implicitly Param="table" ParamIndex=0 +| | `-ParagraphComment 0x560468169800 +| | |-TextComment 0x5604681697b0 Text=" The table." +| | `-TextComment 0x5604681697d0 Text=" " +| `-BlockCommandComment 0x560468169820 Name="return" +| `-ParagraphComment 0x560468169880 +| `-TextComment 0x560468169850 Text=" The type of the table." +|-FunctionDecl 0x560468064680 line:7854:7 ecs_table_get_column 'void *(const ecs_table_t *, int32_t, int32_t)' +| |-ParmVarDecl 0x560468064468 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x5604680644e0 col:13 index 'int32_t':'int' +| |-ParmVarDecl 0x560468064558 col:13 offset 'int32_t':'int' +| `-FullComment 0x560468169d10 +| |-ParagraphComment 0x560468169980 +| | |-TextComment 0x560468169930 Text=" Get column from table." +| | `-TextComment 0x560468169950 Text=" This operation returns the component array for the provided index." +| |-ParagraphComment 0x5604681699d0 +| | `-TextComment 0x5604681699a0 Text=" " +| |-ParamCommandComment 0x5604681699f0 [in] implicitly Param="table" ParamIndex=0 +| | `-ParagraphComment 0x560468169aa0 +| | |-TextComment 0x560468169a50 Text=" The table." +| | `-TextComment 0x560468169a70 Text=" " +| |-ParamCommandComment 0x560468169ac0 [in] implicitly Param="index" ParamIndex=1 +| | `-ParagraphComment 0x560468169b70 +| | |-TextComment 0x560468169b20 Text=" The index of the column (corresponds with element in type)." +| | `-TextComment 0x560468169b40 Text=" " +| |-ParamCommandComment 0x560468169b90 [in] implicitly Param="offset" ParamIndex=2 +| | `-ParagraphComment 0x560468169c40 +| | |-TextComment 0x560468169bf0 Text=" The index of the first row to return (0 for entire column)." +| | `-TextComment 0x560468169c10 Text=" " +| `-BlockCommandComment 0x560468169c60 Name="return" +| `-ParagraphComment 0x560468169cc0 +| `-TextComment 0x560468169c90 Text=" The component array, or NULL if the index is not a component." +|-FunctionDecl 0x5604680649b0 line:7868:9 ecs_table_get_index 'int32_t (const ecs_world_t *, const ecs_table_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468064778 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680647f0 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x560468064868 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x56046816a160 +| |-ParagraphComment 0x560468169dd0 +| | |-TextComment 0x560468169d80 Text=" Get column index for id." +| | `-TextComment 0x560468169da0 Text=" This operation returns the index for an id in the table's type." +| |-ParagraphComment 0x560468169e20 +| | `-TextComment 0x560468169df0 Text=" " +| |-ParamCommandComment 0x560468169e40 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468169ef0 +| | |-TextComment 0x560468169ea0 Text=" The world." +| | `-TextComment 0x560468169ec0 Text=" " +| |-ParamCommandComment 0x560468169f10 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x560468169fc0 +| | |-TextComment 0x560468169f70 Text=" The table." +| | `-TextComment 0x560468169f90 Text=" " +| |-ParamCommandComment 0x560468169fe0 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x56046816a090 +| | |-TextComment 0x56046816a040 Text=" The id." +| | `-TextComment 0x56046816a060 Text=" " +| `-BlockCommandComment 0x56046816a0b0 Name="return" +| `-ParagraphComment 0x56046816a110 +| `-TextComment 0x56046816a0e0 Text=" The index of the id in the table type, or -1 if not found." +|-FunctionDecl 0x560468064d60 line:7882:7 ecs_table_get_id 'void *(const ecs_world_t *, const ecs_table_t *, ecs_id_t, int32_t)' +| |-ParmVarDecl 0x560468064aa8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468064b20 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x560468064b98 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x560468064c10 col:13 offset 'int32_t':'int' +| `-FullComment 0x56046816a5d0 +| |-ParagraphComment 0x56046816a220 +| | |-TextComment 0x56046816a1d0 Text=" Get column from table by component id." +| | `-TextComment 0x56046816a1f0 Text=" This operation returns the component array for the provided component id." +| |-ParagraphComment 0x56046816a270 +| | `-TextComment 0x56046816a240 Text=" " +| |-ParamCommandComment 0x56046816a290 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046816a340 +| | |-TextComment 0x56046816a2f0 Text=" The table." +| | `-TextComment 0x56046816a310 Text=" " +| |-ParamCommandComment 0x56046816a380 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x56046816a430 +| | |-TextComment 0x56046816a3e0 Text=" The component id for the column." +| | `-TextComment 0x56046816a400 Text=" " +| |-ParamCommandComment 0x56046816a450 [in] implicitly Param="offset" ParamIndex=3 +| | `-ParagraphComment 0x56046816a500 +| | |-TextComment 0x56046816a4b0 Text=" The index of the first row to return (0 for entire column)." +| | `-TextComment 0x56046816a4d0 Text=" " +| `-BlockCommandComment 0x56046816a520 Name="return" +| `-ParagraphComment 0x56046816a580 +| `-TextComment 0x56046816a550 Text=" The component array, or NULL if the index is not a component." +|-FunctionDecl 0x560468065028 line:7899:9 ecs_table_get_depth 'int32_t (const ecs_world_t *, const ecs_table_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468064e58 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468064ed0 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x560468064f48 col:18 rel 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046816aa70 +| |-ParagraphComment 0x56046816a6e0 +| | |-TextComment 0x56046816a640 Text=" Return depth for table in tree for relationship rel." +| | |-TextComment 0x56046816a660 Text=" Depth is determined by counting the number of targets encountered while " +| | |-TextComment 0x56046816a680 Text=" traversing up the relationship tree for rel. Only acyclic relationships are" +| | `-TextComment 0x56046816a6a0 Text=" supported." +| |-ParagraphComment 0x56046816a730 +| | `-TextComment 0x56046816a700 Text=" " +| |-ParamCommandComment 0x56046816a750 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816a800 +| | |-TextComment 0x56046816a7b0 Text=" The world." +| | `-TextComment 0x56046816a7d0 Text=" " +| |-ParamCommandComment 0x56046816a820 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046816a8d0 +| | |-TextComment 0x56046816a880 Text=" The table." +| | `-TextComment 0x56046816a8a0 Text=" " +| |-ParamCommandComment 0x56046816a8f0 [in] implicitly Param="rel" ParamIndex=2 +| | `-ParagraphComment 0x56046816a9a0 +| | |-TextComment 0x56046816a950 Text=" The relationship." +| | `-TextComment 0x56046816a970 Text=" " +| `-BlockCommandComment 0x56046816a9c0 Name="return" +| `-ParagraphComment 0x56046816aa20 +| `-TextComment 0x56046816a9f0 Text=" The depth of the table in the tree." +|-FunctionDecl 0x560468065208 line:7910:14 ecs_table_get_storage_table 'ecs_table_t *(const ecs_table_t *)' +| |-ParmVarDecl 0x560468065118 col:24 table 'const ecs_table_t *' +| `-FullComment 0x56046816acf0 +| |-ParagraphComment 0x56046816ab10 +| | `-TextComment 0x56046816aae0 Text=" Get storage type for table." +| |-ParagraphComment 0x56046816ab60 +| | `-TextComment 0x56046816ab30 Text=" " +| |-ParamCommandComment 0x56046816ab80 [in] implicitly Param="table" ParamIndex=0 +| | `-ParagraphComment 0x56046816ac30 +| | |-TextComment 0x56046816abe0 Text=" The table." +| | `-TextComment 0x56046816ac00 Text=" " +| `-BlockCommandComment 0x56046816ac50 Name="return" +| `-ParagraphComment 0x56046816acb0 +| `-TextComment 0x56046816ac80 Text=" The storage type of the table (components only)." +|-FunctionDecl 0x560468065478 line:7915:9 ecs_table_type_to_storage_index 'int32_t (const ecs_table_t *, int32_t)' +| |-ParmVarDecl 0x5604680652e8 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x560468065360 col:13 index 'int32_t':'int' +| `-FullComment 0x56046816adc0 +| `-ParagraphComment 0x56046816ad90 +| `-TextComment 0x56046816ad60 Text=" Convert index in table type to index in table storage type. " +|-FunctionDecl 0x560468065678 line:7921:9 ecs_table_storage_to_type_index 'int32_t (const ecs_table_t *, int32_t)' +| |-ParmVarDecl 0x560468065568 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x5604680655e0 col:13 index 'int32_t':'int' +| `-FullComment 0x56046816ae90 +| `-ParagraphComment 0x56046816ae60 +| `-TextComment 0x56046816ae30 Text=" Convert index in table storage type to index in table type. " +|-FunctionDecl 0x5604680657f8 line:7934:9 ecs_table_count 'int32_t (const ecs_table_t *)' +| |-ParmVarDecl 0x560468065768 col:24 table 'const ecs_table_t *' +| `-FullComment 0x56046816b180 +| |-ParagraphComment 0x56046816afa0 +| | |-TextComment 0x56046816af00 Text=" Returns the number of records in the table. " +| | |-TextComment 0x56046816af20 Text=" This operation returns the number of records that have been populated through" +| | |-TextComment 0x56046816af40 Text=" the regular (entity) API as well as the number of records that have been" +| | `-TextComment 0x56046816af60 Text=" inserted using the direct access API." +| |-ParagraphComment 0x56046816aff0 +| | `-TextComment 0x56046816afc0 Text=" " +| |-ParamCommandComment 0x56046816b010 [in] implicitly Param="table" ParamIndex=0 +| | `-ParagraphComment 0x56046816b0c0 +| | |-TextComment 0x56046816b070 Text=" The table." +| | `-TextComment 0x56046816b090 Text=" " +| `-BlockCommandComment 0x56046816b0e0 Name="return" +| `-ParagraphComment 0x56046816b140 +| `-TextComment 0x56046816b110 Text=" The number of records in a table." +|-FunctionDecl 0x560468065b58 line:7947:14 ecs_table_add_id 'ecs_table_t *(ecs_world_t *, ecs_table_t *, ecs_id_t)' +| |-ParmVarDecl 0x5604680658d8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680659c0 col:18 table 'ecs_table_t *' +| |-ParmVarDecl 0x560468065a38 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x56046816b600 +| |-ParagraphComment 0x56046816b270 +| | |-TextComment 0x56046816b1f0 Text=" Get table that has all components of current table plus the specified id." +| | |-TextComment 0x56046816b210 Text=" If the provided table already has the provided id, the operation will return" +| | `-TextComment 0x56046816b230 Text=" the provided table." +| |-ParagraphComment 0x56046816b2c0 +| | `-TextComment 0x56046816b290 Text=" " +| |-ParamCommandComment 0x56046816b2e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816b390 +| | |-TextComment 0x56046816b340 Text=" The world." +| | `-TextComment 0x56046816b360 Text=" " +| |-ParamCommandComment 0x56046816b3b0 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046816b460 +| | |-TextComment 0x56046816b410 Text=" The table." +| | `-TextComment 0x56046816b430 Text=" " +| |-ParamCommandComment 0x56046816b480 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x56046816b530 +| | |-TextComment 0x56046816b4e0 Text=" The id to add." +| | `-TextComment 0x56046816b500 Text=" " +| `-BlockCommandComment 0x56046816b550 Name="result" +| `-ParagraphComment 0x56046816b5b0 +| `-TextComment 0x56046816b580 Text=" The resulting table." +|-FunctionDecl 0x560468065dd8 line:7962:14 ecs_table_remove_id 'ecs_table_t *(ecs_world_t *, ecs_table_t *, ecs_id_t)' +| |-ParmVarDecl 0x560468065c48 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468065cc0 col:18 table 'ecs_table_t *' +| |-ParmVarDecl 0x560468065d38 col:14 id 'ecs_id_t':'unsigned long' +| `-FullComment 0x56046816ba80 +| |-ParagraphComment 0x56046816b6f0 +| | |-TextComment 0x56046816b670 Text=" Get table that has all components of current table minus the specified id." +| | |-TextComment 0x56046816b690 Text=" If the provided table doesn't have the provided id, the operation will return" +| | `-TextComment 0x56046816b6b0 Text=" the provided table." +| |-ParagraphComment 0x56046816b740 +| | `-TextComment 0x56046816b710 Text=" " +| |-ParamCommandComment 0x56046816b760 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816b810 +| | |-TextComment 0x56046816b7c0 Text=" The world." +| | `-TextComment 0x56046816b7e0 Text=" " +| |-ParamCommandComment 0x56046816b830 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046816b8e0 +| | |-TextComment 0x56046816b890 Text=" The table." +| | `-TextComment 0x56046816b8b0 Text=" " +| |-ParamCommandComment 0x56046816b900 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x56046816b9b0 +| | |-TextComment 0x56046816b960 Text=" The id to remove." +| | `-TextComment 0x56046816b980 Text=" " +| `-BlockCommandComment 0x56046816b9d0 Name="result" +| `-ParagraphComment 0x56046816ba30 +| `-TextComment 0x56046816ba00 Text=" The resulting table." +|-FunctionDecl 0x560468066058 line:7983:6 ecs_table_lock 'void (ecs_world_t *, ecs_table_t *)' +| |-ParmVarDecl 0x560468065ec8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468065f40 col:18 table 'ecs_table_t *' +| `-FullComment 0x56046816bec0 +| |-ParagraphComment 0x56046816bb90 +| | |-TextComment 0x56046816baf0 Text=" Lock or unlock table." +| | |-TextComment 0x56046816bb10 Text=" When a table is locked, modifications to it will throw an assert. When the " +| | |-TextComment 0x56046816bb30 Text=" table is locked recursively, it will take an equal amount of unlock" +| | `-TextComment 0x56046816bb50 Text=" operations to actually unlock the table." +| |-ParagraphComment 0x56046816bc00 +| | |-TextComment 0x56046816bbb0 Text=" Table locks can be used to build safe iterators where it is guaranteed that" +| | `-TextComment 0x56046816bbd0 Text=" the contents of a table are not modified while it is being iterated." +| |-ParagraphComment 0x56046816bca0 +| | |-TextComment 0x56046816bc20 Text=" The operation only works when called on the world, and has no side effects " +| | |-TextComment 0x56046816bc40 Text=" when called on a stage. The assumption is that when called on a stage," +| | `-TextComment 0x56046816bc60 Text=" operations are deferred already." +| |-ParagraphComment 0x56046816bcf0 +| | `-TextComment 0x56046816bcc0 Text=" " +| |-ParamCommandComment 0x56046816bd10 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816bdc0 +| | |-TextComment 0x56046816bd70 Text=" The world." +| | `-TextComment 0x56046816bd90 Text=" " +| `-ParamCommandComment 0x56046816bde0 [in] implicitly Param="table" ParamIndex=1 +| `-ParagraphComment 0x56046816be70 +| `-TextComment 0x56046816be40 Text=" The table to lock." +|-FunctionDecl 0x560468066258 line:7994:6 ecs_table_unlock 'void (ecs_world_t *, ecs_table_t *)' +| |-ParmVarDecl 0x560468066148 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680661c0 col:18 table 'ecs_table_t *' +| `-FullComment 0x56046816c190 +| |-ParagraphComment 0x56046816bf80 +| | |-TextComment 0x56046816bf30 Text=" Unlock a table." +| | `-TextComment 0x56046816bf50 Text=" Must be called after calling ecs_table_lock." +| |-ParagraphComment 0x56046816bfd0 +| | `-TextComment 0x56046816bfa0 Text=" " +| |-ParamCommandComment 0x56046816bff0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816c0a0 +| | |-TextComment 0x56046816c050 Text=" The world." +| | `-TextComment 0x56046816c070 Text=" " +| `-ParamCommandComment 0x56046816c0c0 [in] implicitly Param="table" ParamIndex=1 +| `-ParagraphComment 0x56046816c150 +| `-TextComment 0x56046816c120 Text=" The table to unlock." +|-FunctionDecl 0x560468066438 line:8006:6 ecs_table_has_module 'bool (ecs_table_t *)' +| |-ParmVarDecl 0x560468066348 col:18 table 'ecs_table_t *' +| `-FullComment 0x56046816c480 +| |-ParagraphComment 0x56046816c280 +| | |-TextComment 0x56046816c200 Text=" Returns whether table is a module or contains module contents" +| | |-TextComment 0x56046816c220 Text=" Returns true for tables that have module contents. Can be used to filter out" +| | `-TextComment 0x56046816c240 Text=" tables that do not contain application data." +| |-ParagraphComment 0x56046816c2d0 +| | `-TextComment 0x56046816c2a0 Text=" " +| |-ParamCommandComment 0x56046816c2f0 [in] implicitly Param="table" ParamIndex=0 +| | `-ParagraphComment 0x56046816c3c0 +| | |-TextComment 0x56046816c350 Text=" The table." +| | `-TextComment 0x56046816c390 Text=" " +| `-BlockCommandComment 0x56046816c3e0 Name="return" +| `-ParagraphComment 0x56046816c440 +| `-TextComment 0x56046816c410 Text=" true if table contains module contents, false if not." +|-FunctionDecl 0x5604680667c8 line:8017:6 ecs_table_swap_rows 'void (ecs_world_t *, ecs_table_t *, int32_t, int32_t)' +| |-ParmVarDecl 0x560468066518 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468066590 col:18 table 'ecs_table_t *' +| |-ParmVarDecl 0x560468066608 col:13 row_1 'int32_t':'int' +| |-ParmVarDecl 0x560468066680 col:13 row_2 'int32_t':'int' +| `-FullComment 0x56046816c8e0 +| |-ParagraphComment 0x56046816c570 +| | |-TextComment 0x56046816c4f0 Text=" Swaps two elements inside the table. This is useful for implementing custom" +| | |-TextComment 0x56046816c510 Text=" table sorting algorithms." +| | `-TextComment 0x56046816c530 Text=" " +| |-ParamCommandComment 0x56046816c590 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816c640 +| | |-TextComment 0x56046816c5f0 Text=" The world" +| | `-TextComment 0x56046816c610 Text=" " +| |-ParamCommandComment 0x56046816c660 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046816c710 +| | |-TextComment 0x56046816c6c0 Text=" The table to swap elements in" +| | `-TextComment 0x56046816c6e0 Text=" " +| |-ParamCommandComment 0x56046816c730 [in] implicitly Param="row_1" ParamIndex=2 +| | `-ParagraphComment 0x56046816c7e0 +| | |-TextComment 0x56046816c790 Text=" Table element to swap with row_2" +| | `-TextComment 0x56046816c7b0 Text=" " +| `-ParamCommandComment 0x56046816c800 [in] implicitly Param="row_2" ParamIndex=3 +| `-ParagraphComment 0x56046816c890 +| `-TextComment 0x56046816c860 Text=" Table element to swap with row_1" +|-FunctionDecl 0x560468066ca8 line:8046:6 ecs_commit 'bool (ecs_world_t *, ecs_entity_t, ecs_record_t *, ecs_table_t *, const ecs_type_t *, const ecs_type_t *)' +| |-ParmVarDecl 0x5604680668c8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468066940 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680669d0 col:19 record 'ecs_record_t *' +| |-ParmVarDecl 0x560468066a48 col:18 table 'ecs_table_t *' +| |-ParmVarDecl 0x560468066ac0 col:23 added 'const ecs_type_t *' +| |-ParmVarDecl 0x560468066b38 col:23 removed 'const ecs_type_t *' +| `-FullComment 0x56046816d020 +| |-ParagraphComment 0x56046816ca90 +| | |-TextComment 0x56046816c950 Text=" Commit (move) entity to a table." +| | |-TextComment 0x56046816c970 Text=" This operation moves an entity from its current table to the specified" +| | |-TextComment 0x56046816c990 Text=" table. This may cause the following actions:" +| | |-TextComment 0x56046816c9b0 Text=" - Ctor for each component in the target table" +| | |-TextComment 0x56046816c9d0 Text=" - Move for each overlapping component" +| | |-TextComment 0x56046816c9f0 Text=" - Dtor for each component in the source table." +| | |-TextComment 0x56046816ca10 Text=" - OnAdd triggers for non-overlapping components in the target table" +| | `-TextComment 0x56046816ca30 Text=" - OnRemove triggers for non-overlapping components in the source table." +| |-ParagraphComment 0x56046816cae0 +| | `-TextComment 0x56046816cab0 Text=" This operation is a faster than adding/removing components individually." +| |-ParagraphComment 0x56046816cba0 +| | |-TextComment 0x56046816cb00 Text=" The application must explicitly provide the difference in components between" +| | |-TextComment 0x56046816cb20 Text=" tables as the added/removed parameters. This can usually be derived directly" +| | |-TextComment 0x56046816cb40 Text=" from the result of ecs_table_add_id and esc_table_remove_id. These arrays are" +| | `-TextComment 0x56046816cb60 Text=" required to properly execute OnAdd/OnRemove triggers." +| |-ParagraphComment 0x56046816cbf0 +| | `-TextComment 0x56046816cbc0 Text=" " +| |-ParamCommandComment 0x56046816cc10 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816ccc0 +| | |-TextComment 0x56046816cc70 Text=" The world." +| | `-TextComment 0x56046816cc90 Text=" " +| |-ParamCommandComment 0x56046816cce0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046816cd90 +| | |-TextComment 0x56046816cd40 Text=" The entity to commit." +| | `-TextComment 0x56046816cd60 Text=" " +| |-ParamCommandComment 0x56046816cdb0 [in] implicitly Param="record" ParamIndex=2 +| | `-ParagraphComment 0x56046816ce60 +| | |-TextComment 0x56046816ce10 Text=" The entity's record (optional, providing it saves a lookup)." +| | `-TextComment 0x56046816ce30 Text=" " +| |-ParamCommandComment 0x56046816ce80 [in] implicitly Param="table" ParamIndex=3 +| | `-ParagraphComment 0x56046816cf30 +| | |-TextComment 0x56046816cee0 Text=" The table to commit the entity to." +| | `-TextComment 0x56046816cf00 Text=" " +| `-BlockCommandComment 0x56046816cf50 Name="return" +| `-ParagraphComment 0x56046816cfb0 +| `-TextComment 0x56046816cf80 Text=" True if the entity got moved, false otherwise." +|-FunctionDecl 0x560468066f48 line:8056:15 ecs_record_find 'ecs_record_t *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x560468066db8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468066e30 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046816d0f0 +| `-ParagraphComment 0x56046816d0c0 +| `-TextComment 0x56046816d090 Text=" Find record for entity. " +|-FunctionDecl 0x560468067250 line:8062:7 ecs_record_get_column 'void *(const ecs_record_t *, int32_t, size_t)' +| |-ParmVarDecl 0x560468067038 col:25 r 'const ecs_record_t *' +| |-ParmVarDecl 0x5604680670b0 col:13 column 'int32_t':'int' +| |-ParmVarDecl 0x560468067128 col:12 c_size 'size_t':'unsigned long' +| `-FullComment 0x56046816d1c0 +| `-ParagraphComment 0x56046816d190 +| `-TextComment 0x56046816d160 Text=" Get component pointer from column/record. " +|-FunctionDecl 0x5604680675f8 line:8083:9 ecs_search 'int32_t (const ecs_world_t *, const ecs_table_t *, ecs_id_t, ecs_id_t *)' +| |-ParmVarDecl 0x560468067348 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680673c0 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x560468067438 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x5604680674b0 col:15 id_out 'ecs_id_t *' +| `-FullComment 0x56046816d7f0 +| |-ParagraphComment 0x56046816d2b0 +| | |-TextComment 0x56046816d230 Text=" Search for component id in table type." +| | |-TextComment 0x56046816d250 Text=" This operation returns the index of first occurrance of the id in the table" +| | `-TextComment 0x56046816d270 Text=" type. The id may be a wildcard." +| |-ParagraphComment 0x56046816d320 +| | |-TextComment 0x56046816d2d0 Text=" When id_out is provided, the function will assign it with the found id. The" +| | `-TextComment 0x56046816d2f0 Text=" found id may be different from the provided id if it is a wildcard." +| |-ParagraphComment 0x56046816d370 +| | `-TextComment 0x56046816d340 Text=" This is a constant time operation." +| |-ParagraphComment 0x56046816d3c0 +| | `-TextComment 0x56046816d390 Text=" " +| |-ParamCommandComment 0x56046816d3e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816d490 +| | |-TextComment 0x56046816d440 Text=" The world." +| | `-TextComment 0x56046816d460 Text=" " +| |-ParamCommandComment 0x56046816d4b0 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046816d560 +| | |-TextComment 0x56046816d510 Text=" The table." +| | `-TextComment 0x56046816d530 Text=" " +| |-ParamCommandComment 0x56046816d580 [in] implicitly Param="id" ParamIndex=2 +| | `-ParagraphComment 0x56046816d630 +| | |-TextComment 0x56046816d5e0 Text=" The id to search for." +| | `-TextComment 0x56046816d600 Text=" " +| |-ParamCommandComment 0x56046816d650 [in] implicitly Param="id_out" ParamIndex=3 +| | `-ParagraphComment 0x56046816d700 +| | |-TextComment 0x56046816d6b0 Text=" If provided, it will be set to the found id (optional)." +| | `-TextComment 0x56046816d6d0 Text=" " +| `-BlockCommandComment 0x56046816d720 Name="return" +| `-ParagraphComment 0x56046816d780 +| `-TextComment 0x56046816d750 Text=" The index of the id in the table type." +|-FunctionDecl 0x560468067af8 line:8120:9 ecs_search_offset 'int32_t (const ecs_world_t *, const ecs_table_t *, int32_t, ecs_id_t, ecs_id_t *)' +| |-ParmVarDecl 0x5604680676f8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468067770 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x5604680677e8 col:13 offset 'int32_t':'int' +| |-ParmVarDecl 0x560468067860 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x5604680678d8 col:15 id_out 'ecs_id_t *' +| `-FullComment 0x56046816e130 +| |-ParagraphComment 0x56046816d8e0 +| | |-TextComment 0x56046816d860 Text=" Search for component id in table type starting from an offset." +| | |-TextComment 0x56046816d880 Text=" This operation is the same as ecs_search, but starts searching from an offset" +| | `-TextComment 0x56046816d8a0 Text=" in the table type." +| |-ParagraphComment 0x56046816d950 +| | |-TextComment 0x56046816d900 Text=" This operation is typically called in a loop where the resulting index is" +| | `-TextComment 0x56046816d920 Text=" used in the next iteration as offset:" +| |-ParagraphComment 0x56046816da10 +| | |-TextComment 0x56046816d970 Text=" int32_t index = -1;" +| | |-TextComment 0x56046816d990 Text=" while ((index = ecs_search_offset(world, table, offset, id, NULL))) {" +| | |-TextComment 0x56046816d9b0 Text=" // do stuff" +| | `-TextComment 0x56046816d9d0 Text=" }" +| |-ParagraphComment 0x56046816dab0 +| | |-TextComment 0x56046816da30 Text=" Depending on how the operation is used it is either linear or constant time." +| | |-TextComment 0x56046816da50 Text=" When the id has the form (id) or (rel, *) and the operation is invoked as " +| | `-TextComment 0x56046816da70 Text=" in the above example, it is guaranteed to be constant time." +| |-ParagraphComment 0x56046816db50 +| | |-TextComment 0x56046816dad0 Text=" If the provided id has the form (*, tgt) the operation takes linear time. The" +| | |-TextComment 0x56046816daf0 Text=" reason for this is that ids for an target are not packed together, as they" +| | `-TextComment 0x56046816db10 Text=" are sorted relationship first." +| |-ParagraphComment 0x56046816dbc0 +| | |-TextComment 0x56046816db70 Text=" If the id at the offset does not match the provided id, the operation will do" +| | `-TextComment 0x56046816db90 Text=" a linear search to find a matching id." +| |-ParagraphComment 0x56046816dc10 +| | `-TextComment 0x56046816dbe0 Text=" " +| |-ParamCommandComment 0x56046816dc30 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816dce0 +| | |-TextComment 0x56046816dc90 Text=" The world." +| | `-TextComment 0x56046816dcb0 Text=" " +| |-ParamCommandComment 0x56046816dd00 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046816ddb0 +| | |-TextComment 0x56046816dd60 Text=" The table." +| | `-TextComment 0x56046816dd80 Text=" " +| |-ParamCommandComment 0x56046816ddd0 [in] implicitly Param="offset" ParamIndex=2 +| | `-ParagraphComment 0x56046816de80 +| | |-TextComment 0x56046816de30 Text=" Offset from where to start searching." +| | `-TextComment 0x56046816de50 Text=" " +| |-ParamCommandComment 0x56046816dea0 [in] implicitly Param="id" ParamIndex=3 +| | `-ParagraphComment 0x56046816df50 +| | |-TextComment 0x56046816df00 Text=" The id to search for." +| | `-TextComment 0x56046816df20 Text=" " +| |-ParamCommandComment 0x56046816df70 [in] implicitly Param="id_out" ParamIndex=4 +| | `-ParagraphComment 0x56046816e020 +| | |-TextComment 0x56046816dfd0 Text=" If provided, it will be set to the found id (optional)." +| | `-TextComment 0x56046816dff0 Text=" " +| `-BlockCommandComment 0x56046816e040 Name="return" +| `-ParagraphComment 0x56046816e0a0 +| `-TextComment 0x56046816e070 Text=" The index of the id in the table type." +|-FunctionDecl 0x5604680681e8 line:8164:9 ecs_search_relation 'int32_t (const ecs_world_t *, const ecs_table_t *, int32_t, ecs_id_t, ecs_entity_t, ecs_flags32_t, ecs_entity_t *, ecs_id_t *, struct ecs_table_record_t **)' +| |-ParmVarDecl 0x560468067bf8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468067c70 col:24 table 'const ecs_table_t *' +| |-ParmVarDecl 0x560468067ce8 col:13 offset 'int32_t':'int' +| |-ParmVarDecl 0x560468067d60 col:14 id 'ecs_id_t':'unsigned long' +| |-ParmVarDecl 0x560468067dd8 col:18 rel 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468067e50 col:19 flags 'ecs_flags32_t':'unsigned int' +| |-ParmVarDecl 0x560468067ec8 col:19 subject_out 'ecs_entity_t *' +| |-ParmVarDecl 0x560468067f40 col:15 id_out 'ecs_id_t *' +| |-ParmVarDecl 0x560468068030 col:33 tr_out 'struct ecs_table_record_t **' +| `-FullComment 0x56046816ee20 +| |-ParagraphComment 0x56046816e290 +| | |-TextComment 0x56046816e1a0 Text=" Search for component/relationship id in table type starting from an offset." +| | |-TextComment 0x56046816e1c0 Text=" This operation is the same as ecs_search_offset, but has the additional" +| | |-TextComment 0x56046816e1e0 Text=" capability of traversing relationships to find a component. For example, if" +| | |-TextComment 0x56046816e200 Text=" an application wants to find a component for either the provided table or a" +| | |-TextComment 0x56046816e220 Text=" prefab (using the IsA relationship) of that table, it could use the operation " +| | `-TextComment 0x56046816e240 Text=" like this:" +| |-ParagraphComment 0x56046816e480 +| | |-TextComment 0x56046816e2b0 Text=" int32_t index = ecs_search_relation(" +| | |-TextComment 0x56046816e2d0 Text=" world, // the world" +| | |-TextComment 0x56046816e2f0 Text=" table, // the table" +| | |-TextComment 0x56046816e310 Text=" 0, // offset 0" +| | |-TextComment 0x56046816e330 Text=" ecs_id(Position), // the component id" +| | |-TextComment 0x56046816e350 Text=" EcsIsA, // the relationship to traverse" +| | |-TextComment 0x56046816e370 Text=" 0, // start at depth 0 (the table itself)" +| | |-TextComment 0x56046816e3a0 Text=" 0, // no depth limit" +| | |-TextComment 0x56046816e3c0 Text=" NULL, // (optional) entity on which component was found" +| | |-TextComment 0x56046816e3e0 Text=" NULL, // see above" +| | `-TextComment 0x56046816e400 Text=" NULL); // internal type with information about matched id" +| |-ParagraphComment 0x56046816e4f0 +| | |-TextComment 0x56046816e4a0 Text=" The operation searches depth first. If a table type has 2 IsA relationships, the" +| | `-TextComment 0x56046816e4c0 Text=" operation will first search the IsA tree of the first relationship." +| |-ParagraphComment 0x56046816e560 +| | |-TextComment 0x56046816e510 Text=" When choosing betwen ecs_search, ecs_search_offset and ecs_search_relation," +| | `-TextComment 0x56046816e530 Text=" the simpler the function the better its performance." +| |-ParagraphComment 0x56046816e5b0 +| | `-TextComment 0x56046816e580 Text=" " +| |-ParamCommandComment 0x56046816e5d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816e680 +| | |-TextComment 0x56046816e630 Text=" The world." +| | `-TextComment 0x56046816e650 Text=" " +| |-ParamCommandComment 0x56046816e6a0 [in] implicitly Param="table" ParamIndex=1 +| | `-ParagraphComment 0x56046816e750 +| | |-TextComment 0x56046816e700 Text=" The table." +| | `-TextComment 0x56046816e720 Text=" " +| |-ParamCommandComment 0x56046816e770 [in] implicitly Param="offset" ParamIndex=2 +| | `-ParagraphComment 0x56046816e820 +| | |-TextComment 0x56046816e7d0 Text=" Offset from where to start searching." +| | `-TextComment 0x56046816e7f0 Text=" " +| |-ParamCommandComment 0x56046816e840 [in] implicitly Param="id" ParamIndex=3 +| | `-ParagraphComment 0x56046816e8f0 +| | |-TextComment 0x56046816e8a0 Text=" The id to search for." +| | `-TextComment 0x56046816e8c0 Text=" " +| |-ParamCommandComment 0x56046816e910 [in] implicitly Param="rel" ParamIndex=4 +| | `-ParagraphComment 0x56046816e9c0 +| | |-TextComment 0x56046816e970 Text=" The relationship to traverse (optional)." +| | `-TextComment 0x56046816e990 Text=" " +| |-ParamCommandComment 0x56046816e9e0 [in] implicitly Param="flags" ParamIndex=5 +| | `-ParagraphComment 0x56046816ea90 +| | |-TextComment 0x56046816ea40 Text=" Whether to search EcsSelf and/or EcsUp." +| | `-TextComment 0x56046816ea60 Text=" " +| |-ParamCommandComment 0x56046816eab0 [in] implicitly Param="subject_out" ParamIndex=6 +| | `-ParagraphComment 0x56046816eb60 +| | |-TextComment 0x56046816eb10 Text=" If provided, it will be set to the matched entity." +| | `-TextComment 0x56046816eb30 Text=" " +| |-ParamCommandComment 0x56046816eb80 [in] implicitly Param="id_out" ParamIndex=7 +| | `-ParagraphComment 0x56046816ec30 +| | |-TextComment 0x56046816ebe0 Text=" If provided, it will be set to the found id (optional)." +| | `-TextComment 0x56046816ec00 Text=" " +| |-ParamCommandComment 0x56046816ec50 [in] implicitly Param="tr_out" ParamIndex=8 +| | `-ParagraphComment 0x56046816ed00 +| | |-TextComment 0x56046816ecb0 Text=" Internal datatype." +| | `-TextComment 0x56046816ecd0 Text=" " +| `-BlockCommandComment 0x56046816ed20 Name="return" +| `-ParagraphComment 0x56046816ed80 +| `-TextComment 0x56046816ed50 Text=" The index of the id in the table type." +|-FunctionDecl 0x560468068590 line:8191:5 ecs_value_init 'int (const ecs_world_t *, ecs_entity_t, void *)' +| |-ParmVarDecl 0x560468068368 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680683e0 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468068460 col:11 ptr 'void *' +| `-FullComment 0x56046816f250 +| |-ParagraphComment 0x56046816eec0 +| | `-TextComment 0x56046816ee90 Text=" Construct a value in existing storage " +| |-ParagraphComment 0x56046816ef10 +| | `-TextComment 0x56046816eee0 Text=" " +| |-ParamCommandComment 0x56046816ef30 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816efe0 +| | |-TextComment 0x56046816ef90 Text=" The world." +| | `-TextComment 0x56046816efb0 Text=" " +| |-ParamCommandComment 0x56046816f000 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x56046816f0b0 +| | |-TextComment 0x56046816f060 Text=" The type of the value to create." +| | `-TextComment 0x56046816f080 Text=" " +| |-ParamCommandComment 0x56046816f0d0 [in] implicitly Param="ptr" ParamIndex=2 +| | `-ParagraphComment 0x56046816f180 +| | |-TextComment 0x56046816f130 Text=" Pointer to a value of type 'type'" +| | `-TextComment 0x56046816f150 Text=" " +| `-BlockCommandComment 0x56046816f1a0 Name="return" +| `-ParagraphComment 0x56046816f200 +| `-TextComment 0x56046816f1d0 Text=" Zero if success, nonzero if failed." +|-FunctionDecl 0x5604680688b0 line:8204:5 ecs_value_init_w_type_info 'int (const ecs_world_t *, const ecs_type_info_t *, void *)' +| |-ParmVarDecl 0x560468068688 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468068700 col:28 ti 'const ecs_type_info_t *' +| |-ParmVarDecl 0x560468068780 col:11 ptr 'void *' +| `-FullComment 0x56046816f680 +| |-ParagraphComment 0x56046816f2f0 +| | `-TextComment 0x56046816f2c0 Text=" Construct a value in existing storage " +| |-ParagraphComment 0x56046816f340 +| | `-TextComment 0x56046816f310 Text=" " +| |-ParamCommandComment 0x56046816f360 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816f410 +| | |-TextComment 0x56046816f3c0 Text=" The world." +| | `-TextComment 0x56046816f3e0 Text=" " +| |-ParamCommandComment 0x56046816f430 [in] implicitly Param="ti" ParamIndex=1 +| | `-ParagraphComment 0x56046816f4e0 +| | |-TextComment 0x56046816f490 Text=" The type info of the type to create." +| | `-TextComment 0x56046816f4b0 Text=" " +| |-ParamCommandComment 0x56046816f500 [in] implicitly Param="ptr" ParamIndex=2 +| | `-ParagraphComment 0x56046816f5b0 +| | |-TextComment 0x56046816f560 Text=" Pointer to a value of type 'type'" +| | `-TextComment 0x56046816f580 Text=" " +| `-BlockCommandComment 0x56046816f5d0 Name="return" +| `-ParagraphComment 0x56046816f630 +| `-TextComment 0x56046816f600 Text=" Zero if success, nonzero if failed." +|-FunctionDecl 0x560468068d10 line:8216:7 ecs_value_new 'void *(ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680689a8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468068bf0 col:18 type 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046816f9e0 +| |-ParagraphComment 0x56046816f720 +| | `-TextComment 0x56046816f6f0 Text=" Construct a value in new storage " +| |-ParagraphComment 0x56046816f770 +| | `-TextComment 0x56046816f740 Text=" " +| |-ParamCommandComment 0x56046816f790 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816f840 +| | |-TextComment 0x56046816f7f0 Text=" The world." +| | `-TextComment 0x56046816f810 Text=" " +| |-ParamCommandComment 0x56046816f860 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x56046816f910 +| | |-TextComment 0x56046816f8c0 Text=" The type of the value to create." +| | `-TextComment 0x56046816f8e0 Text=" " +| `-BlockCommandComment 0x56046816f930 Name="return" +| `-ParagraphComment 0x56046816f990 +| `-TextComment 0x56046816f960 Text=" Pointer to type if success, NULL if failed." +|-FunctionDecl 0x560468068f98 line:8227:5 ecs_value_fini_w_type_info 'int (const ecs_world_t *, const ecs_type_info_t *, void *)' +| |-ParmVarDecl 0x560468068df8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468068e70 col:28 ti 'const ecs_type_info_t *' +| |-ParmVarDecl 0x560468068ef0 col:11 ptr 'void *' +| `-FullComment 0x56046816fe10 +| |-ParagraphComment 0x56046816fa80 +| | `-TextComment 0x56046816fa50 Text=" Destruct a value " +| |-ParagraphComment 0x56046816fad0 +| | `-TextComment 0x56046816faa0 Text=" " +| |-ParamCommandComment 0x56046816faf0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816fba0 +| | |-TextComment 0x56046816fb50 Text=" The world." +| | `-TextComment 0x56046816fb70 Text=" " +| |-ParamCommandComment 0x56046816fbc0 [in] implicitly Param="ti" ParamIndex=1 +| | `-ParagraphComment 0x56046816fc70 +| | |-TextComment 0x56046816fc20 Text=" Type info of the value to destruct." +| | `-TextComment 0x56046816fc40 Text=" " +| |-ParamCommandComment 0x56046816fc90 [in] implicitly Param="ptr" ParamIndex=2 +| | `-ParagraphComment 0x56046816fd40 +| | |-TextComment 0x56046816fcf0 Text=" Pointer to constructed value of type 'type'." +| | `-TextComment 0x56046816fd10 Text=" " +| `-BlockCommandComment 0x56046816fd60 Name="return" +| `-ParagraphComment 0x56046816fdc0 +| `-TextComment 0x56046816fd90 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x560468069228 line:8240:5 ecs_value_fini 'int (const ecs_world_t *, ecs_entity_t, void *)' +| |-ParmVarDecl 0x560468069088 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468069100 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468069180 col:11 ptr 'void *' +| `-FullComment 0x560468170240 +| |-ParagraphComment 0x56046816feb0 +| | `-TextComment 0x56046816fe80 Text=" Destruct a value " +| |-ParagraphComment 0x56046816ff00 +| | `-TextComment 0x56046816fed0 Text=" " +| |-ParamCommandComment 0x56046816ff20 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046816ffd0 +| | |-TextComment 0x56046816ff80 Text=" The world." +| | `-TextComment 0x56046816ffa0 Text=" " +| |-ParamCommandComment 0x56046816fff0 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x5604681700a0 +| | |-TextComment 0x560468170050 Text=" The type of the value to destruct." +| | `-TextComment 0x560468170070 Text=" " +| |-ParamCommandComment 0x5604681700c0 [in] implicitly Param="ptr" ParamIndex=2 +| | `-ParagraphComment 0x560468170170 +| | |-TextComment 0x560468170120 Text=" Pointer to constructed value of type 'type'." +| | `-TextComment 0x560468170140 Text=" " +| `-BlockCommandComment 0x560468170190 Name="return" +| `-ParagraphComment 0x5604681701f0 +| `-TextComment 0x5604681701c0 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x560468069540 line:8252:5 ecs_value_free 'int (ecs_world_t *, ecs_entity_t, void *)' +| |-ParmVarDecl 0x560468069318 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468069390 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468069410 col:11 ptr 'void *' +| `-FullComment 0x5604681705c0 +| |-ParagraphComment 0x5604681702e0 +| | `-TextComment 0x5604681702b0 Text=" Destruct a value, free storage" +| |-ParagraphComment 0x560468170330 +| | `-TextComment 0x560468170300 Text=" " +| |-ParamCommandComment 0x560468170350 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468170420 +| | |-TextComment 0x5604681703d0 Text=" The world." +| | `-TextComment 0x5604681703f0 Text=" " +| |-ParamCommandComment 0x560468170440 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x5604681704f0 +| | |-TextComment 0x5604681704a0 Text=" The type of the value to destruct." +| | `-TextComment 0x5604681704c0 Text=" " +| `-BlockCommandComment 0x560468170510 Name="return" +| `-ParagraphComment 0x560468170570 +| `-TextComment 0x560468170540 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x560468069900 line:8266:5 ecs_value_copy_w_type_info 'int (const ecs_world_t *, const ecs_type_info_t *, void *, const void *)' +| |-ParmVarDecl 0x560468069638 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680696b0 col:28 ti 'const ecs_type_info_t *' +| |-ParmVarDecl 0x560468069730 col:11 dst 'void *' +| |-ParmVarDecl 0x5604680697b0 col:17 src 'const void *' +| `-FullComment 0x560468170ad0 +| |-ParagraphComment 0x560468170660 +| | `-TextComment 0x560468170630 Text=" Copy value." +| |-ParagraphComment 0x5604681706b0 +| | `-TextComment 0x560468170680 Text=" " +| |-ParamCommandComment 0x5604681706d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468170780 +| | |-TextComment 0x560468170730 Text=" The world." +| | `-TextComment 0x560468170750 Text=" " +| |-ParamCommandComment 0x5604681707a0 [in] implicitly Param="ti" ParamIndex=1 +| | `-ParagraphComment 0x560468170850 +| | |-TextComment 0x560468170800 Text=" Type info of the value to copy." +| | `-TextComment 0x560468170820 Text=" " +| |-ParamCommandComment 0x560468170870 [in] implicitly Param="dst" ParamIndex=2 +| | `-ParagraphComment 0x560468170920 +| | |-TextComment 0x5604681708d0 Text=" Pointer to the storage to copy to." +| | `-TextComment 0x5604681708f0 Text=" " +| |-ParamCommandComment 0x560468170940 [in] implicitly Param="src" ParamIndex=3 +| | `-ParagraphComment 0x5604681709f0 +| | |-TextComment 0x5604681709a0 Text=" Pointer to the value to copy." +| | `-TextComment 0x5604681709c0 Text=" " +| `-BlockCommandComment 0x560468170a10 Name="return" +| `-ParagraphComment 0x560468170a70 +| `-TextComment 0x560468170a40 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x560468069e20 line:8281:5 ecs_value_copy 'int (const ecs_world_t *, ecs_entity_t, void *, const void *)' +| |-ParmVarDecl 0x5604680699f8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468069a70 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x560468069af0 col:11 dst 'void *' +| |-ParmVarDecl 0x560468069b70 col:17 src 'const void *' +| `-FullComment 0x560468170fe0 +| |-ParagraphComment 0x560468170b70 +| | `-TextComment 0x560468170b40 Text=" Copy value." +| |-ParagraphComment 0x560468170bc0 +| | `-TextComment 0x560468170b90 Text=" " +| |-ParamCommandComment 0x560468170be0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468170c90 +| | |-TextComment 0x560468170c40 Text=" The world." +| | `-TextComment 0x560468170c60 Text=" " +| |-ParamCommandComment 0x560468170cb0 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x560468170d60 +| | |-TextComment 0x560468170d10 Text=" The type of the value to copy." +| | `-TextComment 0x560468170d30 Text=" " +| |-ParamCommandComment 0x560468170d80 [in] implicitly Param="dst" ParamIndex=2 +| | `-ParagraphComment 0x560468170e30 +| | |-TextComment 0x560468170de0 Text=" Pointer to the storage to copy to." +| | `-TextComment 0x560468170e00 Text=" " +| |-ParamCommandComment 0x560468170e50 [in] implicitly Param="src" ParamIndex=3 +| | `-ParagraphComment 0x560468170f00 +| | |-TextComment 0x560468170eb0 Text=" Pointer to the value to copy." +| | `-TextComment 0x560468170ed0 Text=" " +| `-BlockCommandComment 0x560468170f20 Name="return" +| `-ParagraphComment 0x560468170f80 +| `-TextComment 0x560468170f50 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x56046806a1e0 line:8295:5 ecs_value_move_w_type_info 'int (const ecs_world_t *, const ecs_type_info_t *, void *, void *)' +| |-ParmVarDecl 0x560468069f18 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x560468069f90 col:28 ti 'const ecs_type_info_t *' +| |-ParmVarDecl 0x56046806a010 col:11 dst 'void *' +| |-ParmVarDecl 0x56046806a090 col:11 src 'void *' +| `-FullComment 0x5604681714f0 +| |-ParagraphComment 0x560468171080 +| | `-TextComment 0x560468171050 Text=" Move value." +| |-ParagraphComment 0x5604681710d0 +| | `-TextComment 0x5604681710a0 Text=" " +| |-ParamCommandComment 0x5604681710f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681711a0 +| | |-TextComment 0x560468171150 Text=" The world." +| | `-TextComment 0x560468171170 Text=" " +| |-ParamCommandComment 0x5604681711c0 [in] implicitly Param="ti" ParamIndex=1 +| | `-ParagraphComment 0x560468171270 +| | |-TextComment 0x560468171220 Text=" Type info of the value to move." +| | `-TextComment 0x560468171240 Text=" " +| |-ParamCommandComment 0x560468171290 [in] implicitly Param="dst" ParamIndex=2 +| | `-ParagraphComment 0x560468171340 +| | |-TextComment 0x5604681712f0 Text=" Pointer to the storage to move to." +| | `-TextComment 0x560468171310 Text=" " +| |-ParamCommandComment 0x560468171360 [in] implicitly Param="src" ParamIndex=3 +| | `-ParagraphComment 0x560468171410 +| | |-TextComment 0x5604681713c0 Text=" Pointer to the value to move." +| | `-TextComment 0x5604681713e0 Text=" " +| `-BlockCommandComment 0x560468171430 Name="return" +| `-ParagraphComment 0x560468171490 +| `-TextComment 0x560468171460 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x56046806a5a0 line:8309:5 ecs_value_move 'int (const ecs_world_t *, ecs_entity_t, void *, void *)' +| |-ParmVarDecl 0x56046806a2d8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046806a350 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046806a3d0 col:11 dst 'void *' +| |-ParmVarDecl 0x56046806a450 col:11 src 'void *' +| `-FullComment 0x560468171a00 +| |-ParagraphComment 0x560468171590 +| | `-TextComment 0x560468171560 Text=" Move value." +| |-ParagraphComment 0x5604681715e0 +| | `-TextComment 0x5604681715b0 Text=" " +| |-ParamCommandComment 0x560468171600 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681716b0 +| | |-TextComment 0x560468171660 Text=" The world." +| | `-TextComment 0x560468171680 Text=" " +| |-ParamCommandComment 0x5604681716d0 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x560468171780 +| | |-TextComment 0x560468171730 Text=" The type of the value to move." +| | `-TextComment 0x560468171750 Text=" " +| |-ParamCommandComment 0x5604681717a0 [in] implicitly Param="dst" ParamIndex=2 +| | `-ParagraphComment 0x560468171850 +| | |-TextComment 0x560468171800 Text=" Pointer to the storage to move to." +| | `-TextComment 0x560468171820 Text=" " +| |-ParamCommandComment 0x560468171870 [in] implicitly Param="src" ParamIndex=3 +| | `-ParagraphComment 0x560468171920 +| | |-TextComment 0x5604681718d0 Text=" Pointer to the value to move." +| | `-TextComment 0x5604681718f0 Text=" " +| `-BlockCommandComment 0x560468171940 Name="return" +| `-ParagraphComment 0x5604681719a0 +| `-TextComment 0x560468171970 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x56046806a8c0 line:8323:5 ecs_value_move_ctor_w_type_info 'int (const ecs_world_t *, const ecs_type_info_t *, void *, void *)' +| |-ParmVarDecl 0x56046806a698 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046806a710 col:28 ti 'const ecs_type_info_t *' +| |-ParmVarDecl 0x56046806a790 col:11 dst 'void *' +| |-ParmVarDecl 0x56046806a810 col:11 src 'void *' +| `-FullComment 0x560468171f10 +| |-ParagraphComment 0x560468171aa0 +| | `-TextComment 0x560468171a70 Text=" Move construct value." +| |-ParagraphComment 0x560468171af0 +| | `-TextComment 0x560468171ac0 Text=" " +| |-ParamCommandComment 0x560468171b10 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468171bc0 +| | |-TextComment 0x560468171b70 Text=" The world." +| | `-TextComment 0x560468171b90 Text=" " +| |-ParamCommandComment 0x560468171be0 [in] implicitly Param="ti" ParamIndex=1 +| | `-ParagraphComment 0x560468171c90 +| | |-TextComment 0x560468171c40 Text=" Type info of the value to move." +| | `-TextComment 0x560468171c60 Text=" " +| |-ParamCommandComment 0x560468171cb0 [in] implicitly Param="dst" ParamIndex=2 +| | `-ParagraphComment 0x560468171d60 +| | |-TextComment 0x560468171d10 Text=" Pointer to the storage to move to." +| | `-TextComment 0x560468171d30 Text=" " +| |-ParamCommandComment 0x560468171d80 [in] implicitly Param="src" ParamIndex=3 +| | `-ParagraphComment 0x560468171e30 +| | |-TextComment 0x560468171de0 Text=" Pointer to the value to move." +| | `-TextComment 0x560468171e00 Text=" " +| `-BlockCommandComment 0x560468171e50 Name="return" +| `-ParagraphComment 0x560468171eb0 +| `-TextComment 0x560468171e80 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x56046806abe0 line:8337:5 ecs_value_move_ctor 'int (const ecs_world_t *, ecs_entity_t, void *, void *)' +| |-ParmVarDecl 0x56046806a9b8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046806aa30 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046806aab0 col:11 dst 'void *' +| |-ParmVarDecl 0x56046806ab30 col:11 src 'void *' +| `-FullComment 0x560468172430 +| |-ParagraphComment 0x560468171fb0 +| | `-TextComment 0x560468171f80 Text=" Move construct value." +| |-ParagraphComment 0x560468172000 +| | `-TextComment 0x560468171fd0 Text=" " +| |-ParamCommandComment 0x560468172020 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681720d0 +| | |-TextComment 0x560468172080 Text=" The world." +| | `-TextComment 0x5604681720a0 Text=" " +| |-ParamCommandComment 0x5604681720f0 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x5604681721a0 +| | |-TextComment 0x560468172150 Text=" The type of the value to move." +| | `-TextComment 0x560468172170 Text=" " +| |-ParamCommandComment 0x5604681721c0 [in] implicitly Param="dst" ParamIndex=2 +| | `-ParagraphComment 0x560468172270 +| | |-TextComment 0x560468172220 Text=" Pointer to the storage to move to." +| | `-TextComment 0x560468172240 Text=" " +| |-ParamCommandComment 0x560468172290 [in] implicitly Param="src" ParamIndex=3 +| | `-ParagraphComment 0x560468172340 +| | |-TextComment 0x5604681722f0 Text=" Pointer to the value to move." +| | `-TextComment 0x560468172310 Text=" " +| `-BlockCommandComment 0x560468172360 Name="return" +| `-ParagraphComment 0x5604681723d0 +| `-TextComment 0x560468172390 Text=" Zero if success, nonzero if failed. " +|-FunctionDecl 0x56046806c9c8 line:9212:6 _ecs_deprecated 'void (const char *, int32_t, const char *)' +| |-ParmVarDecl 0x56046806c830 col:17 file 'const char *' +| |-ParmVarDecl 0x56046806c8a8 col:13 line 'int32_t':'int' +| |-ParmVarDecl 0x56046806c928 col:17 msg 'const char *' +| `-FullComment 0x560468172550 +| `-ParagraphComment 0x560468172520 +| |-TextComment 0x5604681724a0 Text="/////////////////////////////////////////////////////////////////////////////" +| |-TextComment 0x5604681724c0 Text="/ Tracing" +| `-TextComment 0x5604681724e0 Text="/////////////////////////////////////////////////////////////////////////////" +|-FunctionDecl 0x56046806cba8 col:6 _ecs_log_push 'void (int32_t)' +| |-ParmVarDecl 0x56046806cab8 col:28 level 'int32_t':'int' +| `-FullComment 0x560468172780 +| |-ParagraphComment 0x560468172640 +| | |-TextComment 0x5604681725c0 Text=" Increase log stack." +| | |-TextComment 0x5604681725e0 Text=" This operation increases the indent_ value of the OS API and can be useful to" +| | `-TextComment 0x560468172600 Text=" make nested behavior more visible." +| |-ParagraphComment 0x560468172690 +| | `-TextComment 0x560468172660 Text=" " +| `-ParamCommandComment 0x5604681726b0 [in] implicitly Param="level" ParamIndex=0 +| `-ParagraphComment 0x560468172740 +| `-TextComment 0x560468172710 Text=" The log level." +|-FunctionDecl 0x56046806cd18 col:6 _ecs_log_pop 'void (int32_t)' +| |-ParmVarDecl 0x56046806cc88 col:27 level 'int32_t':'int' +| `-FullComment 0x5604681729b0 +| |-ParagraphComment 0x560468172870 +| | |-TextComment 0x5604681727f0 Text=" Decrease log stack." +| | |-TextComment 0x560468172810 Text=" This operation decreases the indent_ value of the OS API and can be useful to" +| | `-TextComment 0x560468172830 Text=" make nested behavior more visible." +| |-ParagraphComment 0x5604681728c0 +| | `-TextComment 0x560468172890 Text=" " +| `-ParamCommandComment 0x5604681728e0 [in] implicitly Param="level" ParamIndex=0 +| `-ParagraphComment 0x560468172970 +| `-TextComment 0x560468172940 Text=" The log level." +|-FunctionDecl 0x56046808be20 col:6 ecs_should_log 'bool (int32_t)' +| |-ParmVarDecl 0x56046806cdf8 col:29 level 'int32_t':'int' +| `-FullComment 0x560468172c80 +| |-ParagraphComment 0x560468172aa0 +| | |-TextComment 0x560468172a20 Text=" Should current level be logged." +| | |-TextComment 0x560468172a40 Text=" This operation returns true when the specified log level should be logged " +| | `-TextComment 0x560468172a60 Text=" with the current log level." +| |-ParagraphComment 0x560468172af0 +| | `-TextComment 0x560468172ac0 Text=" " +| |-ParamCommandComment 0x560468172b10 [in] implicitly Param="level" ParamIndex=0 +| | `-ParagraphComment 0x560468172bc0 +| | |-TextComment 0x560468172b70 Text=" The log level to check for." +| | `-TextComment 0x560468172b90 Text=" " +| `-BlockCommandComment 0x560468172be0 Name="return" +| `-ParagraphComment 0x560468172c40 +| `-TextComment 0x560468172c10 Text=" Whether logging is enabled for the current level." +|-FunctionDecl 0x56046808c000 line:9251:13 ecs_strerror 'const char *(int32_t)' +| |-ParmVarDecl 0x56046808bf38 col:13 error_code 'int32_t':'int' +| `-FullComment 0x560468172d50 +| `-ParagraphComment 0x560468172d20 +| `-TextComment 0x560468172cf0 Text=" Get description for error code " +|-FunctionDecl 0x56046808c3b0 line:9280:6 _ecs_print 'void (int32_t, const char *, int32_t, const char *, ...)' +| |-ParmVarDecl 0x56046808c0e8 col:13 level 'int32_t':'int' +| |-ParmVarDecl 0x56046808c168 col:17 file 'const char *' +| |-ParmVarDecl 0x56046808c1e0 col:13 line 'int32_t':'int' +| |-ParmVarDecl 0x56046808c260 col:17 fmt 'const char *' +| `-FullComment 0x560468172e70 +| `-ParagraphComment 0x560468172e40 +| |-TextComment 0x560468172dc0 Text="/////////////////////////////////////////////////////////////////////////////" +| |-TextComment 0x560468172de0 Text="/ Logging functions (do nothing when logging is enabled)" +| `-TextComment 0x560468172e00 Text="/////////////////////////////////////////////////////////////////////////////" +|-FunctionDecl 0x56046808c7c8 line:9288:6 _ecs_printv 'void (int, const char *, int32_t, const char *, struct __va_list_tag *)' +| |-ParmVarDecl 0x56046808c488 col:9 level 'int' +| |-ParmVarDecl 0x56046808c508 col:17 file 'const char *' +| |-ParmVarDecl 0x56046808c580 col:13 line 'int32_t':'int' +| |-ParmVarDecl 0x56046808c600 col:17 fmt 'const char *' +| `-ParmVarDecl 0x56046808c678 col:13 args 'struct __va_list_tag *':'struct __va_list_tag *' +|-FunctionDecl 0x56046808cac0 line:9296:6 _ecs_log 'void (int32_t, const char *, int32_t, const char *, ...)' +| |-ParmVarDecl 0x56046808c8a0 col:13 level 'int32_t':'int' +| |-ParmVarDecl 0x56046808c920 col:17 file 'const char *' +| |-ParmVarDecl 0x56046808c998 col:13 line 'int32_t':'int' +| `-ParmVarDecl 0x56046808ca18 col:17 fmt 'const char *' +|-FunctionDecl 0x56046808cf38 line:9304:6 _ecs_logv 'void (int, const char *, int32_t, const char *, struct __va_list_tag *)' +| |-ParmVarDecl 0x56046808cb98 col:9 level 'int' +| |-ParmVarDecl 0x56046808cc18 col:17 file 'const char *' +| |-ParmVarDecl 0x56046808cc90 col:13 line 'int32_t':'int' +| |-ParmVarDecl 0x56046808cd10 col:17 fmt 'const char *' +| `-ParmVarDecl 0x56046808cd88 col:13 args 'struct __va_list_tag *':'struct __va_list_tag *' +|-FunctionDecl 0x56046808d230 line:9312:6 _ecs_abort 'void (int32_t, const char *, int32_t, const char *, ...)' +| |-ParmVarDecl 0x56046808d010 col:13 error_code 'int32_t':'int' +| |-ParmVarDecl 0x56046808d090 col:17 file 'const char *' +| |-ParmVarDecl 0x56046808d108 col:13 line 'int32_t':'int' +| `-ParmVarDecl 0x56046808d188 col:17 fmt 'const char *' +|-FunctionDecl 0x56046808d6f0 line:9320:6 _ecs_assert 'bool (bool, int32_t, const char *, const char *, int32_t, const char *, ...)' +| |-ParmVarDecl 0x56046808d300 col:10 condition 'bool' +| |-ParmVarDecl 0x56046808d378 col:13 error_code 'int32_t':'int' +| |-ParmVarDecl 0x56046808d3f8 col:17 condition_str 'const char *' +| |-ParmVarDecl 0x56046808d478 col:17 file 'const char *' +| |-ParmVarDecl 0x56046808d4f0 col:13 line 'int32_t':'int' +| `-ParmVarDecl 0x56046808d570 col:17 fmt 'const char *' +|-FunctionDecl 0x56046808daa0 line:9330:6 _ecs_parser_error 'void (const char *, const char *, int64_t, const char *, ...)' +| |-ParmVarDecl 0x56046808d7d8 col:17 name 'const char *' +| |-ParmVarDecl 0x56046808d858 col:17 expr 'const char *' +| |-ParmVarDecl 0x56046808d8d0 col:13 column 'int64_t':'long' +| `-ParmVarDecl 0x56046808d950 col:17 fmt 'const char *' +|-FunctionDecl 0x56046808df00 line:9338:6 _ecs_parser_errorv 'void (const char *, const char *, int64_t, const char *, struct __va_list_tag *)' +| |-ParmVarDecl 0x56046808db78 col:17 name 'const char *' +| |-ParmVarDecl 0x56046808dbf8 col:17 expr 'const char *' +| |-ParmVarDecl 0x56046808dc70 col:13 column 'int64_t':'long' +| |-ParmVarDecl 0x56046808dcf0 col:17 fmt 'const char *' +| `-ParmVarDecl 0x56046808dd68 col:13 args 'struct __va_list_tag *':'struct __va_list_tag *' +|-FunctionDecl 0x56046808e228 line:9605:5 ecs_log_set_level 'int (int)' +| |-ParmVarDecl 0x56046808e190 col:9 level 'int' +| `-FullComment 0x560468173300 +| |-ParagraphComment 0x560468172f60 +| | |-TextComment 0x560468172ee0 Text=" Enable or disable tracing." +| | |-TextComment 0x560468172f00 Text=" This will enable builtin tracing. For tracing to work, it will have to be" +| | `-TextComment 0x560468172f20 Text=" compiled in which requires defining one of the following macros:" +| |-ParagraphComment 0x560468173020 +| | |-TextComment 0x560468172f80 Text=" FLECS_LOG_0 - All tracing is disabled" +| | |-TextComment 0x560468172fa0 Text=" FLECS_LOG_1 - Enable tracing level 1" +| | |-TextComment 0x560468172fc0 Text=" FLECS_LOG_2 - Enable tracing level 2 and below" +| | `-TextComment 0x560468172fe0 Text=" FLECS_LOG_3 - Enable tracing level 3 and below" +| |-ParagraphComment 0x560468173090 +| | |-TextComment 0x560468173040 Text=" If no tracing level is defined and this is a debug build, FLECS_LOG_3 will" +| | `-TextComment 0x560468173060 Text=" have been automatically defined." +| |-ParagraphComment 0x560468173100 +| | |-TextComment 0x5604681730b0 Text=" The provided level corresponds with the tracing level. If -1 is provided as" +| | `-TextComment 0x5604681730d0 Text=" value, warnings are disabled. If -2 is provided, errors are disabled as well." +| |-ParagraphComment 0x560468173150 +| | `-TextComment 0x560468173120 Text=" " +| |-ParamCommandComment 0x560468173170 [in] implicitly Param="level" ParamIndex=0 +| | `-ParagraphComment 0x560468173220 +| | |-TextComment 0x5604681731d0 Text=" Desired tracing level." +| | `-TextComment 0x5604681731f0 Text=" " +| `-BlockCommandComment 0x560468173240 Name="return" +| `-ParagraphComment 0x5604681732a0 +| `-TextComment 0x560468173270 Text=" Previous tracing level." +|-FunctionDecl 0x56046808e3c8 line:9615:6 ecs_log_enable_colors 'bool (bool)' +| |-ParmVarDecl 0x56046808e308 col:10 enabled 'bool' +| `-FullComment 0x5604681735a0 +| |-ParagraphComment 0x5604681733c0 +| | |-TextComment 0x560468173370 Text=" Enable/disable tracing with colors." +| | `-TextComment 0x560468173390 Text=" By default colors are enabled." +| |-ParagraphComment 0x560468173410 +| | `-TextComment 0x5604681733e0 Text=" " +| |-ParamCommandComment 0x560468173430 [in] implicitly Param="enabled" ParamIndex=0 +| | `-ParagraphComment 0x5604681734e0 +| | |-TextComment 0x560468173490 Text=" Whether to enable tracing with colors." +| | `-TextComment 0x5604681734b0 Text=" " +| `-BlockCommandComment 0x560468173500 Name="return" +| `-ParagraphComment 0x560468173560 +| `-TextComment 0x560468173530 Text=" Previous color setting." +|-FunctionDecl 0x56046808e538 line:9626:6 ecs_log_enable_timestamp 'bool (bool)' +| |-ParmVarDecl 0x56046808e4a8 col:10 enabled 'bool' +| `-FullComment 0x560468173870 +| |-ParagraphComment 0x560468173690 +| | |-TextComment 0x560468173610 Text=" Enable/disable logging timestamp." +| | |-TextComment 0x560468173630 Text=" By default timestamps are disabled. Note that enabling timestamps introduces" +| | `-TextComment 0x560468173650 Text=" overhead as the logging code will need to obtain the current time." +| |-ParagraphComment 0x5604681736e0 +| | `-TextComment 0x5604681736b0 Text=" " +| |-ParamCommandComment 0x560468173700 [in] implicitly Param="enabled" ParamIndex=0 +| | `-ParagraphComment 0x5604681737b0 +| | |-TextComment 0x560468173760 Text=" Whether to enable tracing with timestamps." +| | `-TextComment 0x560468173780 Text=" " +| `-BlockCommandComment 0x5604681737d0 Name="return" +| `-ParagraphComment 0x560468173830 +| `-TextComment 0x560468173800 Text=" Previous timestamp setting." +|-FunctionDecl 0x56046808e6a8 line:9643:6 ecs_log_enable_timedelta 'bool (bool)' +| |-ParmVarDecl 0x56046808e618 col:10 enabled 'bool' +| `-FullComment 0x560468173c40 +| |-ParagraphComment 0x560468173960 +| | |-TextComment 0x5604681738e0 Text=" Enable/disable logging time since last log." +| | |-TextComment 0x560468173900 Text=" By default deltatime is disabled. Note that enabling timestamps introduces" +| | `-TextComment 0x560468173920 Text=" overhead as the logging code will need to obtain the current time." +| |-ParagraphComment 0x560468173a00 +| | |-TextComment 0x560468173980 Text=" When enabled, this logs the amount of time in seconds passed since the last" +| | |-TextComment 0x5604681739a0 Text=" log, when this amount is non-zero. The format is a '+' character followed by" +| | `-TextComment 0x5604681739c0 Text=" the number of seconds:" +| |-ParagraphComment 0x560468173a50 +| | `-TextComment 0x560468173a20 Text=" +1 trace: log message" +| |-ParagraphComment 0x560468173aa0 +| | `-TextComment 0x560468173a70 Text=" " +| |-ParamCommandComment 0x560468173ac0 [in] implicitly Param="enabled" ParamIndex=0 +| | `-ParagraphComment 0x560468173b70 +| | |-TextComment 0x560468173b20 Text=" Whether to enable tracing with timestamps." +| | `-TextComment 0x560468173b40 Text=" " +| `-BlockCommandComment 0x560468173b90 Name="return" +| `-ParagraphComment 0x560468173bf0 +| `-TextComment 0x560468173bc0 Text=" Previous timestamp setting." +|-FunctionDecl 0x56046808e840 col:5 ecs_log_last_error 'int (void)' +| `-FullComment 0x560468173e10 +| |-ParagraphComment 0x560468173d00 +| | |-TextComment 0x560468173cb0 Text=" Get last logged error code." +| | `-TextComment 0x560468173cd0 Text=" Calling this operation resets the error code." +| |-ParagraphComment 0x560468173d50 +| | `-TextComment 0x560468173d20 Text=" " +| `-BlockCommandComment 0x560468173d70 Name="return" +| `-ParagraphComment 0x560468173dd0 +| `-TextComment 0x560468173da0 Text=" Last error, 0 if none was logged since last call to last_error." +|-TypedefDecl 0x56046808eb38 line:9770:14 referenced ecs_app_init_action_t 'int (*)(ecs_world_t *)' +| |-PointerType 0x56046808ead0 'int (*)(ecs_world_t *)' +| | `-ParenType 0x56046808ea70 'int (ecs_world_t *)' sugar +| | `-FunctionProtoType 0x560468036630 'int (ecs_world_t *)' cdecl +| | |-BuiltinType 0x560467ec18b0 'int' +| | `-PointerType 0x560468002270 'ecs_world_t *' +| | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | |-Typedef 0x560467fff598 'ecs_world_t' +| | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | `-Record 0x560467fff4a0 'ecs_world_t' +| `-FullComment 0x560468173ee0 +| `-ParagraphComment 0x560468173eb0 +| `-TextComment 0x560468173e80 Text=" Callback type for init action. " +|-RecordDecl 0x56046808ebb8 line:9774:16 struct ecs_app_desc_t definition +| |-FullComment 0x560468173fb0 +| | `-ParagraphComment 0x560468173f80 +| | `-TextComment 0x560468173f50 Text=" Used with ecs_app_run. " +| |-FieldDecl 0x56046808ec78 col:17 target_fps 'float' +| | `-FullComment 0x560468174080 +| | `-ParagraphComment 0x560468174050 +| | `-TextComment 0x560468174020 Text=" Target FPS. " +| |-FieldDecl 0x56046808ed10 col:17 delta_time 'float' +| | `-FullComment 0x560468174150 +| | `-ParagraphComment 0x560468174120 +| | `-TextComment 0x5604681740f0 Text=" Frame time increment (0 for measured values) " +| |-FieldDecl 0x56046808ed98 col:13 threads 'int32_t':'int' +| | `-FullComment 0x560468174220 +| | `-ParagraphComment 0x5604681741f0 +| | `-TextComment 0x5604681741c0 Text=" Number of threads. " +| |-FieldDecl 0x56046808ee28 col:13 frames 'int32_t':'int' +| | `-FullComment 0x5604681742f0 +| | `-ParagraphComment 0x5604681742c0 +| | `-TextComment 0x560468174290 Text=" Number of frames to run (0 for infinite) " +| |-FieldDecl 0x560468099150 col:10 enable_rest 'bool' +| | `-FullComment 0x5604681743d0 +| | `-ParagraphComment 0x560468174390 +| | `-TextComment 0x560468174360 Text=" Allows HTTP clients to access ECS data " +| |-FieldDecl 0x5604680991d8 col:10 enable_monitor 'bool' +| | `-FullComment 0x5604681744a0 +| | `-ParagraphComment 0x560468174470 +| | `-TextComment 0x560468174440 Text=" Periodically collect statistics " +| |-FieldDecl 0x560468099290 col:27 init 'ecs_app_init_action_t':'int (*)(ecs_world_t *)' +| | `-FullComment 0x560468174590 +| | `-ParagraphComment 0x560468174560 +| | |-TextComment 0x560468174510 Text=" If set, function is ran before starting the" +| | `-TextComment 0x560468174530 Text=" main loop. " +| `-FieldDecl 0x560468099320 col:11 ctx 'void *' +| `-FullComment 0x560468174660 +| `-ParagraphComment 0x560468174630 +| `-TextComment 0x560468174600 Text=" Reserved for custom run/frame actions " +|-TypedefDecl 0x5604680993f8 col:3 referenced ecs_app_desc_t 'struct ecs_app_desc_t':'struct ecs_app_desc_t' +| |-ElaboratedType 0x5604680993a0 'struct ecs_app_desc_t' sugar +| | `-RecordType 0x56046808ec40 'struct ecs_app_desc_t' +| | `-Record 0x56046808ebb8 'ecs_app_desc_t' +| `-FullComment 0x560468174730 +| `-ParagraphComment 0x560468174700 +| `-TextComment 0x5604681746d0 Text=" Used with ecs_app_run. " +|-TypedefDecl 0x560468099750 line:9789:14 referenced ecs_app_run_action_t 'int (*)(ecs_world_t *, ecs_app_desc_t *)' +| |-PointerType 0x5604680996e0 'int (*)(ecs_world_t *, ecs_app_desc_t *)' +| | `-ParenType 0x560468099680 'int (ecs_world_t *, ecs_app_desc_t *)' sugar +| | `-FunctionProtoType 0x560468099640 'int (ecs_world_t *, ecs_app_desc_t *)' cdecl +| | |-BuiltinType 0x560467ec18b0 'int' +| | |-PointerType 0x560468002270 'ecs_world_t *' +| | | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | | |-Typedef 0x560467fff598 'ecs_world_t' +| | | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | | `-Record 0x560467fff4a0 'ecs_world_t' +| | `-PointerType 0x560468099560 'ecs_app_desc_t *' +| | `-TypedefType 0x560468099510 'ecs_app_desc_t' sugar +| | |-Typedef 0x5604680993f8 'ecs_app_desc_t' +| | `-ElaboratedType 0x5604680993a0 'struct ecs_app_desc_t' sugar +| | `-RecordType 0x56046808ec40 'struct ecs_app_desc_t' +| | `-Record 0x56046808ebb8 'ecs_app_desc_t' +| `-FullComment 0x560468174800 +| `-ParagraphComment 0x5604681747d0 +| `-TextComment 0x5604681747a0 Text=" Callback type for run action. " +|-TypedefDecl 0x560468099a70 line:9794:14 referenced ecs_app_frame_action_t 'int (*)(ecs_world_t *, const ecs_app_desc_t *)' +| |-PointerType 0x560468099a00 'int (*)(ecs_world_t *, const ecs_app_desc_t *)' +| | `-ParenType 0x5604680999a0 'int (ecs_world_t *, const ecs_app_desc_t *)' sugar +| | `-FunctionProtoType 0x560468099960 'int (ecs_world_t *, const ecs_app_desc_t *)' cdecl +| | |-BuiltinType 0x560467ec18b0 'int' +| | |-PointerType 0x560468002270 'ecs_world_t *' +| | | `-TypedefType 0x5604680013d0 'ecs_world_t' sugar +| | | |-Typedef 0x560467fff598 'ecs_world_t' +| | | `-ElaboratedType 0x560467fff540 'struct ecs_world_t' sugar +| | | `-RecordType 0x560467fff520 'struct ecs_world_t' +| | | `-Record 0x560467fff4a0 'ecs_world_t' +| | `-PointerType 0x560468099880 'const ecs_app_desc_t *' +| | `-QualType 0x560468099511 'const ecs_app_desc_t' const +| | `-TypedefType 0x560468099510 'ecs_app_desc_t' sugar +| | |-Typedef 0x5604680993f8 'ecs_app_desc_t' +| | `-ElaboratedType 0x5604680993a0 'struct ecs_app_desc_t' sugar +| | `-RecordType 0x56046808ec40 'struct ecs_app_desc_t' +| | `-Record 0x56046808ebb8 'ecs_app_desc_t' +| `-FullComment 0x5604681748d0 +| `-ParagraphComment 0x5604681748a0 +| `-TextComment 0x560468174870 Text=" Callback type for frame action. " +|-FunctionDecl 0x560468099c20 line:9810:5 ecs_app_run 'int (ecs_world_t *, ecs_app_desc_t *)' +| |-ParmVarDecl 0x560468099b08 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468099b80 col:21 desc 'ecs_app_desc_t *' +| `-FullComment 0x560468174c80 +| |-ParagraphComment 0x5604681749c0 +| | |-TextComment 0x560468174940 Text=" Run application." +| | |-TextComment 0x560468174960 Text=" This will run the application with the parameters specified in desc. After" +| | `-TextComment 0x560468174980 Text=" the application quits (ecs_quit is called) the world will be cleaned up." +| |-ParagraphComment 0x560468174a60 +| | |-TextComment 0x5604681749e0 Text=" If a custom run action is set, it will be invoked by this operation. The" +| | |-TextComment 0x560468174a00 Text=" default run action calls the frame action in a loop until it returns a" +| | `-TextComment 0x560468174a20 Text=" non-zero value." +| |-ParagraphComment 0x560468174ab0 +| | `-TextComment 0x560468174a80 Text=" " +| |-ParamCommandComment 0x560468174ad0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468174b80 +| | |-TextComment 0x560468174b30 Text=" The world." +| | `-TextComment 0x560468174b50 Text=" " +| `-ParamCommandComment 0x560468174ba0 [in] implicitly Param="desc" ParamIndex=1 +| `-ParagraphComment 0x560468174c30 +| `-TextComment 0x560468174c00 Text=" Application parameters." +|-FunctionDecl 0x560468099e20 line:9823:5 ecs_app_run_frame 'int (ecs_world_t *, const ecs_app_desc_t *)' +| |-ParmVarDecl 0x560468099d08 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x560468099d80 col:27 desc 'const ecs_app_desc_t *' +| `-FullComment 0x560468175030 +| |-ParagraphComment 0x560468174d70 +| | |-TextComment 0x560468174cf0 Text=" Default frame callback." +| | |-TextComment 0x560468174d10 Text=" This operation will run a single frame. By default this operation will invoke" +| | `-TextComment 0x560468174d30 Text=" ecs_progress directly, unless a custom frame action is set." +| |-ParagraphComment 0x560468174dc0 +| | `-TextComment 0x560468174d90 Text=" " +| |-ParamCommandComment 0x560468174de0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468174e90 +| | |-TextComment 0x560468174e40 Text=" The world." +| | `-TextComment 0x560468174e60 Text=" " +| |-ParamCommandComment 0x560468174eb0 [in] implicitly Param="desc" ParamIndex=1 +| | `-ParagraphComment 0x560468174f60 +| | |-TextComment 0x560468174f10 Text=" The desc struct passed to ecs_app_run." +| | `-TextComment 0x560468174f30 Text=" " +| `-BlockCommandComment 0x560468174f80 Name="return" +| `-ParagraphComment 0x560468174fe0 +| `-TextComment 0x560468174fb0 Text=" value returned by ecs_progress" +|-FunctionDecl 0x56046809a030 line:9833:5 ecs_app_set_run_action 'int (ecs_app_run_action_t)' +| |-ParmVarDecl 0x560468099f30 col:26 callback 'ecs_app_run_action_t':'int (*)(ecs_world_t *, ecs_app_desc_t *)' +| `-FullComment 0x560468175230 +| |-ParagraphComment 0x5604681750f0 +| | |-TextComment 0x5604681750a0 Text=" Set custom run action." +| | `-TextComment 0x5604681750c0 Text=" See ecs_app_run." +| |-ParagraphComment 0x560468175140 +| | `-TextComment 0x560468175110 Text=" " +| `-ParamCommandComment 0x560468175160 [in] implicitly Param="callback" ParamIndex=0 +| `-ParagraphComment 0x5604681751f0 +| `-TextComment 0x5604681751c0 Text=" The run action." +|-FunctionDecl 0x56046809acf0 line:9842:5 ecs_app_set_frame_action 'int (ecs_app_frame_action_t)' +| |-ParmVarDecl 0x56046809abf0 col:28 callback 'ecs_app_frame_action_t':'int (*)(ecs_world_t *, const ecs_app_desc_t *)' +| `-FullComment 0x560468175430 +| |-ParagraphComment 0x5604681752f0 +| | |-TextComment 0x5604681752a0 Text=" Set custom frame action." +| | `-TextComment 0x5604681752c0 Text=" See ecs_app_run_frame." +| |-ParagraphComment 0x560468175340 +| | `-TextComment 0x560468175310 Text=" " +| `-ParamCommandComment 0x560468175360 [in] implicitly Param="callback" ParamIndex=0 +| `-ParagraphComment 0x5604681753f0 +| `-TextComment 0x5604681753c0 Text=" The frame action." +|-VarDecl 0x56046809ae68 :52:1> col:1 FLECS__EEcsRest 'const ecs_entity_t':'const unsigned long' extern +|-RecordDecl 0x56046809aed0 line:9912:9 struct definition +| |-FieldDecl 0x56046809af80 col:14 port 'uint16_t':'unsigned short' +| | `-FullComment 0x560468175500 +| | `-ParagraphComment 0x5604681754d0 +| | `-TextComment 0x5604681754a0 Text=" Port of server (optional, default = 27750) " +| |-FieldDecl 0x56046809b010 col:11 ipaddr 'char *' +| | `-FullComment 0x5604681755d0 +| | `-ParagraphComment 0x5604681755a0 +| | `-TextComment 0x560468175570 Text=" Interface address (optional, default = 0.0.0.0) " +| `-FieldDecl 0x56046809b0a0 col:11 impl 'void *' +|-TypedefDecl 0x56046809b148 col:3 EcsRest 'struct EcsRest':'EcsRest' +| `-ElaboratedType 0x56046809b0f0 'struct EcsRest' sugar +| `-RecordType 0x56046809af50 'EcsRest' +| `-Record 0x56046809aed0 '' +|-VarDecl 0x56046809b1c8 col:16 ecs_rest_request_count 'int64_t':'long' extern +|-VarDecl 0x56046809b240 col:16 ecs_rest_entity_count 'int64_t':'long' extern +|-VarDecl 0x56046809b2b8 col:16 ecs_rest_entity_error_count 'int64_t':'long' extern +|-VarDecl 0x56046809b330 col:16 ecs_rest_query_count 'int64_t':'long' extern +|-VarDecl 0x56046809b3a8 col:16 ecs_rest_query_error_count 'int64_t':'long' extern +|-VarDecl 0x56046809b420 col:16 ecs_rest_query_name_count 'int64_t':'long' extern +|-VarDecl 0x56046809b498 col:16 ecs_rest_query_name_error_count 'int64_t':'long' extern +|-VarDecl 0x56046809b510 col:16 ecs_rest_query_name_from_cache_count 'int64_t':'long' extern +|-VarDecl 0x56046809b588 col:16 ecs_rest_enable_count 'int64_t':'long' extern +|-VarDecl 0x56046809b600 col:16 ecs_rest_enable_error_count 'int64_t':'long' extern +|-VarDecl 0x56046809b678 col:16 ecs_rest_delete_count 'int64_t':'long' extern +|-VarDecl 0x56046809b6f0 col:16 ecs_rest_delete_error_count 'int64_t':'long' extern +|-VarDecl 0x56046809b768 col:16 ecs_rest_world_stats_count 'int64_t':'long' extern +|-VarDecl 0x56046809b7e0 col:16 ecs_rest_pipeline_stats_count 'int64_t':'long' extern +|-VarDecl 0x56046809b858 col:16 ecs_rest_stats_error_count 'int64_t':'long' extern +|-FunctionDecl 0x56046809b960 line:9937:6 FlecsRestImport 'void (ecs_world_t *)' +| `-ParmVarDecl 0x56046809b8d0 col:18 world 'ecs_world_t *' +|-RecordDecl 0x56046809bac8 line:9989:16 struct EcsTimer definition +| |-FullComment 0x5604681756a0 +| | `-ParagraphComment 0x560468175670 +| | `-TextComment 0x560468175640 Text=" Component used for one shot/interval timer functionality " +| |-FieldDecl 0x56046809bb88 col:17 timeout 'float' +| | `-FullComment 0x560468175770 +| | `-ParagraphComment 0x560468175740 +| | `-TextComment 0x560468175710 Text=" Timer timeout period " +| |-FieldDecl 0x56046809bec0 col:17 time 'float' +| | `-FullComment 0x560468175840 +| | `-ParagraphComment 0x560468175810 +| | `-TextComment 0x5604681757e0 Text=" Incrementing time value " +| |-FieldDecl 0x56046809bf48 col:13 fired_count 'int32_t':'int' +| | `-FullComment 0x560468175910 +| | `-ParagraphComment 0x5604681758e0 +| | `-TextComment 0x5604681758b0 Text=" Number of times ticked " +| |-FieldDecl 0x56046809bfd8 col:10 active 'bool' +| | `-FullComment 0x5604681759e0 +| | `-ParagraphComment 0x5604681759b0 +| | `-TextComment 0x560468175980 Text=" Is the timer active or not " +| `-FieldDecl 0x56046809c068 col:10 single_shot 'bool' +| `-FullComment 0x560468175ab0 +| `-ParagraphComment 0x560468175a80 +| `-TextComment 0x560468175a50 Text=" Is this a single shot timer " +|-TypedefDecl 0x56046809c148 col:3 EcsTimer 'struct EcsTimer':'struct EcsTimer' +| |-ElaboratedType 0x56046809c0f0 'struct EcsTimer' sugar +| | `-RecordType 0x56046809bb50 'struct EcsTimer' +| | `-Record 0x56046809bac8 'EcsTimer' +| `-FullComment 0x560468175b80 +| `-ParagraphComment 0x560468175b50 +| `-TextComment 0x560468175b20 Text=" Component used for one shot/interval timer functionality " +|-RecordDecl 0x56046809c1e0 line:9998:16 struct EcsRateFilter definition +| |-FullComment 0x560468175c50 +| | `-ParagraphComment 0x560468175c20 +| | `-TextComment 0x560468175bf0 Text=" Apply a rate filter to a tick source " +| |-FieldDecl 0x56046809c290 col:18 src 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x560468175d20 +| | `-ParagraphComment 0x560468175cf0 +| | `-TextComment 0x560468175cc0 Text=" Source of the rate filter " +| |-FieldDecl 0x56046809c318 col:13 rate 'int32_t':'int' +| | `-FullComment 0x560468175df0 +| | `-ParagraphComment 0x560468175dc0 +| | `-TextComment 0x560468175d90 Text=" Rate of the rate filter " +| |-FieldDecl 0x56046809c3a8 col:13 tick_count 'int32_t':'int' +| | `-FullComment 0x560468175ec0 +| | `-ParagraphComment 0x560468175e90 +| | `-TextComment 0x560468175e60 Text=" Number of times the rate filter ticked " +| `-FieldDecl 0x56046809c440 col:17 time_elapsed 'float' +| `-FullComment 0x560468175f90 +| `-ParagraphComment 0x560468175f60 +| `-TextComment 0x560468175f30 Text=" Time elapsed since last tick " +|-TypedefDecl 0x56046809c518 col:3 EcsRateFilter 'struct EcsRateFilter':'struct EcsRateFilter' +| |-ElaboratedType 0x56046809c4c0 'struct EcsRateFilter' sugar +| | `-RecordType 0x56046809c260 'struct EcsRateFilter' +| | `-Record 0x56046809c1e0 'EcsRateFilter' +| `-FullComment 0x560468176060 +| `-ParagraphComment 0x560468176030 +| `-TextComment 0x560468176000 Text=" Apply a rate filter to a tick source " +|-FunctionDecl 0x56046809c7d8 line:10025:14 ecs_set_timeout 'ecs_entity_t (ecs_world_t *, ecs_entity_t, float)' +| |-ParmVarDecl 0x56046809c5c0 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809c638 col:18 tick_source 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046809c6b8 col:17 timeout 'float' +| `-FullComment 0x560468176660 +| |-ParagraphComment 0x5604681761a0 +| | |-TextComment 0x5604681760d0 Text=" Set timer timeout." +| | |-TextComment 0x5604681760f0 Text=" This operation executes any systems associated with the timer after the" +| | |-TextComment 0x560468176110 Text=" specified timeout value. If the entity contains an existing timer, the " +| | |-TextComment 0x560468176130 Text=" timeout value will be reset. The timer can be started and stopped with " +| | `-TextComment 0x560468176150 Text=" ecs_start_timer and ecs_stop_timer." +| |-ParagraphComment 0x5604681761f0 +| | `-TextComment 0x5604681761c0 Text=" The timer is synchronous, and is incremented each frame by delta_time." +| |-ParagraphComment 0x5604681762b0 +| | |-TextComment 0x560468176210 Text=" The tick_source entity will be be a tick source after this operation. Tick" +| | |-TextComment 0x560468176230 Text=" sources can be read by getting the EcsTickSource component. If the tick" +| | |-TextComment 0x560468176250 Text=" source ticked this frame, the 'tick' member will be true. When the tick " +| | `-TextComment 0x560468176270 Text=" source is a system, the system will tick when the timer ticks." +| |-ParagraphComment 0x560468176300 +| | `-TextComment 0x5604681762d0 Text=" " +| |-ParamCommandComment 0x560468176320 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681763e0 +| | |-TextComment 0x560468176380 Text=" The world." +| | `-TextComment 0x5604681763a0 Text=" " +| |-ParamCommandComment 0x560468176400 [in] implicitly Param="tick_source" ParamIndex=1 +| | `-ParagraphComment 0x5604681764b0 +| | |-TextComment 0x560468176460 Text=" The timer for which to set the timeout (0 to create one)." +| | `-TextComment 0x560468176480 Text=" " +| |-ParamCommandComment 0x5604681764d0 [in] implicitly Param="timeout" ParamIndex=2 +| | `-ParagraphComment 0x560468176580 +| | |-TextComment 0x560468176530 Text=" The timeout value." +| | `-TextComment 0x560468176550 Text=" " +| `-BlockCommandComment 0x5604681765a0 Name="return" +| `-ParagraphComment 0x560468176600 +| `-TextComment 0x5604681765d0 Text=" The timer entity." +|-FunctionDecl 0x56046809ca60 line:10050:13 ecs_get_timeout 'float (const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046809c8c8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046809c940 col:18 tick_source 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468176bd0 +| |-ParagraphComment 0x560468176750 +| | |-TextComment 0x5604681766d0 Text=" Get current timeout value for the specified timer." +| | |-TextComment 0x5604681766f0 Text=" This operation returns the value set by ecs_set_timeout. If no timer is" +| | `-TextComment 0x560468176710 Text=" active for this entity, the operation returns 0." +| |-ParagraphComment 0x5604681767f0 +| | |-TextComment 0x560468176770 Text=" After the timeout expires the EcsTimer component is removed from the entity." +| | |-TextComment 0x560468176790 Text=" This means that if ecs_get_timeout is invoked after the timer is expired, the" +| | `-TextComment 0x5604681767b0 Text=" operation will return 0." +| |-ParagraphComment 0x560468176840 +| | `-TextComment 0x560468176810 Text=" The timer is synchronous, and is incremented each frame by delta_time." +| |-ParagraphComment 0x560468176900 +| | |-TextComment 0x560468176860 Text=" The tick_source entity will be be a tick source after this operation. Tick" +| | |-TextComment 0x560468176880 Text=" sources can be read by getting the EcsTickSource component. If the tick" +| | |-TextComment 0x5604681768a0 Text=" source ticked this frame, the 'tick' member will be true. When the tick " +| | `-TextComment 0x5604681768c0 Text=" source is a system, the system will tick when the timer ticks." +| |-ParagraphComment 0x560468176950 +| | `-TextComment 0x560468176920 Text=" " +| |-ParamCommandComment 0x560468176970 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468176a20 +| | |-TextComment 0x5604681769d0 Text=" The world." +| | `-TextComment 0x5604681769f0 Text=" " +| |-ParamCommandComment 0x560468176a40 [in] implicitly Param="tick_source" ParamIndex=1 +| | `-ParagraphComment 0x560468176af0 +| | |-TextComment 0x560468176aa0 Text=" The timer." +| | `-TextComment 0x560468176ac0 Text=" " +| `-BlockCommandComment 0x560468176b10 Name="return" +| `-ParagraphComment 0x560468176b70 +| `-TextComment 0x560468176b40 Text=" The current timeout value, or 0 if no timer is active." +|-FunctionDecl 0x56046809cce0 line:10072:14 ecs_set_interval 'ecs_entity_t (ecs_world_t *, ecs_entity_t, float)' +| |-ParmVarDecl 0x56046809cb48 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809cbc0 col:18 tick_source 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046809cc40 col:17 interval 'float' +| `-FullComment 0x560468177190 +| |-ParagraphComment 0x560468176ce0 +| | |-TextComment 0x560468176c40 Text=" Set timer interval." +| | |-TextComment 0x560468176c60 Text=" This operation will continously invoke systems associated with the timer " +| | |-TextComment 0x560468176c80 Text=" after the interval period expires. If the entity contains an existing timer," +| | `-TextComment 0x560468176ca0 Text=" the interval value will be reset." +| |-ParagraphComment 0x560468176d30 +| | `-TextComment 0x560468176d00 Text=" The timer is synchronous, and is incremented each frame by delta_time." +| |-ParagraphComment 0x560468176df0 +| | |-TextComment 0x560468176d50 Text=" The tick_source entity will be be a tick source after this operation. Tick" +| | |-TextComment 0x560468176d70 Text=" sources can be read by getting the EcsTickSource component. If the tick" +| | |-TextComment 0x560468176d90 Text=" source ticked this frame, the 'tick' member will be true. When the tick " +| | `-TextComment 0x560468176db0 Text=" source is a system, the system will tick when the timer ticks. " +| |-ParagraphComment 0x560468176e40 +| | `-TextComment 0x560468176e10 Text=" " +| |-ParamCommandComment 0x560468176e60 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468176f10 +| | |-TextComment 0x560468176ec0 Text=" The world." +| | `-TextComment 0x560468176ee0 Text=" " +| |-ParamCommandComment 0x560468176f30 [in] implicitly Param="tick_source" ParamIndex=1 +| | `-ParagraphComment 0x560468176fe0 +| | |-TextComment 0x560468176f90 Text=" The timer for which to set the interval (0 to create one)." +| | `-TextComment 0x560468176fb0 Text=" " +| |-ParamCommandComment 0x560468177000 [in] implicitly Param="interval" ParamIndex=2 +| | `-ParagraphComment 0x5604681770b0 +| | |-TextComment 0x560468177060 Text=" The interval value." +| | `-TextComment 0x560468177080 Text=" " +| `-BlockCommandComment 0x5604681770d0 Name="return" +| `-ParagraphComment 0x560468177130 +| `-TextComment 0x560468177100 Text=" The timer entity." +|-FunctionDecl 0x56046809d2b0 line:10086:13 ecs_get_interval 'float (const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046809cdd8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x56046809d210 col:18 tick_source 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468177540 +| |-ParagraphComment 0x560468177280 +| | |-TextComment 0x560468177200 Text=" Get current interval value for the specified timer." +| | |-TextComment 0x560468177220 Text=" This operation returns the value set by ecs_set_interval. If the entity is" +| | `-TextComment 0x560468177240 Text=" not a timer, the operation will return 0." +| |-ParagraphComment 0x5604681772d0 +| | `-TextComment 0x5604681772a0 Text=" " +| |-ParamCommandComment 0x5604681772f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681773a0 +| | |-TextComment 0x560468177350 Text=" The world." +| | `-TextComment 0x560468177370 Text=" " +| |-ParamCommandComment 0x5604681773c0 [in] implicitly Param="tick_source" ParamIndex=1 +| | `-ParagraphComment 0x560468177470 +| | |-TextComment 0x560468177420 Text=" The timer for which to set the interval." +| | `-TextComment 0x560468177440 Text=" " +| `-BlockCommandComment 0x560468177490 Name="return" +| `-ParagraphComment 0x5604681774f0 +| `-TextComment 0x5604681774c0 Text=" The current interval value, or 0 if no timer is active." +|-FunctionDecl 0x56046809d4a8 line:10100:6 ecs_start_timer 'void (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046809d398 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809d410 col:18 tick_source 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468177890 +| |-ParagraphComment 0x560468177680 +| | |-TextComment 0x5604681775b0 Text=" Start timer." +| | |-TextComment 0x5604681775d0 Text=" This operation resets the timer and starts it with the specified timeout. The" +| | |-TextComment 0x5604681775f0 Text=" entity must have the EcsTimer component (added by ecs_set_timeout and " +| | |-TextComment 0x560468177610 Text=" ecs_set_interval). If the entity does not have the EcsTimer component this" +| | `-TextComment 0x560468177630 Text=" operation will assert." +| |-ParagraphComment 0x5604681776d0 +| | `-TextComment 0x5604681776a0 Text=" " +| |-ParamCommandComment 0x5604681776f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681777a0 +| | |-TextComment 0x560468177750 Text=" The world." +| | `-TextComment 0x560468177770 Text=" " +| `-ParamCommandComment 0x5604681777c0 [in] implicitly Param="tick_source" ParamIndex=1 +| `-ParagraphComment 0x560468177850 +| `-TextComment 0x560468177820 Text=" The timer to start." +|-FunctionDecl 0x56046809d6a8 line:10112:6 ecs_stop_timer 'void (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046809d598 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809d610 col:18 tick_source 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468177b90 +| |-ParagraphComment 0x560468177980 +| | |-TextComment 0x560468177900 Text=" Stop timer" +| | |-TextComment 0x560468177920 Text=" This operation stops a timer from triggering. The entity must have the " +| | `-TextComment 0x560468177940 Text=" EcsTimer component or this operation will assert." +| |-ParagraphComment 0x5604681779d0 +| | `-TextComment 0x5604681779a0 Text=" " +| |-ParamCommandComment 0x5604681779f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468177aa0 +| | |-TextComment 0x560468177a50 Text=" The world." +| | `-TextComment 0x560468177a70 Text=" " +| `-ParamCommandComment 0x560468177ac0 [in] implicitly Param="tick_source" ParamIndex=1 +| `-ParagraphComment 0x560468177b50 +| `-TextComment 0x560468177b20 Text=" The timer to stop." +|-FunctionDecl 0x56046809da48 line:10147:14 ecs_set_rate 'ecs_entity_t (ecs_world_t *, ecs_entity_t, int32_t, ecs_entity_t)' +| |-ParmVarDecl 0x56046809d798 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809d810 col:18 tick_source 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046809d888 col:13 rate 'int32_t':'int' +| |-ParmVarDecl 0x56046809d900 col:18 source 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468178450 +| |-ParagraphComment 0x560468177ca0 +| | |-TextComment 0x560468177c00 Text=" Set rate filter." +| | |-TextComment 0x560468177c20 Text=" This operation initializes a rate filter. Rate filters sample tick sources" +| | |-TextComment 0x560468177c40 Text=" and tick at a configurable multiple. A rate filter is a tick source itself," +| | `-TextComment 0x560468177c60 Text=" which means that rate filters can be chained." +| |-ParagraphComment 0x560468177d90 +| | |-TextComment 0x560468177cc0 Text=" Rate filters enable deterministic system execution which cannot be achieved" +| | |-TextComment 0x560468177ce0 Text=" with interval timers alone. For example, if timer A has interval 2.0 and" +| | |-TextComment 0x560468177d00 Text=" timer B has interval 4.0, it is not guaranteed that B will tick at exactly" +| | |-TextComment 0x560468177d20 Text=" twice the multiple of A. This is partly due to the indeterministic nature of" +| | `-TextComment 0x560468177d40 Text=" timers, and partly due to floating point rounding errors. " +| |-ParagraphComment 0x560468177e50 +| | |-TextComment 0x560468177db0 Text=" Rate filters can be combined with timers (or other rate filters) to ensure " +| | |-TextComment 0x560468177dd0 Text=" that a system ticks at an exact multiple of a tick source (which can be" +| | |-TextComment 0x560468177df0 Text=" another system). If a rate filter is created with a rate of 1 it will tick" +| | `-TextComment 0x560468177e10 Text=" at the exact same time as its source." +| |-ParagraphComment 0x560468177ec0 +| | |-TextComment 0x560468177e70 Text=" If no tick source is provided, the rate filter will use the frame tick as" +| | `-TextComment 0x560468177e90 Text=" source, which corresponds with the number of times ecs_progress is called." +| |-ParagraphComment 0x560468177f80 +| | |-TextComment 0x560468177ee0 Text=" The tick_source entity will be be a tick source after this operation. Tick" +| | |-TextComment 0x560468177f00 Text=" sources can be read by getting the EcsTickSource component. If the tick" +| | |-TextComment 0x560468177f20 Text=" source ticked this frame, the 'tick' member will be true. When the tick " +| | `-TextComment 0x560468177f40 Text=" source is a system, the system will tick when the timer ticks. " +| |-ParagraphComment 0x560468177fd0 +| | `-TextComment 0x560468177fa0 Text=" " +| |-ParamCommandComment 0x560468177ff0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681780a0 +| | |-TextComment 0x560468178050 Text=" The world." +| | `-TextComment 0x560468178070 Text=" " +| |-ParamCommandComment 0x5604681780c0 [in] implicitly Param="tick_source" ParamIndex=1 +| | `-ParagraphComment 0x560468178170 +| | |-TextComment 0x560468178120 Text=" The rate filter entity (0 to create one)." +| | `-TextComment 0x560468178140 Text=" " +| |-ParamCommandComment 0x560468178190 [in] implicitly Param="rate" ParamIndex=2 +| | `-ParagraphComment 0x560468178240 +| | |-TextComment 0x5604681781f0 Text=" The rate to apply." +| | `-TextComment 0x560468178210 Text=" " +| |-ParamCommandComment 0x560468178260 [in] implicitly Param="source" ParamIndex=3 +| | `-ParagraphComment 0x560468178310 +| | |-TextComment 0x5604681782c0 Text=" The tick source (0 to use frames)" +| | `-TextComment 0x5604681782e0 Text=" " +| `-BlockCommandComment 0x560468178330 Name="return" +| `-ParagraphComment 0x560468178390 +| `-TextComment 0x560468178360 Text=" The filter entity." +|-FunctionDecl 0x56046809dcd8 line:10176:6 ecs_set_tick_source 'void (ecs_world_t *, ecs_entity_t, ecs_entity_t)' +| |-ParmVarDecl 0x56046809db48 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809dbc0 col:18 system 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046809dc38 col:18 tick_source 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468178a50 +| |-ParagraphComment 0x560468178560 +| | |-TextComment 0x5604681784c0 Text=" Assign tick source to system." +| | |-TextComment 0x5604681784e0 Text=" Systems can be their own tick source, which can be any of the tick sources" +| | |-TextComment 0x560468178500 Text=" (one shot timers, interval times and rate filters). However, in some cases it" +| | `-TextComment 0x560468178520 Text=" is must be guaranteed that different systems tick on the exact same frame." +| |-ParagraphComment 0x560468178620 +| | |-TextComment 0x560468178580 Text=" This cannot be guaranteed by giving two systems the same interval/rate filter" +| | |-TextComment 0x5604681785a0 Text=" as it is possible that one system is (for example) disabled, which would" +| | |-TextComment 0x5604681785c0 Text=" cause the systems to go out of sync. To provide these guarantees, systems" +| | `-TextComment 0x5604681785e0 Text=" must use the same tick source, which is what this operation enables." +| |-ParagraphComment 0x5604681786e0 +| | |-TextComment 0x560468178640 Text=" When two systems share the same tick source, it is guaranteed that they tick" +| | |-TextComment 0x560468178660 Text=" in the same frame. The provided tick source can be any entity that is a tick" +| | |-TextComment 0x560468178680 Text=" source, including another system. If the provided entity is not a tick source" +| | `-TextComment 0x5604681786a0 Text=" the system will not be ran." +| |-ParagraphComment 0x560468178750 +| | |-TextComment 0x560468178700 Text=" To disassociate a tick source from a system, use 0 for the tick_source " +| | `-TextComment 0x560468178720 Text=" parameter." +| |-ParagraphComment 0x5604681787a0 +| | `-TextComment 0x560468178770 Text=" " +| |-ParamCommandComment 0x5604681787c0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468178870 +| | |-TextComment 0x560468178820 Text=" The world." +| | `-TextComment 0x560468178840 Text=" " +| |-ParamCommandComment 0x560468178890 [in] implicitly Param="system" ParamIndex=1 +| | `-ParagraphComment 0x560468178940 +| | |-TextComment 0x5604681788f0 Text=" The system to associate with the timer." +| | `-TextComment 0x560468178910 Text=" " +| `-ParamCommandComment 0x560468178960 [in] implicitly Param="tick_source" ParamIndex=2 +| `-ParagraphComment 0x5604681789f0 +| `-TextComment 0x5604681789c0 Text=" The tick source to associate with the system." +|-FunctionDecl 0x56046809de58 line:10187:6 FlecsTimerImport 'void (ecs_world_t *)' +| |-ParmVarDecl 0x56046809ddc8 col:18 world 'ecs_world_t *' +| `-FullComment 0x560468178b70 +| `-ParagraphComment 0x560468178b40 +| |-TextComment 0x560468178ac0 Text="/////////////////////////////////////////////////////////////////////////////" +| |-TextComment 0x560468178ae0 Text="/ Module" +| `-TextComment 0x560468178b00 Text="/////////////////////////////////////////////////////////////////////////////" +|-RecordDecl 0x56046809df88 line:10275:16 struct ecs_pipeline_desc_t definition +| |-FieldDecl 0x56046809e040 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x56046809e0a0 col:22 query 'ecs_query_desc_t':'struct ecs_query_desc_t' +|-TypedefDecl 0x56046809e148 col:3 referenced ecs_pipeline_desc_t 'struct ecs_pipeline_desc_t':'struct ecs_pipeline_desc_t' +| `-ElaboratedType 0x56046809e0f0 'struct ecs_pipeline_desc_t' sugar +| `-RecordType 0x56046809e010 'struct ecs_pipeline_desc_t' +| `-Record 0x56046809df88 'ecs_pipeline_desc_t' +|-FunctionDecl 0x56046809e3f8 line:10287:14 ecs_pipeline_init 'ecs_entity_t (ecs_world_t *, const ecs_pipeline_desc_t *)' +| |-ParmVarDecl 0x56046809e1f0 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809e2e8 col:32 desc 'const ecs_pipeline_desc_t *' +| `-FullComment 0x560468178c40 +| `-ParagraphComment 0x560468178c10 +| `-TextComment 0x560468178be0 Text=" Create a custom pipeline." +|-FunctionDecl 0x56046809e5f8 line:10298:6 ecs_set_pipeline 'void (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x56046809e4e8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809e560 col:18 pipeline 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468178f10 +| |-ParagraphComment 0x560468178d00 +| | |-TextComment 0x560468178cb0 Text=" Set a custom pipeline." +| | `-TextComment 0x560468178cd0 Text=" This operation sets the pipeline to run when ecs_progress is invoked." +| |-ParagraphComment 0x560468178d50 +| | `-TextComment 0x560468178d20 Text=" " +| |-ParamCommandComment 0x560468178d70 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468178e20 +| | |-TextComment 0x560468178dd0 Text=" The world." +| | `-TextComment 0x560468178df0 Text=" " +| `-ParamCommandComment 0x560468178e40 [in] implicitly Param="pipeline" ParamIndex=1 +| `-ParagraphComment 0x560468178ed0 +| `-TextComment 0x560468178ea0 Text=" The pipeline to set." +|-FunctionDecl 0x56046809e778 line:10309:14 ecs_get_pipeline 'ecs_entity_t (const ecs_world_t *)' +| |-ParmVarDecl 0x56046809e6e8 col:24 world 'const ecs_world_t *' +| `-FullComment 0x5604681791b0 +| |-ParagraphComment 0x560468178fd0 +| | |-TextComment 0x560468178f80 Text=" Get the current pipeline." +| | `-TextComment 0x560468178fa0 Text=" This operation gets the current pipeline." +| |-ParagraphComment 0x560468179020 +| | `-TextComment 0x560468178ff0 Text=" " +| |-ParamCommandComment 0x560468179040 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681790f0 +| | |-TextComment 0x5604681790a0 Text=" The world." +| | `-TextComment 0x5604681790c0 Text=" " +| `-BlockCommandComment 0x560468179110 Name="return" +| `-ParagraphComment 0x560468179170 +| `-TextComment 0x560468179140 Text=" The current pipeline." +|-FunctionDecl 0x56046809e9e8 line:10331:6 ecs_progress 'bool (ecs_world_t *, float)' +| |-ParmVarDecl 0x56046809e858 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809e8d8 col:17 delta_time 'float' +| `-FullComment 0x5604681796f0 +| |-ParagraphComment 0x5604681792a0 +| | |-TextComment 0x560468179220 Text=" Progress a world." +| | |-TextComment 0x560468179240 Text=" This operation progresses the world by running all systems that are both" +| | `-TextComment 0x560468179260 Text=" enabled and periodic on their matching entities." +| |-ParagraphComment 0x560468179360 +| | |-TextComment 0x5604681792c0 Text=" An application can pass a delta_time into the function, which is the time" +| | |-TextComment 0x5604681792e0 Text=" passed since the last frame. This value is passed to systems so they can" +| | |-TextComment 0x560468179300 Text=" update entity values proportional to the elapsed time since their last" +| | `-TextComment 0x560468179320 Text=" invocation." +| |-ParagraphComment 0x560468179420 +| | |-TextComment 0x560468179380 Text=" When an application passes 0 to delta_time, ecs_progress will automatically" +| | |-TextComment 0x5604681793a0 Text=" measure the time passed since the last frame. If an application does not uses" +| | |-TextComment 0x5604681793c0 Text=" time management, it should pass a non-zero value for delta_time (1.0 is" +| | `-TextComment 0x5604681793e0 Text=" recommended). That way, no time will be wasted measuring the time." +| |-ParagraphComment 0x560468179470 +| | `-TextComment 0x560468179440 Text=" " +| |-ParamCommandComment 0x560468179490 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468179540 +| | |-TextComment 0x5604681794f0 Text=" The world to progress." +| | `-TextComment 0x560468179510 Text=" " +| |-ParamCommandComment 0x560468179560 [in] implicitly Param="delta_time" ParamIndex=1 +| | `-ParagraphComment 0x560468179610 +| | |-TextComment 0x5604681795c0 Text=" The time passed since the last frame." +| | `-TextComment 0x5604681795e0 Text=" " +| `-BlockCommandComment 0x560468179630 Name="return" +| `-ParagraphComment 0x560468179690 +| `-TextComment 0x560468179660 Text=" false if ecs_quit has been called, true otherwise." +|-FunctionDecl 0x56046809ebf0 line:10342:6 ecs_set_time_scale 'void (ecs_world_t *, float)' +| |-ParmVarDecl 0x56046809ead8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809eb58 col:17 scale 'float' +| `-FullComment 0x5604681799c0 +| |-ParagraphComment 0x5604681797b0 +| | |-TextComment 0x560468179760 Text=" Set time scale." +| | `-TextComment 0x560468179780 Text=" Increase or decrease simulation speed by the provided multiplier." +| |-ParagraphComment 0x560468179800 +| | `-TextComment 0x5604681797d0 Text=" " +| |-ParamCommandComment 0x560468179820 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681798d0 +| | |-TextComment 0x560468179880 Text=" The world." +| | `-TextComment 0x5604681798a0 Text=" " +| `-ParamCommandComment 0x5604681798f0 [in] implicitly Param="scale" ParamIndex=1 +| `-ParagraphComment 0x560468179980 +| `-TextComment 0x560468179950 Text=" The scale to apply (default = 1)." +|-FunctionDecl 0x56046809ed68 line:10352:6 ecs_reset_clock 'void (ecs_world_t *)' +| |-ParmVarDecl 0x56046809ecd8 col:18 world 'ecs_world_t *' +| `-FullComment 0x560468179bc0 +| |-ParagraphComment 0x560468179a80 +| | |-TextComment 0x560468179a30 Text=" Reset world clock." +| | `-TextComment 0x560468179a50 Text=" Reset the clock that keeps track of the total time passed in the simulation." +| |-ParagraphComment 0x560468179ad0 +| | `-TextComment 0x560468179aa0 Text=" " +| `-ParamCommandComment 0x560468179af0 [in] implicitly Param="world" ParamIndex=0 +| `-ParagraphComment 0x560468179b80 +| `-TextComment 0x560468179b50 Text=" The world." +|-FunctionDecl 0x56046809f068 line:10374:6 ecs_run_pipeline 'void (ecs_world_t *, ecs_entity_t, float)' +| |-ParmVarDecl 0x56046809ee48 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x56046809eec0 col:18 pipeline 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x56046809ef40 col:17 delta_time 'float' +| `-FullComment 0x56046817a080 +| |-ParagraphComment 0x560468179cd0 +| | |-TextComment 0x560468179c30 Text=" Run pipeline." +| | |-TextComment 0x560468179c50 Text=" This will run all systems in the provided pipeline. This operation may be" +| | |-TextComment 0x560468179c70 Text=" invoked from multiple threads, and only when staging is disabled, as the" +| | `-TextComment 0x560468179c90 Text=" pipeline manages staging and, if necessary, synchronization between threads." +| |-ParagraphComment 0x560468179d40 +| | |-TextComment 0x560468179cf0 Text=" If 0 is provided for the pipeline id, the default pipeline will be ran (this" +| | `-TextComment 0x560468179d10 Text=" is either the builtin pipeline or the pipeline set with set_pipeline()). " +| |-ParagraphComment 0x560468179de0 +| | |-TextComment 0x560468179d60 Text=" When using progress() this operation will be invoked automatically for the" +| | |-TextComment 0x560468179d80 Text=" default pipeline (either the builtin pipeline or the pipeline set with " +| | `-TextComment 0x560468179da0 Text=" set_pipeline()). An application may run additional pipelines." +| |-ParagraphComment 0x560468179e50 +| | |-TextComment 0x560468179e00 Text=" Note: calling this function from an application currently only works in" +| | `-TextComment 0x560468179e20 Text=" single threaded applications with a single stage." +| |-ParagraphComment 0x560468179ea0 +| | `-TextComment 0x560468179e70 Text=" " +| |-ParamCommandComment 0x560468179ec0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468179f70 +| | |-TextComment 0x560468179f20 Text=" The world." +| | `-TextComment 0x560468179f40 Text=" " +| `-ParamCommandComment 0x560468179f90 [in] implicitly Param="pipeline" ParamIndex=1 +| `-ParagraphComment 0x56046817a020 +| `-TextComment 0x560468179ff0 Text=" The pipeline to run." +|-FunctionDecl 0x5604680a1968 line:10390:6 ecs_set_threads 'void (ecs_world_t *, int32_t)' +| |-ParmVarDecl 0x56046809f188 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680a18d0 col:13 threads 'int32_t':'int' +| `-FullComment 0x56046817a1f0 +| `-ParagraphComment 0x56046817a1c0 +| |-TextComment 0x56046817a0f0 Text=" Set number of worker threads." +| |-TextComment 0x56046817a110 Text=" Setting this value to a value higher than 1 will start as many threads and" +| |-TextComment 0x56046817a130 Text=" will cause systems to evenly distribute matched entities across threads. The" +| |-TextComment 0x56046817a150 Text=" operation may be called multiple times to reconfigure the number of threads" +| `-TextComment 0x56046817a170 Text=" used, but never while running a system / pipeline. " +|-FunctionDecl 0x5604680a1ae8 line:10399:6 FlecsPipelineImport 'void (ecs_world_t *)' +| |-ParmVarDecl 0x5604680a1a58 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046817a310 +| `-ParagraphComment 0x56046817a2e0 +| |-TextComment 0x56046817a260 Text="/////////////////////////////////////////////////////////////////////////////" +| |-TextComment 0x56046817a280 Text="/ Module" +| `-TextComment 0x56046817a2a0 Text="/////////////////////////////////////////////////////////////////////////////" +|-RecordDecl 0x5604680a1c48 line:10448:16 struct EcsTickSource definition +| |-FullComment 0x56046817a400 +| | `-ParagraphComment 0x56046817a3b0 +| | `-TextComment 0x56046817a380 Text=" Component used to provide a tick source to systems " +| |-FieldDecl 0x5604680a1d00 col:10 tick 'bool' +| | `-FullComment 0x56046817a4d0 +| | `-ParagraphComment 0x56046817a4a0 +| | `-TextComment 0x56046817a470 Text=" True if providing tick " +| `-FieldDecl 0x5604680a1d90 col:17 time_elapsed 'float' +| `-FullComment 0x56046817a5a0 +| `-ParagraphComment 0x56046817a570 +| `-TextComment 0x56046817a540 Text=" Time elapsed since last tick " +|-TypedefDecl 0x5604680a1e68 col:3 EcsTickSource 'struct EcsTickSource':'struct EcsTickSource' +| |-ElaboratedType 0x5604680a1e10 'struct EcsTickSource' sugar +| | `-RecordType 0x5604680a1cd0 'struct EcsTickSource' +| | `-Record 0x5604680a1c48 'EcsTickSource' +| `-FullComment 0x56046817a670 +| `-ParagraphComment 0x56046817a640 +| `-TextComment 0x56046817a610 Text=" Component used to provide a tick source to systems " +|-RecordDecl 0x5604680a1f00 line:10454:16 struct ecs_system_desc_t definition +| |-FullComment 0x56046817a740 +| | `-ParagraphComment 0x56046817a710 +| | `-TextComment 0x56046817a6e0 Text=" Use with ecs_system_init " +| |-FieldDecl 0x5604680a1fb0 col:13 _canary 'int32_t':'int' +| |-FieldDecl 0x5604680a2038 col:18 entity 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x56046817a810 +| | `-ParagraphComment 0x56046817a7e0 +| | `-TextComment 0x56046817a7b0 Text=" Existing entity to associate with system (optional) " +| |-FieldDecl 0x5604680a20c8 col:22 query 'ecs_query_desc_t':'struct ecs_query_desc_t' +| | `-FullComment 0x56046817a8e0 +| | `-ParagraphComment 0x56046817a8b0 +| | `-TextComment 0x56046817a880 Text=" System query parameters " +| |-FieldDecl 0x5604680a2158 col:22 run 'ecs_run_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x56046817ab70 +| | |-ParagraphComment 0x56046817a9d0 +| | | |-TextComment 0x56046817a950 Text=" Callback that is invoked when a system is ran. " +| | | |-TextComment 0x56046817a970 Text=" When left to NULL, the default system runner is used, which calls the " +| | | `-TextComment 0x56046817a990 Text=" "callback" action for each result returned from the system's query. " +| | |-ParagraphComment 0x56046817aac0 +| | | |-TextComment 0x56046817a9f0 Text=" It should not be assumed that the input iterator can always be iterated" +| | | |-TextComment 0x56046817aa10 Text=" with ecs_query_next. When a system is multithreaded and/or paged, the" +| | | |-TextComment 0x56046817aa30 Text=" iterator can be either a worker or paged iterator. Future use cases may" +| | | |-TextComment 0x56046817aa50 Text=" introduce additional inputs for a system, such as rules and filters. The" +| | | `-TextComment 0x56046817aa70 Text=" correct function to use for iteration is ecs_iter_next." +| | `-ParagraphComment 0x56046817ab30 +| | |-TextComment 0x56046817aae0 Text=" An implementation can test whether the iterator is a query iterator by" +| | `-TextComment 0x56046817ab00 Text=" testing whether the it->next value is equal to ecs_query_next. " +| |-FieldDecl 0x5604680a21e8 col:23 callback 'ecs_iter_action_t':'void (*)(ecs_iter_t *)' +| | `-FullComment 0x56046817ac90 +| | `-ParagraphComment 0x56046817ac60 +| | |-TextComment 0x56046817abe0 Text=" Callback that is ran for each result returned by the system's query. This" +| | |-TextComment 0x56046817ac00 Text=" means that this callback can be invoked multiple times per system per" +| | `-TextComment 0x56046817ac20 Text=" frame, typically once for each matching table. " +| |-FieldDecl 0x5604680a2280 col:11 ctx 'void *' +| | `-FullComment 0x56046817ad60 +| | `-ParagraphComment 0x56046817ad30 +| | `-TextComment 0x56046817ad00 Text=" Context to be passed to callback (as ecs_iter_t::param) " +| |-FieldDecl 0x5604680a2310 col:11 binding_ctx 'void *' +| | `-FullComment 0x56046817ae30 +| | `-ParagraphComment 0x56046817ae00 +| | `-TextComment 0x56046817add0 Text=" Binding context, for when system is implemented in other language " +| |-FieldDecl 0x5604680a2398 col:20 ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| | `-FullComment 0x56046817af50 +| | `-ParagraphComment 0x56046817af20 +| | |-TextComment 0x56046817aea0 Text=" Functions that are invoked during system cleanup to free context data." +| | |-TextComment 0x56046817aec0 Text=" When set, functions are called unconditionally, even when the ctx" +| | `-TextComment 0x56046817aee0 Text=" pointers are NULL. " +| |-FieldDecl 0x5604680a23f8 col:20 binding_ctx_free 'ecs_ctx_free_t':'void (*)(void *)' +| |-FieldDecl 0x5604680a2490 col:17 interval 'float' +| | `-FullComment 0x56046817b020 +| | `-ParagraphComment 0x56046817aff0 +| | `-TextComment 0x56046817afc0 Text=" Interval in seconds at which the system should run " +| |-FieldDecl 0x5604680a2518 col:13 rate 'int32_t':'int' +| | `-FullComment 0x56046817b0f0 +| | `-ParagraphComment 0x56046817b0c0 +| | `-TextComment 0x56046817b090 Text=" Rate at which the system should run " +| |-FieldDecl 0x5604680a25a8 col:18 tick_source 'ecs_entity_t':'unsigned long' +| | `-FullComment 0x56046817b1c0 +| | `-ParagraphComment 0x56046817b190 +| | `-TextComment 0x56046817b160 Text=" External tick soutce that determines when system ticks " +| |-FieldDecl 0x5604680a2638 col:10 multi_threaded 'bool' +| | `-FullComment 0x56046817b290 +| | `-ParagraphComment 0x56046817b260 +| | `-TextComment 0x56046817b230 Text=" If true, system will be ran on multiple threads " +| `-FieldDecl 0x5604680a26c8 col:10 no_readonly 'bool' +| `-FullComment 0x56046817b380 +| `-ParagraphComment 0x56046817b350 +| |-TextComment 0x56046817b300 Text=" If true, system will have access to actuall world. Cannot be true at the" +| `-TextComment 0x56046817b320 Text=" same time as multi_threaded. " +|-TypedefDecl 0x5604680a2778 col:3 referenced ecs_system_desc_t 'struct ecs_system_desc_t':'struct ecs_system_desc_t' +| |-ElaboratedType 0x5604680a2720 'struct ecs_system_desc_t' sugar +| | `-RecordType 0x5604680a1f80 'struct ecs_system_desc_t' +| | `-Record 0x5604680a1f00 'ecs_system_desc_t' +| `-FullComment 0x56046817b450 +| `-ParagraphComment 0x56046817b420 +| `-TextComment 0x56046817b3f0 Text=" Use with ecs_system_init " +|-FunctionDecl 0x5604680a2a28 line:10513:14 ecs_system_init 'ecs_entity_t (ecs_world_t *, const ecs_system_desc_t *)' +| |-ParmVarDecl 0x5604680a2820 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680a2918 col:30 desc 'const ecs_system_desc_t *' +| `-FullComment 0x56046817b520 +| `-ParagraphComment 0x56046817b4f0 +| `-TextComment 0x56046817b4c0 Text=" Create a system " +|-FunctionDecl 0x5604680a2dd8 line:10572:14 ecs_run 'ecs_entity_t (ecs_world_t *, ecs_entity_t, float, void *)' +| |-ParmVarDecl 0x5604680a2b18 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680a2b90 col:18 system 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680a2c10 col:17 delta_time 'float' +| |-ParmVarDecl 0x5604680a2c90 col:11 param 'void *' +| `-FullComment 0x56046817bd20 +| |-ParagraphComment 0x56046817b630 +| | |-TextComment 0x56046817b590 Text=" Run a specific system manually." +| | |-TextComment 0x56046817b5b0 Text=" This operation runs a single system manually. It is an efficient way to" +| | |-TextComment 0x56046817b5d0 Text=" invoke logic on a set of entities, as manual systems are only matched to" +| | `-TextComment 0x56046817b5f0 Text=" tables at creation time or after creation time, when a new table is created." +| |-ParagraphComment 0x56046817b6f0 +| | |-TextComment 0x56046817b650 Text=" Manual systems are useful to evaluate lists of prematched entities at" +| | |-TextComment 0x56046817b670 Text=" application defined times. Because none of the matching logic is evaluated" +| | |-TextComment 0x56046817b690 Text=" before the system is invoked, manual systems are much more efficient than" +| | `-TextComment 0x56046817b6b0 Text=" manually obtaining a list of entities and retrieving their components." +| |-ParagraphComment 0x56046817b790 +| | |-TextComment 0x56046817b710 Text=" An application may pass custom data to a system through the param parameter." +| | |-TextComment 0x56046817b730 Text=" This data can be accessed by the system through the param member in the" +| | `-TextComment 0x56046817b750 Text=" ecs_iter_t value that is passed to the system callback." +| |-ParagraphComment 0x56046817b8a0 +| | |-TextComment 0x56046817b7b0 Text=" Any system may interrupt execution by setting the interrupted_by member in" +| | |-TextComment 0x56046817b7d0 Text=" the ecs_iter_t value. This is particularly useful for manual systems, where" +| | |-TextComment 0x56046817b7f0 Text=" the value of interrupted_by is returned by this operation. This, in" +| | |-TextComment 0x56046817b810 Text=" cominbation with the param argument lets applications use manual systems" +| | |-TextComment 0x56046817b830 Text=" to lookup entities: once the entity has been found its handle is passed to" +| | `-TextComment 0x56046817b850 Text=" interrupted_by, which is then subsequently returned." +| |-ParagraphComment 0x56046817b8f0 +| | `-TextComment 0x56046817b8c0 Text=" " +| |-ParamCommandComment 0x56046817b910 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046817b9c0 +| | |-TextComment 0x56046817b970 Text=" The world." +| | `-TextComment 0x56046817b990 Text=" " +| |-ParamCommandComment 0x56046817b9e0 [in] implicitly Param="system" ParamIndex=1 +| | `-ParagraphComment 0x56046817ba90 +| | |-TextComment 0x56046817ba40 Text=" The system to run." +| | `-TextComment 0x56046817ba60 Text=" " +| |-ParamCommandComment 0x56046817bab0 [in] implicitly Param="delta_time" ParamIndex=2 +| | `-ParagraphComment 0x56046817bb60 +| | |-TextComment 0x56046817bb10 Text=" The time passed since the last system invocation." +| | `-TextComment 0x56046817bb30 Text=" " +| |-ParamCommandComment 0x56046817bb80 [in] implicitly Param="param" ParamIndex=3 +| | `-ParagraphComment 0x56046817bc30 +| | |-TextComment 0x56046817bbe0 Text=" A user-defined parameter to pass to the system." +| | `-TextComment 0x56046817bc00 Text=" " +| `-BlockCommandComment 0x56046817bc50 Name="return" +| `-ParagraphComment 0x56046817bcb0 +| `-TextComment 0x56046817bc80 Text=" handle to last evaluated entity if system was interrupted." +|-FunctionDecl 0x5604680a32b8 line:10589:14 ecs_run_worker 'ecs_entity_t (ecs_world_t *, ecs_entity_t, int32_t, int32_t, float, void *)' +| |-ParmVarDecl 0x5604680a2ed8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680a2f50 col:18 system 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680a2fc8 col:13 stage_current 'int32_t':'int' +| |-ParmVarDecl 0x5604680a3040 col:13 stage_count 'int32_t':'int' +| |-ParmVarDecl 0x5604680a30c0 col:17 delta_time 'float' +| |-ParmVarDecl 0x5604680a3140 col:11 param 'void *' +| `-FullComment 0x56046817c410 +| |-ParagraphComment 0x56046817bdc0 +| | `-TextComment 0x56046817bd90 Text=" Same as ecs_run, but subdivides entities across number of provided stages." +| |-ParagraphComment 0x56046817be10 +| | `-TextComment 0x56046817bde0 Text=" " +| |-ParamCommandComment 0x56046817be30 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046817bee0 +| | |-TextComment 0x56046817be90 Text=" The world." +| | `-TextComment 0x56046817beb0 Text=" " +| |-ParamCommandComment 0x56046817bf00 [in] implicitly Param="system" ParamIndex=1 +| | `-ParagraphComment 0x56046817bfb0 +| | |-TextComment 0x56046817bf60 Text=" The system to run." +| | `-TextComment 0x56046817bf80 Text=" " +| |-ParamCommandComment 0x56046817bfd0 [in] implicitly Param="stage_current" ParamIndex=2 +| | `-ParagraphComment 0x56046817c080 +| | |-TextComment 0x56046817c030 Text=" The id of the current stage." +| | `-TextComment 0x56046817c050 Text=" " +| |-ParamCommandComment 0x56046817c0a0 [in] implicitly Param="stage_count" ParamIndex=3 +| | `-ParagraphComment 0x56046817c150 +| | |-TextComment 0x56046817c100 Text=" The total number of stages." +| | `-TextComment 0x56046817c120 Text=" " +| |-ParamCommandComment 0x56046817c170 [in] implicitly Param="delta_time" ParamIndex=4 +| | `-ParagraphComment 0x56046817c220 +| | |-TextComment 0x56046817c1d0 Text=" The time passed since the last system invocation." +| | `-TextComment 0x56046817c1f0 Text=" " +| |-ParamCommandComment 0x56046817c240 [in] implicitly Param="param" ParamIndex=5 +| | `-ParagraphComment 0x56046817c2f0 +| | |-TextComment 0x56046817c2a0 Text=" A user-defined parameter to pass to the system." +| | `-TextComment 0x56046817c2c0 Text=" " +| `-BlockCommandComment 0x56046817c310 Name="return" +| `-ParagraphComment 0x56046817c370 +| `-TextComment 0x56046817c340 Text=" handle to last evaluated entity if system was interrupted." +|-FunctionDecl 0x5604680a37a8 line:10618:14 ecs_run_w_filter 'ecs_entity_t (ecs_world_t *, ecs_entity_t, float, int32_t, int32_t, void *)' +| |-ParmVarDecl 0x5604680a33c8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680a3440 col:18 system 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680a34c0 col:17 delta_time 'float' +| |-ParmVarDecl 0x5604680a3538 col:13 offset 'int32_t':'int' +| |-ParmVarDecl 0x5604680a35b0 col:13 limit 'int32_t':'int' +| |-ParmVarDecl 0x5604680a3630 col:11 param 'void *' +| `-FullComment 0x56046817cb10 +| |-ParagraphComment 0x56046817c500 +| | |-TextComment 0x56046817c480 Text=" Run system with offset/limit and type filter." +| | |-TextComment 0x56046817c4a0 Text=" This operation is the same as ecs_run, but filters the entities that will be" +| | `-TextComment 0x56046817c4c0 Text=" iterated by the system." +| |-ParagraphComment 0x56046817c5a0 +| | |-TextComment 0x56046817c520 Text=" Entities can be filtered in two ways. Offset and limit control the range of" +| | |-TextComment 0x56046817c540 Text=" entities that is iterated over. The range is applied to all entities matched" +| | `-TextComment 0x56046817c560 Text=" with the system, thus may cover multiple archetypes." +| |-ParagraphComment 0x56046817c690 +| | |-TextComment 0x56046817c5c0 Text=" The type filter controls which entity types the system will evaluate. Only" +| | |-TextComment 0x56046817c5e0 Text=" types that contain all components in the type filter will be iterated over. A" +| | |-TextComment 0x56046817c600 Text=" type filter is only evaluated once per table, which makes filtering cheap if" +| | |-TextComment 0x56046817c620 Text=" the number of entities is large and the number of tables is small, but not as" +| | `-TextComment 0x56046817c640 Text=" cheap as filtering in the system signature." +| |-ParagraphComment 0x56046817c6e0 +| | `-TextComment 0x56046817c6b0 Text=" " +| |-ParamCommandComment 0x56046817c700 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046817c7b0 +| | |-TextComment 0x56046817c760 Text=" The world." +| | `-TextComment 0x56046817c780 Text=" " +| |-ParamCommandComment 0x56046817c7d0 [in] implicitly Param="system" ParamIndex=1 +| | `-ParagraphComment 0x56046817c880 +| | |-TextComment 0x56046817c830 Text=" The system to invoke." +| | `-TextComment 0x56046817c850 Text=" " +| |-ParamCommandComment 0x56046817c8a0 [in] implicitly Param="delta_time" ParamIndex=2 +| | `-ParagraphComment 0x56046817c950 +| | |-TextComment 0x56046817c900 Text=" The time passed since the last system invocation." +| | `-TextComment 0x56046817c920 Text=" " +| |-ParamCommandComment 0x56046817c970 [in] implicitly Param="param" ParamIndex=5 +| | `-ParagraphComment 0x56046817ca20 +| | |-TextComment 0x56046817c9d0 Text=" A user-defined parameter to pass to the system." +| | `-TextComment 0x56046817c9f0 Text=" " +| `-BlockCommandComment 0x56046817ca40 Name="return" +| `-ParagraphComment 0x56046817caa0 +| `-TextComment 0x56046817ca70 Text=" handle to last evaluated entity if system was interrupted." +|-FunctionDecl 0x5604680a6678 line:10636:14 ecs_system_get_query 'ecs_query_t *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680a64f0 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680a6568 col:18 system 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046817cee0 +| |-ParagraphComment 0x56046817cc20 +| | |-TextComment 0x56046817cb80 Text=" Get the query object for a system." +| | |-TextComment 0x56046817cba0 Text=" Systems use queries under the hood. This enables an application to get access" +| | |-TextComment 0x56046817cbc0 Text=" to the underlying query object of a system. This can be useful when, for " +| | `-TextComment 0x56046817cbe0 Text=" example, an application needs to enable sorting for a system." +| |-ParagraphComment 0x56046817cc70 +| | `-TextComment 0x56046817cc40 Text=" " +| |-ParamCommandComment 0x56046817cc90 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046817cd40 +| | |-TextComment 0x56046817ccf0 Text=" The world." +| | `-TextComment 0x56046817cd10 Text=" " +| |-ParamCommandComment 0x56046817cd60 [in] implicitly Param="system" ParamIndex=1 +| | `-ParagraphComment 0x56046817ce10 +| | |-TextComment 0x56046817cdc0 Text=" The system from which to obtain the query." +| | `-TextComment 0x56046817cde0 Text=" " +| `-BlockCommandComment 0x56046817ce30 Name="return" +| `-ParagraphComment 0x56046817ce90 +| `-TextComment 0x56046817ce60 Text=" The query." +|-FunctionDecl 0x5604680a6880 line:10649:7 ecs_get_system_ctx 'void *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680a6768 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680a67e0 col:18 system 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046817d290 +| |-ParagraphComment 0x56046817cfd0 +| | |-TextComment 0x56046817cf50 Text=" Get system context." +| | |-TextComment 0x56046817cf70 Text=" This operation returns the context pointer set for the system. If" +| | `-TextComment 0x56046817cf90 Text=" the provided entity is not a system, the function will return NULL." +| |-ParagraphComment 0x56046817d020 +| | `-TextComment 0x56046817cff0 Text=" " +| |-ParamCommandComment 0x56046817d040 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046817d0f0 +| | |-TextComment 0x56046817d0a0 Text=" The world." +| | `-TextComment 0x56046817d0c0 Text=" " +| |-ParamCommandComment 0x56046817d110 [in] implicitly Param="system" ParamIndex=1 +| | `-ParagraphComment 0x56046817d1c0 +| | |-TextComment 0x56046817d170 Text=" The system from which to obtain the context." +| | `-TextComment 0x56046817d190 Text=" " +| `-BlockCommandComment 0x56046817d1e0 Name="return" +| `-ParagraphComment 0x56046817d240 +| `-TextComment 0x56046817d210 Text=" The context." +|-FunctionDecl 0x5604680a6a80 line:10663:7 ecs_get_system_binding_ctx 'void *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680a6968 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680a69e0 col:18 system 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046817d660 +| |-ParagraphComment 0x56046817d3a0 +| | |-TextComment 0x56046817d300 Text=" Get system binding context." +| | |-TextComment 0x56046817d320 Text=" The binding context is a context typically used to attach any language " +| | |-TextComment 0x56046817d340 Text=" binding specific data that is needed when invoking a callback that is " +| | `-TextComment 0x56046817d360 Text=" implemented in another language." +| |-ParagraphComment 0x56046817d3f0 +| | `-TextComment 0x56046817d3c0 Text=" " +| |-ParamCommandComment 0x56046817d410 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046817d4c0 +| | |-TextComment 0x56046817d470 Text=" The world." +| | `-TextComment 0x56046817d490 Text=" " +| |-ParamCommandComment 0x56046817d4e0 [in] implicitly Param="system" ParamIndex=1 +| | `-ParagraphComment 0x56046817d590 +| | |-TextComment 0x56046817d540 Text=" The system from which to obtain the context." +| | `-TextComment 0x56046817d560 Text=" " +| `-BlockCommandComment 0x56046817d5b0 Name="return" +| `-ParagraphComment 0x56046817d610 +| `-TextComment 0x56046817d5e0 Text=" The context." +|-FunctionDecl 0x5604680a6bd0 line:10668:6 FlecsSystemImport 'void (ecs_world_t *)' +| `-ParmVarDecl 0x5604680a6b40 col:18 world 'ecs_world_t *' +|-RecordDecl 0x5604680a6d38 line:10714:16 struct ecs_gauge_t definition +| |-FullComment 0x56046817d730 +| | `-ParagraphComment 0x56046817d700 +| | `-TextComment 0x56046817d6d0 Text=" Simple value that indicates current state " +| |-FieldDecl 0x5604680a6ea0 col:17 avg 'float[60]' +| |-FieldDecl 0x5604680a6f78 col:17 min 'float[60]' +| `-FieldDecl 0x5604680a7050 col:17 max 'float[60]' +|-TypedefDecl 0x5604680a70f8 col:3 referenced ecs_gauge_t 'struct ecs_gauge_t':'struct ecs_gauge_t' +| |-ElaboratedType 0x5604680a70a0 'struct ecs_gauge_t' sugar +| | `-RecordType 0x5604680a6dc0 'struct ecs_gauge_t' +| | `-Record 0x5604680a6d38 'ecs_gauge_t' +| `-FullComment 0x56046817d800 +| `-ParagraphComment 0x56046817d7d0 +| `-TextComment 0x56046817d7a0 Text=" Simple value that indicates current state " +|-RecordDecl 0x5604680a7168 line:10721:16 struct ecs_counter_t definition +| |-FieldDecl 0x5604680a7240 col:17 rate 'ecs_gauge_t':'struct ecs_gauge_t' +| | `-FullComment 0x56046817d8d0 +| | `-ParagraphComment 0x56046817d8a0 +| | `-TextComment 0x56046817d870 Text=" Keep track of deltas too " +| `-FieldDecl 0x5604680a7380 col:12 value 'double[60]' +|-TypedefDecl 0x5604680a7498 col:3 referenced ecs_counter_t 'struct ecs_counter_t':'struct ecs_counter_t' +| `-ElaboratedType 0x5604680a7440 'struct ecs_counter_t' sugar +| `-RecordType 0x5604680a71f0 'struct ecs_counter_t' +| `-Record 0x5604680a7168 'ecs_counter_t' +|-RecordDecl 0x5604680a7508 line:10727:15 union ecs_metric_t definition +| |-FieldDecl 0x5604680a75c0 col:17 gauge 'ecs_gauge_t':'struct ecs_gauge_t' +| `-FieldDecl 0x5604680a7640 col:19 counter 'ecs_counter_t':'struct ecs_counter_t' +|-TypedefDecl 0x5604680a76e8 col:3 referenced ecs_metric_t 'union ecs_metric_t':'union ecs_metric_t' +| `-ElaboratedType 0x5604680a7690 'union ecs_metric_t' sugar +| `-RecordType 0x5604680a7590 'union ecs_metric_t' +| `-Record 0x5604680a7508 'ecs_metric_t' +|-RecordDecl 0x5604680a7758 line:10732:16 struct ecs_world_stats_t definition +| |-FieldDecl 0x5604680a7810 col:13 first_ 'int64_t':'long' +| |-RecordDecl 0x5604680a7860 line:10736:5 struct definition +| | |-FieldDecl 0x5604680a7930 col:22 count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817d9a0 +| | | `-ParagraphComment 0x56046817d970 +| | | `-TextComment 0x56046817d940 Text=" Number of entities " +| | `-FieldDecl 0x5604680a79b8 col:22 not_alive_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x56046817da70 +| | `-ParagraphComment 0x56046817da40 +| | `-TextComment 0x56046817da10 Text=" Number of not alive (recyclable) entity ids " +| |-FieldDecl 0x5604680a7b58 col:7 entities 'struct (unnamed struct at flecs.h:10736:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10736:5)' +| |-RecordDecl 0x5604680a7ba8 line:10742:5 struct definition +| | |-FieldDecl 0x5604680a7c60 col:22 count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817db40 +| | | `-ParagraphComment 0x56046817db10 +| | | `-TextComment 0x56046817dae0 Text=" Number of ids (excluding wildcards) " +| | |-FieldDecl 0x5604680a7ce8 col:22 tag_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817dc10 +| | | `-ParagraphComment 0x56046817dbe0 +| | | `-TextComment 0x56046817dbb0 Text=" Number of tag ids (ids without data) " +| | |-FieldDecl 0x5604680a7d78 col:22 component_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817dce0 +| | | `-ParagraphComment 0x56046817dcb0 +| | | `-TextComment 0x56046817dc80 Text=" Number of components ids (ids with data) " +| | |-FieldDecl 0x5604680a7e08 col:22 pair_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817ddb0 +| | | `-ParagraphComment 0x56046817dd80 +| | | `-TextComment 0x56046817dd50 Text=" Number of pair ids " +| | |-FieldDecl 0x5604680a7e98 col:22 wildcard_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817de80 +| | | `-ParagraphComment 0x56046817de50 +| | | `-TextComment 0x56046817de20 Text=" Number of wildcard ids " +| | |-FieldDecl 0x5604680a7f28 col:22 type_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817df50 +| | | `-ParagraphComment 0x56046817df20 +| | | `-TextComment 0x56046817def0 Text=" Number of registered types " +| | |-FieldDecl 0x5604680a7fb8 col:22 create_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e020 +| | | `-ParagraphComment 0x56046817dff0 +| | | `-TextComment 0x56046817dfc0 Text=" Number of times id has been created " +| | `-FieldDecl 0x5604680a8048 col:22 delete_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x56046817e0f0 +| | `-ParagraphComment 0x56046817e0c0 +| | `-TextComment 0x56046817e090 Text=" Number of times id has been deleted " +| |-FieldDecl 0x5604680a8128 col:7 ids 'struct (unnamed struct at flecs.h:10742:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10742:5)' +| |-RecordDecl 0x5604680a8178 line:10754:5 struct definition +| | |-FieldDecl 0x5604680a8230 col:22 count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e1c0 +| | | `-ParagraphComment 0x56046817e190 +| | | `-TextComment 0x56046817e160 Text=" Number of tables " +| | |-FieldDecl 0x5604680a82b8 col:22 empty_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e290 +| | | `-ParagraphComment 0x56046817e260 +| | | `-TextComment 0x56046817e230 Text=" Number of empty tables " +| | |-FieldDecl 0x5604680a8348 col:22 tag_only_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e360 +| | | `-ParagraphComment 0x56046817e330 +| | | `-TextComment 0x56046817e300 Text=" Number of tables with only tags " +| | |-FieldDecl 0x5604680a83d8 col:22 trivial_only_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e450 +| | | `-ParagraphComment 0x56046817e420 +| | | `-TextComment 0x56046817e3d0 Text=" Number of tables with only trivial components " +| | |-FieldDecl 0x5604680a8468 col:22 record_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e520 +| | | `-ParagraphComment 0x56046817e4f0 +| | | `-TextComment 0x56046817e4c0 Text=" Number of table cache records " +| | |-FieldDecl 0x5604680a8a90 col:22 storage_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e5f0 +| | | `-ParagraphComment 0x56046817e5c0 +| | | `-TextComment 0x56046817e590 Text=" Number of table storages " +| | |-FieldDecl 0x5604680a8b18 col:22 create_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e6c0 +| | | `-ParagraphComment 0x56046817e690 +| | | `-TextComment 0x56046817e660 Text=" Number of times table has been created " +| | `-FieldDecl 0x5604680a8ba8 col:22 delete_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x56046817e790 +| | `-ParagraphComment 0x56046817e760 +| | `-TextComment 0x56046817e730 Text=" Number of times table has been deleted " +| |-FieldDecl 0x5604680a8c88 col:7 tables 'struct (unnamed struct at flecs.h:10754:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10754:5)' +| |-RecordDecl 0x5604680a8cd8 line:10766:5 struct definition +| | |-FieldDecl 0x5604680a8d90 col:22 query_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e860 +| | | `-ParagraphComment 0x56046817e830 +| | | `-TextComment 0x56046817e800 Text=" Number of queries " +| | |-FieldDecl 0x5604680a8e18 col:22 observer_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817e930 +| | | `-ParagraphComment 0x56046817e900 +| | | `-TextComment 0x56046817e8d0 Text=" Number of observers " +| | `-FieldDecl 0x5604680a8ea8 col:22 system_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x56046817ea00 +| | `-ParagraphComment 0x56046817e9d0 +| | `-TextComment 0x56046817e9a0 Text=" Number of systems " +| |-FieldDecl 0x5604680a8f88 col:7 queries 'struct (unnamed struct at flecs.h:10766:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10766:5)' +| |-RecordDecl 0x5604680a8fd8 line:10773:5 struct definition +| | |-FieldDecl 0x5604680a9090 col:22 add_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a90f0 col:22 remove_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a9150 col:22 delete_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a91b0 col:22 clear_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a9210 col:22 set_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a9270 col:22 get_mut_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a92d0 col:22 modified_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a9330 col:22 other_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a9390 col:22 discard_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680a93f0 col:22 batched_entity_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FieldDecl 0x5604680a9450 col:22 batched_count 'ecs_metric_t':'union ecs_metric_t' +| |-FieldDecl 0x5604680a94f8 col:7 commands 'struct (unnamed struct at flecs.h:10773:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10773:5)' +| |-RecordDecl 0x5604680a9548 line:10787:5 struct definition +| | |-FieldDecl 0x5604680a9600 col:22 frame_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817ead0 +| | | `-ParagraphComment 0x56046817eaa0 +| | | `-TextComment 0x56046817ea70 Text=" Number of frames processed. " +| | |-FieldDecl 0x5604680a9688 col:22 merge_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817eba0 +| | | `-ParagraphComment 0x56046817eb70 +| | | `-TextComment 0x56046817eb40 Text=" Number of merges executed. " +| | |-FieldDecl 0x5604680a9718 col:22 rematch_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817ec70 +| | | `-ParagraphComment 0x56046817ec40 +| | | `-TextComment 0x56046817ec10 Text=" Number of query rematches " +| | |-FieldDecl 0x5604680a97a8 col:22 pipeline_build_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817ed40 +| | | `-ParagraphComment 0x56046817ed10 +| | | `-TextComment 0x56046817ece0 Text=" Number of system pipeline rebuilds (occurs when an inactive system becomes active). " +| | |-FieldDecl 0x5604680a9838 col:22 systems_ran 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817ee10 +| | | `-ParagraphComment 0x56046817ede0 +| | | `-TextComment 0x56046817edb0 Text=" Number of systems ran. " +| | |-FieldDecl 0x5604680a98c8 col:22 observers_ran 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817eee0 +| | | `-ParagraphComment 0x56046817eeb0 +| | | `-TextComment 0x56046817ee80 Text=" Number of times an observer was invoked. " +| | `-FieldDecl 0x5604680a9958 col:22 event_emit_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x56046817efb0 +| | `-ParagraphComment 0x56046817ef80 +| | `-TextComment 0x56046817ef50 Text=" Number of events emitted " +| |-FieldDecl 0x5604680a9a38 col:7 frame 'struct (unnamed struct at flecs.h:10787:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10787:5)' +| |-RecordDecl 0x5604680a9a88 line:10798:5 struct definition +| | |-FieldDecl 0x5604680a9b40 col:22 world_time_raw 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f080 +| | | `-ParagraphComment 0x56046817f050 +| | | `-TextComment 0x56046817f020 Text=" Actual time passed since simulation start (first time progress() is called) " +| | |-FieldDecl 0x5604680a9bc8 col:22 world_time 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f150 +| | | `-ParagraphComment 0x56046817f120 +| | | `-TextComment 0x56046817f0f0 Text=" Simulation time passed since simulation start. Takes into account time scaling " +| | |-FieldDecl 0x5604680a9c58 col:22 frame_time 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f220 +| | | `-ParagraphComment 0x56046817f1f0 +| | | `-TextComment 0x56046817f1c0 Text=" Time spent processing a frame. Smaller than world_time_total when load is not 100% " +| | |-FieldDecl 0x5604680a9ce8 col:22 system_time 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f2f0 +| | | `-ParagraphComment 0x56046817f2c0 +| | | `-TextComment 0x56046817f290 Text=" Time spent on running systems. " +| | |-FieldDecl 0x5604680a9d78 col:22 emit_time 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f3c0 +| | | `-ParagraphComment 0x56046817f390 +| | | `-TextComment 0x56046817f360 Text=" Time spent on notifying observers. " +| | |-FieldDecl 0x5604680a9e08 col:22 merge_time 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f490 +| | | `-ParagraphComment 0x56046817f460 +| | | `-TextComment 0x56046817f430 Text=" Time spent on merging commands. " +| | |-FieldDecl 0x5604680a9e98 col:22 rematch_time 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f560 +| | | `-ParagraphComment 0x56046817f530 +| | | `-TextComment 0x56046817f500 Text=" Time spent on rematching. " +| | |-FieldDecl 0x5604680a9f28 col:22 fps 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f630 +| | | `-ParagraphComment 0x56046817f600 +| | | `-TextComment 0x56046817f5d0 Text=" Frames per second. " +| | `-FieldDecl 0x5604680a9fb8 col:22 delta_time 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x56046817f700 +| | `-ParagraphComment 0x56046817f6d0 +| | `-TextComment 0x56046817f6a0 Text=" Delta_time. " +| |-FieldDecl 0x5604680aa098 col:7 performance 'struct (unnamed struct at flecs.h:10798:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10798:5)' +| |-RecordDecl 0x5604680aa0e8 line:10811:5 struct definition +| | |-FieldDecl 0x5604680aa1a0 col:22 alloc_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f7d0 +| | | `-ParagraphComment 0x56046817f7a0 +| | | `-TextComment 0x56046817f770 Text=" Allocs per frame " +| | |-FieldDecl 0x5604680aa228 col:22 realloc_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f8a0 +| | | `-ParagraphComment 0x56046817f870 +| | | `-TextComment 0x56046817f840 Text=" Reallocs per frame " +| | |-FieldDecl 0x5604680aa2b8 col:22 free_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817f970 +| | | `-ParagraphComment 0x56046817f940 +| | | `-TextComment 0x56046817f910 Text=" Frees per frame " +| | |-FieldDecl 0x5604680aa348 col:22 outstanding_alloc_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817fa90 +| | | `-ParagraphComment 0x56046817fa60 +| | | |-TextComment 0x56046817f9e0 Text=" Difference between allocs " +| | | |-TextComment 0x56046817fa00 Text="&" +| | | `-TextComment 0x56046817fa20 Text=" frees " +| | |-FieldDecl 0x5604680aa3d8 col:22 block_alloc_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817fb60 +| | | `-ParagraphComment 0x56046817fb30 +| | | `-TextComment 0x56046817fb00 Text=" Block allocations per frame " +| | |-FieldDecl 0x5604680aa468 col:22 block_free_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817fc30 +| | | `-ParagraphComment 0x56046817fc00 +| | | `-TextComment 0x56046817fbd0 Text=" Block frees per frame " +| | |-FieldDecl 0x5604680aa4f8 col:22 block_outstanding_alloc_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817fd50 +| | | `-ParagraphComment 0x56046817fd20 +| | | |-TextComment 0x56046817fca0 Text=" Difference between allocs " +| | | |-TextComment 0x56046817fcc0 Text="&" +| | | `-TextComment 0x56046817fce0 Text=" frees " +| | |-FieldDecl 0x5604680aa588 col:22 stack_alloc_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817fe20 +| | | `-ParagraphComment 0x56046817fdf0 +| | | `-TextComment 0x56046817fdc0 Text=" Page allocations per frame " +| | |-FieldDecl 0x5604680aa618 col:22 stack_free_count 'ecs_metric_t':'union ecs_metric_t' +| | | `-FullComment 0x56046817fef0 +| | | `-ParagraphComment 0x56046817fec0 +| | | `-TextComment 0x56046817fe90 Text=" Page frees per frame " +| | `-FieldDecl 0x5604680aa6a8 col:22 stack_outstanding_alloc_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x560468180010 +| | `-ParagraphComment 0x56046817ffe0 +| | |-TextComment 0x56046817ff60 Text=" Difference between allocs " +| | |-TextComment 0x56046817ff80 Text="&" +| | `-TextComment 0x56046817ffa0 Text=" frees " +| |-FieldDecl 0x5604680aa788 col:7 memory 'struct (unnamed struct at flecs.h:10811:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10811:5)' +| |-RecordDecl 0x5604680aa7d8 line:10827:5 struct definition +| | |-FieldDecl 0x5604680aa890 col:22 request_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680aa8f0 col:22 entity_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680aa950 col:22 entity_error_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680aa9b0 col:22 query_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680aaa10 col:22 query_error_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac2a0 col:22 query_name_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac300 col:22 query_name_error_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac360 col:22 query_name_from_cache_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac3c0 col:22 enable_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac420 col:22 enable_error_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac480 col:22 world_stats_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac4e0 col:22 pipeline_stats_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FieldDecl 0x5604680ac540 col:22 stats_error_count 'ecs_metric_t':'union ecs_metric_t' +| |-FieldDecl 0x5604680ac5e8 col:7 rest 'struct (unnamed struct at flecs.h:10827:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10827:5)' +| |-RecordDecl 0x5604680ac638 line:10844:5 struct definition +| | |-FieldDecl 0x5604680ac6f0 col:22 request_received_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac750 col:22 request_invalid_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac7b0 col:22 request_handled_ok_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac810 col:22 request_handled_error_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac870 col:22 request_not_handled_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac8d0 col:22 request_preflight_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac930 col:22 send_ok_count 'ecs_metric_t':'union ecs_metric_t' +| | |-FieldDecl 0x5604680ac990 col:22 send_error_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FieldDecl 0x5604680ac9f0 col:22 busy_count 'ecs_metric_t':'union ecs_metric_t' +| |-FieldDecl 0x5604680aca98 col:7 http 'struct (unnamed struct at flecs.h:10844:5)':'struct ecs_world_stats_t::(unnamed at flecs.h:10844:5)' +| |-FieldDecl 0x5604680acaf8 col:13 last_ 'int64_t':'long' +| `-FieldDecl 0x5604680acb88 col:13 t 'int32_t':'int' +| `-FullComment 0x5604681800e0 +| `-ParagraphComment 0x5604681800b0 +| `-TextComment 0x560468180080 Text=" Current position in ringbuffer " +|-TypedefDecl 0x5604680acc38 col:3 referenced ecs_world_stats_t 'struct ecs_world_stats_t':'struct ecs_world_stats_t' +| `-ElaboratedType 0x5604680acbe0 'struct ecs_world_stats_t' sugar +| `-RecordType 0x5604680a77e0 'struct ecs_world_stats_t' +| `-Record 0x5604680a7758 'ecs_world_stats_t' +|-RecordDecl 0x5604680acca8 line:10864:16 struct ecs_query_stats_t definition +| |-FieldDecl 0x5604680acd60 col:13 first_ 'int64_t':'long' +| |-FieldDecl 0x5604680acdc0 col:18 matched_table_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x5604681801b0 +| | `-ParagraphComment 0x560468180180 +| | `-TextComment 0x560468180150 Text=" Matched non-empty tables " +| |-FieldDecl 0x5604680ace48 col:18 matched_empty_table_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x560468180280 +| | `-ParagraphComment 0x560468180250 +| | `-TextComment 0x560468180220 Text=" Matched empty tables " +| |-FieldDecl 0x5604680aced8 col:18 matched_entity_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x560468180350 +| | `-ParagraphComment 0x560468180320 +| | `-TextComment 0x5604681802f0 Text=" Number of matched entities " +| |-FieldDecl 0x5604680acf68 col:13 last_ 'int64_t':'long' +| `-FieldDecl 0x5604680acff8 col:13 t 'int32_t':'int' +| `-FullComment 0x560468182440 +| `-ParagraphComment 0x5604681803f0 +| `-TextComment 0x5604681803c0 Text=" Current position in ringbuffer " +|-TypedefDecl 0x5604680ad0a8 col:3 referenced ecs_query_stats_t 'struct ecs_query_stats_t':'struct ecs_query_stats_t' +| `-ElaboratedType 0x5604680ad050 'struct ecs_query_stats_t' sugar +| `-RecordType 0x5604680acd30 'struct ecs_query_stats_t' +| `-Record 0x5604680acca8 'ecs_query_stats_t' +|-RecordDecl 0x5604680ad140 line:10876:16 struct ecs_system_stats_t definition +| |-FullComment 0x560468182510 +| | `-ParagraphComment 0x5604681824e0 +| | `-TextComment 0x5604681824b0 Text=" Statistics for a single system (use ecs_system_stats_get) " +| |-FieldDecl 0x5604680ad1f0 col:13 first_ 'int64_t':'long' +| |-FieldDecl 0x5604680ad250 col:18 time_spent 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x5604681825e0 +| | `-ParagraphComment 0x5604681825b0 +| | `-TextComment 0x560468182580 Text=" Time spent processing a system " +| |-FieldDecl 0x5604680ad2d8 col:18 invoke_count 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x5604681826b0 +| | `-ParagraphComment 0x560468182680 +| | `-TextComment 0x560468182650 Text=" Number of times system is invoked " +| |-FieldDecl 0x5604680ad368 col:18 active 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x560468182780 +| | `-ParagraphComment 0x560468182750 +| | `-TextComment 0x560468182720 Text=" Whether system is active (is matched with >0 entities) " +| |-FieldDecl 0x5604680ad3f8 col:18 enabled 'ecs_metric_t':'union ecs_metric_t' +| | `-FullComment 0x560468182850 +| | `-ParagraphComment 0x560468182820 +| | `-TextComment 0x5604681827f0 Text=" Whether system is enabled " +| |-FieldDecl 0x5604680ad488 col:13 last_ 'int64_t':'long' +| |-FieldDecl 0x5604680ad4e8 col:10 task 'bool' +| | `-FullComment 0x560468182920 +| | `-ParagraphComment 0x5604681828f0 +| | `-TextComment 0x5604681828c0 Text=" Is system a task " +| `-FieldDecl 0x5604680ad5a0 col:23 query 'ecs_query_stats_t':'struct ecs_query_stats_t' +|-TypedefDecl 0x5604680ad648 col:3 referenced ecs_system_stats_t 'struct ecs_system_stats_t':'struct ecs_system_stats_t' +| |-ElaboratedType 0x5604680ad5f0 'struct ecs_system_stats_t' sugar +| | `-RecordType 0x5604680ad1c0 'struct ecs_system_stats_t' +| | `-Record 0x5604680ad140 'ecs_system_stats_t' +| `-FullComment 0x5604681829f0 +| `-ParagraphComment 0x5604681829c0 +| `-TextComment 0x560468182990 Text=" Statistics for a single system (use ecs_system_stats_get) " +|-RecordDecl 0x5604680ad6e0 line:10890:16 struct ecs_pipeline_stats_t definition +| |-FullComment 0x560468182ac0 +| | `-ParagraphComment 0x560468182a90 +| | `-TextComment 0x560468182a60 Text=" Statistics for all systems in a pipeline. " +| |-FieldDecl 0x5604680ad7b8 col:19 systems 'ecs_vector_t *' +| | `-FullComment 0x560468182bb0 +| | `-ParagraphComment 0x560468182b80 +| | |-TextComment 0x560468182b30 Text=" Vector with system ids of all systems in the pipeline. The systems are" +| | `-TextComment 0x560468182b50 Text=" stored in the order they are executed. Merges are represented by a 0. " +| |-FieldDecl 0x5604680ad848 col:15 system_stats 'ecs_map_t':'struct ecs_map_t' +| | `-FullComment 0x560468182ca0 +| | `-ParagraphComment 0x560468182c70 +| | |-TextComment 0x560468182c20 Text=" Map with system statistics. For each system in the systems vector, an" +| | `-TextComment 0x560468182c40 Text=" entry in the map exists of type ecs_system_stats_t. " +| |-FieldDecl 0x5604680ad8d8 col:13 t 'int32_t':'int' +| | `-FullComment 0x560468182d70 +| | `-ParagraphComment 0x560468182d40 +| | `-TextComment 0x560468182d10 Text=" Current position in ringbuffer " +| |-FieldDecl 0x5604680ad938 col:13 system_count 'int32_t':'int' +| | `-FullComment 0x560468182e40 +| | `-ParagraphComment 0x560468182e10 +| | `-TextComment 0x560468182de0 Text=" Number of systems in pipeline " +| |-FieldDecl 0x5604680ad9c8 col:13 active_system_count 'int32_t':'int' +| | `-FullComment 0x560468182f10 +| | `-ParagraphComment 0x560468182ee0 +| | `-TextComment 0x560468182eb0 Text=" Number of active systems in pipeline " +| `-FieldDecl 0x5604680ada58 col:13 rebuild_count 'int32_t':'int' +| `-FullComment 0x560468182fe0 +| `-ParagraphComment 0x560468182fb0 +| `-TextComment 0x560468182f80 Text=" Number of times pipeline has rebuilt " +|-TypedefDecl 0x5604680adb38 col:3 referenced ecs_pipeline_stats_t 'struct ecs_pipeline_stats_t':'struct ecs_pipeline_stats_t' +| |-ElaboratedType 0x5604680adae0 'struct ecs_pipeline_stats_t' sugar +| | `-RecordType 0x5604680ad760 'struct ecs_pipeline_stats_t' +| | `-Record 0x5604680ad6e0 'ecs_pipeline_stats_t' +| `-FullComment 0x5604681830b0 +| `-ParagraphComment 0x560468183080 +| `-TextComment 0x560468183050 Text=" Statistics for all systems in a pipeline. " +|-FunctionDecl 0x5604680adde8 line:10913:6 ecs_world_stats_get 'void (const ecs_world_t *, ecs_world_stats_t *)' +| |-ParmVarDecl 0x5604680adbe0 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680adcd8 col:24 stats 'ecs_world_stats_t *' +| `-FullComment 0x560468183360 +| |-ParagraphComment 0x560468183150 +| | `-TextComment 0x560468183120 Text=" Get world statistics." +| |-ParagraphComment 0x5604681831a0 +| | `-TextComment 0x560468183170 Text=" " +| |-ParamCommandComment 0x5604681831c0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468183270 +| | |-TextComment 0x560468183220 Text=" The world." +| | `-TextComment 0x560468183240 Text=" " +| `-ParamCommandComment 0x560468183290 [in] implicitly Param="stats" ParamIndex=1 +| `-ParagraphComment 0x560468183320 +| `-TextComment 0x5604681832f0 Text=" Out parameter for statistics." +|-FunctionDecl 0x5604680ae0b8 line:10919:6 ecs_world_stats_reduce 'void (ecs_world_stats_t *, const ecs_world_stats_t *)' +| |-ParmVarDecl 0x5604680aded8 col:24 dst 'ecs_world_stats_t *' +| |-ParmVarDecl 0x5604680adfa8 col:30 src 'const ecs_world_stats_t *' +| `-FullComment 0x560468183430 +| `-ParagraphComment 0x560468183400 +| `-TextComment 0x5604681833d0 Text=" Reduce source measurement window into single destination measurement. " +|-FunctionDecl 0x5604680ae918 line:10925:6 ecs_world_stats_reduce_last 'void (ecs_world_stats_t *, const ecs_world_stats_t *, int32_t)' +| |-ParmVarDecl 0x5604680ae1a8 col:24 stats 'ecs_world_stats_t *' +| |-ParmVarDecl 0x5604680ae220 col:30 old 'const ecs_world_stats_t *' +| |-ParmVarDecl 0x5604680ae7f0 col:13 count 'int32_t':'int' +| `-FullComment 0x560468183500 +| `-ParagraphComment 0x5604681834d0 +| `-TextComment 0x5604681834a0 Text=" Reduce last measurement into previous measurement, restore old value. " +|-FunctionDecl 0x5604680aeaf8 line:10932:6 ecs_world_stats_repeat_last 'void (ecs_world_stats_t *)' +| |-ParmVarDecl 0x5604680aea08 col:24 stats 'ecs_world_stats_t *' +| `-FullComment 0x5604681835d0 +| `-ParagraphComment 0x5604681835a0 +| `-TextComment 0x560468183570 Text=" Repeat last measurement. " +|-FunctionDecl 0x5604680aece8 line:10937:6 ecs_world_stats_copy_last 'void (ecs_world_stats_t *, const ecs_world_stats_t *)' +| |-ParmVarDecl 0x5604680aebd8 col:24 dst 'ecs_world_stats_t *' +| |-ParmVarDecl 0x5604680aec50 col:30 src 'const ecs_world_stats_t *' +| `-FullComment 0x5604681836a0 +| `-ParagraphComment 0x560468183670 +| `-TextComment 0x560468183640 Text=" Copy last measurement from source to destination. " +|-FunctionDecl 0x5604680aef38 line:10942:6 ecs_world_stats_log 'void (const ecs_world_t *, const ecs_world_stats_t *)' +| |-ParmVarDecl 0x5604680aeda8 col:24 world 'const ecs_world_t *' +| `-ParmVarDecl 0x5604680aee20 col:30 stats 'const ecs_world_stats_t *' +|-FunctionDecl 0x5604680af298 line:10954:6 ecs_query_stats_get 'void (const ecs_world_t *, const ecs_query_t *, ecs_query_stats_t *)' +| |-ParmVarDecl 0x5604680af028 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680af0a0 col:24 query 'const ecs_query_t *' +| |-ParmVarDecl 0x5604680af178 col:24 stats 'ecs_query_stats_t *' +| `-FullComment 0x560468183a50 +| |-ParagraphComment 0x560468183760 +| | |-TextComment 0x560468183710 Text=" Get query statistics." +| | `-TextComment 0x560468183730 Text=" Obtain statistics for the provided query." +| |-ParagraphComment 0x5604681837b0 +| | `-TextComment 0x560468183780 Text=" " +| |-ParamCommandComment 0x5604681837d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468183880 +| | |-TextComment 0x560468183830 Text=" The world." +| | `-TextComment 0x560468183850 Text=" " +| |-ParamCommandComment 0x5604681838a0 [in] implicitly Param="query" ParamIndex=1 +| | `-ParagraphComment 0x560468183950 +| | |-TextComment 0x560468183900 Text=" The query." +| | `-TextComment 0x560468183920 Text=" " +| `-ParamCommandComment 0x560468183970 [in] implicitly Param="stats" ParamIndex=2 +| `-ParagraphComment 0x560468183a00 +| `-TextComment 0x5604681839d0 Text=" Out parameter for statistics." +|-FunctionDecl 0x5604680af568 line:10961:6 ecs_query_stats_reduce 'void (ecs_query_stats_t *, const ecs_query_stats_t *)' +| |-ParmVarDecl 0x5604680af388 col:24 dst 'ecs_query_stats_t *' +| |-ParmVarDecl 0x5604680af458 col:30 src 'const ecs_query_stats_t *' +| `-FullComment 0x560468183b20 +| `-ParagraphComment 0x560468183af0 +| `-TextComment 0x560468183ac0 Text=" Reduce source measurement window into single destination measurement. " +|-FunctionDecl 0x5604680af868 line:10967:6 ecs_query_stats_reduce_last 'void (ecs_query_stats_t *, const ecs_query_stats_t *, int32_t)' +| |-ParmVarDecl 0x5604680af658 col:24 stats 'ecs_query_stats_t *' +| |-ParmVarDecl 0x5604680af6d0 col:30 old 'const ecs_query_stats_t *' +| |-ParmVarDecl 0x5604680af748 col:13 count 'int32_t':'int' +| `-FullComment 0x560468183bf0 +| `-ParagraphComment 0x560468183bc0 +| `-TextComment 0x560468183b90 Text=" Reduce last measurement into previous measurement, restore old value. " +|-FunctionDecl 0x5604680afa48 line:10974:6 ecs_query_stats_repeat_last 'void (ecs_query_stats_t *)' +| |-ParmVarDecl 0x5604680af958 col:24 stats 'ecs_query_stats_t *' +| `-FullComment 0x560468183cc0 +| `-ParagraphComment 0x560468183c90 +| `-TextComment 0x560468183c60 Text=" Repeat last measurement. " +|-FunctionDecl 0x5604680afc38 line:10979:6 ecs_query_stats_copy_last 'void (ecs_query_stats_t *, const ecs_query_stats_t *)' +| |-ParmVarDecl 0x5604680afb28 col:24 dst 'ecs_query_stats_t *' +| |-ParmVarDecl 0x5604680afba0 col:30 src 'const ecs_query_stats_t *' +| `-FullComment 0x560468183d90 +| `-ParagraphComment 0x560468183d60 +| `-TextComment 0x560468183d30 Text=" Copy last measurement from source to destination. " +|-FunctionDecl 0x5604680affb8 line:10993:6 ecs_system_stats_get 'bool (const ecs_world_t *, ecs_entity_t, ecs_system_stats_t *)' +| |-ParmVarDecl 0x5604680afd28 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680afda0 col:18 system 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680afe98 col:25 stats 'ecs_system_stats_t *' +| `-FullComment 0x5604681841e0 +| |-ParagraphComment 0x560468183e50 +| | |-TextComment 0x560468183e00 Text=" Get system statistics." +| | `-TextComment 0x560468183e20 Text=" Obtain statistics for the provided system." +| |-ParagraphComment 0x560468183ea0 +| | `-TextComment 0x560468183e70 Text=" " +| |-ParamCommandComment 0x560468183ec0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468183f70 +| | |-TextComment 0x560468183f20 Text=" The world." +| | `-TextComment 0x560468183f40 Text=" " +| |-ParamCommandComment 0x560468183f90 [in] implicitly Param="system" ParamIndex=1 +| | `-ParagraphComment 0x560468184040 +| | |-TextComment 0x560468183ff0 Text=" The system." +| | `-TextComment 0x560468184010 Text=" " +| |-ParamCommandComment 0x560468184060 [in] implicitly Param="stats" ParamIndex=2 +| | `-ParagraphComment 0x560468184110 +| | |-TextComment 0x5604681840c0 Text=" Out parameter for statistics." +| | `-TextComment 0x5604681840e0 Text=" " +| `-BlockCommandComment 0x560468184130 Name="return" +| `-ParagraphComment 0x560468184190 +| `-TextComment 0x560468184160 Text=" true if success, false if not a system." +|-FunctionDecl 0x5604680b0288 line:11000:6 ecs_system_stats_reduce 'void (ecs_system_stats_t *, const ecs_system_stats_t *)' +| |-ParmVarDecl 0x5604680b00a8 col:25 dst 'ecs_system_stats_t *' +| |-ParmVarDecl 0x5604680b0178 col:31 src 'const ecs_system_stats_t *' +| `-FullComment 0x5604681842b0 +| `-ParagraphComment 0x560468184280 +| `-TextComment 0x560468184250 Text=" Reduce source measurement window into single destination measurement " +|-FunctionDecl 0x5604680b0588 line:11006:6 ecs_system_stats_reduce_last 'void (ecs_system_stats_t *, const ecs_system_stats_t *, int32_t)' +| |-ParmVarDecl 0x5604680b0378 col:25 stats 'ecs_system_stats_t *' +| |-ParmVarDecl 0x5604680b03f0 col:31 old 'const ecs_system_stats_t *' +| |-ParmVarDecl 0x5604680b0468 col:13 count 'int32_t':'int' +| `-FullComment 0x560468184380 +| `-ParagraphComment 0x560468184350 +| `-TextComment 0x560468184320 Text=" Reduce last measurement into previous measurement, restore old value. " +|-FunctionDecl 0x5604680b0ac0 line:11013:6 ecs_system_stats_repeat_last 'void (ecs_system_stats_t *)' +| |-ParmVarDecl 0x5604680b0678 col:25 stats 'ecs_system_stats_t *' +| `-FullComment 0x560468184460 +| `-ParagraphComment 0x560468184420 +| `-TextComment 0x5604681843f0 Text=" Repeat last measurement. " +|-FunctionDecl 0x5604680b0cb8 line:11018:6 ecs_system_stats_copy_last 'void (ecs_system_stats_t *, const ecs_system_stats_t *)' +| |-ParmVarDecl 0x5604680b0ba8 col:25 dst 'ecs_system_stats_t *' +| |-ParmVarDecl 0x5604680b0c20 col:31 src 'const ecs_system_stats_t *' +| `-FullComment 0x560468184530 +| `-ParagraphComment 0x560468184500 +| `-TextComment 0x5604681844d0 Text=" Copy last measurement from source to destination. " +|-FunctionDecl 0x5604680b1038 line:11033:6 ecs_pipeline_stats_get 'bool (ecs_world_t *, ecs_entity_t, ecs_pipeline_stats_t *)' +| |-ParmVarDecl 0x5604680b0da8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680b0e20 col:18 pipeline 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b0f18 col:27 stats 'ecs_pipeline_stats_t *' +| `-FullComment 0x560468184980 +| |-ParagraphComment 0x5604681845f0 +| | |-TextComment 0x5604681845a0 Text=" Get pipeline statistics." +| | `-TextComment 0x5604681845c0 Text=" Obtain statistics for the provided pipeline." +| |-ParagraphComment 0x560468184640 +| | `-TextComment 0x560468184610 Text=" " +| |-ParamCommandComment 0x560468184660 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468184710 +| | |-TextComment 0x5604681846c0 Text=" The world." +| | `-TextComment 0x5604681846e0 Text=" " +| |-ParamCommandComment 0x560468184730 [in] implicitly Param="pipeline" ParamIndex=1 +| | `-ParagraphComment 0x5604681847e0 +| | |-TextComment 0x560468184790 Text=" The pipeline." +| | `-TextComment 0x5604681847b0 Text=" " +| |-ParamCommandComment 0x560468184800 [in] implicitly Param="stats" ParamIndex=2 +| | `-ParagraphComment 0x5604681848b0 +| | |-TextComment 0x560468184860 Text=" Out parameter for statistics." +| | `-TextComment 0x560468184880 Text=" " +| `-BlockCommandComment 0x5604681848d0 Name="return" +| `-ParagraphComment 0x560468184930 +| `-TextComment 0x560468184900 Text=" true if success, false if not a pipeline." +|-FunctionDecl 0x5604680b1218 line:11043:6 ecs_pipeline_stats_fini 'void (ecs_pipeline_stats_t *)' +| |-ParmVarDecl 0x5604680b1128 col:27 stats 'ecs_pipeline_stats_t *' +| `-FullComment 0x560468184b60 +| |-ParagraphComment 0x560468184a20 +| | `-TextComment 0x5604681849f0 Text=" Free pipeline stats." +| |-ParagraphComment 0x560468184a70 +| | `-TextComment 0x560468184a40 Text=" " +| `-ParamCommandComment 0x560468184a90 [in] implicitly Param="stats" ParamIndex=0 +| `-ParagraphComment 0x560468184b20 +| `-TextComment 0x560468184af0 Text=" The stats to free." +|-FunctionDecl 0x5604680b14d8 line:11048:6 ecs_pipeline_stats_reduce 'void (ecs_pipeline_stats_t *, const ecs_pipeline_stats_t *)' +| |-ParmVarDecl 0x5604680b12f8 col:27 dst 'ecs_pipeline_stats_t *' +| |-ParmVarDecl 0x5604680b13c8 col:33 src 'const ecs_pipeline_stats_t *' +| `-FullComment 0x560468184c30 +| `-ParagraphComment 0x560468184c00 +| `-TextComment 0x560468184bd0 Text=" Reduce source measurement window into single destination measurement " +|-FunctionDecl 0x5604680b17d8 line:11054:6 ecs_pipeline_stats_reduce_last 'void (ecs_pipeline_stats_t *, const ecs_pipeline_stats_t *, int32_t)' +| |-ParmVarDecl 0x5604680b15c8 col:27 stats 'ecs_pipeline_stats_t *' +| |-ParmVarDecl 0x5604680b1640 col:33 old 'const ecs_pipeline_stats_t *' +| |-ParmVarDecl 0x5604680b16b8 col:13 count 'int32_t':'int' +| `-FullComment 0x560468184d00 +| `-ParagraphComment 0x560468184cd0 +| `-TextComment 0x560468184ca0 Text=" Reduce last measurement into previous measurement, restore old value. " +|-FunctionDecl 0x5604680b1958 line:11061:6 ecs_pipeline_stats_repeat_last 'void (ecs_pipeline_stats_t *)' +| |-ParmVarDecl 0x5604680b18c8 col:27 stats 'ecs_pipeline_stats_t *' +| `-FullComment 0x560468184dd0 +| `-ParagraphComment 0x560468184da0 +| `-TextComment 0x560468184d70 Text=" Repeat last measurement. " +|-FunctionDecl 0x5604680b1b48 line:11072:6 ecs_pipeline_stats_copy_last 'void (ecs_pipeline_stats_t *, const ecs_pipeline_stats_t *)' +| |-ParmVarDecl 0x5604680b1a38 col:27 dst 'ecs_pipeline_stats_t *' +| |-ParmVarDecl 0x5604680b1ab0 col:33 src 'const ecs_pipeline_stats_t *' +| `-FullComment 0x5604681850d0 +| |-ParagraphComment 0x560468184ec0 +| | |-TextComment 0x560468184e40 Text=" Copy last measurement to destination." +| | |-TextComment 0x560468184e60 Text=" This operation copies the last measurement into the destination. It does not" +| | `-TextComment 0x560468184e80 Text=" modify the cursor." +| |-ParagraphComment 0x560468184f10 +| | `-TextComment 0x560468184ee0 Text=" " +| |-ParamCommandComment 0x560468184f30 [in] implicitly Param="dst" ParamIndex=0 +| | `-ParagraphComment 0x560468184fe0 +| | |-TextComment 0x560468184f90 Text=" The metrics." +| | `-TextComment 0x560468184fb0 Text=" " +| `-ParamCommandComment 0x560468185000 [in] implicitly Param="src" ParamIndex=1 +| `-ParagraphComment 0x560468185090 +| `-TextComment 0x560468185060 Text=" The metrics to copy." +|-FunctionDecl 0x5604680b1f98 line:11080:6 ecs_metric_reduce 'void (ecs_metric_t *, const ecs_metric_t *, int32_t, int32_t)' +| |-ParmVarDecl 0x5604680b1c98 col:19 dst 'ecs_metric_t *' +| |-ParmVarDecl 0x5604680b1d68 col:25 src 'const ecs_metric_t *' +| |-ParmVarDecl 0x5604680b1de0 col:13 t_dst 'int32_t':'int' +| |-ParmVarDecl 0x5604680b1e58 col:13 t_src 'int32_t':'int' +| `-FullComment 0x5604681851a0 +| `-ParagraphComment 0x560468185170 +| `-TextComment 0x560468185140 Text=" Reduce all measurements from a window into a single measurement. " +|-FunctionDecl 0x5604680b22a8 line:11088:6 ecs_metric_reduce_last 'void (ecs_metric_t *, int32_t, int32_t)' +| |-ParmVarDecl 0x5604680b2098 col:19 m 'ecs_metric_t *' +| |-ParmVarDecl 0x5604680b2110 col:13 t 'int32_t':'int' +| |-ParmVarDecl 0x5604680b2188 col:13 count 'int32_t':'int' +| `-FullComment 0x560468185270 +| `-ParagraphComment 0x560468185240 +| `-TextComment 0x560468185210 Text=" Reduce last measurement into previous measurement " +|-FunctionDecl 0x5604680b2528 line:11095:6 ecs_metric_copy 'void (ecs_metric_t *, int32_t, int32_t)' +| |-ParmVarDecl 0x5604680b2398 col:19 m 'ecs_metric_t *' +| |-ParmVarDecl 0x5604680b2410 col:13 dst 'int32_t':'int' +| |-ParmVarDecl 0x5604680b2488 col:13 src 'int32_t':'int' +| `-FullComment 0x560468185340 +| `-ParagraphComment 0x560468185310 +| `-TextComment 0x5604681852e0 Text=" Copy measurement " +|-VarDecl 0x5604680b2678 :53:1> col:1 FLECS__EFlecsMonitor 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680b26f0 :54:1> col:1 FLECS__EEcsWorldStats 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680b2768 :55:1> col:1 FLECS__EEcsPipelineStats 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680b27e0 col:31 EcsPeriod1s 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680b2858 col:31 EcsPeriod1m 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680b28d0 col:31 EcsPeriod1h 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680b2948 col:31 EcsPeriod1d 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680b29c0 col:31 EcsPeriod1w 'ecs_entity_t':'unsigned long' extern +|-RecordDecl 0x5604680b2a28 line:11158:9 struct definition +| |-FieldDecl 0x5604680b3e58 col:17 elapsed 'float' +| `-FieldDecl 0x5604680b3eb8 col:13 reduce_count 'int32_t':'int' +|-TypedefDecl 0x5604680b3f68 col:3 referenced EcsStatsHeader 'struct EcsStatsHeader':'EcsStatsHeader' +| `-ElaboratedType 0x5604680b3f10 'struct EcsStatsHeader' sugar +| `-RecordType 0x5604680b3e20 'EcsStatsHeader' +| `-Record 0x5604680b2a28 '' +|-RecordDecl 0x5604680b3fd8 line:11163:9 struct definition +| |-FieldDecl 0x5604680b40b0 col:20 hdr 'EcsStatsHeader':'EcsStatsHeader' +| `-FieldDecl 0x5604680b4110 col:23 stats 'ecs_world_stats_t':'struct ecs_world_stats_t' +|-TypedefDecl 0x5604680b4218 col:3 EcsWorldStats 'struct EcsWorldStats':'EcsWorldStats' +| `-ElaboratedType 0x5604680b41c0 'struct EcsWorldStats' sugar +| `-RecordType 0x5604680b4060 'EcsWorldStats' +| `-Record 0x5604680b3fd8 '' +|-RecordDecl 0x5604680b4288 line:11168:9 struct definition +| |-FieldDecl 0x5604680b4340 col:20 hdr 'EcsStatsHeader':'EcsStatsHeader' +| `-FieldDecl 0x5604680b43a0 col:26 stats 'ecs_pipeline_stats_t':'struct ecs_pipeline_stats_t' +|-TypedefDecl 0x5604680b4448 col:3 EcsPipelineStats 'struct EcsPipelineStats':'EcsPipelineStats' +| `-ElaboratedType 0x5604680b43f0 'struct EcsPipelineStats' sugar +| `-RecordType 0x5604680b4310 'EcsPipelineStats' +| `-Record 0x5604680b4288 '' +|-FunctionDecl 0x5604680b4558 line:11175:6 FlecsMonitorImport 'void (ecs_world_t *)' +| `-ParmVarDecl 0x5604680b44c8 col:18 world 'ecs_world_t *' +|-FunctionDecl 0x5604680b4728 line:11229:6 FlecsCoreDocImport 'void (ecs_world_t *)' +| |-ParmVarDecl 0x5604680b4698 col:18 world 'ecs_world_t *' +| `-FullComment 0x560468185680 +| |-ParagraphComment 0x5604681853e0 +| | `-TextComment 0x5604681853b0 Text=" " +| |-VerbatimLineComment 0x560468185400 Text=" c_addons_coredoc Coredoc" +| |-ParagraphComment 0x560468185470 +| | `-TextComment 0x560468185440 Text=" " +| |-BlockCommandComment 0x560468185490 Name="brief" +| | `-ParagraphComment 0x5604681854f0 +| | `-TextComment 0x5604681854c0 Text=" Module that adds documentation and reflection to core entities." +| |-ParagraphComment 0x560468185540 +| | `-TextComment 0x560468185510 Text=" " +| |-VerbatimLineComment 0x560468185560 Text=" c_addons" +| `-ParagraphComment 0x560468185620 +| |-TextComment 0x5604681855a0 Text=" " +| |-TextComment 0x5604681855c0 Text="@" +| `-TextComment 0x5604681855e0 Text="{" +|-VarDecl 0x5604680b4838 :56:1> col:1 FLECS__EEcsDocDescription 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680b48b0 col:37 EcsDocBrief 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680b4928 col:37 EcsDocDetail 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680b49a0 col:37 EcsDocLink 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680b4a18 col:37 EcsDocColor 'const ecs_entity_t':'const unsigned long' extern +|-RecordDecl 0x5604680b4a80 line:11284:16 struct EcsDocDescription definition +| `-FieldDecl 0x5604680b4b38 col:11 value 'char *' +|-TypedefDecl 0x5604680b4be8 col:3 EcsDocDescription 'struct EcsDocDescription':'struct EcsDocDescription' +| `-ElaboratedType 0x5604680b4b90 'struct EcsDocDescription' sugar +| `-RecordType 0x5604680b4b00 'struct EcsDocDescription' +| `-Record 0x5604680b4a80 'EcsDocDescription' +|-FunctionDecl 0x5604680b4e28 line:11297:6 ecs_doc_set_name 'void (ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x5604680b4c90 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680b4d08 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b4d88 col:17 name 'const char *' +| `-FullComment 0x560468185a60 +| |-ParagraphComment 0x560468185770 +| | |-TextComment 0x5604681856f0 Text=" Add human-readable name to entity." +| | |-TextComment 0x560468185710 Text=" Contrary to entity names, human readable names do not have to be unique and" +| | `-TextComment 0x560468185730 Text=" can contain special characters used in the query language like '*'." +| |-ParagraphComment 0x5604681857c0 +| | `-TextComment 0x560468185790 Text=" " +| |-ParamCommandComment 0x5604681857e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468185890 +| | |-TextComment 0x560468185840 Text=" The world." +| | `-TextComment 0x560468185860 Text=" " +| |-ParamCommandComment 0x5604681858b0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468185960 +| | |-TextComment 0x560468185910 Text=" The entity to which to add the name." +| | `-TextComment 0x560468185930 Text=" " +| `-ParamCommandComment 0x560468185980 [in] implicitly Param="name" ParamIndex=2 +| `-ParagraphComment 0x560468185a10 +| `-TextComment 0x5604681859e0 Text=" The name to add." +|-FunctionDecl 0x5604680b50b0 line:11309:6 ecs_doc_set_brief 'void (ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x5604680b4f18 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680b4f90 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b5010 col:17 description 'const char *' +| `-FullComment 0x560468185df0 +| |-ParagraphComment 0x560468185b00 +| | `-TextComment 0x560468185ad0 Text=" Add brief description to entity." +| |-ParagraphComment 0x560468185b50 +| | `-TextComment 0x560468185b20 Text=" " +| |-ParamCommandComment 0x560468185b70 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468185c20 +| | |-TextComment 0x560468185bd0 Text=" The world." +| | `-TextComment 0x560468185bf0 Text=" " +| |-ParamCommandComment 0x560468185c40 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468185cf0 +| | |-TextComment 0x560468185ca0 Text=" The entity to which to add the description." +| | `-TextComment 0x560468185cc0 Text=" " +| `-ParamCommandComment 0x560468185d10 [in] implicitly Param="description" ParamIndex=2 +| `-ParagraphComment 0x560468185da0 +| `-TextComment 0x560468185d70 Text=" The description to add." +|-FunctionDecl 0x5604680b5340 line:11321:6 ecs_doc_set_detail 'void (ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x5604680b51a8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680b5220 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b52a0 col:17 description 'const char *' +| `-FullComment 0x560468186180 +| |-ParagraphComment 0x560468185e90 +| | `-TextComment 0x560468185e60 Text=" Add detailed description to entity." +| |-ParagraphComment 0x560468185ee0 +| | `-TextComment 0x560468185eb0 Text=" " +| |-ParamCommandComment 0x560468185f00 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468185fb0 +| | |-TextComment 0x560468185f60 Text=" The world." +| | `-TextComment 0x560468185f80 Text=" " +| |-ParamCommandComment 0x560468185fd0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468186080 +| | |-TextComment 0x560468186030 Text=" The entity to which to add the description." +| | `-TextComment 0x560468186050 Text=" " +| `-ParamCommandComment 0x5604681860a0 [in] implicitly Param="description" ParamIndex=2 +| `-ParagraphComment 0x560468186130 +| `-TextComment 0x560468186100 Text=" The description to add." +|-FunctionDecl 0x5604680b55d0 line:11333:6 ecs_doc_set_link 'void (ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x5604680b5438 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680b54b0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b5530 col:17 link 'const char *' +| `-FullComment 0x560468186540 +| |-ParagraphComment 0x560468186220 +| | `-TextComment 0x5604681861f0 Text=" Add link to external documentation to entity." +| |-ParagraphComment 0x560468186270 +| | `-TextComment 0x560468186240 Text=" " +| |-ParamCommandComment 0x560468186290 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468186340 +| | |-TextComment 0x5604681862f0 Text=" The world." +| | `-TextComment 0x560468186310 Text=" " +| |-ParamCommandComment 0x560468186360 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468186410 +| | |-TextComment 0x5604681863c0 Text=" The entity to which to add the link." +| | `-TextComment 0x5604681863e0 Text=" " +| `-ParamCommandComment 0x560468186460 [in] implicitly Param="link" ParamIndex=2 +| `-ParagraphComment 0x5604681864f0 +| `-TextComment 0x5604681864c0 Text=" The link to add." +|-FunctionDecl 0x5604680b5860 line:11346:6 ecs_doc_set_color 'void (ecs_world_t *, ecs_entity_t, const char *)' +| |-ParmVarDecl 0x5604680b56c8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680b5740 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b57c0 col:17 color 'const char *' +| `-FullComment 0x5604681868f0 +| |-ParagraphComment 0x560468186600 +| | |-TextComment 0x5604681865b0 Text=" Add color to entity." +| | `-TextComment 0x5604681865d0 Text=" UIs can use color as hint to improve visualizing entities." +| |-ParagraphComment 0x560468186650 +| | `-TextComment 0x560468186620 Text=" " +| |-ParamCommandComment 0x560468186670 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468186720 +| | |-TextComment 0x5604681866d0 Text=" The world." +| | `-TextComment 0x5604681866f0 Text=" " +| |-ParamCommandComment 0x560468186740 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x5604681867f0 +| | |-TextComment 0x5604681867a0 Text=" The entity to which to add the link." +| | `-TextComment 0x5604681867c0 Text=" " +| `-ParamCommandComment 0x560468186810 [in] implicitly Param="color" ParamIndex=2 +| `-ParagraphComment 0x5604681868a0 +| `-TextComment 0x560468186870 Text=" The color to add." +|-FunctionDecl 0x5604680b5a70 line:11365:13 ecs_doc_get_name 'const char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680b5958 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b59d0 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468186db0 +| |-ParagraphComment 0x5604681869e0 +| | |-TextComment 0x560468186960 Text=" Get human readable name from entity." +| | |-TextComment 0x560468186980 Text=" If entity does not have an explicit human readable name, this operation will" +| | `-TextComment 0x5604681869a0 Text=" return the entity name." +| |-ParagraphComment 0x560468186af0 +| | |-TextComment 0x560468186a00 Text=" To test if an entity has a human readable name, use:" +| | |-TextComment 0x560468186a20 Text=" ecs_has_pair(world, e, ecs_id(EcsDescription), EcsName);" +| | |-TextComment 0x560468186a40 Text=" Or in C++:" +| | |-TextComment 0x560468186a60 Text=" e.has" +| | |-TextComment 0x560468186a80 Text=" Text="::Description>(flecs::Name);" +| |-ParagraphComment 0x560468186b40 +| | `-TextComment 0x560468186b10 Text=" " +| |-ParamCommandComment 0x560468186b60 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468186c10 +| | |-TextComment 0x560468186bc0 Text=" The world." +| | `-TextComment 0x560468186be0 Text=" " +| |-ParamCommandComment 0x560468186c30 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468186ce0 +| | |-TextComment 0x560468186c90 Text=" The entity from which to get the name." +| | `-TextComment 0x560468186cb0 Text=" " +| `-BlockCommandComment 0x560468186d00 Name="return" +| `-ParagraphComment 0x560468186d60 +| `-TextComment 0x560468186d30 Text=" The name." +|-FunctionDecl 0x5604680b5c70 line:11376:13 ecs_doc_get_brief 'const char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680b5b58 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b5bd0 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468187110 +| |-ParagraphComment 0x560468186e50 +| | `-TextComment 0x560468186e20 Text=" Get brief description from entity." +| |-ParagraphComment 0x560468186ea0 +| | `-TextComment 0x560468186e70 Text=" " +| |-ParamCommandComment 0x560468186ec0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468186f70 +| | |-TextComment 0x560468186f20 Text=" The world." +| | `-TextComment 0x560468186f40 Text=" " +| |-ParamCommandComment 0x560468186f90 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468187040 +| | |-TextComment 0x560468186ff0 Text=" The entity from which to get the description." +| | `-TextComment 0x560468187010 Text=" " +| `-BlockCommandComment 0x560468187060 Name="return" +| `-ParagraphComment 0x5604681870c0 +| `-TextComment 0x560468187090 Text=" The description." +|-FunctionDecl 0x5604680b6210 line:11387:13 ecs_doc_get_detail 'const char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680b5d58 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b6170 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468187470 +| |-ParagraphComment 0x5604681871b0 +| | `-TextComment 0x560468187180 Text=" Get detailed description from entity." +| |-ParagraphComment 0x560468187200 +| | `-TextComment 0x5604681871d0 Text=" " +| |-ParamCommandComment 0x560468187220 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681872d0 +| | |-TextComment 0x560468187280 Text=" The world." +| | `-TextComment 0x5604681872a0 Text=" " +| |-ParamCommandComment 0x5604681872f0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x5604681873a0 +| | |-TextComment 0x560468187350 Text=" The entity from which to get the description." +| | `-TextComment 0x560468187370 Text=" " +| `-BlockCommandComment 0x5604681873c0 Name="return" +| `-ParagraphComment 0x560468187420 +| `-TextComment 0x5604681873f0 Text=" The description." +|-FunctionDecl 0x5604680b6410 line:11398:13 ecs_doc_get_link 'const char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680b62f8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b6370 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x5604681877d0 +| |-ParagraphComment 0x560468187510 +| | `-TextComment 0x5604681874e0 Text=" Get link to external documentation from entity." +| |-ParagraphComment 0x560468187560 +| | `-TextComment 0x560468187530 Text=" " +| |-ParamCommandComment 0x560468187580 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468187630 +| | |-TextComment 0x5604681875e0 Text=" The world." +| | `-TextComment 0x560468187600 Text=" " +| |-ParamCommandComment 0x560468187650 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468187700 +| | |-TextComment 0x5604681876b0 Text=" The entity from which to get the link." +| | `-TextComment 0x5604681876d0 Text=" " +| `-BlockCommandComment 0x560468187720 Name="return" +| `-ParagraphComment 0x560468187780 +| `-TextComment 0x560468187750 Text=" The link." +|-FunctionDecl 0x5604680b6610 line:11409:13 ecs_doc_get_color 'const char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680b64f8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b6570 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468187b30 +| |-ParagraphComment 0x560468187870 +| | `-TextComment 0x560468187840 Text=" Get color from entity." +| |-ParagraphComment 0x5604681878c0 +| | `-TextComment 0x560468187890 Text=" " +| |-ParamCommandComment 0x5604681878e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468187990 +| | |-TextComment 0x560468187940 Text=" The world." +| | `-TextComment 0x560468187960 Text=" " +| |-ParamCommandComment 0x5604681879b0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x560468187a60 +| | |-TextComment 0x560468187a10 Text=" The entity from which to get the link." +| | `-TextComment 0x560468187a30 Text=" " +| `-BlockCommandComment 0x560468187a80 Name="return" +| `-ParagraphComment 0x560468187ae0 +| `-TextComment 0x560468187ab0 Text=" The color." +|-FunctionDecl 0x5604680b6760 line:11415:6 FlecsDocImport 'void (ecs_world_t *)' +| `-ParmVarDecl 0x5604680b66d0 col:18 world 'ecs_world_t *' +|-RecordDecl 0x5604680b6898 line:11465:16 struct ecs_parse_json_desc_t definition +| |-FullComment 0x560468187c00 +| | `-ParagraphComment 0x560468187bd0 +| | `-TextComment 0x560468187ba0 Text=" Used with ecs_parse_json. " +| |-FieldDecl 0x5604680b6958 col:17 name 'const char *' +| `-FieldDecl 0x5604680b69c0 col:17 expr 'const char *' +|-TypedefDecl 0x5604680b6a68 col:3 referenced ecs_parse_json_desc_t 'struct ecs_parse_json_desc_t':'struct ecs_parse_json_desc_t' +| |-ElaboratedType 0x5604680b6a10 'struct ecs_parse_json_desc_t' sugar +| | `-RecordType 0x5604680b6920 'struct ecs_parse_json_desc_t' +| | `-Record 0x5604680b6898 'ecs_parse_json_desc_t' +| `-FullComment 0x560468187cd0 +| `-ParagraphComment 0x560468187ca0 +| `-TextComment 0x560468187c70 Text=" Used with ecs_parse_json. " +|-FunctionDecl 0x5604680b6ed0 line:11482:13 ecs_parse_json 'const char *(const ecs_world_t *, const char *, ecs_entity_t, void *, const ecs_parse_json_desc_t *)' +| |-ParmVarDecl 0x5604680b6b10 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b6b90 col:17 ptr 'const char *' +| |-ParmVarDecl 0x5604680b6c08 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b6c88 col:11 data_out 'void *' +| |-ParmVarDecl 0x5604680b6d78 col:34 desc 'const ecs_parse_json_desc_t *' +| `-FullComment 0x560468188300 +| |-ParagraphComment 0x560468187dc0 +| | |-TextComment 0x560468187d40 Text=" Parse JSON string into value." +| | |-TextComment 0x560468187d60 Text=" This operation parses a JSON expression into the provided pointer. The" +| | `-TextComment 0x560468187d80 Text=" memory pointed to must be large enough to contain a value of the used type." +| |-ParagraphComment 0x560468187e10 +| | `-TextComment 0x560468187de0 Text=" " +| |-ParamCommandComment 0x560468187e30 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468187ee0 +| | |-TextComment 0x560468187e90 Text=" The world." +| | `-TextComment 0x560468187eb0 Text=" " +| |-ParamCommandComment 0x560468187f00 [in] implicitly Param="ptr" ParamIndex=1 +| | `-ParagraphComment 0x560468187fb0 +| | |-TextComment 0x560468187f60 Text=" The pointer to the expression to parse." +| | `-TextComment 0x560468187f80 Text=" " +| |-ParamCommandComment 0x560468187fd0 [in] implicitly Param="type" ParamIndex=2 +| | `-ParagraphComment 0x560468188080 +| | |-TextComment 0x560468188030 Text=" The type of the expression to parse." +| | `-TextComment 0x560468188050 Text=" " +| |-ParamCommandComment 0x5604681880a0 [in] implicitly Param="data_out" ParamIndex=3 +| | `-ParagraphComment 0x560468188150 +| | |-TextComment 0x560468188100 Text=" Pointer to the memory to write to." +| | `-TextComment 0x560468188120 Text=" " +| |-ParamCommandComment 0x560468188170 [in] implicitly Param="desc" ParamIndex=4 +| | `-ParagraphComment 0x560468188220 +| | |-TextComment 0x5604681881d0 Text=" Configuration parameters for deserializer." +| | `-TextComment 0x5604681881f0 Text=" " +| `-BlockCommandComment 0x560468188240 Name="return" +| `-ParagraphComment 0x5604681882a0 +| `-TextComment 0x560468188270 Text=" Pointer to the character after the last one read, or NULL if failed." +|-FunctionDecl 0x5604680b7290 line:11494:13 ecs_parse_json_values 'const char *(ecs_world_t *, ecs_entity_t, const char *, const ecs_parse_json_desc_t *)' +| |-ParmVarDecl 0x5604680b6fd8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680b7050 col:18 e 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b70d0 col:17 ptr 'const char *' +| |-ParmVarDecl 0x5604680b7148 col:34 desc 'const ecs_parse_json_desc_t *' +| `-FullComment 0x560468188420 +| `-ParagraphComment 0x5604681883f0 +| |-TextComment 0x560468188370 Text=" Parse JSON object with multiple component values into entity. The format" +| |-TextComment 0x560468188390 Text=" is the same as the one outputted by ecs_entity_to_json, but at the moment" +| `-TextComment 0x5604681883b0 Text=" only supports the "ids" and "values" member." +|-FunctionDecl 0x5604680b7640 line:11515:7 ecs_array_to_json 'char *(const ecs_world_t *, ecs_entity_t, const void *, int32_t)' +| |-ParmVarDecl 0x5604680b7388 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b7400 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b7480 col:17 data 'const void *' +| |-ParmVarDecl 0x5604680b74f8 col:13 count 'int32_t':'int' +| `-FullComment 0x560468188a40 +| |-ParagraphComment 0x560468188530 +| | |-TextComment 0x5604681884b0 Text=" Serialize value into JSON string." +| | |-TextComment 0x5604681884d0 Text=" This operation serializes a value of the provided type to a JSON string. The " +| | `-TextComment 0x5604681884f0 Text=" memory pointed to must be large enough to contain a value of the used type." +| |-ParagraphComment 0x5604681885d0 +| | |-TextComment 0x560468188550 Text=" If count is 0, the function will serialize a single value, not wrapped in" +| | |-TextComment 0x560468188570 Text=" array brackets. If count is >= 1, the operation will serialize values to a" +| | `-TextComment 0x560468188590 Text=" a comma-separated list inside of array brackets." +| |-ParagraphComment 0x560468188620 +| | `-TextComment 0x5604681885f0 Text=" " +| |-ParamCommandComment 0x560468188640 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681886f0 +| | |-TextComment 0x5604681886a0 Text=" The world." +| | `-TextComment 0x5604681886c0 Text=" " +| |-ParamCommandComment 0x560468188710 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x5604681887c0 +| | |-TextComment 0x560468188770 Text=" The type of the value to serialize." +| | `-TextComment 0x560468188790 Text=" " +| |-ParamCommandComment 0x5604681887e0 [in] implicitly Param="data" ParamIndex=2 +| | `-ParagraphComment 0x560468188890 +| | |-TextComment 0x560468188840 Text=" The value to serialize." +| | `-TextComment 0x560468188860 Text=" " +| |-ParamCommandComment 0x5604681888b0 [in] implicitly Param="count" ParamIndex=3 +| | `-ParagraphComment 0x560468188960 +| | |-TextComment 0x560468188910 Text=" The number of elements to serialize." +| | `-TextComment 0x560468188930 Text=" " +| `-BlockCommandComment 0x560468188980 Name="return" +| `-ParagraphComment 0x5604681889e0 +| `-TextComment 0x5604681889b0 Text=" String with JSON expression, or NULL if failed." +|-FunctionDecl 0x5604680b7a80 line:11532:5 ecs_array_to_json_buf 'int (const ecs_world_t *, ecs_entity_t, const void *, int32_t, ecs_strbuf_t *)' +| |-ParmVarDecl 0x5604680b7738 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b77b0 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b7830 col:17 data 'const void *' +| |-ParmVarDecl 0x5604680b78a8 col:13 count 'int32_t':'int' +| |-ParmVarDecl 0x5604680b7920 col:19 buf_out 'ecs_strbuf_t *' +| `-FullComment 0x560468189040 +| |-ParagraphComment 0x560468188b00 +| | |-TextComment 0x560468188ab0 Text=" Serialize value into JSON string buffer." +| | `-TextComment 0x560468188ad0 Text=" Same as ecs_array_to_json_buf, but serializes to an ecs_strbuf_t instance." +| |-ParagraphComment 0x560468188b50 +| | `-TextComment 0x560468188b20 Text=" " +| |-ParamCommandComment 0x560468188b70 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468188c20 +| | |-TextComment 0x560468188bd0 Text=" The world." +| | `-TextComment 0x560468188bf0 Text=" " +| |-ParamCommandComment 0x560468188c40 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x560468188cf0 +| | |-TextComment 0x560468188ca0 Text=" The type of the value to serialize." +| | `-TextComment 0x560468188cc0 Text=" " +| |-ParamCommandComment 0x560468188d10 [in] implicitly Param="data" ParamIndex=2 +| | `-ParagraphComment 0x560468188dc0 +| | |-TextComment 0x560468188d70 Text=" The value to serialize." +| | `-TextComment 0x560468188d90 Text=" " +| |-ParamCommandComment 0x560468188de0 [in] implicitly Param="count" ParamIndex=3 +| | `-ParagraphComment 0x560468188e90 +| | |-TextComment 0x560468188e40 Text=" The number of elements to serialize." +| | `-TextComment 0x560468188e60 Text=" " +| |-ParamCommandComment 0x560468188eb0 [in] implicitly Param="buf_out" ParamIndex=4 +| | `-ParagraphComment 0x560468188f60 +| | |-TextComment 0x560468188f10 Text=" The strbuf to append the string to." +| | `-TextComment 0x560468188f30 Text=" " +| `-BlockCommandComment 0x560468188f80 Name="return" +| `-ParagraphComment 0x560468188fe0 +| `-TextComment 0x560468188fb0 Text=" Zero if success, non-zero if failed." +|-FunctionDecl 0x5604680b7db0 line:11548:7 ecs_ptr_to_json 'char *(const ecs_world_t *, ecs_entity_t, const void *)' +| |-ParmVarDecl 0x5604680b7b88 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b7c00 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b7c80 col:17 data 'const void *' +| `-FullComment 0x560468189490 +| |-ParagraphComment 0x560468189100 +| | |-TextComment 0x5604681890b0 Text=" Serialize value into JSON string." +| | `-TextComment 0x5604681890d0 Text=" Same as ecs_array_to_json, with count = 0." +| |-ParagraphComment 0x560468189150 +| | `-TextComment 0x560468189120 Text=" " +| |-ParamCommandComment 0x560468189170 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468189220 +| | |-TextComment 0x5604681891d0 Text=" The world." +| | `-TextComment 0x5604681891f0 Text=" " +| |-ParamCommandComment 0x560468189240 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x5604681892f0 +| | |-TextComment 0x5604681892a0 Text=" The type of the value to serialize." +| | `-TextComment 0x5604681892c0 Text=" " +| |-ParamCommandComment 0x560468189310 [in] implicitly Param="data" ParamIndex=2 +| | `-ParagraphComment 0x5604681893c0 +| | |-TextComment 0x560468189370 Text=" The value to serialize." +| | `-TextComment 0x560468189390 Text=" " +| `-BlockCommandComment 0x5604681893e0 Name="return" +| `-ParagraphComment 0x560468189440 +| `-TextComment 0x560468189410 Text=" String with JSON expression, or NULL if failed." +|-FunctionDecl 0x5604680b8440 line:11563:5 ecs_ptr_to_json_buf 'int (const ecs_world_t *, ecs_entity_t, const void *, ecs_strbuf_t *)' +| |-ParmVarDecl 0x5604680b7ea8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b7f20 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b7fa0 col:17 data 'const void *' +| |-ParmVarDecl 0x5604680b8018 col:19 buf_out 'ecs_strbuf_t *' +| `-FullComment 0x5604681899c0 +| |-ParagraphComment 0x560468189550 +| | |-TextComment 0x560468189500 Text=" Serialize value into JSON string buffer." +| | `-TextComment 0x560468189520 Text=" Same as ecs_ptr_to_json, but serializes to an ecs_strbuf_t instance." +| |-ParagraphComment 0x5604681895a0 +| | `-TextComment 0x560468189570 Text=" " +| |-ParamCommandComment 0x5604681895c0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468189670 +| | |-TextComment 0x560468189620 Text=" The world." +| | `-TextComment 0x560468189640 Text=" " +| |-ParamCommandComment 0x560468189690 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x560468189740 +| | |-TextComment 0x5604681896f0 Text=" The type of the value to serialize." +| | `-TextComment 0x560468189710 Text=" " +| |-ParamCommandComment 0x560468189760 [in] implicitly Param="data" ParamIndex=2 +| | `-ParagraphComment 0x560468189810 +| | |-TextComment 0x5604681897c0 Text=" The value to serialize." +| | `-TextComment 0x5604681897e0 Text=" " +| |-ParamCommandComment 0x560468189830 [in] implicitly Param="buf_out" ParamIndex=3 +| | `-ParagraphComment 0x5604681898e0 +| | |-TextComment 0x560468189890 Text=" The strbuf to append the string to." +| | `-TextComment 0x5604681898b0 Text=" " +| `-BlockCommandComment 0x560468189900 Name="return" +| `-ParagraphComment 0x560468189960 +| `-TextComment 0x560468189930 Text=" Zero if success, non-zero if failed." +|-FunctionDecl 0x5604680b8650 line:11580:7 ecs_type_info_to_json 'char *(const ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680b8538 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b85b0 col:18 type 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468189dc0 +| |-ParagraphComment 0x560468189ab0 +| | |-TextComment 0x560468189a30 Text=" Serialize type info to JSON." +| | |-TextComment 0x560468189a50 Text=" This serializes type information to JSON, and can be used to store/transmit" +| | `-TextComment 0x560468189a70 Text=" the structure of a (component) value." +| |-ParagraphComment 0x560468189b00 +| | `-TextComment 0x560468189ad0 Text=" If the provided type does not have reflection data, "0" will be returned." +| |-ParagraphComment 0x560468189b50 +| | `-TextComment 0x560468189b20 Text=" " +| |-ParamCommandComment 0x560468189b70 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468189c20 +| | |-TextComment 0x560468189bd0 Text=" The world." +| | `-TextComment 0x560468189bf0 Text=" " +| |-ParamCommandComment 0x560468189c40 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x560468189cf0 +| | |-TextComment 0x560468189ca0 Text=" The type to serialize to JSON." +| | `-TextComment 0x560468189cc0 Text=" " +| `-BlockCommandComment 0x560468189d10 Name="return" +| `-ParagraphComment 0x560468189d70 +| `-TextComment 0x560468189d40 Text=" A JSON string with the serialized type info, or NULL if failed." +|-FunctionDecl 0x5604680b8950 line:11593:5 ecs_type_info_to_json_buf 'int (const ecs_world_t *, ecs_entity_t, ecs_strbuf_t *)' +| |-ParmVarDecl 0x5604680b8738 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b87b0 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b8828 col:19 buf_out 'ecs_strbuf_t *' +| `-FullComment 0x56046818a210 +| |-ParagraphComment 0x560468189e80 +| | |-TextComment 0x560468189e30 Text=" Serialize type info into JSON string buffer." +| | `-TextComment 0x560468189e50 Text=" Same as ecs_type_info_to_json, but serializes to an ecs_strbuf_t instance." +| |-ParagraphComment 0x560468189ed0 +| | `-TextComment 0x560468189ea0 Text=" " +| |-ParamCommandComment 0x560468189ef0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468189fa0 +| | |-TextComment 0x560468189f50 Text=" The world." +| | `-TextComment 0x560468189f70 Text=" " +| |-ParamCommandComment 0x560468189fc0 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x56046818a070 +| | |-TextComment 0x56046818a020 Text=" The type to serialize." +| | `-TextComment 0x56046818a040 Text=" " +| |-ParamCommandComment 0x56046818a090 [in] implicitly Param="buf_out" ParamIndex=2 +| | `-ParagraphComment 0x56046818a140 +| | |-TextComment 0x56046818a0f0 Text=" The strbuf to append the string to." +| | `-TextComment 0x56046818a110 Text=" " +| `-BlockCommandComment 0x56046818a160 Name="return" +| `-ParagraphComment 0x56046818a1c0 +| `-TextComment 0x56046818a190 Text=" Zero if success, non-zero if failed." +|-RecordDecl 0x5604680b8a38 line:11599:16 struct ecs_entity_to_json_desc_t definition +| |-FullComment 0x56046818a2e0 +| | `-ParagraphComment 0x56046818a2b0 +| | `-TextComment 0x56046818a280 Text=" Used with ecs_iter_to_json. " +| |-FieldDecl 0x5604680b8af0 col:10 serialize_path 'bool' +| |-FieldDecl 0x5604680b8b50 col:10 serialize_meta_ids 'bool' +| |-FieldDecl 0x5604680b8bb0 col:10 serialize_label 'bool' +| |-FieldDecl 0x5604680b8c10 col:10 serialize_brief 'bool' +| |-FieldDecl 0x5604680b8c70 col:10 serialize_link 'bool' +| |-FieldDecl 0x5604680b8cd0 col:10 serialize_color 'bool' +| |-FieldDecl 0x5604680b8d30 col:10 serialize_id_labels 'bool' +| |-FieldDecl 0x5604680b8d90 col:10 serialize_base 'bool' +| |-FieldDecl 0x5604680b8df0 col:10 serialize_private 'bool' +| |-FieldDecl 0x5604680b8e50 col:10 serialize_hidden 'bool' +| |-FieldDecl 0x5604680b8eb0 col:10 serialize_values 'bool' +| `-FieldDecl 0x5604680b8f10 col:10 serialize_type_info 'bool' +|-TypedefDecl 0x5604680b8fb8 col:3 referenced ecs_entity_to_json_desc_t 'struct ecs_entity_to_json_desc_t':'struct ecs_entity_to_json_desc_t' +| |-ElaboratedType 0x5604680b8f60 'struct ecs_entity_to_json_desc_t' sugar +| | `-RecordType 0x5604680b8ac0 'struct ecs_entity_to_json_desc_t' +| | `-Record 0x5604680b8a38 'ecs_entity_to_json_desc_t' +| `-FullComment 0x56046818a3b0 +| `-ParagraphComment 0x56046818a380 +| `-TextComment 0x56046818a350 Text=" Used with ecs_iter_to_json. " +|-FunctionDecl 0x5604680b92f0 line:11628:7 ecs_entity_to_json 'char *(const ecs_world_t *, ecs_entity_t, const ecs_entity_to_json_desc_t *)' +| |-ParmVarDecl 0x5604680b9060 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b90d8 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b91c8 col:38 desc 'const ecs_entity_to_json_desc_t *' +| `-FullComment 0x56046818a7d0 +| |-ParagraphComment 0x56046818a4c0 +| | |-TextComment 0x56046818a420 Text=" Serialize entity into JSON string." +| | |-TextComment 0x56046818a440 Text=" This creates a JSON object with the entity's (path) name, which components" +| | `-TextComment 0x56046818a480 Text=" and tags the entity has, and the component values." +| |-ParagraphComment 0x56046818a510 +| | `-TextComment 0x56046818a4e0 Text=" The operation may fail if the entity contains components with invalid values." +| |-ParagraphComment 0x56046818a560 +| | `-TextComment 0x56046818a530 Text=" " +| |-ParamCommandComment 0x56046818a580 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046818a630 +| | |-TextComment 0x56046818a5e0 Text=" The world." +| | `-TextComment 0x56046818a600 Text=" " +| |-ParamCommandComment 0x56046818a650 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046818a700 +| | |-TextComment 0x56046818a6b0 Text=" The entity to serialize to JSON." +| | `-TextComment 0x56046818a6d0 Text=" " +| `-BlockCommandComment 0x56046818a720 Name="return" +| `-ParagraphComment 0x56046818a780 +| `-TextComment 0x56046818a750 Text=" A JSON string with the serialized entity data, or NULL if failed." +|-FunctionDecl 0x5604680b96a0 line:11642:5 ecs_entity_to_json_buf 'int (const ecs_world_t *, ecs_entity_t, ecs_strbuf_t *, const ecs_entity_to_json_desc_t *)' +| |-ParmVarDecl 0x5604680b93e8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b9460 col:18 entity 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680b94d8 col:19 buf_out 'ecs_strbuf_t *' +| |-ParmVarDecl 0x5604680b9550 col:38 desc 'const ecs_entity_to_json_desc_t *' +| `-FullComment 0x56046818ac20 +| |-ParagraphComment 0x56046818a890 +| | |-TextComment 0x56046818a840 Text=" Serialize entity into JSON string buffer." +| | `-TextComment 0x56046818a860 Text=" Same as ecs_entity_to_json, but serializes to an ecs_strbuf_t instance." +| |-ParagraphComment 0x56046818a8e0 +| | `-TextComment 0x56046818a8b0 Text=" " +| |-ParamCommandComment 0x56046818a900 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046818a9b0 +| | |-TextComment 0x56046818a960 Text=" The world." +| | `-TextComment 0x56046818a980 Text=" " +| |-ParamCommandComment 0x56046818a9d0 [in] implicitly Param="entity" ParamIndex=1 +| | `-ParagraphComment 0x56046818aa80 +| | |-TextComment 0x56046818aa30 Text=" The entity to serialize." +| | `-TextComment 0x56046818aa50 Text=" " +| |-ParamCommandComment 0x56046818aaa0 [in] implicitly Param="buf_out" ParamIndex=2 +| | `-ParagraphComment 0x56046818ab50 +| | |-TextComment 0x56046818ab00 Text=" The strbuf to append the string to." +| | `-TextComment 0x56046818ab20 Text=" " +| `-BlockCommandComment 0x56046818ab70 Name="return" +| `-ParagraphComment 0x56046818abd0 +| `-TextComment 0x56046818aba0 Text=" Zero if success, non-zero if failed." +|-RecordDecl 0x5604680b9788 line:11649:16 struct ecs_iter_to_json_desc_t definition +| |-FullComment 0x56046818acf0 +| | `-ParagraphComment 0x56046818acc0 +| | `-TextComment 0x56046818ac90 Text=" Used with ecs_iter_to_json. " +| |-FieldDecl 0x5604680b9840 col:10 serialize_term_ids 'bool' +| |-FieldDecl 0x5604680b98a0 col:10 serialize_ids 'bool' +| |-FieldDecl 0x5604680b9900 col:10 serialize_sources 'bool' +| |-FieldDecl 0x5604680b9960 col:10 serialize_variables 'bool' +| |-FieldDecl 0x5604680b99c0 col:10 serialize_is_set 'bool' +| |-FieldDecl 0x5604680b9a20 col:10 serialize_values 'bool' +| |-FieldDecl 0x5604680b9a80 col:10 serialize_entities 'bool' +| |-FieldDecl 0x5604680b9ae0 col:10 serialize_entity_labels 'bool' +| |-FieldDecl 0x5604680b9b40 col:10 serialize_entity_ids 'bool' +| |-FieldDecl 0x5604680b9ba0 col:10 serialize_variable_labels 'bool' +| |-FieldDecl 0x5604680b9c00 col:10 serialize_variable_ids 'bool' +| |-FieldDecl 0x5604680b9c60 col:10 serialize_colors 'bool' +| |-FieldDecl 0x5604680b9cc0 col:10 measure_eval_duration 'bool' +| `-FieldDecl 0x5604680b9d20 col:10 serialize_type_info 'bool' +|-TypedefDecl 0x5604680b9dc8 col:3 referenced ecs_iter_to_json_desc_t 'struct ecs_iter_to_json_desc_t':'struct ecs_iter_to_json_desc_t' +| |-ElaboratedType 0x5604680b9d70 'struct ecs_iter_to_json_desc_t' sugar +| | `-RecordType 0x5604680b9810 'struct ecs_iter_to_json_desc_t' +| | `-Record 0x5604680b9788 'ecs_iter_to_json_desc_t' +| `-FullComment 0x56046818adc0 +| `-ParagraphComment 0x56046818ad90 +| `-TextComment 0x56046818ad60 Text=" Used with ecs_iter_to_json. " +|-FunctionDecl 0x5604680ba100 line:11692:7 ecs_iter_to_json 'char *(const ecs_world_t *, ecs_iter_t *, const ecs_iter_to_json_desc_t *)' +| |-ParmVarDecl 0x5604680b9e70 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680b9ee8 col:17 iter 'ecs_iter_t *' +| |-ParmVarDecl 0x5604680b9fd8 col:36 desc 'const ecs_iter_to_json_desc_t *' +| `-FullComment 0x56046818b170 +| |-ParagraphComment 0x56046818aeb0 +| | |-TextComment 0x56046818ae30 Text=" Serialize iterator into JSON string." +| | |-TextComment 0x56046818ae50 Text=" This operation will iterate the contents of the iterator and serialize them" +| | `-TextComment 0x56046818ae70 Text=" to JSON. The function acccepts iterators from any source." +| |-ParagraphComment 0x56046818af00 +| | `-TextComment 0x56046818aed0 Text=" " +| |-ParamCommandComment 0x56046818af20 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046818afd0 +| | |-TextComment 0x56046818af80 Text=" The world." +| | `-TextComment 0x56046818afa0 Text=" " +| |-ParamCommandComment 0x56046818aff0 [in] implicitly Param="iter" ParamIndex=1 +| | `-ParagraphComment 0x56046818b0a0 +| | |-TextComment 0x56046818b050 Text=" The iterator to serialize to JSON." +| | `-TextComment 0x56046818b070 Text=" " +| `-BlockCommandComment 0x56046818b0c0 Name="return" +| `-ParagraphComment 0x56046818b120 +| `-TextComment 0x56046818b0f0 Text=" A JSON string with the serialized iterator data, or NULL if failed." +|-FunctionDecl 0x5604680bcbc0 line:11706:5 ecs_iter_to_json_buf 'int (const ecs_world_t *, ecs_iter_t *, ecs_strbuf_t *, const ecs_iter_to_json_desc_t *)' +| |-ParmVarDecl 0x5604680ba1f8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680ba270 col:17 iter 'ecs_iter_t *' +| |-ParmVarDecl 0x5604680ba2e8 col:19 buf_out 'ecs_strbuf_t *' +| |-ParmVarDecl 0x5604680ba360 col:36 desc 'const ecs_iter_to_json_desc_t *' +| `-FullComment 0x56046818b5c0 +| |-ParagraphComment 0x56046818b230 +| | |-TextComment 0x56046818b1e0 Text=" Serialize iterator into JSON string buffer." +| | `-TextComment 0x56046818b200 Text=" Same as ecs_iter_to_json, but serializes to an ecs_strbuf_t instance." +| |-ParagraphComment 0x56046818b280 +| | `-TextComment 0x56046818b250 Text=" " +| |-ParamCommandComment 0x56046818b2a0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046818b350 +| | |-TextComment 0x56046818b300 Text=" The world." +| | `-TextComment 0x56046818b320 Text=" " +| |-ParamCommandComment 0x56046818b370 [in] implicitly Param="iter" ParamIndex=1 +| | `-ParagraphComment 0x56046818b420 +| | |-TextComment 0x56046818b3d0 Text=" The iterator to serialize." +| | `-TextComment 0x56046818b3f0 Text=" " +| |-ParamCommandComment 0x56046818b440 [in] implicitly Param="buf_out" ParamIndex=2 +| | `-ParagraphComment 0x56046818b4f0 +| | |-TextComment 0x56046818b4a0 Text=" The strbuf to append the string to." +| | `-TextComment 0x56046818b4c0 Text=" " +| `-BlockCommandComment 0x56046818b510 Name="return" +| `-ParagraphComment 0x56046818b570 +| `-TextComment 0x56046818b540 Text=" Zero if success, non-zero if failed." +|-VarDecl 0x5604680bcd48 col:30 EcsUnitPrefixes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bcdc0 :57:1> col:1 FLECS__EEcsUnitPrefixes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bce50 col:30 EcsYocto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bcec8 :58:1> col:1 FLECS__EEcsYocto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bcf58 col:30 EcsZepto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bcfd0 :59:1> col:1 FLECS__EEcsZepto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd060 col:30 EcsAtto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd0d8 :60:1> col:1 FLECS__EEcsAtto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd168 col:30 EcsFemto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd1e0 :61:1> col:1 FLECS__EEcsFemto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd270 col:30 EcsPico 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd2e8 :62:1> col:1 FLECS__EEcsPico 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd378 col:30 EcsNano 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd3f0 :63:1> col:1 FLECS__EEcsNano 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd480 col:30 EcsMicro 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd4f8 :64:1> col:1 FLECS__EEcsMicro 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd588 col:30 EcsMilli 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd600 :65:1> col:1 FLECS__EEcsMilli 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd690 col:30 EcsCenti 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd708 :66:1> col:1 FLECS__EEcsCenti 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd798 col:30 EcsDeci 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd810 :67:1> col:1 FLECS__EEcsDeci 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd8a0 col:30 EcsDeca 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd918 :68:1> col:1 FLECS__EEcsDeca 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bd9a8 col:30 EcsHecto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bda20 :69:1> col:1 FLECS__EEcsHecto 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bdab0 col:30 EcsKilo 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bdb28 :70:1> col:1 FLECS__EEcsKilo 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bdbb8 col:30 EcsMega 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bdc30 :71:1> col:1 FLECS__EEcsMega 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bdcc0 col:30 EcsGiga 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bdd38 :72:1> col:1 FLECS__EEcsGiga 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bddc8 col:30 EcsTera 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bde40 :73:1> col:1 FLECS__EEcsTera 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bded0 col:30 EcsPeta 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bdf48 :74:1> col:1 FLECS__EEcsPeta 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bdfd8 col:30 EcsExa 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be050 :75:1> col:1 FLECS__EEcsExa 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be0e0 col:30 EcsZetta 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be158 :76:1> col:1 FLECS__EEcsZetta 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be1e8 col:30 EcsYotta 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be260 :77:1> col:1 FLECS__EEcsYotta 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be2f0 col:30 EcsKibi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be368 :78:1> col:1 FLECS__EEcsKibi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be3f8 col:30 EcsMebi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be470 :79:1> col:1 FLECS__EEcsMebi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be500 col:30 EcsGibi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be578 :80:1> col:1 FLECS__EEcsGibi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be608 col:30 EcsTebi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be680 :81:1> col:1 FLECS__EEcsTebi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be710 col:30 EcsPebi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be788 :82:1> col:1 FLECS__EEcsPebi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be818 col:30 EcsExbi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be890 :83:1> col:1 FLECS__EEcsExbi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be920 col:30 EcsZebi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680be998 :84:1> col:1 FLECS__EEcsZebi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bea28 col:30 EcsYobi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680beaa0 :85:1> col:1 FLECS__EEcsYobi 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bfcd0 col:30 EcsDuration 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bfd48 :86:1> col:1 FLECS__EEcsDuration 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bfdd8 col:34 EcsPicoSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bfe50 :87:1> col:1 FLECS__EEcsPicoSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bfee0 col:34 EcsNanoSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bff58 :88:1> col:1 FLECS__EEcsNanoSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680bffe8 col:34 EcsMicroSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0060 :89:1> col:1 FLECS__EEcsMicroSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c00f0 col:34 EcsMilliSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0168 :90:1> col:1 FLECS__EEcsMilliSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c01f8 col:34 EcsSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0270 :91:1> col:1 FLECS__EEcsSeconds 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0300 col:34 EcsMinutes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0378 :92:1> col:1 FLECS__EEcsMinutes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0408 col:34 EcsHours 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0480 :93:1> col:1 FLECS__EEcsHours 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0510 col:34 EcsDays 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0588 :94:1> col:1 FLECS__EEcsDays 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0670 col:30 EcsTime 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c06e8 :95:1> col:1 FLECS__EEcsTime 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0778 col:34 EcsDate 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c07f0 :96:1> col:1 FLECS__EEcsDate 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c08e0 col:30 EcsMass 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0958 :97:1> col:1 FLECS__EEcsMass 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c09e8 col:34 EcsGrams 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0a60 :98:1> col:1 FLECS__EEcsGrams 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0af0 col:34 EcsKiloGrams 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0b68 :99:1> col:1 FLECS__EEcsKiloGrams 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0c50 col:30 EcsElectricCurrent 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0cc8 :100:1> col:1 FLECS__EEcsElectricCurrent 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0d58 col:34 EcsAmpere 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0dd0 :101:1> col:1 FLECS__EEcsAmpere 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0ec0 col:30 EcsAmount 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0f38 :102:1> col:1 FLECS__EEcsAmount 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c0fc8 col:34 EcsMole 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1040 :103:1> col:1 FLECS__EEcsMole 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1130 col:30 EcsLuminousIntensity 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c11a8 :104:1> col:1 FLECS__EEcsLuminousIntensity 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1238 col:34 EcsCandela 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c12b0 :105:1> col:1 FLECS__EEcsCandela 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c13a0 col:30 EcsForce 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1418 :106:1> col:1 FLECS__EEcsForce 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c14a8 col:34 EcsNewton 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1520 :107:1> col:1 FLECS__EEcsNewton 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1610 col:30 EcsLength 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1688 :108:1> col:1 FLECS__EEcsLength 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1718 col:34 EcsMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1790 :109:1> col:1 FLECS__EEcsMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1820 col:38 EcsPicoMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1898 :110:1> col:1 FLECS__EEcsPicoMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1928 col:38 EcsNanoMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c19a0 :111:1> col:1 FLECS__EEcsNanoMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1a30 col:38 EcsMicroMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1aa8 :112:1> col:1 FLECS__EEcsMicroMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1b38 col:38 EcsMilliMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c1bb0 :113:1> col:1 FLECS__EEcsMilliMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2060 col:38 EcsCentiMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c20d8 :114:1> col:1 FLECS__EEcsCentiMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2168 col:38 EcsKiloMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c21e0 :115:1> col:1 FLECS__EEcsKiloMeters 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2270 col:34 EcsMiles 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c22e8 :116:1> col:1 FLECS__EEcsMiles 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2378 col:34 EcsPixels 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c23f0 :117:1> col:1 FLECS__EEcsPixels 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c24e0 col:30 EcsPressure 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2558 :118:1> col:1 FLECS__EEcsPressure 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c25e8 col:34 EcsPascal 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2660 :119:1> col:1 FLECS__EEcsPascal 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c26f0 col:34 EcsBar 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2768 :120:1> col:1 FLECS__EEcsBar 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2850 col:30 EcsSpeed 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c28c8 :121:1> col:1 FLECS__EEcsSpeed 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2958 col:34 EcsMetersPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c29d0 :122:1> col:1 FLECS__EEcsMetersPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2a60 col:34 EcsKiloMetersPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2ad8 :123:1> col:1 FLECS__EEcsKiloMetersPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2b68 col:34 EcsKiloMetersPerHour 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2be0 :124:1> col:1 FLECS__EEcsKiloMetersPerHour 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2c70 col:34 EcsMilesPerHour 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2ce8 :125:1> col:1 FLECS__EEcsMilesPerHour 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2dd0 col:30 EcsTemperature 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2e48 :126:1> col:1 FLECS__EEcsTemperature 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2ed8 col:34 EcsKelvin 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2f50 :127:1> col:1 FLECS__EEcsKelvin 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c2fe0 col:34 EcsCelsius 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3058 :128:1> col:1 FLECS__EEcsCelsius 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c30e8 col:34 EcsFahrenheit 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3160 :129:1> col:1 FLECS__EEcsFahrenheit 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3250 col:30 EcsData 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c32c8 :130:1> col:1 FLECS__EEcsData 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3358 col:34 EcsBits 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c33d0 :131:1> col:1 FLECS__EEcsBits 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3460 col:38 EcsKiloBits 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c34d8 :132:1> col:1 FLECS__EEcsKiloBits 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3568 col:38 EcsMegaBits 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c35e0 :133:1> col:1 FLECS__EEcsMegaBits 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3670 col:38 EcsGigaBits 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c36e8 :134:1> col:1 FLECS__EEcsGigaBits 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3778 col:34 EcsBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c37f0 :135:1> col:1 FLECS__EEcsBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3880 col:38 EcsKiloBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c38f8 :136:1> col:1 FLECS__EEcsKiloBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3988 col:38 EcsMegaBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3a00 :137:1> col:1 FLECS__EEcsMegaBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3a90 col:38 EcsGigaBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3b08 :138:1> col:1 FLECS__EEcsGigaBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3b98 col:38 EcsKibiBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3c10 :139:1> col:1 FLECS__EEcsKibiBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3ca0 col:38 EcsMebiBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3d18 :140:1> col:1 FLECS__EEcsMebiBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3da8 col:38 EcsGibiBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3e20 :141:1> col:1 FLECS__EEcsGibiBytes 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3f10 col:30 EcsDataRate 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c3f88 :142:1> col:1 FLECS__EEcsDataRate 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5300 col:34 EcsBitsPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5378 :143:1> col:1 FLECS__EEcsBitsPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5408 col:34 EcsKiloBitsPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5480 :144:1> col:1 FLECS__EEcsKiloBitsPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5510 col:34 EcsMegaBitsPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5588 :145:1> col:1 FLECS__EEcsMegaBitsPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5618 col:34 EcsGigaBitsPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5690 :146:1> col:1 FLECS__EEcsGigaBitsPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5720 col:34 EcsBytesPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5798 :147:1> col:1 FLECS__EEcsBytesPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5828 col:34 EcsKiloBytesPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c58a0 :148:1> col:1 FLECS__EEcsKiloBytesPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5930 col:34 EcsMegaBytesPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c59a8 :149:1> col:1 FLECS__EEcsMegaBytesPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5a38 col:34 EcsGigaBytesPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5ab0 :150:1> col:1 FLECS__EEcsGigaBytesPerSecond 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5ba0 col:30 EcsAngle 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5c18 :151:1> col:1 FLECS__EEcsAngle 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5ca8 col:34 EcsRadians 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5d20 :152:1> col:1 FLECS__EEcsRadians 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5db0 col:34 EcsDegrees 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5e28 :153:1> col:1 FLECS__EEcsDegrees 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5f10 col:30 EcsFrequency 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c5f88 :154:1> col:1 FLECS__EEcsFrequency 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6018 col:34 EcsHertz 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6090 :155:1> col:1 FLECS__EEcsHertz 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6120 col:34 EcsKiloHertz 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6198 :156:1> col:1 FLECS__EEcsKiloHertz 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6228 col:34 EcsMegaHertz 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c62a0 :157:1> col:1 FLECS__EEcsMegaHertz 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6330 col:34 EcsGigaHertz 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c63a8 :158:1> col:1 FLECS__EEcsGigaHertz 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6490 col:30 EcsUri 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6508 :159:1> col:1 FLECS__EEcsUri 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6598 col:34 EcsUriHyperlink 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6610 :160:1> col:1 FLECS__EEcsUriHyperlink 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c66a0 col:34 EcsUriImage 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6718 :161:1> col:1 FLECS__EEcsUriImage 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c67a8 col:34 EcsUriFile 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6820 :162:1> col:1 FLECS__EEcsUriFile 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c68e0 col:30 EcsAcceleration 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6958 :163:1> col:1 FLECS__EEcsAcceleration 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c69e8 col:30 EcsPercentage 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6a60 :164:1> col:1 FLECS__EEcsPercentage 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6af0 col:30 EcsBel 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6b68 :165:1> col:1 FLECS__EEcsBel 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6bf8 col:30 EcsDeciBel 'ecs_entity_t':'unsigned long' extern +|-VarDecl 0x5604680c6c70 :166:1> col:1 FLECS__EEcsDeciBel 'ecs_entity_t':'unsigned long' extern +|-FunctionDecl 0x5604680c6dc0 line:12064:6 FlecsUnitsImport 'void (ecs_world_t *)' +| |-ParmVarDecl 0x5604680c6d30 col:18 world 'ecs_world_t *' +| `-FullComment 0x56046818b6e0 +| `-ParagraphComment 0x56046818b6b0 +| |-TextComment 0x56046818b630 Text="/////////////////////////////////////////////////////////////////////////////" +| |-TextComment 0x56046818b650 Text="/ Module" +| `-TextComment 0x56046818b670 Text="/////////////////////////////////////////////////////////////////////////////" +|-TypedefDecl 0x5604680c6f10 col:26 ptrdiff_t 'long' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x5604680c6f80 col:24 wchar_t 'int' +| `-BuiltinType 0x560467ec18b0 'int' +|-RecordDecl 0x5604680c6fd8 line:19:9 struct definition +| |-FieldDecl 0x5604680c70d0 col:13 __clang_max_align_nonce1 'long long' +| | `-AlignedAttr 0x5604680c7140 aligned +| | `-ConstantExpr 0x5604680c7120 'unsigned long' +| | |-value: Int 8 +| | `-UnaryExprOrTypeTraitExpr 0x5604680c7098 'unsigned long' __alignof 'long long' +| `-FieldDecl 0x5604680c71f0 col:15 __clang_max_align_nonce2 'long double' +| `-AlignedAttr 0x5604680c7260 aligned +| `-ConstantExpr 0x5604680c7240 'unsigned long' +| |-value: Int 16 +| `-UnaryExprOrTypeTraitExpr 0x5604680c71b8 'unsigned long' __alignof 'long double' +|-TypedefDecl 0x5604680cacf0 col:3 max_align_t 'struct max_align_t':'max_align_t' +| `-ElaboratedType 0x5604680c72c0 'struct max_align_t' sugar +| `-RecordType 0x5604680c7060 'max_align_t' +| `-Record 0x5604680c6fd8 '' +|-TypedefDecl 0x5604680cada0 col:14 ecs_bool_t 'bool' +| |-BuiltinType 0x560467ec1830 'bool' +| `-FullComment 0x56046818b870 +| |-ParagraphComment 0x56046818b7d0 +| | |-TextComment 0x56046818b750 Text=" Primitive type definitions." +| | |-TextComment 0x56046818b770 Text=" These typedefs allow the builtin primitives to be used as regular components:" +| | `-TextComment 0x56046818b790 Text=" ecs_set(world, e, ecs_i32_t, {10});" +| `-ParagraphComment 0x56046818b840 +| |-TextComment 0x56046818b7f0 Text=" Or a more useful example (create an enum constant with a manual value):" +| `-TextComment 0x56046818b810 Text=" ecs_set_pair_object(world, e, EcsConstant, ecs_i32_t, {10});" +|-TypedefDecl 0x5604680cae08 col:14 ecs_char_t 'char' +| `-BuiltinType 0x560467ec1850 'char' +|-TypedefDecl 0x5604680cae78 col:23 ecs_byte_t 'unsigned char' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x5604680caee0 col:17 ecs_u8_t 'uint8_t':'unsigned char' +| `-TypedefType 0x560467f8cbe0 'uint8_t' sugar +| |-Typedef 0x560467f87d48 'uint8_t' +| `-TypedefType 0x560467f7e5d0 '__uint8_t' sugar +| |-Typedef 0x560467f78dd8 '__uint8_t' +| `-BuiltinType 0x560467ec1910 'unsigned char' +|-TypedefDecl 0x5604680caf48 col:18 ecs_u16_t 'uint16_t':'unsigned short' +| `-TypedefType 0x560467f8cc70 'uint16_t' sugar +| |-Typedef 0x560467f87db0 'uint16_t' +| `-TypedefType 0x560467f7e6f0 '__uint16_t' sugar +| |-Typedef 0x560467f78eb8 '__uint16_t' +| `-BuiltinType 0x560467ec1930 'unsigned short' +|-TypedefDecl 0x5604680cafb0 col:18 ecs_u32_t 'uint32_t':'unsigned int' +| `-TypedefType 0x560467f8cd00 'uint32_t' sugar +| |-Typedef 0x560467f87e18 'uint32_t' +| `-TypedefType 0x560467f7e810 '__uint32_t' sugar +| |-Typedef 0x560467f78f98 '__uint32_t' +| `-BuiltinType 0x560467ec1950 'unsigned int' +|-TypedefDecl 0x5604680cb018 col:18 ecs_u64_t 'uint64_t':'unsigned long' +| `-TypedefType 0x560467f8cd90 'uint64_t' sugar +| |-Typedef 0x560467f87e80 'uint64_t' +| `-TypedefType 0x560467f7e930 '__uint64_t' sugar +| |-Typedef 0x560467f7e4e0 '__uint64_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x5604680cb080 col:19 ecs_uptr_t 'uintptr_t':'unsigned long' +| `-TypedefType 0x560467fd50e0 'uintptr_t' sugar +| |-Typedef 0x560467f8ca30 'uintptr_t' +| `-BuiltinType 0x560467ec1970 'unsigned long' +|-TypedefDecl 0x5604680cb110 col:16 ecs_i8_t 'int8_t':'signed char' +| `-TypedefType 0x5604680cb0e0 'int8_t' sugar +| |-Typedef 0x560467f87ba8 'int8_t' +| `-TypedefType 0x560467f7e540 '__int8_t' sugar +| |-Typedef 0x560467f78d68 '__int8_t' +| `-BuiltinType 0x560467ec1870 'signed char' +|-TypedefDecl 0x5604680cb178 col:17 ecs_i16_t 'int16_t':'short' +| `-TypedefType 0x560467fa79a0 'int16_t' sugar +| |-Typedef 0x560467f87c10 'int16_t' +| `-TypedefType 0x560467f7e660 '__int16_t' sugar +| |-Typedef 0x560467f78e48 '__int16_t' +| `-BuiltinType 0x560467ec1890 'short' +|-TypedefDecl 0x5604680cb1e0 col:17 ecs_i32_t 'int32_t':'int' +| `-TypedefType 0x560467f8ce20 'int32_t' sugar +| |-Typedef 0x560467f87c78 'int32_t' +| `-TypedefType 0x560467f7e780 '__int32_t' sugar +| |-Typedef 0x560467f78f28 '__int32_t' +| `-BuiltinType 0x560467ec18b0 'int' +|-TypedefDecl 0x5604680cb248 col:17 ecs_i64_t 'int64_t':'long' +| `-TypedefType 0x560467fca6e0 'int64_t' sugar +| |-Typedef 0x560467f87ce0 'int64_t' +| `-TypedefType 0x560467f7e8a0 '__int64_t' sugar +| |-Typedef 0x560467f7e470 '__int64_t' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x5604680cb2d0 col:18 ecs_iptr_t 'intptr_t':'long' +| `-TypedefType 0x5604680cb2a0 'intptr_t' sugar +| |-Typedef 0x560467f8c9c0 'intptr_t' +| `-BuiltinType 0x560467ec18d0 'long' +|-TypedefDecl 0x5604680cb340 col:15 ecs_f32_t 'float' +| `-BuiltinType 0x560467ec19b0 'float' +|-TypedefDecl 0x5604680cb3b0 col:16 ecs_f64_t 'double' +| `-BuiltinType 0x560467ec19d0 'double' +|-TypedefDecl 0x5604680cb420 col:15 ecs_string_t 'char *' +| `-PointerType 0x560467ec23a0 'char *' +| `-BuiltinType 0x560467ec1850 'char' +|-VarDecl 0x5604680cb4b8 :174:1> col:1 FLECS__EEcsMetaType 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb530 :175:1> col:1 FLECS__EEcsMetaTypeSerialized 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb5a8 :176:1> col:1 FLECS__EEcsPrimitive 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb620 :177:1> col:1 FLECS__EEcsEnum 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb698 :178:1> col:1 FLECS__EEcsBitmask 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb710 :179:1> col:1 FLECS__EEcsMember 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb788 :180:1> col:1 FLECS__EEcsStruct 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb800 :181:1> col:1 FLECS__EEcsArray 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb878 :182:1> col:1 FLECS__EEcsVector 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb8f0 :183:1> col:1 FLECS__EEcsUnit 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb968 :184:1> col:1 FLECS__EEcsUnitPrefix 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cb9e0 col:37 EcsConstant 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cba58 col:37 EcsQuantity 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbaf8 :185:1> col:1 FLECS__Eecs_bool_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbb70 :186:1> col:1 FLECS__Eecs_char_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbbe8 :187:1> col:1 FLECS__Eecs_byte_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbc60 :188:1> col:1 FLECS__Eecs_u8_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbcd8 :189:1> col:1 FLECS__Eecs_u16_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbd50 :190:1> col:1 FLECS__Eecs_u32_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbdc8 :191:1> col:1 FLECS__Eecs_u64_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbe40 :192:1> col:1 FLECS__Eecs_uptr_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbeb8 :193:1> col:1 FLECS__Eecs_i8_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbf30 :194:1> col:1 FLECS__Eecs_i16_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cbfa8 :195:1> col:1 FLECS__Eecs_i32_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cc020 :196:1> col:1 FLECS__Eecs_i64_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cc098 :197:1> col:1 FLECS__Eecs_iptr_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cc110 :198:1> col:1 FLECS__Eecs_f32_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cc188 :199:1> col:1 FLECS__Eecs_f64_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cc200 :200:1> col:1 FLECS__Eecs_string_t 'const ecs_entity_t':'const unsigned long' extern +|-VarDecl 0x5604680cc278 :201:1> col:1 FLECS__Eecs_entity_t 'const ecs_entity_t':'const unsigned long' extern +|-EnumDecl 0x5604680cc308 line:12220:14 ecs_type_kind_t +| |-FullComment 0x56046818b940 +| | `-ParagraphComment 0x56046818b910 +| | `-TextComment 0x56046818b8e0 Text=" Type kinds supported by reflection type system " +| |-EnumConstantDecl 0x5604680cc3d0 col:5 EcsPrimitiveType 'int' +| |-EnumConstantDecl 0x5604680cc420 col:5 EcsBitmaskType 'int' +| |-EnumConstantDecl 0x5604680cc470 col:5 EcsEnumType 'int' +| |-EnumConstantDecl 0x5604680cc4c0 col:5 EcsStructType 'int' +| |-EnumConstantDecl 0x5604680cc510 col:5 EcsArrayType 'int' +| |-EnumConstantDecl 0x5604680cc560 col:5 referenced EcsVectorType 'int' +| `-EnumConstantDecl 0x5604680cc5f0 col:5 EcsTypeKindLast 'int' +| `-ConstantExpr 0x5604680cc5d0 'int' +| |-value: Int 5 +| `-DeclRefExpr 0x5604680cc5b0 'int' EnumConstant 0x5604680cc560 'EcsVectorType' 'int' +|-TypedefDecl 0x5604680cc698 col:3 referenced ecs_type_kind_t 'enum ecs_type_kind_t':'enum ecs_type_kind_t' +| |-ElaboratedType 0x5604680cc640 'enum ecs_type_kind_t' sugar +| | `-EnumType 0x5604680cc3b0 'enum ecs_type_kind_t' +| | `-Enum 0x5604680cc308 'ecs_type_kind_t' +| `-FullComment 0x56046818ba10 +| `-ParagraphComment 0x56046818b9e0 +| `-TextComment 0x56046818b9b0 Text=" Type kinds supported by reflection type system " +|-RecordDecl 0x5604680cc730 line:12231:16 struct EcsMetaType definition +| |-FullComment 0x56046818bae0 +| | `-ParagraphComment 0x56046818bab0 +| | `-TextComment 0x56046818ba80 Text=" Component that is automatically added to every type with the right kind. " +| |-FieldDecl 0x5604680cc800 col:21 kind 'ecs_type_kind_t':'enum ecs_type_kind_t' +| |-FieldDecl 0x5604680cc860 col:10 existing 'bool' +| |-FieldDecl 0x5604680cc8c0 col:10 partial 'bool' +| |-FieldDecl 0x5604680cc920 col:16 size 'ecs_size_t':'int' +| `-FieldDecl 0x5604680cc980 col:16 alignment 'ecs_size_t':'int' +|-TypedefDecl 0x5604680cca28 col:3 EcsMetaType 'struct EcsMetaType':'struct EcsMetaType' +| |-ElaboratedType 0x5604680cc9d0 'struct EcsMetaType' sugar +| | `-RecordType 0x5604680cc7b0 'struct EcsMetaType' +| | `-Record 0x5604680cc730 'EcsMetaType' +| `-FullComment 0x56046818bbb0 +| `-ParagraphComment 0x56046818bb80 +| `-TextComment 0x56046818bb50 Text=" Component that is automatically added to every type with the right kind. " +|-EnumDecl 0x5604680cca98 line:12239:14 ecs_primitive_kind_t +| |-EnumConstantDecl 0x5604680ccba0 col:5 EcsBool 'int' +| | `-ConstantExpr 0x5604680ccb80 'int' +| | |-value: Int 1 +| | `-IntegerLiteral 0x5604680ccb60 'int' 1 +| |-EnumConstantDecl 0x5604680ccbf0 col:5 EcsChar 'int' +| |-EnumConstantDecl 0x5604680ccc40 col:5 EcsByte 'int' +| |-EnumConstantDecl 0x5604680cdcf0 col:5 EcsU8 'int' +| |-EnumConstantDecl 0x5604680cdd40 col:5 EcsU16 'int' +| |-EnumConstantDecl 0x5604680cdd90 col:5 EcsU32 'int' +| |-EnumConstantDecl 0x5604680cdde0 col:5 EcsU64 'int' +| |-EnumConstantDecl 0x5604680cde30 col:5 EcsI8 'int' +| |-EnumConstantDecl 0x5604680cde80 col:5 EcsI16 'int' +| |-EnumConstantDecl 0x5604680cded0 col:5 EcsI32 'int' +| |-EnumConstantDecl 0x5604680cdf20 col:5 EcsI64 'int' +| |-EnumConstantDecl 0x5604680cdf70 col:5 EcsF32 'int' +| |-EnumConstantDecl 0x5604680cdfc0 col:5 EcsF64 'int' +| |-EnumConstantDecl 0x5604680ce010 col:5 EcsUPtr 'int' +| |-EnumConstantDecl 0x5604680ce060 col:5 EcsIPtr 'int' +| |-EnumConstantDecl 0x5604680ce0b0 col:5 EcsString 'int' +| |-EnumConstantDecl 0x5604680ce100 col:5 referenced EcsEntity 'int' +| `-EnumConstantDecl 0x5604680ce190 col:5 EcsPrimitiveKindLast 'int' +| `-ConstantExpr 0x5604680ce170 'int' +| |-value: Int 17 +| `-DeclRefExpr 0x5604680ce150 'int' EnumConstant 0x5604680ce100 'EcsEntity' 'int' +|-TypedefDecl 0x5604680ce238 col:3 referenced ecs_primitive_kind_t 'enum ecs_primitive_kind_t':'enum ecs_primitive_kind_t' +| `-ElaboratedType 0x5604680ce1e0 'enum ecs_primitive_kind_t' sugar +| `-EnumType 0x5604680ccb40 'enum ecs_primitive_kind_t' +| `-Enum 0x5604680cca98 'ecs_primitive_kind_t' +|-RecordDecl 0x5604680ce2a8 line:12260:16 struct EcsPrimitive definition +| `-FieldDecl 0x5604680ce380 col:26 kind 'ecs_primitive_kind_t':'enum ecs_primitive_kind_t' +|-TypedefDecl 0x5604680ce428 col:3 EcsPrimitive 'struct EcsPrimitive':'struct EcsPrimitive' +| `-ElaboratedType 0x5604680ce3d0 'struct EcsPrimitive' sugar +| `-RecordType 0x5604680ce330 'struct EcsPrimitive' +| `-Record 0x5604680ce2a8 'EcsPrimitive' +|-RecordDecl 0x5604680ce498 line:12264:16 struct EcsMember definition +| |-FieldDecl 0x5604680ce550 col:18 type 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680ce5b0 col:13 count 'int32_t':'int' +| |-FieldDecl 0x5604680ce610 col:18 unit 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680ce670 col:13 offset 'int32_t':'int' +|-TypedefDecl 0x5604680ce718 col:3 EcsMember 'struct EcsMember':'struct EcsMember' +| `-ElaboratedType 0x5604680ce6c0 'struct EcsMember' sugar +| `-RecordType 0x5604680ce520 'struct EcsMember' +| `-Record 0x5604680ce498 'EcsMember' +|-RecordDecl 0x5604680ce788 line:12272:16 struct ecs_member_t definition +| |-FieldDecl 0x5604680ce848 col:17 name 'const char *' +| |-FieldDecl 0x5604680ce8a8 col:18 type 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680ce908 col:13 count 'int32_t':'int' +| |-FieldDecl 0x5604680ce968 col:13 offset 'int32_t':'int' +| |-FieldDecl 0x5604680ce9c8 col:18 unit 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680cea28 col:16 size 'ecs_size_t':'int' +| `-FieldDecl 0x5604680cea88 col:18 member 'ecs_entity_t':'unsigned long' +|-TypedefDecl 0x5604680ceb38 col:3 referenced ecs_member_t 'struct ecs_member_t':'struct ecs_member_t' +| `-ElaboratedType 0x5604680ceae0 'struct ecs_member_t' sugar +| `-RecordType 0x5604680ce810 'struct ecs_member_t' +| `-Record 0x5604680ce788 'ecs_member_t' +|-RecordDecl 0x5604680ceba8 line:12290:16 struct EcsStruct definition +| `-FieldDecl 0x5604680cec60 col:19 members 'ecs_vector_t *' +|-TypedefDecl 0x5604680ced08 col:3 EcsStruct 'struct EcsStruct':'struct EcsStruct' +| `-ElaboratedType 0x5604680cecb0 'struct EcsStruct' sugar +| `-RecordType 0x5604680cec30 'struct EcsStruct' +| `-Record 0x5604680ceba8 'EcsStruct' +|-RecordDecl 0x5604680ced78 line:12295:16 struct ecs_enum_constant_t definition +| |-FieldDecl 0x5604680cee38 col:17 name 'const char *' +| |-FieldDecl 0x5604680cee98 col:13 value 'int32_t':'int' +| `-FieldDecl 0x5604680ceef8 col:18 constant 'ecs_entity_t':'unsigned long' +|-TypedefDecl 0x5604680cefa8 col:3 referenced ecs_enum_constant_t 'struct ecs_enum_constant_t':'struct ecs_enum_constant_t' +| `-ElaboratedType 0x5604680cef50 'struct ecs_enum_constant_t' sugar +| `-RecordType 0x5604680cee00 'struct ecs_enum_constant_t' +| `-Record 0x5604680ced78 'ecs_enum_constant_t' +|-RecordDecl 0x5604680cf018 line:12306:16 struct EcsEnum definition +| `-FieldDecl 0x5604680cf0d0 col:16 constants 'ecs_map_t *' +|-TypedefDecl 0x5604680cf178 col:3 EcsEnum 'struct EcsEnum':'struct EcsEnum' +| `-ElaboratedType 0x5604680cf120 'struct EcsEnum' sugar +| `-RecordType 0x5604680cf0a0 'struct EcsEnum' +| `-Record 0x5604680cf018 'EcsEnum' +|-RecordDecl 0x5604680cf1e8 line:12311:16 struct ecs_bitmask_constant_t definition +| |-FieldDecl 0x5604680cf2a8 col:17 name 'const char *' +| |-FieldDecl 0x5604680cf308 col:19 value 'ecs_flags32_t':'unsigned int' +| `-FieldDecl 0x5604680cf368 col:18 constant 'ecs_entity_t':'unsigned long' +|-TypedefDecl 0x5604680cf418 col:3 referenced ecs_bitmask_constant_t 'struct ecs_bitmask_constant_t':'struct ecs_bitmask_constant_t' +| `-ElaboratedType 0x5604680cf3c0 'struct ecs_bitmask_constant_t' sugar +| `-RecordType 0x5604680cf270 'struct ecs_bitmask_constant_t' +| `-Record 0x5604680cf1e8 'ecs_bitmask_constant_t' +|-RecordDecl 0x5604680cf488 line:12322:16 struct EcsBitmask definition +| `-FieldDecl 0x5604680cf540 col:16 constants 'ecs_map_t *' +|-TypedefDecl 0x5604680cf5e8 col:3 EcsBitmask 'struct EcsBitmask':'struct EcsBitmask' +| `-ElaboratedType 0x5604680cf590 'struct EcsBitmask' sugar +| `-RecordType 0x5604680cf510 'struct EcsBitmask' +| `-Record 0x5604680cf488 'EcsBitmask' +|-RecordDecl 0x5604680cf658 line:12327:16 struct EcsArray definition +| |-FieldDecl 0x5604680cf710 col:18 type 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680cf770 col:13 count 'int32_t':'int' +|-TypedefDecl 0x5604680cf818 col:3 EcsArray 'struct EcsArray':'struct EcsArray' +| `-ElaboratedType 0x5604680cf7c0 'struct EcsArray' sugar +| `-RecordType 0x5604680cf6e0 'struct EcsArray' +| `-Record 0x5604680cf658 'EcsArray' +|-RecordDecl 0x5604680cf888 line:12332:16 struct EcsVector definition +| `-FieldDecl 0x5604680cf940 col:18 type 'ecs_entity_t':'unsigned long' +|-TypedefDecl 0x5604680cf9e8 col:3 EcsVector 'struct EcsVector':'struct EcsVector' +| `-ElaboratedType 0x5604680cf990 'struct EcsVector' sugar +| `-RecordType 0x5604680cf910 'struct EcsVector' +| `-Record 0x5604680cf888 'EcsVector' +|-RecordDecl 0x5604680cfa80 line:12346:16 struct ecs_unit_translation_t definition +| |-FieldDecl 0x5604680cfb30 col:13 factor 'int32_t':'int' +| `-FieldDecl 0x5604680cfb90 col:13 power 'int32_t':'int' +|-TypedefDecl 0x5604680cfc38 col:3 referenced ecs_unit_translation_t 'struct ecs_unit_translation_t':'struct ecs_unit_translation_t' +| `-ElaboratedType 0x5604680cfbe0 'struct ecs_unit_translation_t' sugar +| `-RecordType 0x5604680cfb00 'struct ecs_unit_translation_t' +| `-Record 0x5604680cfa80 'ecs_unit_translation_t' +|-RecordDecl 0x5604680d0d10 line:12351:16 struct EcsUnit definition +| |-FieldDecl 0x5604680d0dc8 col:11 symbol 'char *' +| |-FieldDecl 0x5604680d0e28 col:18 prefix 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680d0e88 col:18 base 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680d0ee8 col:18 over 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680d0f70 col:28 translation 'ecs_unit_translation_t':'struct ecs_unit_translation_t' +|-TypedefDecl 0x5604680d1018 col:3 EcsUnit 'struct EcsUnit':'struct EcsUnit' +| `-ElaboratedType 0x5604680d0fc0 'struct EcsUnit' sugar +| `-RecordType 0x5604680d0d90 'struct EcsUnit' +| `-Record 0x5604680d0d10 'EcsUnit' +|-RecordDecl 0x5604680d1088 line:12359:16 struct EcsUnitPrefix definition +| |-FieldDecl 0x5604680d1148 col:11 symbol 'char *' +| `-FieldDecl 0x5604680d11a8 col:28 translation 'ecs_unit_translation_t':'struct ecs_unit_translation_t' +|-TypedefDecl 0x5604680d1258 col:3 EcsUnitPrefix 'struct EcsUnitPrefix':'struct EcsUnitPrefix' +| `-ElaboratedType 0x5604680d1200 'struct EcsUnitPrefix' sugar +| `-RecordType 0x5604680d1110 'struct EcsUnitPrefix' +| `-Record 0x5604680d1088 'EcsUnitPrefix' +|-EnumDecl 0x5604680d12f0 line:12367:14 ecs_meta_type_op_kind_t +| |-FullComment 0x56046818bc80 +| | `-ParagraphComment 0x56046818bc50 +| | `-TextComment 0x56046818bc20 Text=" Serializer utilities " +| |-EnumConstantDecl 0x5604680d13b0 col:5 EcsOpArray 'int' +| |-EnumConstantDecl 0x5604680d1400 col:5 EcsOpVector 'int' +| |-EnumConstantDecl 0x5604680d1450 col:5 EcsOpPush 'int' +| |-EnumConstantDecl 0x5604680d14a0 col:5 EcsOpPop 'int' +| |-EnumConstantDecl 0x5604680d14f0 col:5 EcsOpScope 'int' +| |-EnumConstantDecl 0x5604680d1540 col:5 EcsOpEnum 'int' +| |-EnumConstantDecl 0x5604680d1590 col:5 EcsOpBitmask 'int' +| |-EnumConstantDecl 0x5604680d15e0 col:5 EcsOpPrimitive 'int' +| |-EnumConstantDecl 0x5604680d1630 col:5 EcsOpBool 'int' +| |-EnumConstantDecl 0x5604680d1680 col:5 EcsOpChar 'int' +| |-EnumConstantDecl 0x5604680d16d0 col:5 EcsOpByte 'int' +| |-EnumConstantDecl 0x5604680d1720 col:5 EcsOpU8 'int' +| |-EnumConstantDecl 0x5604680d1770 col:5 EcsOpU16 'int' +| |-EnumConstantDecl 0x5604680d17c0 col:5 EcsOpU32 'int' +| |-EnumConstantDecl 0x5604680d1810 col:5 EcsOpU64 'int' +| |-EnumConstantDecl 0x5604680d1860 col:5 EcsOpI8 'int' +| |-EnumConstantDecl 0x5604680d18b0 col:5 EcsOpI16 'int' +| |-EnumConstantDecl 0x5604680d1900 col:5 EcsOpI32 'int' +| |-EnumConstantDecl 0x5604680d1950 col:5 EcsOpI64 'int' +| |-EnumConstantDecl 0x5604680d19a0 col:5 EcsOpF32 'int' +| |-EnumConstantDecl 0x5604680d19f0 col:5 EcsOpF64 'int' +| |-EnumConstantDecl 0x5604680d1a40 col:5 EcsOpUPtr 'int' +| |-EnumConstantDecl 0x5604680d1a90 col:5 EcsOpIPtr 'int' +| |-EnumConstantDecl 0x5604680d1ae0 col:5 EcsOpString 'int' +| |-EnumConstantDecl 0x5604680d1b30 col:5 referenced EcsOpEntity 'int' +| `-EnumConstantDecl 0x5604680d1bc0 col:5 EcsMetaTypeOpKindLast 'int' +| `-ConstantExpr 0x5604680d1ba0 'int' +| |-value: Int 24 +| `-DeclRefExpr 0x5604680d1b80 'int' EnumConstant 0x5604680d1b30 'EcsOpEntity' 'int' +|-TypedefDecl 0x5604680d1c68 col:3 referenced ecs_meta_type_op_kind_t 'enum ecs_meta_type_op_kind_t':'enum ecs_meta_type_op_kind_t' +| |-ElaboratedType 0x5604680d1c10 'enum ecs_meta_type_op_kind_t' sugar +| | `-EnumType 0x5604680d1390 'enum ecs_meta_type_op_kind_t' +| | `-Enum 0x5604680d12f0 'ecs_meta_type_op_kind_t' +| `-FullComment 0x56046818bd50 +| `-ParagraphComment 0x56046818bd20 +| `-TextComment 0x56046818bcf0 Text=" Serializer utilities " +|-RecordDecl 0x5604680d1cd8 line:12400:16 struct ecs_meta_type_op_t definition +| |-FieldDecl 0x5604680d1db0 col:29 kind 'ecs_meta_type_op_kind_t':'enum ecs_meta_type_op_kind_t' +| |-FieldDecl 0x5604680d1e10 col:16 offset 'ecs_size_t':'int' +| |-FieldDecl 0x5604680d1e70 col:13 count 'int32_t':'int' +| |-FieldDecl 0x5604680d1ed8 col:17 name 'const char *' +| |-FieldDecl 0x5604680d1f38 col:13 op_count 'int32_t':'int' +| |-FieldDecl 0x5604680d1f98 col:16 size 'ecs_size_t':'int' +| |-FieldDecl 0x5604680d1ff8 col:18 type 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680d2058 col:18 unit 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680d20b8 col:20 members 'ecs_hashmap_t *' +|-TypedefDecl 0x5604680d2168 col:3 referenced ecs_meta_type_op_t 'struct ecs_meta_type_op_t':'struct ecs_meta_type_op_t' +| `-ElaboratedType 0x5604680d2110 'struct ecs_meta_type_op_t' sugar +| `-RecordType 0x5604680d1d60 'struct ecs_meta_type_op_t' +| `-Record 0x5604680d1cd8 'ecs_meta_type_op_t' +|-RecordDecl 0x5604680d21d8 line:12412:16 struct EcsMetaTypeSerialized definition +| `-FieldDecl 0x5604680d2290 col:19 ops 'ecs_vector_t *' +|-TypedefDecl 0x5604680d2338 col:3 EcsMetaTypeSerialized 'struct EcsMetaTypeSerialized':'struct EcsMetaTypeSerialized' +| `-ElaboratedType 0x5604680d22e0 'struct EcsMetaTypeSerialized' sugar +| `-RecordType 0x5604680d2260 'struct EcsMetaTypeSerialized' +| `-Record 0x5604680d21d8 'EcsMetaTypeSerialized' +|-RecordDecl 0x5604680d23d0 line:12421:16 struct ecs_meta_scope_t definition +| |-FieldDecl 0x5604680d2480 col:18 type 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680d2558 col:25 ops 'ecs_meta_type_op_t *' +| |-FieldDecl 0x5604680d25b8 col:13 op_count 'int32_t':'int' +| |-FieldDecl 0x5604680d2618 col:13 op_cur 'int32_t':'int' +| |-FieldDecl 0x5604680d2678 col:13 elem_cur 'int32_t':'int' +| |-FieldDecl 0x5604680d26d8 col:13 prev_depth 'int32_t':'int' +| |-FieldDecl 0x5604680d2740 col:11 ptr 'void *' +| |-FieldDecl 0x5604680d2818 col:25 comp 'const EcsComponent *' +| |-FieldDecl 0x5604680d2880 col:20 vector 'ecs_vector_t **' +| |-FieldDecl 0x5604680d28e0 col:10 is_collection 'bool' +| `-FieldDecl 0x5604680d2940 col:10 is_inline_array 'bool' +|-TypedefDecl 0x5604680d29e8 col:3 referenced ecs_meta_scope_t 'struct ecs_meta_scope_t':'struct ecs_meta_scope_t' +| `-ElaboratedType 0x5604680d2990 'struct ecs_meta_scope_t' sugar +| `-RecordType 0x5604680d2450 'struct ecs_meta_scope_t' +| `-Record 0x5604680d23d0 'ecs_meta_scope_t' +|-RecordDecl 0x5604680d2a80 line:12437:16 struct ecs_meta_cursor_t definition +| |-FullComment 0x56046818be20 +| | `-ParagraphComment 0x56046818bdf0 +| | `-TextComment 0x56046818bdc0 Text=" Type that enables iterating/populating a value using reflection data " +| |-FieldDecl 0x5604680d2b30 col:24 world 'const ecs_world_t *' +| |-FieldDecl 0x5604680d2df8 col:22 scope 'ecs_meta_scope_t[32]' +| |-FieldDecl 0x5604680d2e58 col:13 depth 'int32_t':'int' +| |-FieldDecl 0x5604680d2eb8 col:10 valid 'bool' +| |-FieldDecl 0x5604680d2f18 col:10 is_primitive_scope 'bool' +| |-FieldDecl 0x5604680d3230 col:20 lookup_action 'ecs_entity_t (*)(const ecs_world_t *, const char *, void *)' +| `-FieldDecl 0x5604680d3298 col:11 lookup_ctx 'void *' +|-TypedefDecl 0x5604680d3348 col:3 referenced ecs_meta_cursor_t 'struct ecs_meta_cursor_t':'struct ecs_meta_cursor_t' +| |-ElaboratedType 0x5604680d32f0 'struct ecs_meta_cursor_t' sugar +| | `-RecordType 0x5604680d2b00 'struct ecs_meta_cursor_t' +| | `-Record 0x5604680d2a80 'ecs_meta_cursor_t' +| `-FullComment 0x56046818bef0 +| `-ParagraphComment 0x56046818bec0 +| `-TextComment 0x56046818be90 Text=" Type that enables iterating/populating a value using reflection data " +|-FunctionDecl 0x5604680d3608 line:12450:19 ecs_meta_cursor 'ecs_meta_cursor_t (const ecs_world_t *, ecs_entity_t, void *)' +| |-ParmVarDecl 0x5604680d33f0 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680d3468 col:18 type 'ecs_entity_t':'unsigned long' +| `-ParmVarDecl 0x5604680d34e8 col:11 ptr 'void *' +|-FunctionDecl 0x5604680d3850 line:12457:7 ecs_meta_get_ptr 'void *(ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d3758 col:24 cursor 'ecs_meta_cursor_t *' +| `-FullComment 0x56046818bfc0 +| `-ParagraphComment 0x56046818bf90 +| `-TextComment 0x56046818bf60 Text=" Get pointer to current field " +|-FunctionDecl 0x5604680d3a30 line:12462:5 ecs_meta_next 'int (ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d3938 col:24 cursor 'ecs_meta_cursor_t *' +| `-FullComment 0x56046818c090 +| `-ParagraphComment 0x56046818c060 +| `-TextComment 0x56046818c030 Text=" Move cursor to next field " +|-FunctionDecl 0x5604680d3cb0 line:12467:5 ecs_meta_elem 'int (ecs_meta_cursor_t *, int32_t)' +| |-ParmVarDecl 0x5604680d3b18 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d3b90 col:13 elem 'int32_t':'int' +| `-FullComment 0x56046818c160 +| `-ParagraphComment 0x56046818c130 +| `-TextComment 0x56046818c100 Text=" Move cursor to a element " +|-FunctionDecl 0x5604680d3f30 line:12473:5 ecs_meta_member 'int (ecs_meta_cursor_t *, const char *)' +| |-ParmVarDecl 0x5604680d3d98 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d3e18 col:17 name 'const char *' +| `-FullComment 0x56046818c230 +| `-ParagraphComment 0x56046818c200 +| `-TextComment 0x56046818c1d0 Text=" Move cursor to member " +|-FunctionDecl 0x5604680d4138 line:12479:5 ecs_meta_dotmember 'int (ecs_meta_cursor_t *, const char *)' +| |-ParmVarDecl 0x5604680d4018 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d4098 col:17 name 'const char *' +| `-FullComment 0x56046818c300 +| `-ParagraphComment 0x56046818c2d0 +| `-TextComment 0x56046818c2a0 Text=" Move cursor to member, supports dot-separated nested members " +|-FunctionDecl 0x5604680d42c0 line:12485:5 ecs_meta_push 'int (ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d4228 col:24 cursor 'ecs_meta_cursor_t *' +| `-FullComment 0x56046818c420 +| `-ParagraphComment 0x56046818c3f0 +| |-TextComment 0x56046818c370 Text=" Push a scope (required/only valid for structs " +| |-TextComment 0x56046818c390 Text="&" +| `-TextComment 0x56046818c3b0 Text=" collections) " +|-FunctionDecl 0x5604680d4440 line:12490:5 ecs_meta_pop 'int (ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d43a8 col:24 cursor 'ecs_meta_cursor_t *' +| `-FullComment 0x56046818c530 +| `-ParagraphComment 0x56046818c500 +| `-TextComment 0x56046818c4d0 Text=" Pop a struct or collection scope (must follow a push) " +|-FunctionDecl 0x5604680d4678 line:12495:6 ecs_meta_is_collection 'bool (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d4588 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818c600 +| `-ParagraphComment 0x56046818c5d0 +| `-TextComment 0x56046818c5a0 Text=" Is the current scope a collection? " +|-FunctionDecl 0x5604680d4848 line:12500:14 ecs_meta_get_type 'ecs_entity_t (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d4758 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818c6d0 +| `-ParagraphComment 0x56046818c6a0 +| `-TextComment 0x56046818c670 Text=" Get type of current element. " +|-FunctionDecl 0x5604680d49b8 line:12505:14 ecs_meta_get_unit 'ecs_entity_t (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d4928 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818c7a0 +| `-ParagraphComment 0x56046818c770 +| `-TextComment 0x56046818c740 Text=" Get unit of current element. " +|-FunctionDecl 0x5604680d4b90 line:12510:13 ecs_meta_get_member 'const char *(const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d4a98 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818c870 +| `-ParagraphComment 0x56046818c840 +| `-TextComment 0x56046818c810 Text=" Get member name of current member " +|-FunctionDecl 0x5604680d51a0 line:12519:5 ecs_meta_set_bool 'int (ecs_meta_cursor_t *, bool)' +| |-ParmVarDecl 0x5604680d4ca8 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d4d20 col:10 value 'bool' +| `-FullComment 0x56046818c940 +| `-ParagraphComment 0x56046818c910 +| `-TextComment 0x56046818c8e0 Text=" Set field with boolean value " +|-FunctionDecl 0x5604680d5420 line:12525:5 ecs_meta_set_char 'int (ecs_meta_cursor_t *, char)' +| |-ParmVarDecl 0x5604680d5288 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d5300 col:10 value 'char' +| `-FullComment 0x56046818ca10 +| `-ParagraphComment 0x56046818c9e0 +| `-TextComment 0x56046818c9b0 Text=" Set field with char value " +|-FunctionDecl 0x5604680d56a0 line:12531:5 ecs_meta_set_int 'int (ecs_meta_cursor_t *, int64_t)' +| |-ParmVarDecl 0x5604680d5508 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d5580 col:13 value 'int64_t':'long' +| `-FullComment 0x56046818cae0 +| `-ParagraphComment 0x56046818cab0 +| `-TextComment 0x56046818ca80 Text=" Set field with int value " +|-FunctionDecl 0x5604680d5920 line:12537:5 ecs_meta_set_uint 'int (ecs_meta_cursor_t *, uint64_t)' +| |-ParmVarDecl 0x5604680d5788 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d5800 col:14 value 'uint64_t':'unsigned long' +| `-FullComment 0x56046818cbb0 +| `-ParagraphComment 0x56046818cb80 +| `-TextComment 0x56046818cb50 Text=" Set field with uint value " +|-FunctionDecl 0x5604680d5ba0 line:12543:5 ecs_meta_set_float 'int (ecs_meta_cursor_t *, double)' +| |-ParmVarDecl 0x5604680d5a08 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d5a88 col:12 value 'double' +| `-FullComment 0x56046818cc80 +| `-ParagraphComment 0x56046818cc50 +| `-TextComment 0x56046818cc20 Text=" Set field with float value " +|-FunctionDecl 0x5604680d5da8 line:12549:5 ecs_meta_set_string 'int (ecs_meta_cursor_t *, const char *)' +| |-ParmVarDecl 0x5604680d5c88 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d5d08 col:17 value 'const char *' +| `-FullComment 0x56046818cd50 +| `-ParagraphComment 0x56046818cd20 +| `-TextComment 0x56046818ccf0 Text=" Set field with string value " +|-FunctionDecl 0x5604680d5fb8 line:12555:5 ecs_meta_set_string_literal 'int (ecs_meta_cursor_t *, const char *)' +| |-ParmVarDecl 0x5604680d5e98 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d5f18 col:17 value 'const char *' +| `-FullComment 0x56046818ce20 +| `-ParagraphComment 0x56046818cdf0 +| `-TextComment 0x56046818cdc0 Text=" Set field with string literal value (has enclosing "") " +|-FunctionDecl 0x5604680d6200 line:12561:5 ecs_meta_set_entity 'int (ecs_meta_cursor_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680d60a8 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d6120 col:18 value 'ecs_entity_t':'unsigned long' +| `-FullComment 0x56046818cef0 +| `-ParagraphComment 0x56046818cec0 +| `-TextComment 0x56046818ce90 Text=" Set field with entity value " +|-FunctionDecl 0x5604680d6380 line:12567:5 ecs_meta_set_null 'int (ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d62e8 col:24 cursor 'ecs_meta_cursor_t *' +| `-FullComment 0x56046818cfc0 +| `-ParagraphComment 0x56046818cf90 +| `-TextComment 0x56046818cf60 Text=" Set field with null value " +|-FunctionDecl 0x5604680d6670 line:12572:5 ecs_meta_set_value 'int (ecs_meta_cursor_t *, const ecs_value_t *)' +| |-ParmVarDecl 0x5604680d6468 col:24 cursor 'ecs_meta_cursor_t *' +| |-ParmVarDecl 0x5604680d6558 col:24 value 'const ecs_value_t *' +| `-FullComment 0x56046818d090 +| `-ParagraphComment 0x56046818d060 +| `-TextComment 0x56046818d030 Text=" Set field with dynamic value " +|-FunctionDecl 0x5604680d6818 line:12580:6 ecs_meta_get_bool 'bool (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d6788 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818d160 +| `-ParagraphComment 0x56046818d130 +| `-TextComment 0x56046818d100 Text=" Get field value as boolean. " +|-FunctionDecl 0x5604680d69e8 line:12585:6 ecs_meta_get_char 'char (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d68f8 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818d230 +| `-ParagraphComment 0x56046818d200 +| `-TextComment 0x56046818d1d0 Text=" Get field value as char. " +|-FunctionDecl 0x5604680d6bb8 line:12590:9 ecs_meta_get_int 'int64_t (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d6ac8 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818d300 +| `-ParagraphComment 0x56046818d2d0 +| `-TextComment 0x56046818d2a0 Text=" Get field value as signed integer. " +|-FunctionDecl 0x5604680d6d58 line:12595:10 ecs_meta_get_uint 'uint64_t (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d6c98 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818d3d0 +| `-ParagraphComment 0x56046818d3a0 +| `-TextComment 0x56046818d370 Text=" Get field value as unsigned integer. " +|-FunctionDecl 0x5604680d6f30 line:12600:8 ecs_meta_get_float 'double (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d6e38 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818d4a0 +| `-ParagraphComment 0x56046818d470 +| `-TextComment 0x56046818d440 Text=" Get field value as float. " +|-FunctionDecl 0x5604680d8510 line:12608:13 ecs_meta_get_string 'const char *(const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d7018 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818d5c0 +| `-ParagraphComment 0x56046818d590 +| |-TextComment 0x56046818d510 Text=" Get field value as string. " +| |-TextComment 0x56046818d530 Text=" This operation does not perform conversions. If the field is not a string," +| `-TextComment 0x56046818d550 Text=" this operation will fail." +|-FunctionDecl 0x5604680d8688 line:12614:14 ecs_meta_get_entity 'ecs_entity_t (const ecs_meta_cursor_t *)' +| |-ParmVarDecl 0x5604680d85f8 col:30 cursor 'const ecs_meta_cursor_t *' +| `-FullComment 0x56046818d6b0 +| `-ParagraphComment 0x56046818d680 +| |-TextComment 0x56046818d630 Text=" Get field value as entity. " +| `-TextComment 0x56046818d650 Text=" This operation does not perform conversions. " +|-RecordDecl 0x5604680d8788 line:12620:16 struct ecs_primitive_desc_t definition +| |-FullComment 0x56046818d780 +| | `-ParagraphComment 0x56046818d750 +| | `-TextComment 0x56046818d720 Text=" Used with ecs_primitive_init. " +| |-FieldDecl 0x5604680d8840 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680d88a0 col:26 kind 'ecs_primitive_kind_t':'enum ecs_primitive_kind_t' +|-TypedefDecl 0x5604680d8948 col:3 referenced ecs_primitive_desc_t 'struct ecs_primitive_desc_t':'struct ecs_primitive_desc_t' +| |-ElaboratedType 0x5604680d88f0 'struct ecs_primitive_desc_t' sugar +| | `-RecordType 0x5604680d8810 'struct ecs_primitive_desc_t' +| | `-Record 0x5604680d8788 'ecs_primitive_desc_t' +| `-FullComment 0x56046818d850 +| `-ParagraphComment 0x56046818d820 +| `-TextComment 0x56046818d7f0 Text=" Used with ecs_primitive_init. " +|-FunctionDecl 0x5604680d8bf8 line:12628:14 ecs_primitive_init 'ecs_entity_t (ecs_world_t *, const ecs_primitive_desc_t *)' +| |-ParmVarDecl 0x5604680d89f0 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680d8ae8 col:33 desc 'const ecs_primitive_desc_t *' +| `-FullComment 0x56046818d920 +| `-ParagraphComment 0x56046818d8f0 +| `-TextComment 0x56046818d8c0 Text=" Create a new primitive type " +|-RecordDecl 0x5604680d8cd8 line:12633:16 struct ecs_enum_desc_t definition +| |-FullComment 0x56046818d9f0 +| | `-ParagraphComment 0x56046818d9c0 +| | `-TextComment 0x56046818d990 Text=" Used with ecs_enum_init. " +| |-FieldDecl 0x5604680d8d90 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680d8f68 col:25 constants 'ecs_enum_constant_t[32]' +|-TypedefDecl 0x5604680d9018 col:3 referenced ecs_enum_desc_t 'struct ecs_enum_desc_t':'struct ecs_enum_desc_t' +| |-ElaboratedType 0x5604680d8fc0 'struct ecs_enum_desc_t' sugar +| | `-RecordType 0x5604680d8d60 'struct ecs_enum_desc_t' +| | `-Record 0x5604680d8cd8 'ecs_enum_desc_t' +| `-FullComment 0x56046818dac0 +| `-ParagraphComment 0x56046818da90 +| `-TextComment 0x56046818da60 Text=" Used with ecs_enum_init. " +|-FunctionDecl 0x5604680d92c8 line:12641:14 ecs_enum_init 'ecs_entity_t (ecs_world_t *, const ecs_enum_desc_t *)' +| |-ParmVarDecl 0x5604680d90c0 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680d91b8 col:28 desc 'const ecs_enum_desc_t *' +| `-FullComment 0x56046818db90 +| `-ParagraphComment 0x56046818db60 +| `-TextComment 0x56046818db30 Text=" Create a new enum type " +|-RecordDecl 0x5604680d93a8 line:12647:16 struct ecs_bitmask_desc_t definition +| |-FullComment 0x56046818dc60 +| | `-ParagraphComment 0x56046818dc30 +| | `-TextComment 0x56046818dc00 Text=" Used with ecs_bitmask_init. " +| |-FieldDecl 0x5604680d9460 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680d9638 col:28 constants 'ecs_bitmask_constant_t[32]' +|-TypedefDecl 0x5604680d96e8 col:3 referenced ecs_bitmask_desc_t 'struct ecs_bitmask_desc_t':'struct ecs_bitmask_desc_t' +| |-ElaboratedType 0x5604680d9690 'struct ecs_bitmask_desc_t' sugar +| | `-RecordType 0x5604680d9430 'struct ecs_bitmask_desc_t' +| | `-Record 0x5604680d93a8 'ecs_bitmask_desc_t' +| `-FullComment 0x56046818dd30 +| `-ParagraphComment 0x56046818dd00 +| `-TextComment 0x56046818dcd0 Text=" Used with ecs_bitmask_init. " +|-FunctionDecl 0x5604680d9998 line:12655:14 ecs_bitmask_init 'ecs_entity_t (ecs_world_t *, const ecs_bitmask_desc_t *)' +| |-ParmVarDecl 0x5604680d9790 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680d9888 col:31 desc 'const ecs_bitmask_desc_t *' +| `-FullComment 0x56046818de00 +| `-ParagraphComment 0x56046818ddd0 +| `-TextComment 0x56046818dda0 Text=" Create a new bitmask type " +|-RecordDecl 0x5604680d9a78 line:12661:16 struct ecs_array_desc_t definition +| |-FullComment 0x56046818ded0 +| | `-ParagraphComment 0x56046818dea0 +| | `-TextComment 0x56046818de70 Text=" Used with ecs_array_init. " +| |-FieldDecl 0x5604680d9b30 col:18 entity 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680d9b90 col:18 type 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680d9bf0 col:13 count 'int32_t':'int' +|-TypedefDecl 0x5604680d9c98 col:3 referenced ecs_array_desc_t 'struct ecs_array_desc_t':'struct ecs_array_desc_t' +| |-ElaboratedType 0x5604680d9c40 'struct ecs_array_desc_t' sugar +| | `-RecordType 0x5604680d9b00 'struct ecs_array_desc_t' +| | `-Record 0x5604680d9a78 'ecs_array_desc_t' +| `-FullComment 0x56046818dfa0 +| `-ParagraphComment 0x56046818df70 +| `-TextComment 0x56046818df40 Text=" Used with ecs_array_init. " +|-FunctionDecl 0x5604680d9f48 line:12670:14 ecs_array_init 'ecs_entity_t (ecs_world_t *, const ecs_array_desc_t *)' +| |-ParmVarDecl 0x5604680d9d40 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680d9e38 col:29 desc 'const ecs_array_desc_t *' +| `-FullComment 0x56046818e070 +| `-ParagraphComment 0x56046818e040 +| `-TextComment 0x56046818e010 Text=" Create a new array type " +|-RecordDecl 0x5604680da028 line:12676:16 struct ecs_vector_desc_t definition +| |-FullComment 0x56046818e140 +| | `-ParagraphComment 0x56046818e110 +| | `-TextComment 0x56046818e0e0 Text=" Used with ecs_vector_init. " +| |-FieldDecl 0x5604680da0e0 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680da140 col:18 type 'ecs_entity_t':'unsigned long' +|-TypedefDecl 0x5604680da1e8 col:3 referenced ecs_vector_desc_t 'struct ecs_vector_desc_t':'struct ecs_vector_desc_t' +| |-ElaboratedType 0x5604680da190 'struct ecs_vector_desc_t' sugar +| | `-RecordType 0x5604680da0b0 'struct ecs_vector_desc_t' +| | `-Record 0x5604680da028 'ecs_vector_desc_t' +| `-FullComment 0x56046818e210 +| `-ParagraphComment 0x56046818e1e0 +| `-TextComment 0x56046818e1b0 Text=" Used with ecs_vector_init. " +|-FunctionDecl 0x5604680da820 line:12684:14 ecs_vector_init 'ecs_entity_t (ecs_world_t *, const ecs_vector_desc_t *)' +| |-ParmVarDecl 0x5604680da290 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680da388 col:30 desc 'const ecs_vector_desc_t *' +| `-FullComment 0x56046818e2e0 +| `-ParagraphComment 0x56046818e2b0 +| `-TextComment 0x56046818e280 Text=" Create a new vector type " +|-RecordDecl 0x5604680da8f8 line:12690:16 struct ecs_struct_desc_t definition +| |-FullComment 0x56046818e3b0 +| | `-ParagraphComment 0x56046818e380 +| | `-TextComment 0x56046818e350 Text=" Used with ecs_struct_init. " +| |-FieldDecl 0x5604680da9b0 col:18 entity 'ecs_entity_t':'unsigned long' +| `-FieldDecl 0x5604680daba8 col:18 members 'ecs_member_t[32]' +|-TypedefDecl 0x5604680dac58 col:3 referenced ecs_struct_desc_t 'struct ecs_struct_desc_t':'struct ecs_struct_desc_t' +| |-ElaboratedType 0x5604680dac00 'struct ecs_struct_desc_t' sugar +| | `-RecordType 0x5604680da980 'struct ecs_struct_desc_t' +| | `-Record 0x5604680da8f8 'ecs_struct_desc_t' +| `-FullComment 0x56046818e4a0 +| `-ParagraphComment 0x56046818e450 +| `-TextComment 0x56046818e420 Text=" Used with ecs_struct_init. " +|-FunctionDecl 0x5604680daf08 line:12698:14 ecs_struct_init 'ecs_entity_t (ecs_world_t *, const ecs_struct_desc_t *)' +| |-ParmVarDecl 0x5604680dad00 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680dadf8 col:30 desc 'const ecs_struct_desc_t *' +| `-FullComment 0x56046818e570 +| `-ParagraphComment 0x56046818e540 +| `-TextComment 0x56046818e510 Text=" Create a new struct type " +|-RecordDecl 0x5604680dafe8 line:12703:16 struct ecs_unit_desc_t definition +| |-FullComment 0x56046818e640 +| | `-ParagraphComment 0x56046818e610 +| | `-TextComment 0x56046818e5e0 Text=" Used with ecs_unit_init. " +| |-FieldDecl 0x5604680db0a0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680db108 col:17 symbol 'const char *' +| |-FieldDecl 0x5604680db168 col:18 quantity 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680db1c8 col:18 base 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680db228 col:18 over 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680db288 col:28 translation 'ecs_unit_translation_t':'struct ecs_unit_translation_t' +| `-FieldDecl 0x5604680db2e8 col:18 prefix 'ecs_entity_t':'unsigned long' +|-TypedefDecl 0x5604680db398 col:3 referenced ecs_unit_desc_t 'struct ecs_unit_desc_t':'struct ecs_unit_desc_t' +| |-ElaboratedType 0x5604680db340 'struct ecs_unit_desc_t' sugar +| | `-RecordType 0x5604680db070 'struct ecs_unit_desc_t' +| | `-Record 0x5604680dafe8 'ecs_unit_desc_t' +| `-FullComment 0x56046818e710 +| `-ParagraphComment 0x56046818e6e0 +| `-TextComment 0x56046818e6b0 Text=" Used with ecs_unit_init. " +|-FunctionDecl 0x5604680db648 line:12733:14 ecs_unit_init 'ecs_entity_t (ecs_world_t *, const ecs_unit_desc_t *)' +| |-ParmVarDecl 0x5604680db440 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680db538 col:28 desc 'const ecs_unit_desc_t *' +| `-FullComment 0x56046818e7e0 +| `-ParagraphComment 0x56046818e7b0 +| `-TextComment 0x56046818e780 Text=" Create a new unit " +|-RecordDecl 0x5604680db728 line:12738:16 struct ecs_unit_prefix_desc_t definition +| |-FullComment 0x56046818e8b0 +| | `-ParagraphComment 0x56046818e880 +| | `-TextComment 0x56046818e850 Text=" Used with ecs_unit_prefix_init. " +| |-FieldDecl 0x5604680db7e0 col:18 entity 'ecs_entity_t':'unsigned long' +| |-FieldDecl 0x5604680db848 col:17 symbol 'const char *' +| `-FieldDecl 0x5604680db8a8 col:28 translation 'ecs_unit_translation_t':'struct ecs_unit_translation_t' +|-TypedefDecl 0x5604680db958 col:3 referenced ecs_unit_prefix_desc_t 'struct ecs_unit_prefix_desc_t':'struct ecs_unit_prefix_desc_t' +| |-ElaboratedType 0x5604680db900 'struct ecs_unit_prefix_desc_t' sugar +| | `-RecordType 0x5604680db7b0 'struct ecs_unit_prefix_desc_t' +| | `-Record 0x5604680db728 'ecs_unit_prefix_desc_t' +| `-FullComment 0x56046818e980 +| `-ParagraphComment 0x56046818e950 +| `-TextComment 0x56046818e920 Text=" Used with ecs_unit_prefix_init. " +|-FunctionDecl 0x5604680dbc08 line:12751:14 ecs_unit_prefix_init 'ecs_entity_t (ecs_world_t *, const ecs_unit_prefix_desc_t *)' +| |-ParmVarDecl 0x5604680dba00 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680dbaf8 col:35 desc 'const ecs_unit_prefix_desc_t *' +| `-FullComment 0x56046818ea50 +| `-ParagraphComment 0x56046818ea20 +| `-TextComment 0x56046818e9f0 Text=" Create a new unit prefix " +|-FunctionDecl 0x5604680dbe08 line:12757:14 ecs_quantity_init 'ecs_entity_t (ecs_world_t *, const ecs_entity_desc_t *)' +| |-ParmVarDecl 0x5604680dbcf8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680dbd70 col:30 desc 'const ecs_entity_desc_t *' +| `-FullComment 0x56046818eb20 +| `-ParagraphComment 0x56046818eaf0 +| `-TextComment 0x56046818eac0 Text=" Create a new quantity " +|-FunctionDecl 0x5604680dbf58 line:12792:6 FlecsMetaImport 'void (ecs_world_t *)' +| `-ParmVarDecl 0x5604680dbec8 col:18 world 'ecs_world_t *' +|-FunctionDecl 0x5604680dc2b0 line:12874:7 ecs_chresc 'char *(char *, char, char)' +| |-ParmVarDecl 0x5604680dc0d0 col:11 out 'char *' +| |-ParmVarDecl 0x5604680dc148 col:10 in 'char' +| |-ParmVarDecl 0x5604680dc1c0 col:10 delimiter 'char' +| `-FullComment 0x56046818ef70 +| |-ParagraphComment 0x56046818ebe0 +| | |-TextComment 0x56046818eb90 Text=" Write an escaped character." +| | `-TextComment 0x56046818ebb0 Text=" Write a character to an output string, insert escape character if necessary." +| |-ParagraphComment 0x56046818ec30 +| | `-TextComment 0x56046818ec00 Text=" " +| |-ParamCommandComment 0x56046818ec50 [in] implicitly Param="out" ParamIndex=0 +| | `-ParagraphComment 0x56046818ed00 +| | |-TextComment 0x56046818ecb0 Text=" The string to write the character to." +| | `-TextComment 0x56046818ecd0 Text=" " +| |-ParamCommandComment 0x56046818ed20 [in] implicitly Param="in" ParamIndex=1 +| | `-ParagraphComment 0x56046818edd0 +| | |-TextComment 0x56046818ed80 Text=" The input character." +| | `-TextComment 0x56046818eda0 Text=" " +| |-ParamCommandComment 0x56046818edf0 [in] implicitly Param="delimiter" ParamIndex=2 +| | `-ParagraphComment 0x56046818eea0 +| | |-TextComment 0x56046818ee50 Text=" The delimiiter used (for example '"')" +| | `-TextComment 0x56046818ee70 Text=" " +| `-BlockCommandComment 0x56046818eec0 Name="return" +| `-ParagraphComment 0x56046818ef20 +| `-TextComment 0x56046818eef0 Text=" Pointer to the character after the last one written." +|-FunctionDecl 0x5604680dc510 line:12886:13 ecs_chrparse 'const char *(const char *, char *)' +| |-ParmVarDecl 0x5604680dc3b0 col:17 in 'const char *' +| |-ParmVarDecl 0x5604680dc430 col:11 out 'char *' +| `-FullComment 0x56046818f2f0 +| |-ParagraphComment 0x56046818f030 +| | |-TextComment 0x56046818efe0 Text=" Parse an escaped character." +| | `-TextComment 0x56046818f000 Text=" Parse a character with a potential escape sequence." +| |-ParagraphComment 0x56046818f080 +| | `-TextComment 0x56046818f050 Text=" " +| |-ParamCommandComment 0x56046818f0a0 [in] implicitly Param="in" ParamIndex=0 +| | `-ParagraphComment 0x56046818f150 +| | |-TextComment 0x56046818f100 Text=" Pointer to character in input string." +| | `-TextComment 0x56046818f120 Text=" " +| |-ParamCommandComment 0x56046818f170 [in] implicitly Param="out" ParamIndex=1 +| | `-ParagraphComment 0x56046818f220 +| | |-TextComment 0x56046818f1d0 Text=" Output string." +| | `-TextComment 0x56046818f1f0 Text=" " +| `-BlockCommandComment 0x56046818f240 Name="return" +| `-ParagraphComment 0x56046818f2a0 +| `-TextComment 0x56046818f270 Text=" Pointer to the character after the last one read." +|-FunctionDecl 0x5604680deaf8 line:12903:12 ecs_stresc 'ecs_size_t (char *, ecs_size_t, char, const char *)' +| |-ParmVarDecl 0x5604680dc600 col:11 out 'char *' +| |-ParmVarDecl 0x5604680dc678 col:16 size 'ecs_size_t':'int' +| |-ParmVarDecl 0x5604680dc6f0 col:10 delimiter 'char' +| |-ParmVarDecl 0x5604680dc770 col:17 in 'const char *' +| `-FullComment 0x56046818f8a0 +| |-ParagraphComment 0x56046818f430 +| | |-TextComment 0x56046818f360 Text=" Write an escaped string." +| | |-TextComment 0x56046818f380 Text=" Write an input string to an output string, escape characters where necessary." +| | |-TextComment 0x56046818f3a0 Text=" To determine the size of the output string, call the operation with a NULL" +| | |-TextComment 0x56046818f3c0 Text=" argument for 'out', and use the returned size to allocate a string that is" +| | `-TextComment 0x56046818f3e0 Text=" large enough." +| |-ParagraphComment 0x56046818f480 +| | `-TextComment 0x56046818f450 Text=" " +| |-ParamCommandComment 0x56046818f4a0 [in] implicitly Param="out" ParamIndex=0 +| | `-ParagraphComment 0x56046818f550 +| | |-TextComment 0x56046818f500 Text=" Pointer to output string (msut be)." +| | `-TextComment 0x56046818f520 Text=" " +| |-ParamCommandComment 0x56046818f570 [in] implicitly Param="size" ParamIndex=1 +| | `-ParagraphComment 0x56046818f620 +| | |-TextComment 0x56046818f5d0 Text=" Maximum number of characters written to output." +| | `-TextComment 0x56046818f5f0 Text=" " +| |-ParamCommandComment 0x56046818f640 [in] implicitly Param="delimiter" ParamIndex=2 +| | `-ParagraphComment 0x56046818f6f0 +| | |-TextComment 0x56046818f6a0 Text=" The delimiter used (for example '"')." +| | `-TextComment 0x56046818f6c0 Text=" " +| |-ParamCommandComment 0x56046818f710 [in] implicitly Param="in" ParamIndex=3 +| | `-ParagraphComment 0x56046818f7c0 +| | |-TextComment 0x56046818f770 Text=" The input string." +| | `-TextComment 0x56046818f790 Text=" " +| `-BlockCommandComment 0x56046818f7e0 Name="return" +| `-ParagraphComment 0x56046818f840 +| `-TextComment 0x56046818f810 Text=" The number of characters that (would) have been written." +|-FunctionDecl 0x5604680ded50 line:12918:7 ecs_astresc 'char *(char, const char *)' +| |-ParmVarDecl 0x5604680debf8 col:10 delimiter 'char' +| |-ParmVarDecl 0x5604680dec78 col:17 in 'const char *' +| `-FullComment 0x56046818fc50 +| |-ParagraphComment 0x56046818f990 +| | |-TextComment 0x56046818f910 Text=" Return escaped string." +| | |-TextComment 0x56046818f930 Text=" Return escaped version of input string. Same as ecs_stresc, but returns an" +| | `-TextComment 0x56046818f950 Text=" allocated string of the right size." +| |-ParagraphComment 0x56046818f9e0 +| | `-TextComment 0x56046818f9b0 Text=" " +| |-ParamCommandComment 0x56046818fa00 [in] implicitly Param="delimiter" ParamIndex=0 +| | `-ParagraphComment 0x56046818fab0 +| | |-TextComment 0x56046818fa60 Text=" The delimiter used (for example '"')." +| | `-TextComment 0x56046818fa80 Text=" " +| |-ParamCommandComment 0x56046818fad0 [in] implicitly Param="in" ParamIndex=1 +| | `-ParagraphComment 0x56046818fb80 +| | |-TextComment 0x56046818fb30 Text=" The input string." +| | `-TextComment 0x56046818fb50 Text=" " +| `-BlockCommandComment 0x56046818fba0 Name="return" +| `-ParagraphComment 0x56046818fc00 +| `-TextComment 0x56046818fbd0 Text=" Escaped string." +|-RecordDecl 0x5604680dee28 line:12924:16 struct ecs_expr_var_t definition +| |-FullComment 0x56046818fd40 +| | `-ParagraphComment 0x56046818fd10 +| | |-TextComment 0x56046818fcc0 Text=" Storage for parser variables. Variables make it possible to parameterize" +| | `-TextComment 0x56046818fce0 Text=" expression strings, and are referenced with the $ operator (e.g. $var). " +| |-FieldDecl 0x5604680deee8 col:11 name 'char *' +| `-FieldDecl 0x5604680def48 col:17 value 'ecs_value_t':'struct ecs_value_t' +|-TypedefDecl 0x5604680deff8 col:3 referenced ecs_expr_var_t 'struct ecs_expr_var_t':'struct ecs_expr_var_t' +| |-ElaboratedType 0x5604680defa0 'struct ecs_expr_var_t' sugar +| | `-RecordType 0x5604680deeb0 'struct ecs_expr_var_t' +| | `-Record 0x5604680dee28 'ecs_expr_var_t' +| `-FullComment 0x56046818fe30 +| `-ParagraphComment 0x56046818fe00 +| |-TextComment 0x56046818fdb0 Text=" Storage for parser variables. Variables make it possible to parameterize" +| `-TextComment 0x56046818fdd0 Text=" expression strings, and are referenced with the $ operator (e.g. $var). " +|-RecordDecl 0x5604680df068 line:12929:16 struct ecs_expr_var_scope_t definition +| |-FieldDecl 0x5604680df120 col:19 var_index 'ecs_hashmap_t':'ecs_hashmap_t' +| |-FieldDecl 0x5604680df180 col:15 vars 'ecs_vec_t':'struct ecs_vec_t' +| `-FieldDecl 0x5604680df280 col:34 parent 'struct ecs_expr_var_scope_t *' +|-TypedefDecl 0x5604680df3a8 col:3 referenced ecs_expr_var_scope_t 'struct ecs_expr_var_scope_t':'struct ecs_expr_var_scope_t' +| `-ElaboratedType 0x5604680df350 'struct ecs_expr_var_scope_t' sugar +| `-RecordType 0x5604680df0f0 'struct ecs_expr_var_scope_t' +| `-Record 0x5604680df068 'ecs_expr_var_scope_t' +|-RecordDecl 0x5604680df418 line:12935:16 struct ecs_vars_t definition +| |-FieldDecl 0x5604680df4d0 col:18 world 'ecs_world_t *' +| |-FieldDecl 0x5604680df550 col:26 root 'ecs_expr_var_scope_t':'struct ecs_expr_var_scope_t' +| `-FieldDecl 0x5604680df5d8 col:27 cur 'ecs_expr_var_scope_t *' +|-TypedefDecl 0x5604680df688 col:3 referenced ecs_vars_t 'struct ecs_vars_t':'struct ecs_vars_t' +| `-ElaboratedType 0x5604680df630 'struct ecs_vars_t' sugar +| `-RecordType 0x5604680df4a0 'struct ecs_vars_t' +| `-Record 0x5604680df418 'ecs_vars_t' +|-FunctionDecl 0x5604680df938 line:12943:6 ecs_vars_init 'void (ecs_world_t *, ecs_vars_t *)' +| |-ParmVarDecl 0x5604680df730 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680df828 col:17 vars 'ecs_vars_t *' +| `-FullComment 0x56046818ff00 +| `-ParagraphComment 0x56046818fed0 +| `-TextComment 0x56046818fea0 Text=" Init variable storage " +|-FunctionDecl 0x5604680dfb18 line:12949:6 ecs_vars_fini 'void (ecs_vars_t *)' +| |-ParmVarDecl 0x5604680dfa28 col:17 vars 'ecs_vars_t *' +| `-FullComment 0x56046818ffd0 +| `-ParagraphComment 0x56046818ffa0 +| `-TextComment 0x56046818ff70 Text=" Cleanup variable storage " +|-FunctionDecl 0x5604680dfc88 line:12954:6 ecs_vars_push 'void (ecs_vars_t *)' +| |-ParmVarDecl 0x5604680dfbf8 col:17 vars 'ecs_vars_t *' +| `-FullComment 0x5604681900a0 +| `-ParagraphComment 0x560468190070 +| `-TextComment 0x560468190040 Text=" Push variable scope " +|-FunctionDecl 0x5604680dfe60 line:12959:5 ecs_vars_pop 'int (ecs_vars_t *)' +| |-ParmVarDecl 0x5604680dfd68 col:17 vars 'ecs_vars_t *' +| `-FullComment 0x560468190170 +| `-ParagraphComment 0x560468190140 +| `-TextComment 0x560468190110 Text=" Pop variable scope " +|-FunctionDecl 0x5604680e01e8 line:12964:17 ecs_vars_declare 'ecs_expr_var_t *(ecs_vars_t *, const char *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680dff70 col:17 vars 'ecs_vars_t *' +| |-ParmVarDecl 0x5604680dfff0 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680e0068 col:18 type 'ecs_entity_t':'unsigned long' +| `-FullComment 0x560468190240 +| `-ParagraphComment 0x560468190210 +| `-TextComment 0x5604681901e0 Text=" Declare variable in current scope " +|-FunctionDecl 0x5604680e0548 line:12974:17 ecs_vars_declare_w_value 'ecs_expr_var_t *(ecs_vars_t *, const char *, ecs_value_t *)' +| |-ParmVarDecl 0x5604680e02d8 col:17 vars 'ecs_vars_t *' +| |-ParmVarDecl 0x5604680e0358 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680e0428 col:18 value 'ecs_value_t *' +| `-FullComment 0x560468190360 +| `-ParagraphComment 0x560468190330 +| |-TextComment 0x5604681902b0 Text=" Declare variable in current scope from value." +| |-TextComment 0x5604681902d0 Text=" This operation takes ownership of the value. The value pointer must be " +| `-TextComment 0x5604681902f0 Text=" allocated with ecs_value_new." +|-FunctionDecl 0x5604680e07c8 line:12981:17 ecs_vars_lookup 'ecs_expr_var_t *(ecs_vars_t *, const char *)' +| |-ParmVarDecl 0x5604680e0638 col:17 vars 'ecs_vars_t *' +| |-ParmVarDecl 0x5604680e06b8 col:17 name 'const char *' +| `-FullComment 0x560468190430 +| `-ParagraphComment 0x560468190400 +| `-TextComment 0x5604681903d0 Text=" Lookup variable in scope and parent scopes " +|-RecordDecl 0x5604680e08a8 line:12986:16 struct ecs_parse_expr_desc_t definition +| |-FullComment 0x560468190510 +| | `-ParagraphComment 0x5604681904e0 +| | `-TextComment 0x5604681904b0 Text=" Used with ecs_parse_expr. " +| |-FieldDecl 0x5604680e0968 col:17 name 'const char *' +| |-FieldDecl 0x5604680e09d0 col:17 expr 'const char *' +| |-FieldDecl 0x5604680e3c80 line:12989:20 lookup_action 'ecs_entity_t (*)(const ecs_world_t *, const char *, void *)' +| |-FieldDecl 0x5604680e3ce8 col:11 lookup_ctx 'void *' +| `-FieldDecl 0x5604680e3d48 col:17 vars 'ecs_vars_t *' +|-TypedefDecl 0x5604680e3df8 col:3 referenced ecs_parse_expr_desc_t 'struct ecs_parse_expr_desc_t':'struct ecs_parse_expr_desc_t' +| |-ElaboratedType 0x5604680e3da0 'struct ecs_parse_expr_desc_t' sugar +| | `-RecordType 0x5604680e0930 'struct ecs_parse_expr_desc_t' +| | `-Record 0x5604680e08a8 'ecs_parse_expr_desc_t' +| `-FullComment 0x5604681905e0 +| `-ParagraphComment 0x5604681905b0 +| `-TextComment 0x560468190580 Text=" Used with ecs_parse_expr. " +|-FunctionDecl 0x5604680e41d0 line:13012:13 ecs_parse_expr 'const char *(ecs_world_t *, const char *, ecs_value_t *, const ecs_parse_expr_desc_t *)' +| |-ParmVarDecl 0x5604680e3ea0 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680e3f20 col:17 ptr 'const char *' +| |-ParmVarDecl 0x5604680e3f98 col:18 value 'ecs_value_t *' +| |-ParmVarDecl 0x5604680e4088 col:34 desc 'const ecs_parse_expr_desc_t *' +| `-FullComment 0x560468190c30 +| |-ParagraphComment 0x5604681906d0 +| | |-TextComment 0x560468190650 Text=" Parse expression into value." +| | |-TextComment 0x560468190670 Text=" This operation parses a flecs expression into the provided pointer. The" +| | `-TextComment 0x560468190690 Text=" memory pointed to must be large enough to contain a value of the used type." +| |-ParagraphComment 0x560468190770 +| | |-TextComment 0x5604681906f0 Text=" If no type and pointer are provided for the value argument, the operation " +| | |-TextComment 0x560468190710 Text=" will discover the type from the expression and allocate storage for the " +| | `-TextComment 0x560468190730 Text=" value. The allocated value must be freed with ecs_value_free." +| |-ParagraphComment 0x5604681907c0 +| | `-TextComment 0x560468190790 Text=" " +| |-ParamCommandComment 0x5604681907e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468190890 +| | |-TextComment 0x560468190840 Text=" The world." +| | `-TextComment 0x560468190860 Text=" " +| |-ParamCommandComment 0x5604681908b0 [in] implicitly Param="ptr" ParamIndex=1 +| | `-ParagraphComment 0x560468190960 +| | |-TextComment 0x560468190910 Text=" The pointer to the expression to parse." +| | `-TextComment 0x560468190930 Text=" " +| |-ParamCommandComment 0x560468190980 [in] implicitly Param="value" ParamIndex=2 +| | `-ParagraphComment 0x560468190a80 +| | |-TextComment 0x5604681909e0 Text=" The value containing type " +| | |-TextComment 0x560468190a00 Text="&" +| | |-TextComment 0x560468190a20 Text=" pointer to write to." +| | `-TextComment 0x560468190a40 Text=" " +| |-ParamCommandComment 0x560468190aa0 [in] implicitly Param="desc" ParamIndex=3 +| | `-ParagraphComment 0x560468190b50 +| | |-TextComment 0x560468190b00 Text=" Configuration parameters for deserializer." +| | `-TextComment 0x560468190b20 Text=" " +| `-BlockCommandComment 0x560468190b70 Name="return" +| `-ParagraphComment 0x560468190bd0 +| `-TextComment 0x560468190ba0 Text=" Pointer to the character after the last one read, or NULL if failed." +|-FunctionDecl 0x5604680e4468 line:13028:7 ecs_ptr_to_expr 'char *(const ecs_world_t *, ecs_entity_t, const void *)' +| |-ParmVarDecl 0x5604680e42c8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680e4340 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680e43c0 col:17 data 'const void *' +| `-FullComment 0x5604681910b0 +| |-ParagraphComment 0x560468190d20 +| | |-TextComment 0x560468190ca0 Text=" Serialize value into expression string." +| | |-TextComment 0x560468190cc0 Text=" This operation serializes a value of the provided type to a string. The " +| | `-TextComment 0x560468190ce0 Text=" memory pointed to must be large enough to contain a value of the used type." +| |-ParagraphComment 0x560468190d70 +| | `-TextComment 0x560468190d40 Text=" " +| |-ParamCommandComment 0x560468190d90 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468190e40 +| | |-TextComment 0x560468190df0 Text=" The world." +| | `-TextComment 0x560468190e10 Text=" " +| |-ParamCommandComment 0x560468190e60 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x560468190f10 +| | |-TextComment 0x560468190ec0 Text=" The type of the value to serialize." +| | `-TextComment 0x560468190ee0 Text=" " +| |-ParamCommandComment 0x560468190f30 [in] implicitly Param="data" ParamIndex=2 +| | `-ParagraphComment 0x560468190fe0 +| | |-TextComment 0x560468190f90 Text=" The value to serialize." +| | `-TextComment 0x560468190fb0 Text=" " +| `-BlockCommandComment 0x560468191000 Name="return" +| `-ParagraphComment 0x560468191060 +| `-TextComment 0x560468191030 Text=" String with expression, or NULL if failed." +|-FunctionDecl 0x5604680e4778 line:13043:5 ecs_ptr_to_expr_buf 'int (const ecs_world_t *, ecs_entity_t, const void *, ecs_strbuf_t *)' +| |-ParmVarDecl 0x5604680e4558 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680e45d0 col:18 type 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680e4650 col:17 data 'const void *' +| |-ParmVarDecl 0x5604680e46c8 col:19 buf 'ecs_strbuf_t *' +| `-FullComment 0x5604681915e0 +| |-ParagraphComment 0x560468191170 +| | |-TextComment 0x560468191120 Text=" Serialize value into string buffer." +| | `-TextComment 0x560468191140 Text=" Same as ecs_ptr_to_expr, but serializes to an ecs_strbuf_t instance." +| |-ParagraphComment 0x5604681911c0 +| | `-TextComment 0x560468191190 Text=" " +| |-ParamCommandComment 0x5604681911e0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468191290 +| | |-TextComment 0x560468191240 Text=" The world." +| | `-TextComment 0x560468191260 Text=" " +| |-ParamCommandComment 0x5604681912b0 [in] implicitly Param="type" ParamIndex=1 +| | `-ParagraphComment 0x560468191360 +| | |-TextComment 0x560468191310 Text=" The type of the value to serialize." +| | `-TextComment 0x560468191330 Text=" " +| |-ParamCommandComment 0x560468191380 [in] implicitly Param="data" ParamIndex=2 +| | `-ParagraphComment 0x560468191430 +| | |-TextComment 0x5604681913e0 Text=" The value to serialize." +| | `-TextComment 0x560468191400 Text=" " +| |-ParamCommandComment 0x560468191450 [in] implicitly Param="buf" ParamIndex=3 +| | `-ParagraphComment 0x560468191500 +| | |-TextComment 0x5604681914b0 Text=" The strbuf to append the string to." +| | `-TextComment 0x5604681914d0 Text=" " +| `-BlockCommandComment 0x560468191520 Name="return" +| `-ParagraphComment 0x560468191580 +| `-TextComment 0x560468191550 Text=" Zero if success, non-zero if failed." +|-FunctionDecl 0x5604680e4b30 line:13061:5 ecs_primitive_to_expr_buf 'int (const ecs_world_t *, ecs_primitive_kind_t, const void *, ecs_strbuf_t *)' +| |-ParmVarDecl 0x5604680e4878 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680e48f0 col:26 kind 'ecs_primitive_kind_t':'enum ecs_primitive_kind_t' +| |-ParmVarDecl 0x5604680e4970 col:17 data 'const void *' +| |-ParmVarDecl 0x5604680e49e8 col:19 buf 'ecs_strbuf_t *' +| `-FullComment 0x560468191b60 +| |-ParagraphComment 0x5604681916f0 +| | |-TextComment 0x560468191650 Text=" Serialize primitive value into string buffer." +| | |-TextComment 0x560468191670 Text=" Serializes a primitive value to an ecs_strbuf_t instance. This operation can" +| | |-TextComment 0x560468191690 Text=" be reused by other serializers to avoid having to write boilerplate code that" +| | `-TextComment 0x5604681916b0 Text=" serializes primitive values to a string." +| |-ParagraphComment 0x560468191740 +| | `-TextComment 0x560468191710 Text=" " +| |-ParamCommandComment 0x560468191760 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468191810 +| | |-TextComment 0x5604681917c0 Text=" The world." +| | `-TextComment 0x5604681917e0 Text=" " +| |-ParamCommandComment 0x560468191830 [in] implicitly Param="kind" ParamIndex=1 +| | `-ParagraphComment 0x5604681918e0 +| | |-TextComment 0x560468191890 Text=" The kind of primitive value." +| | `-TextComment 0x5604681918b0 Text=" " +| |-ParamCommandComment 0x560468191900 [in] implicitly Param="data" ParamIndex=2 +| | `-ParagraphComment 0x5604681919b0 +| | |-TextComment 0x560468191960 Text=" The value ot serialize" +| | `-TextComment 0x560468191980 Text=" " +| |-ParamCommandComment 0x5604681919d0 [in] implicitly Param="buf" ParamIndex=3 +| | `-ParagraphComment 0x560468191a80 +| | |-TextComment 0x560468191a30 Text=" The strbuf to append the string to." +| | `-TextComment 0x560468191a50 Text=" " +| `-BlockCommandComment 0x560468191aa0 Name="return" +| `-ParagraphComment 0x560468191b00 +| `-TextComment 0x560468191ad0 Text=" Zero if success, non-zero if failed." +|-FunctionDecl 0x5604680e4eb0 line:13078:13 ecs_parse_expr_token 'const char *(const char *, const char *, const char *, char *)' +| |-ParmVarDecl 0x5604680e4c30 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680e4cb0 col:17 expr 'const char *' +| |-ParmVarDecl 0x5604680e4d30 col:17 ptr 'const char *' +| |-ParmVarDecl 0x5604680e4db0 col:11 token 'char *' +| `-FullComment 0x5604681920c0 +| |-ParagraphComment 0x560468191c50 +| | |-TextComment 0x560468191bd0 Text=" Parse expression token." +| | |-TextComment 0x560468191bf0 Text=" Expression tokens can contain more characters (such as '|') than tokens" +| | `-TextComment 0x560468191c10 Text=" parsed by the query (term) parser." +| |-ParagraphComment 0x560468191ca0 +| | `-TextComment 0x560468191c70 Text=" " +| |-ParamCommandComment 0x560468191cc0 [in] implicitly Param="name" ParamIndex=0 +| | `-ParagraphComment 0x560468191d70 +| | |-TextComment 0x560468191d20 Text=" The name of the expression (used for debug logs)." +| | `-TextComment 0x560468191d40 Text=" " +| |-ParamCommandComment 0x560468191d90 [in] implicitly Param="expr" ParamIndex=1 +| | `-ParagraphComment 0x560468191e40 +| | |-TextComment 0x560468191df0 Text=" The full expression (used for debug logs)." +| | `-TextComment 0x560468191e10 Text=" " +| |-ParamCommandComment 0x560468191e60 [in] implicitly Param="ptr" ParamIndex=2 +| | `-ParagraphComment 0x560468191f10 +| | |-TextComment 0x560468191ec0 Text=" The pointer to the expression to parse." +| | `-TextComment 0x560468191ee0 Text=" " +| |-ParamCommandComment 0x560468191f30 [in] implicitly Param="token" ParamIndex=3 +| | `-ParagraphComment 0x560468191fe0 +| | |-TextComment 0x560468191f90 Text=" The buffer to write to (must have size ECS_MAX_TOKEN_SIZE)" +| | `-TextComment 0x560468191fb0 Text=" " +| `-BlockCommandComment 0x560468192000 Name="return" +| `-ParagraphComment 0x560468192060 +| `-TextComment 0x560468192030 Text=" Pointer to the character after the last one read, or NULL if failed." +|-FunctionDecl 0x5604680e53e0 line:13171:5 ecs_meta_from_desc 'int (ecs_world_t *, ecs_entity_t, ecs_type_kind_t, const char *)' +| |-ParmVarDecl 0x5604680e5128 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680e51a0 col:18 component 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680e5218 col:21 kind 'ecs_type_kind_t':'enum ecs_type_kind_t' +| |-ParmVarDecl 0x5604680e5298 col:17 desc 'const char *' +| `-FullComment 0x560468192190 +| `-ParagraphComment 0x560468192160 +| `-TextComment 0x560468192130 Text=" Populate meta information from type descriptor. " +|-FunctionDecl 0x5604680e5790 line:13325:5 ecs_plecs_from_str 'int (ecs_world_t *, const char *, const char *)' +| |-ParmVarDecl 0x5604680e5568 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680e55e8 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680e5668 col:17 str 'const char *' +| `-FullComment 0x560468192600 +| |-ParagraphComment 0x560468192250 +| | |-TextComment 0x560468192200 Text=" Parse plecs string." +| | `-TextComment 0x560468192220 Text=" This parses a plecs string and instantiates the entities in the world." +| |-ParagraphComment 0x5604681922a0 +| | `-TextComment 0x560468192270 Text=" " +| |-ParamCommandComment 0x5604681922c0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468192370 +| | |-TextComment 0x560468192320 Text=" The world." +| | `-TextComment 0x560468192340 Text=" " +| |-ParamCommandComment 0x560468192390 [in] implicitly Param="name" ParamIndex=1 +| | `-ParagraphComment 0x560468192440 +| | |-TextComment 0x5604681923f0 Text=" The script name (typically the file)." +| | `-TextComment 0x560468192410 Text=" " +| |-ParamCommandComment 0x560468192460 [in] implicitly Param="str" ParamIndex=2 +| | `-ParagraphComment 0x560468192530 +| | |-TextComment 0x5604681924e0 Text=" The plecs string." +| | `-TextComment 0x560468192500 Text=" " +| `-BlockCommandComment 0x560468192550 Name="return" +| `-ParagraphComment 0x5604681925b0 +| `-TextComment 0x560468192580 Text=" Zero if success, non-zero otherwise." +|-FunctionDecl 0x5604680e5a20 line:13340:5 ecs_plecs_from_file 'int (ecs_world_t *, const char *)' +| |-ParmVarDecl 0x5604680e5888 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680e5908 col:17 filename 'const char *' +| `-FullComment 0x5604681929d0 +| |-ParagraphComment 0x560468192710 +| | |-TextComment 0x560468192670 Text=" Parse plecs file." +| | |-TextComment 0x560468192690 Text=" This parses a plecs file and instantiates the entities in the world. This" +| | |-TextComment 0x5604681926b0 Text=" operation is equivalent to loading the file contents and passing it to" +| | `-TextComment 0x5604681926d0 Text=" ecs_plecs_from_str." +| |-ParagraphComment 0x560468192760 +| | `-TextComment 0x560468192730 Text=" " +| |-ParamCommandComment 0x560468192780 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468192830 +| | |-TextComment 0x5604681927e0 Text=" The world." +| | `-TextComment 0x560468192800 Text=" " +| |-ParamCommandComment 0x560468192850 [in] implicitly Param="filename" ParamIndex=1 +| | `-ParagraphComment 0x560468192900 +| | |-TextComment 0x5604681928b0 Text=" The plecs file name." +| | `-TextComment 0x5604681928d0 Text=" " +| `-BlockCommandComment 0x560468192920 Name="return" +| `-ParagraphComment 0x560468192980 +| `-TextComment 0x560468192950 Text=" Zero if success, non-zero otherwise." +|-FunctionDecl 0x5604680e9ac8 line:13439:13 ecs_rule_init 'ecs_rule_t *(ecs_world_t *, const ecs_filter_desc_t *)' +| |-ParmVarDecl 0x5604680e98d8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680e9950 col:30 desc 'const ecs_filter_desc_t *' +| `-FullComment 0x560468193370 +| |-ParagraphComment 0x560468192ac0 +| | |-TextComment 0x560468192a40 Text=" Create a rule." +| | |-TextComment 0x560468192a60 Text=" A rule accepts the same descriptor as a filter, but has the additional" +| | `-TextComment 0x560468192a80 Text=" ability to use query variables." +| |-ParagraphComment 0x560468192b60 +| | |-TextComment 0x560468192ae0 Text=" Query variables can be used to constrain wildcards across multiple terms to" +| | |-TextComment 0x560468192b00 Text=" the same entity. Regular ECS queries do this in a limited form, as querying" +| | `-TextComment 0x560468192b20 Text=" for Position, Velocity only returns entities that have both components." +| |-ParagraphComment 0x560468192c20 +| | |-TextComment 0x560468192b80 Text=" Query variables expand this to constrain entities that are resolved while the" +| | |-TextComment 0x560468192ba0 Text=" query is being matched. Consider a query for all entities and the mission" +| | |-TextComment 0x560468192bc0 Text=" they are on:" +| | `-TextComment 0x560468192be0 Text=" (Mission, *)" +| |-ParagraphComment 0x560468192cc0 +| | |-TextComment 0x560468192c40 Text=" If an entity is on multiple missions, the wildcard will match it multiple" +| | |-TextComment 0x560468192c60 Text=" times. Now say we want to only list combat missions. Naively we could try:" +| | `-TextComment 0x560468192c80 Text=" (Mission, *), CombatMission(*)" +| |-ParagraphComment 0x560468192d80 +| | |-TextComment 0x560468192ce0 Text=" But this doesn't work, as term 1 returns entities with missions, and term 2" +| | |-TextComment 0x560468192d00 Text=" returns all combat missions for all entities. Query variables make it " +| | |-TextComment 0x560468192d20 Text=" possible to apply CombatMission to the found mission:" +| | `-TextComment 0x560468192d40 Text=" (Mission, $M), CombatMission($M)" +| |-ParagraphComment 0x560468192df0 +| | |-TextComment 0x560468192da0 Text=" By using the same variable ('M') we ensure that CombatMission is applied to" +| | `-TextComment 0x560468192dc0 Text=" the mission found in the current result." +| |-ParagraphComment 0x560468192e90 +| | |-TextComment 0x560468192e10 Text=" Variables can be used in each part of the term (predicate, subject, object)." +| | |-TextComment 0x560468192e30 Text=" This is a valid query:" +| | `-TextComment 0x560468192e50 Text=" Likes($X, $Y), Likes($Y, $X)" +| |-ParagraphComment 0x560468192f00 +| | |-TextComment 0x560468192eb0 Text=" This is also a valid query:" +| | `-TextComment 0x560468192ed0 Text=" _Component, Serializable(_Component)" +| |-ParagraphComment 0x560468192fa0 +| | |-TextComment 0x560468192f20 Text=" In the query expression syntax, variables are prefixed with a $. When using" +| | |-TextComment 0x560468192f40 Text=" the descriptor, specify the variable kind:" +| | `-TextComment 0x560468192f60 Text=" desc.terms[0].second = { .name = "X", .var = EcsVarIsVariable }" +| |-ParagraphComment 0x560468193010 +| | |-TextComment 0x560468192fc0 Text=" Different terms with the same variable name are automatically correlated by" +| | `-TextComment 0x560468192fe0 Text=" the query engine." +| |-ParagraphComment 0x560468193060 +| | `-TextComment 0x560468193030 Text=" A rule needs to be explicitly deleted with ecs_rule_fini." +| |-ParagraphComment 0x5604681930b0 +| | `-TextComment 0x560468193080 Text=" " +| |-ParamCommandComment 0x5604681930d0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468193180 +| | |-TextComment 0x560468193130 Text=" The world." +| | `-TextComment 0x560468193150 Text=" " +| |-ParamCommandComment 0x5604681931a0 [in] implicitly Param="desc" ParamIndex=1 +| | `-ParagraphComment 0x560468193250 +| | |-TextComment 0x560468193200 Text=" The descriptor (see ecs_filter_desc_t)" +| | `-TextComment 0x560468193220 Text=" " +| `-BlockCommandComment 0x560468193270 Name="return" +| `-ParagraphComment 0x5604681932d0 +| `-TextComment 0x5604681932a0 Text=" The rule." +|-FunctionDecl 0x5604680e9ca8 line:13448:6 ecs_rule_fini 'void (ecs_rule_t *)' +| |-ParmVarDecl 0x5604680e9bb8 col:17 rule 'ecs_rule_t *' +| `-FullComment 0x560468193550 +| |-ParagraphComment 0x560468193410 +| | `-TextComment 0x5604681933e0 Text=" Delete a rule. " +| |-ParagraphComment 0x560468193460 +| | `-TextComment 0x560468193430 Text=" " +| `-ParamCommandComment 0x560468193480 [in] implicitly Param="rule" ParamIndex=0 +| `-ParagraphComment 0x560468193510 +| `-TextComment 0x5604681934e0 Text=" The rule." +|-FunctionDecl 0x5604680e9e78 line:13458:21 ecs_rule_get_filter 'const ecs_filter_t *(const ecs_rule_t *)' +| |-ParmVarDecl 0x5604680e9d88 col:23 rule 'const ecs_rule_t *' +| `-FullComment 0x5604681937f0 +| |-ParagraphComment 0x560468193610 +| | |-TextComment 0x5604681935c0 Text=" Obtain filter from rule." +| | `-TextComment 0x5604681935e0 Text=" This operation returns the filter with which the rule was created." +| |-ParagraphComment 0x560468193660 +| | `-TextComment 0x560468193630 Text=" " +| |-ParamCommandComment 0x560468193680 [in] implicitly Param="rule" ParamIndex=0 +| | `-ParagraphComment 0x560468193730 +| | |-TextComment 0x5604681936e0 Text=" The rule." +| | `-TextComment 0x560468193700 Text=" " +| `-BlockCommandComment 0x560468193750 Name="return" +| `-ParagraphComment 0x5604681937b0 +| `-TextComment 0x560468193780 Text=" The filter." +|-FunctionDecl 0x5604680ea048 line:13467:9 ecs_rule_var_count 'int32_t (const ecs_rule_t *)' +| |-ParmVarDecl 0x5604680e9f58 col:23 rule 'const ecs_rule_t *' +| `-FullComment 0x560468193a70 +| |-ParagraphComment 0x560468193890 +| | `-TextComment 0x560468193860 Text=" Return number of variables in rule." +| |-ParagraphComment 0x5604681938e0 +| | `-TextComment 0x5604681938b0 Text=" " +| |-ParamCommandComment 0x560468193900 [in] implicitly Param="rule" ParamIndex=0 +| | `-ParagraphComment 0x5604681939b0 +| | |-TextComment 0x560468193960 Text=" The rule." +| | `-TextComment 0x560468193980 Text=" " +| `-BlockCommandComment 0x5604681939d0 Name="return" +| `-ParagraphComment 0x560468193a30 +| `-TextComment 0x560468193a00 Text=" The number of variables/" +|-FunctionDecl 0x5604680ea2b8 line:13479:9 ecs_rule_find_var 'int32_t (const ecs_rule_t *, const char *)' +| |-ParmVarDecl 0x5604680ea128 col:23 rule 'const ecs_rule_t *' +| |-ParmVarDecl 0x5604680ea1a8 col:17 name 'const char *' +| `-FullComment 0x560468193e20 +| |-ParagraphComment 0x560468193b60 +| | |-TextComment 0x560468193ae0 Text=" Find variable index." +| | |-TextComment 0x560468193b00 Text=" This operation looks up the index of a variable in the rule. This index can" +| | `-TextComment 0x560468193b20 Text=" be used in operations like ecs_iter_set_var and ecs_iter_get_var." +| |-ParagraphComment 0x560468193bb0 +| | `-TextComment 0x560468193b80 Text=" " +| |-ParamCommandComment 0x560468193bd0 [in] implicitly Param="rule" ParamIndex=0 +| | `-ParagraphComment 0x560468193c80 +| | |-TextComment 0x560468193c30 Text=" The rule." +| | `-TextComment 0x560468193c50 Text=" " +| |-ParamCommandComment 0x560468193ca0 [in] implicitly Param="name" ParamIndex=1 +| | `-ParagraphComment 0x560468193d50 +| | |-TextComment 0x560468193d00 Text=" The variable name." +| | `-TextComment 0x560468193d20 Text=" " +| `-BlockCommandComment 0x560468193d70 Name="return" +| `-ParagraphComment 0x560468193dd0 +| `-TextComment 0x560468193da0 Text=" The variable index." +|-FunctionDecl 0x5604680ea540 line:13490:13 ecs_rule_var_name 'const char *(const ecs_rule_t *, int32_t)' +| |-ParmVarDecl 0x5604680ea3a8 col:23 rule 'const ecs_rule_t *' +| |-ParmVarDecl 0x5604680ea420 col:13 var_id 'int32_t':'int' +| `-FullComment 0x5604681940f0 +| |-ParagraphComment 0x560468193ee0 +| | |-TextComment 0x560468193e90 Text=" Get variable name." +| | `-TextComment 0x560468193eb0 Text=" This operation returns the variable name for an index." +| |-ParagraphComment 0x560468193f30 +| | `-TextComment 0x560468193f00 Text=" " +| |-ParamCommandComment 0x560468193f50 [in] implicitly Param="rule" ParamIndex=0 +| | `-ParagraphComment 0x560468194000 +| | |-TextComment 0x560468193fb0 Text=" The rule." +| | `-TextComment 0x560468193fd0 Text=" " +| `-ParamCommandComment 0x560468194020 [in] implicitly Param="var_id" ParamIndex=1 +| `-ParagraphComment 0x5604681940b0 +| `-TextComment 0x560468194080 Text=" The variable index." +|-FunctionDecl 0x5604680ea7b8 line:13504:6 ecs_rule_var_is_entity 'bool (const ecs_rule_t *, int32_t)' +| |-ParmVarDecl 0x5604680ea628 col:23 rule 'const ecs_rule_t *' +| |-ParmVarDecl 0x5604680ea6a0 col:13 var_id 'int32_t':'int' +| `-FullComment 0x560468194440 +| |-ParagraphComment 0x560468194230 +| | |-TextComment 0x560468194160 Text=" Test if variable is an entity." +| | |-TextComment 0x560468194180 Text=" Internally the rule engine has entity variables and table variables. When" +| | |-TextComment 0x5604681941a0 Text=" iterating through rule variables (by using ecs_rule_variable_count) only" +| | |-TextComment 0x5604681941c0 Text=" the values for entity variables are accessible. This operation enables an" +| | `-TextComment 0x5604681941e0 Text=" appliction to check if a variable is an entity variable." +| |-ParagraphComment 0x560468194280 +| | `-TextComment 0x560468194250 Text=" " +| |-ParamCommandComment 0x5604681942a0 [in] implicitly Param="rule" ParamIndex=0 +| | `-ParagraphComment 0x560468194350 +| | |-TextComment 0x560468194300 Text=" The rule." +| | `-TextComment 0x560468194320 Text=" " +| `-ParamCommandComment 0x560468194370 [in] implicitly Param="var_id" ParamIndex=1 +| `-ParagraphComment 0x560468194400 +| `-TextComment 0x5604681943d0 Text=" The variable id." +|-FunctionDecl 0x5604680eaa38 line:13519:12 ecs_rule_iter 'ecs_iter_t (const ecs_world_t *, const ecs_rule_t *)' +| |-ParmVarDecl 0x5604680ea8a8 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680ea920 col:23 rule 'const ecs_rule_t *' +| `-FullComment 0x560468194860 +| |-ParagraphComment 0x5604681945a0 +| | |-TextComment 0x5604681944d0 Text=" Iterate a rule." +| | |-TextComment 0x5604681944f0 Text=" Note that rule iterators may allocate memory, and that unless the iterator" +| | |-TextComment 0x560468194510 Text=" is iterated until completion, it may still hold resources. When stopping" +| | |-TextComment 0x560468194530 Text=" iteration before ecs_rule_next has returned false, use ecs_iter_fini to" +| | `-TextComment 0x560468194550 Text=" cleanup any remaining resources." +| |-ParagraphComment 0x5604681945f0 +| | `-TextComment 0x5604681945c0 Text=" " +| |-ParamCommandComment 0x560468194610 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681946c0 +| | |-TextComment 0x560468194670 Text=" The world." +| | `-TextComment 0x560468194690 Text=" " +| |-ParamCommandComment 0x5604681946e0 [in] implicitly Param="rule" ParamIndex=1 +| | `-ParagraphComment 0x560468194790 +| | |-TextComment 0x560468194740 Text=" The rule." +| | `-TextComment 0x560468194760 Text=" " +| `-BlockCommandComment 0x5604681947b0 Name="return" +| `-ParagraphComment 0x560468194810 +| `-TextComment 0x5604681947e0 Text=" An iterator." +|-FunctionDecl 0x5604680eabb8 line:13528:6 ecs_rule_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x5604680eab28 col:17 it 'ecs_iter_t *' +| `-FullComment 0x560468194a40 +| |-ParagraphComment 0x560468194900 +| | `-TextComment 0x5604681948d0 Text=" Progress rule iterator." +| |-ParagraphComment 0x560468194950 +| | `-TextComment 0x560468194920 Text=" " +| `-ParamCommandComment 0x560468194970 [in] implicitly Param="it" ParamIndex=0 +| `-ParagraphComment 0x560468194a00 +| `-TextComment 0x5604681949d0 Text=" The iterator." +|-FunctionDecl 0x5604680ead28 line:13537:6 ecs_rule_next_instanced 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x5604680eac98 col:17 it 'ecs_iter_t *' +| `-FullComment 0x560468194c40 +| |-ParagraphComment 0x560468194b00 +| | |-TextComment 0x560468194ab0 Text=" Progress instanced iterator." +| | `-TextComment 0x560468194ad0 Text=" Should not be called unless you know what you're doing :-)" +| |-ParagraphComment 0x560468194b50 +| | `-TextComment 0x560468194b20 Text=" " +| `-ParamCommandComment 0x560468194b70 [in] implicitly Param="it" ParamIndex=0 +| `-ParagraphComment 0x560468194c00 +| `-TextComment 0x560468194bd0 Text=" The iterator." +|-FunctionDecl 0x5604680eaf00 line:13550:7 ecs_rule_str 'char *(ecs_rule_t *)' +| |-ParmVarDecl 0x5604680eae08 col:17 rule 'ecs_rule_t *' +| `-FullComment 0x560468194f70 +| |-ParagraphComment 0x560468194d30 +| | |-TextComment 0x560468194cb0 Text=" Convert rule to a string." +| | |-TextComment 0x560468194cd0 Text=" This will convert the rule program to a string which can aid in debugging" +| | `-TextComment 0x560468194cf0 Text=" the behavior of a rule." +| |-ParagraphComment 0x560468194d80 +| | `-TextComment 0x560468194d50 Text=" The returned string must be freed with ecs_os_free." +| |-ParagraphComment 0x560468194dd0 +| | `-TextComment 0x560468194da0 Text=" " +| |-ParamCommandComment 0x560468194df0 [in] implicitly Param="rule" ParamIndex=0 +| | `-ParagraphComment 0x560468194ea0 +| | |-TextComment 0x560468194e50 Text=" The rule." +| | `-TextComment 0x560468194e70 Text=" " +| `-BlockCommandComment 0x560468194ec0 Name="return" +| `-ParagraphComment 0x560468194f20 +| `-TextComment 0x560468194ef0 Text=" The string" +|-RecordDecl 0x5604680eb068 col:16 struct ecs_snapshot_t +|-TypedefDecl 0x5604680eb168 col:31 referenced ecs_snapshot_t 'struct ecs_snapshot_t':'struct ecs_snapshot_t' +| |-ElaboratedType 0x5604680eb110 'struct ecs_snapshot_t' sugar +| | `-RecordType 0x5604680eb0f0 'struct ecs_snapshot_t' +| | `-Record 0x5604680eb068 'ecs_snapshot_t' +| `-FullComment 0x560468195040 +| `-ParagraphComment 0x560468195010 +| `-TextComment 0x560468194fe0 Text=" A snapshot stores the state of a world in a particular point in time. " +|-FunctionDecl 0x5604680eb388 line:13608:17 ecs_snapshot_take 'ecs_snapshot_t *(ecs_world_t *)' +| |-ParmVarDecl 0x5604680eb230 col:18 world 'ecs_world_t *' +| `-FullComment 0x5604681952e0 +| |-ParagraphComment 0x560468195100 +| | |-TextComment 0x5604681950b0 Text=" Create a snapshot." +| | `-TextComment 0x5604681950d0 Text=" This operation makes a copy of the current state of the world." +| |-ParagraphComment 0x560468195150 +| | `-TextComment 0x560468195120 Text=" " +| |-ParamCommandComment 0x560468195170 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x560468195220 +| | |-TextComment 0x5604681951d0 Text=" The world to snapshot." +| | `-TextComment 0x5604681951f0 Text=" " +| `-BlockCommandComment 0x560468195240 Name="return" +| `-ParagraphComment 0x5604681952a0 +| `-TextComment 0x560468195270 Text=" The snapshot." +|-FunctionDecl 0x5604680eb558 line:13619:17 ecs_snapshot_take_w_iter 'ecs_snapshot_t *(ecs_iter_t *)' +| |-ParmVarDecl 0x5604680eb468 col:17 iter 'ecs_iter_t *' +| `-FullComment 0x5604681955b0 +| |-ParagraphComment 0x5604681953d0 +| | |-TextComment 0x560468195350 Text=" Create a filtered snapshot." +| | |-TextComment 0x560468195370 Text=" This operation is the same as ecs_snapshot_take, but accepts an iterator so" +| | `-TextComment 0x560468195390 Text=" an application can control what is stored by the snapshot. " +| |-ParagraphComment 0x560468195420 +| | `-TextComment 0x5604681953f0 Text=" " +| |-ParamCommandComment 0x560468195440 [in] implicitly Param="iter" ParamIndex=0 +| | `-ParagraphComment 0x5604681954f0 +| | |-TextComment 0x5604681954a0 Text=" An iterator to the data to be stored by the snapshot." +| | `-TextComment 0x5604681954c0 Text=" " +| `-BlockCommandComment 0x560468195510 Name="return" +| `-ParagraphComment 0x560468195570 +| `-TextComment 0x560468195540 Text=" The snapshot." +|-FunctionDecl 0x5604680ebf00 line:13637:6 ecs_snapshot_restore 'void (ecs_world_t *, ecs_snapshot_t *)' +| |-ParmVarDecl 0x5604680eb638 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680eb6b0 col:21 snapshot 'ecs_snapshot_t *' +| `-FullComment 0x5604681959d0 +| |-ParagraphComment 0x560468195740 +| | |-TextComment 0x560468195620 Text=" Restore a snapshot." +| | |-TextComment 0x560468195640 Text=" This operation restores the world to the state it was in when the specified" +| | |-TextComment 0x560468195660 Text=" snapshot was taken. A snapshot can only be used once for restoring, as its" +| | |-TextComment 0x560468195680 Text=" data replaces the data that is currently in the world." +| | |-TextComment 0x5604681956a0 Text=" This operation also resets the last issued entity handle, so any calls to" +| | |-TextComment 0x5604681956c0 Text=" ecs_new may return entity ids that have been issued before restoring the " +| | `-TextComment 0x5604681956e0 Text=" snapshot." +| |-ParagraphComment 0x5604681957b0 +| | |-TextComment 0x560468195760 Text=" The world in which the snapshot is restored must be the same as the world in" +| | `-TextComment 0x560468195780 Text=" which the snapshot is taken." +| |-ParagraphComment 0x560468195800 +| | `-TextComment 0x5604681957d0 Text=" " +| |-ParamCommandComment 0x560468195820 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681958d0 +| | |-TextComment 0x560468195880 Text=" The world to restore the snapshot to." +| | `-TextComment 0x5604681958a0 Text=" " +| `-ParamCommandComment 0x5604681958f0 [in] implicitly Param="snapshot" ParamIndex=1 +| `-ParagraphComment 0x560468195980 +| `-TextComment 0x560468195950 Text=" The snapshot to restore. " +|-FunctionDecl 0x5604680ec0d8 line:13646:12 ecs_snapshot_iter 'ecs_iter_t (ecs_snapshot_t *)' +| |-ParmVarDecl 0x5604680ebfe8 col:21 snapshot 'ecs_snapshot_t *' +| `-FullComment 0x560468195c50 +| |-ParagraphComment 0x560468195a70 +| | `-TextComment 0x560468195a40 Text=" Obtain iterator to snapshot data." +| |-ParagraphComment 0x560468195ac0 +| | `-TextComment 0x560468195a90 Text=" " +| |-ParamCommandComment 0x560468195ae0 [in] implicitly Param="snapshot" ParamIndex=0 +| | `-ParagraphComment 0x560468195b90 +| | |-TextComment 0x560468195b40 Text=" The snapshot to iterate over." +| | `-TextComment 0x560468195b60 Text=" " +| `-BlockCommandComment 0x560468195bb0 Name="return" +| `-ParagraphComment 0x560468195c10 +| `-TextComment 0x560468195be0 Text=" Iterator to snapshot data. " +|-FunctionDecl 0x5604680ec248 line:13655:6 ecs_snapshot_next 'bool (ecs_iter_t *)' +| |-ParmVarDecl 0x5604680ec1b8 col:17 iter 'ecs_iter_t *' +| `-FullComment 0x560468195ed0 +| |-ParagraphComment 0x560468195cf0 +| | `-TextComment 0x560468195cc0 Text=" Progress snapshot iterator." +| |-ParagraphComment 0x560468195d40 +| | `-TextComment 0x560468195d10 Text=" " +| |-ParamCommandComment 0x560468195d60 [in] implicitly Param="iter" ParamIndex=0 +| | `-ParagraphComment 0x560468195e10 +| | |-TextComment 0x560468195dc0 Text=" The snapshot iterator." +| | `-TextComment 0x560468195de0 Text=" " +| `-BlockCommandComment 0x560468195e30 Name="return" +| `-ParagraphComment 0x560468195e90 +| `-TextComment 0x560468195e60 Text=" True if more data is available, otherwise false." +|-FunctionDecl 0x5604680ec418 line:13664:6 ecs_snapshot_free 'void (ecs_snapshot_t *)' +| |-ParmVarDecl 0x5604680ec328 col:21 snapshot 'ecs_snapshot_t *' +| `-FullComment 0x5604681960d0 +| |-ParagraphComment 0x560468195f90 +| | |-TextComment 0x560468195f40 Text=" Free snapshot resources." +| | `-TextComment 0x560468195f60 Text=" This frees resources associated with a snapshot without restoring it." +| |-ParagraphComment 0x560468195fe0 +| | `-TextComment 0x560468195fb0 Text=" " +| `-ParamCommandComment 0x560468196000 [in] implicitly Param="snapshot" ParamIndex=0 +| `-ParagraphComment 0x560468196090 +| `-TextComment 0x560468196060 Text=" The snapshot to free. " +|-FunctionDecl 0x5604680ec660 line:13714:13 ecs_parse_whitespace 'const char *(const char *)' +| |-ParmVarDecl 0x5604680ec590 col:17 ptr 'const char *' +| `-FullComment 0x560468196370 +| |-ParagraphComment 0x560468196190 +| | |-TextComment 0x560468196140 Text=" Skip whitespace characters." +| | `-TextComment 0x560468196160 Text=" This function skips whitespace characters. Does not skip newlines." +| |-ParagraphComment 0x5604681961e0 +| | `-TextComment 0x5604681961b0 Text=" " +| |-ParamCommandComment 0x560468196200 [in] implicitly Param="ptr" ParamIndex=0 +| | `-ParagraphComment 0x5604681962b0 +| | |-TextComment 0x560468196260 Text=" Pointer to (potential) whitespaces to skip." +| | `-TextComment 0x560468196280 Text=" " +| `-BlockCommandComment 0x5604681962d0 Name="return" +| `-ParagraphComment 0x560468196330 +| `-TextComment 0x560468196300 Text=" Pointer to the next non-whitespace character." +|-FunctionDecl 0x5604680ec7e8 line:13724:13 ecs_parse_eol_and_whitespace 'const char *(const char *)' +| |-ParmVarDecl 0x5604680ec750 col:17 ptr 'const char *' +| `-FullComment 0x560468196620 +| |-ParagraphComment 0x560468196430 +| | |-TextComment 0x5604681963e0 Text=" Skip whitespace and newline characters." +| | `-TextComment 0x560468196400 Text=" This function skips whitespace characters." +| |-ParagraphComment 0x560468196480 +| | `-TextComment 0x560468196450 Text=" " +| |-ParamCommandComment 0x5604681964a0 [in] implicitly Param="ptr" ParamIndex=0 +| | `-ParagraphComment 0x560468196560 +| | |-TextComment 0x560468196510 Text=" Pointer to (potential) whitespaces to skip." +| | `-TextComment 0x560468196530 Text=" " +| `-BlockCommandComment 0x560468196580 Name="return" +| `-ParagraphComment 0x5604681965e0 +| `-TextComment 0x5604681965b0 Text=" Pointer to the next non-whitespace character." +|-FunctionDecl 0x5604680ec9f0 line:13736:13 ecs_parse_digit 'const char *(const char *, char *)' +| |-ParmVarDecl 0x5604680ec8d0 col:17 ptr 'const char *' +| |-ParmVarDecl 0x5604680ec950 col:11 token 'char *' +| `-FullComment 0x5604681969d0 +| |-ParagraphComment 0x560468196710 +| | |-TextComment 0x560468196690 Text=" Parse digit." +| | |-TextComment 0x5604681966b0 Text=" This function will parse until the first non-digit character is found. The" +| | `-TextComment 0x5604681966d0 Text=" provided expression must contain at least one digit character." +| |-ParagraphComment 0x560468196760 +| | `-TextComment 0x560468196730 Text=" " +| |-ParamCommandComment 0x560468196780 [in] implicitly Param="ptr" ParamIndex=0 +| | `-ParagraphComment 0x560468196830 +| | |-TextComment 0x5604681967e0 Text=" The expression to parse." +| | `-TextComment 0x560468196800 Text=" " +| |-ParamCommandComment 0x560468196850 [in] implicitly Param="token" ParamIndex=1 +| | `-ParagraphComment 0x560468196900 +| | |-TextComment 0x5604681968b0 Text=" The output buffer." +| | `-TextComment 0x5604681968d0 Text=" " +| `-BlockCommandComment 0x560468196920 Name="return" +| `-ParagraphComment 0x560468196980 +| `-TextComment 0x560468196950 Text=" Pointer to the first non-digit character." +|-FunctionDecl 0x5604680ecc40 line:13747:13 ecs_parse_fluff 'const char *(const char *, char **)' +| |-ParmVarDecl 0x5604680ecae0 col:17 ptr 'const char *' +| |-ParmVarDecl 0x5604680ecb60 col:12 last_comment 'char **' +| `-FullComment 0x560468196c70 +| |-ParagraphComment 0x560468196a90 +| | |-TextComment 0x560468196a40 Text=" Skip whitespaces and comments." +| | `-TextComment 0x560468196a60 Text=" This function skips whitespace characters and comments (single line, //)." +| |-ParagraphComment 0x560468196ae0 +| | `-TextComment 0x560468196ab0 Text=" " +| |-ParamCommandComment 0x560468196b00 [in] implicitly Param="ptr" ParamIndex=0 +| | `-ParagraphComment 0x560468196bb0 +| | |-TextComment 0x560468196b60 Text=" pointer to (potential) whitespaces/comments to skip." +| | `-TextComment 0x560468196b80 Text=" " +| `-BlockCommandComment 0x560468196bd0 Name="return" +| `-ParagraphComment 0x560468196c30 +| `-TextComment 0x560468196c00 Text=" pointer to the next non-whitespace character." +|-FunctionDecl 0x5604680ed030 line:13761:13 ecs_parse_token 'const char *(const char *, const char *, const char *, char *, char)' +| |-ParmVarDecl 0x5604680ecd30 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680ecdb0 col:17 expr 'const char *' +| |-ParmVarDecl 0x5604680ece30 col:17 ptr 'const char *' +| |-ParmVarDecl 0x5604680eceb0 col:11 token_out 'char *' +| |-ParmVarDecl 0x5604680ecf28 col:10 delim 'char' +| `-FullComment 0x5604681971a0 +| |-ParagraphComment 0x560468196d30 +| | |-TextComment 0x560468196ce0 Text=" Parse a single token." +| | `-TextComment 0x560468196d00 Text=" This function can be used as simple tokenizer by other parsers." +| |-ParagraphComment 0x560468196d80 +| | `-TextComment 0x560468196d50 Text=" " +| |-ParamCommandComment 0x560468196da0 [in] implicitly Param="name" ParamIndex=0 +| | `-ParagraphComment 0x560468196e50 +| | |-TextComment 0x560468196e00 Text=" of program (used for logging)." +| | `-TextComment 0x560468196e20 Text=" " +| |-ParamCommandComment 0x560468196e70 [in] implicitly Param="expr" ParamIndex=1 +| | `-ParagraphComment 0x560468196f20 +| | |-TextComment 0x560468196ed0 Text=" pointer to token to parse." +| | `-TextComment 0x560468196ef0 Text=" " +| |-ParamCommandComment 0x560468196f40 [in] implicitly Param="ptr" ParamIndex=2 +| | `-ParagraphComment 0x560468196ff0 +| | |-TextComment 0x560468196fa0 Text=" pointer to first character to parse." +| | `-TextComment 0x560468196fc0 Text=" " +| |-ParamCommandComment 0x560468197010 [in] implicitly Param="token_out" ParamIndex=3 +| | `-ParagraphComment 0x5604681970c0 +| | |-TextComment 0x560468197070 Text=" Parsed token (buffer should be ECS_MAX_TOKEN_SIZE large)" +| | `-TextComment 0x560468197090 Text=" " +| `-BlockCommandComment 0x5604681970e0 Name="return" +| `-ParagraphComment 0x560468197140 +| `-TextComment 0x560468197110 Text=" Pointer to the next token, or NULL if error occurred." +|-FunctionDecl 0x5604680ed490 line:13796:7 ecs_parse_term 'char *(const ecs_world_t *, const char *, const char *, const char *, ecs_term_t *)' +| |-ParmVarDecl 0x5604680ed138 col:24 world 'const ecs_world_t *' +| |-ParmVarDecl 0x5604680ed1b8 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680ed238 col:17 expr 'const char *' +| |-ParmVarDecl 0x5604680ed2b8 col:17 ptr 'const char *' +| |-ParmVarDecl 0x5604680ed330 col:17 term_out 'ecs_term_t *' +| `-FullComment 0x560468197b40 +| |-ParagraphComment 0x560468197290 +| | |-TextComment 0x560468197210 Text=" Parse term in expression." +| | |-TextComment 0x560468197230 Text=" This operation parses a single term in an expression and returns a pointer" +| | `-TextComment 0x560468197250 Text=" to the next term expression." +| |-ParagraphComment 0x560468197300 +| | |-TextComment 0x5604681972b0 Text=" If the returned pointer points to the 0-terminator, the expression is fully " +| | `-TextComment 0x5604681972d0 Text=" parsed. The function would typically be called in a while loop:" +| |-ParagraphComment 0x560468197440 +| | |-TextComment 0x560468197320 Text=" const char *ptr = expr;" +| | |-TextComment 0x560468197340 Text=" while (ptr[0] " +| | |-TextComment 0x560468197360 Text="&" +| | |-TextComment 0x560468197380 Text="&" +| | |-TextComment 0x5604681973a0 Text=" (ptr = ecs_parse_term(world, name, expr, ptr, " +| | |-TextComment 0x5604681973c0 Text="&term" +| | `-TextComment 0x5604681973e0 Text="))) { }" +| |-ParagraphComment 0x5604681974e0 +| | |-TextComment 0x560468197460 Text=" The operation does not attempt to find entity ids from the names in the" +| | |-TextComment 0x560468197480 Text=" expression. Use the ecs_term_resolve_ids function to resolve the identifiers" +| | `-TextComment 0x5604681974a0 Text=" in the parsed term." +| |-ParagraphComment 0x560468197580 +| | |-TextComment 0x560468197500 Text=" The returned term will in most cases contain allocated resources, which" +| | |-TextComment 0x560468197520 Text=" should freed (or used) by the application. To free the resources for a term," +| | `-TextComment 0x560468197540 Text=" use the ecs_term_free function." +| |-ParagraphComment 0x5604681975d0 +| | `-TextComment 0x5604681975a0 Text=" The parser accepts expressions in the legacy string format." +| |-ParagraphComment 0x560468197620 +| | `-TextComment 0x5604681975f0 Text=" " +| |-ParamCommandComment 0x560468197640 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x5604681976f0 +| | |-TextComment 0x5604681976a0 Text=" The world." +| | `-TextComment 0x5604681976c0 Text=" " +| |-ParamCommandComment 0x560468197710 [in] implicitly Param="name" ParamIndex=1 +| | `-ParagraphComment 0x5604681977c0 +| | |-TextComment 0x560468197770 Text=" The name of the expression (optional, improves error logs)" +| | `-TextComment 0x560468197790 Text=" " +| |-ParamCommandComment 0x5604681977e0 [in] implicitly Param="expr" ParamIndex=2 +| | `-ParagraphComment 0x560468197890 +| | |-TextComment 0x560468197840 Text=" The expression to parse (optional, improves error logs)" +| | `-TextComment 0x560468197860 Text=" " +| |-ParamCommandComment 0x5604681978b0 [in] implicitly Param="ptr" ParamIndex=3 +| | `-ParagraphComment 0x560468197960 +| | |-TextComment 0x560468197910 Text=" The pointer to the current term (must be in expr)." +| | `-TextComment 0x560468197930 Text=" " +| |-ParamCommandComment 0x560468197980 [in] implicitly Param="term_out" ParamIndex=4 +| | `-ParagraphComment 0x560468197a30 +| | |-TextComment 0x5604681979e0 Text=" Out parameter for the term." +| | `-TextComment 0x560468197a00 Text=" " +| `-BlockCommandComment 0x560468197a50 Name="return" +| `-ParagraphComment 0x560468197ab0 +| `-TextComment 0x560468197a80 Text=" pointer to next term if successful, NULL if failed." +|-RecordDecl 0x5604680ed618 col:16 struct ecs_http_server_t +|-TypedefDecl 0x5604680ed718 col:34 referenced ecs_http_server_t 'struct ecs_http_server_t':'struct ecs_http_server_t' +| |-ElaboratedType 0x5604680ed6c0 'struct ecs_http_server_t' sugar +| | `-RecordType 0x5604680ed6a0 'struct ecs_http_server_t' +| | `-Record 0x5604680ed618 'ecs_http_server_t' +| `-FullComment 0x560468197c10 +| `-ParagraphComment 0x560468197be0 +| `-TextComment 0x560468197bb0 Text=" HTTP server " +|-RecordDecl 0x5604680ed7b0 line:13868:9 struct definition +| |-FullComment 0x560468197ce0 +| | `-ParagraphComment 0x560468197cb0 +| | `-TextComment 0x560468197c80 Text=" A connection manages communication with the remote host " +| |-FieldDecl 0x5604680ed860 col:14 id 'uint64_t':'unsigned long' +| |-FieldDecl 0x5604680ed938 col:24 server 'ecs_http_server_t *' +| |-FieldDecl 0x5604680eda28 col:10 host 'char[128]' +| `-FieldDecl 0x5604680edb18 col:10 port 'char[16]' +|-TypedefDecl 0x5604680edbc8 col:3 referenced ecs_http_connection_t 'struct ecs_http_connection_t':'ecs_http_connection_t' +| |-ElaboratedType 0x5604680edb70 'struct ecs_http_connection_t' sugar +| | `-RecordType 0x5604680ed830 'ecs_http_connection_t' +| | `-Record 0x5604680ed7b0 '' +| `-FullComment 0x560468197db0 +| `-ParagraphComment 0x560468197d80 +| `-TextComment 0x560468197d50 Text=" A connection manages communication with the remote host " +|-RecordDecl 0x5604680edc60 line:13877:9 struct definition +| |-FullComment 0x560468197ed0 +| | `-ParagraphComment 0x560468197ea0 +| | |-TextComment 0x560468197e20 Text=" Helper type used for headers " +| | |-TextComment 0x560468197e40 Text="&" +| | `-TextComment 0x560468197e60 Text=" URL query parameters " +| |-FieldDecl 0x5604680edd18 col:17 key 'const char *' +| `-FieldDecl 0x5604680edd80 col:17 value 'const char *' +|-TypedefDecl 0x5604680ede28 col:3 referenced ecs_http_key_value_t 'struct ecs_http_key_value_t':'ecs_http_key_value_t' +| |-ElaboratedType 0x5604680eddd0 'struct ecs_http_key_value_t' sugar +| | `-RecordType 0x5604680edce0 'ecs_http_key_value_t' +| | `-Record 0x5604680edc60 '' +| `-FullComment 0x560468197ff0 +| `-ParagraphComment 0x560468197fc0 +| |-TextComment 0x560468197f40 Text=" Helper type used for headers " +| |-TextComment 0x560468197f60 Text="&" +| `-TextComment 0x560468197f80 Text=" URL query parameters " +|-EnumDecl 0x560468051970 line:13883:9 +| |-FullComment 0x5604681980c0 +| | `-ParagraphComment 0x560468198090 +| | `-TextComment 0x560468198060 Text=" Supported request methods " +| |-EnumConstantDecl 0x560468051a30 col:5 EcsHttpGet 'int' +| |-EnumConstantDecl 0x560468051a80 col:5 EcsHttpPost 'int' +| |-EnumConstantDecl 0x560468051ad0 col:5 EcsHttpPut 'int' +| |-EnumConstantDecl 0x560468051b20 col:5 EcsHttpDelete 'int' +| |-EnumConstantDecl 0x560468051b70 col:5 EcsHttpOptions 'int' +| `-EnumConstantDecl 0x560468051bc0 col:5 EcsHttpMethodUnsupported 'int' +|-TypedefDecl 0x560468051c68 col:3 referenced ecs_http_method_t 'enum ecs_http_method_t':'ecs_http_method_t' +| |-ElaboratedType 0x560468051c10 'enum ecs_http_method_t' sugar +| | `-EnumType 0x560468051a10 'ecs_http_method_t' +| | `-Enum 0x560468051970 '' +| `-FullComment 0x560468198190 +| `-ParagraphComment 0x560468198160 +| `-TextComment 0x560468198130 Text=" Supported request methods " +|-RecordDecl 0x560468051d00 line:13893:9 struct definition +| |-FullComment 0x560468198260 +| | `-ParagraphComment 0x560468198230 +| | `-TextComment 0x560468198200 Text=" A request " +| |-FieldDecl 0x560468051db0 col:14 id 'uint64_t':'unsigned long' +| |-FieldDecl 0x560468051e30 col:23 method 'ecs_http_method_t':'ecs_http_method_t' +| |-FieldDecl 0x560468051e98 col:11 path 'char *' +| |-FieldDecl 0x560468051f00 col:11 body 'char *' +| |-FieldDecl 0x5604680520c8 col:26 headers 'ecs_http_key_value_t[32]' +| |-FieldDecl 0x560468052198 col:26 params 'ecs_http_key_value_t[32]' +| |-FieldDecl 0x5604680521f8 col:13 header_count 'int32_t':'int' +| |-FieldDecl 0x560468052258 col:13 param_count 'int32_t':'int' +| `-FieldDecl 0x560468052338 col:28 conn 'ecs_http_connection_t *' +|-TypedefDecl 0x5604680523e8 col:3 referenced ecs_http_request_t 'struct ecs_http_request_t':'ecs_http_request_t' +| |-ElaboratedType 0x560468052390 'struct ecs_http_request_t' sugar +| | `-RecordType 0x560468051d80 'ecs_http_request_t' +| | `-Record 0x560468051d00 '' +| `-FullComment 0x560468198330 +| `-ParagraphComment 0x560468198300 +| `-TextComment 0x5604681982d0 Text=" A request " +|-RecordDecl 0x560468052480 line:13908:9 struct definition +| |-FullComment 0x560468198400 +| | `-ParagraphComment 0x5604681983d0 +| | `-TextComment 0x5604681983a0 Text=" A reply " +| |-FieldDecl 0x560468052538 col:9 code 'int' +| | `-FullComment 0x5604681984f0 +| | `-ParagraphComment 0x5604681984a0 +| | `-TextComment 0x560468198470 Text=" default = 200 " +| |-FieldDecl 0x5604680525c8 col:18 body 'ecs_strbuf_t':'struct ecs_strbuf_t' +| | `-FullComment 0x5604681985c0 +| | `-ParagraphComment 0x560468198590 +| | `-TextComment 0x560468198560 Text=" default = "" " +| |-FieldDecl 0x560468052660 col:17 status 'const char *' +| | `-FullComment 0x560468198690 +| | `-ParagraphComment 0x560468198660 +| | `-TextComment 0x560468198630 Text=" default = OK " +| |-FieldDecl 0x5604680526f0 col:17 content_type 'const char *' +| | `-FullComment 0x560468198760 +| | `-ParagraphComment 0x560468198730 +| | `-TextComment 0x560468198700 Text=" default = application/json " +| `-FieldDecl 0x560468052778 col:18 headers 'ecs_strbuf_t':'struct ecs_strbuf_t' +| `-FullComment 0x560468198830 +| `-ParagraphComment 0x560468198800 +| `-TextComment 0x5604681987d0 Text=" default = "" " +|-TypedefDecl 0x560468052858 col:3 referenced ecs_http_reply_t 'struct ecs_http_reply_t':'ecs_http_reply_t' +| |-ElaboratedType 0x560468052800 'struct ecs_http_reply_t' sugar +| | `-RecordType 0x560468052500 'ecs_http_reply_t' +| | `-Record 0x560468052480 '' +| `-FullComment 0x560468198900 +| `-ParagraphComment 0x5604681988d0 +| `-TextComment 0x5604681988a0 Text=" A reply " +|-VarDecl 0x5604680528d8 col:16 ecs_http_request_received_count 'int64_t':'long' extern +|-VarDecl 0x560468052950 col:16 ecs_http_request_invalid_count 'int64_t':'long' extern +|-VarDecl 0x5604680529c8 col:16 ecs_http_request_handled_ok_count 'int64_t':'long' extern +|-VarDecl 0x560468052a40 col:16 ecs_http_request_handled_error_count 'int64_t':'long' extern +|-VarDecl 0x560468052ab8 col:16 ecs_http_request_not_handled_count 'int64_t':'long' extern +|-VarDecl 0x560468052b30 col:16 ecs_http_request_preflight_count 'int64_t':'long' extern +|-VarDecl 0x560468052ba8 col:16 ecs_http_send_ok_count 'int64_t':'long' extern +|-VarDecl 0x560468052c20 col:16 ecs_http_send_error_count 'int64_t':'long' extern +|-VarDecl 0x560468052c98 col:16 ecs_http_busy_count 'int64_t':'long' extern +|-TypedefDecl 0x5604680530e0 line:13934:16 referenced ecs_http_reply_action_t 'bool (*)(const ecs_http_request_t *, ecs_http_reply_t *, void *)' +| |-PointerType 0x560468053070 'bool (*)(const ecs_http_request_t *, ecs_http_reply_t *, void *)' +| | `-ParenType 0x560468053010 'bool (const ecs_http_request_t *, ecs_http_reply_t *, void *)' sugar +| | `-FunctionProtoType 0x560468052fd0 'bool (const ecs_http_request_t *, ecs_http_reply_t *, void *)' cdecl +| | |-BuiltinType 0x560467ec1830 'bool' +| | |-PointerType 0x560468052d80 'const ecs_http_request_t *' +| | | `-QualType 0x560468052d31 'const ecs_http_request_t' const +| | | `-TypedefType 0x560468052d30 'ecs_http_request_t' sugar +| | | |-Typedef 0x5604680523e8 'ecs_http_request_t' +| | | `-ElaboratedType 0x560468052390 'struct ecs_http_request_t' sugar +| | | `-RecordType 0x560468051d80 'ecs_http_request_t' +| | | `-Record 0x560468051d00 '' +| | |-PointerType 0x560468052e70 'ecs_http_reply_t *' +| | | `-TypedefType 0x560468052e20 'ecs_http_reply_t' sugar +| | | |-Typedef 0x560468052858 'ecs_http_reply_t' +| | | `-ElaboratedType 0x560468052800 'struct ecs_http_reply_t' sugar +| | | `-RecordType 0x560468052500 'ecs_http_reply_t' +| | | `-Record 0x560468052480 '' +| | `-PointerType 0x560467ec1f30 'void *' +| | `-BuiltinType 0x560467ec1810 'void' +| `-FullComment 0x560468198a40 +| `-ParagraphComment 0x560468198a10 +| |-TextComment 0x560468198970 Text=" Request callback." +| |-TextComment 0x560468198990 Text=" Invoked for each valid request. The function should populate the reply and" +| |-TextComment 0x5604681989b0 Text=" return true. When the function returns false, the server will reply with a " +| `-TextComment 0x5604681989d0 Text=" 404 (Not found) code. " +|-RecordDecl 0x560468053168 line:13940:9 struct definition +| |-FullComment 0x560468198b10 +| | `-ParagraphComment 0x560468198ae0 +| | `-TextComment 0x560468198ab0 Text=" Used with ecs_http_server_init. " +| |-FieldDecl 0x560468053240 col:29 callback 'ecs_http_reply_action_t':'bool (*)(const ecs_http_request_t *, ecs_http_reply_t *, void *)' +| |-FieldDecl 0x5604680532a8 col:11 ctx 'void *' +| |-FieldDecl 0x560468053308 col:14 port 'uint16_t':'unsigned short' +| |-FieldDecl 0x560468053370 col:17 ipaddr 'const char *' +| `-FieldDecl 0x5604680533d0 col:13 send_queue_wait_ms 'int32_t':'int' +|-TypedefDecl 0x560468053478 col:3 referenced ecs_http_server_desc_t 'struct ecs_http_server_desc_t':'ecs_http_server_desc_t' +| |-ElaboratedType 0x560468053420 'struct ecs_http_server_desc_t' sugar +| | `-RecordType 0x5604680531f0 'ecs_http_server_desc_t' +| | `-Record 0x560468053168 '' +| `-FullComment 0x560468198be0 +| `-ParagraphComment 0x560468198bb0 +| `-TextComment 0x560468198b80 Text=" Used with ecs_http_server_init. " +|-FunctionDecl 0x560468053688 line:13955:20 ecs_http_server_init 'ecs_http_server_t *(const ecs_http_server_desc_t *)' +| |-ParmVarDecl 0x560468053598 col:35 desc 'const ecs_http_server_desc_t *' +| `-FullComment 0x560468198e80 +| |-ParagraphComment 0x560468198ca0 +| | |-TextComment 0x560468198c50 Text=" Create server. " +| | `-TextComment 0x560468198c70 Text=" Use ecs_http_server_start to start receiving requests." +| |-ParagraphComment 0x560468198cf0 +| | `-TextComment 0x560468198cc0 Text=" " +| |-ParamCommandComment 0x560468198d10 [in] implicitly Param="desc" ParamIndex=0 +| | `-ParagraphComment 0x560468198dc0 +| | |-TextComment 0x560468198d70 Text=" Server configuration parameters." +| | `-TextComment 0x560468198d90 Text=" " +| `-BlockCommandComment 0x560468198de0 Name="return" +| `-ParagraphComment 0x560468198e40 +| `-TextComment 0x560468198e10 Text=" The new server, or NULL if creation failed." +|-FunctionDecl 0x560468053858 line:13964:6 ecs_http_server_fini 'void (ecs_http_server_t *)' +| |-ParmVarDecl 0x560468053768 col:24 server 'ecs_http_server_t *' +| `-FullComment 0x560468199080 +| |-ParagraphComment 0x560468198f40 +| | |-TextComment 0x560468198ef0 Text=" Destroy server. " +| | `-TextComment 0x560468198f10 Text=" This operation will stop the server if it was still running." +| |-ParagraphComment 0x560468198f90 +| | `-TextComment 0x560468198f60 Text=" " +| `-ParamCommandComment 0x560468198fb0 [in] implicitly Param="server" ParamIndex=0 +| `-ParagraphComment 0x560468199040 +| `-TextComment 0x560468199010 Text=" The server to destroy." +|-FunctionDecl 0x5604680f7430 line:13974:5 ecs_http_server_start 'int (ecs_http_server_t *)' +| |-ParmVarDecl 0x5604680f7330 col:24 server 'ecs_http_server_t *' +| `-FullComment 0x560468199320 +| |-ParagraphComment 0x560468199140 +| | |-TextComment 0x5604681990f0 Text=" Start server. " +| | `-TextComment 0x560468199110 Text=" After this operation the server will be able to accept requests." +| |-ParagraphComment 0x560468199190 +| | `-TextComment 0x560468199160 Text=" " +| |-ParamCommandComment 0x5604681991b0 [in] implicitly Param="server" ParamIndex=0 +| | `-ParagraphComment 0x560468199260 +| | |-TextComment 0x560468199210 Text=" The server to start." +| | `-TextComment 0x560468199230 Text=" " +| `-BlockCommandComment 0x560468199280 Name="return" +| `-ParagraphComment 0x5604681992e0 +| `-TextComment 0x5604681992b0 Text=" Zero if successful, non-zero if failed." +|-FunctionDecl 0x5604680f76a8 line:13984:6 ecs_http_server_dequeue 'void (ecs_http_server_t *, float)' +| |-ParmVarDecl 0x5604680f7518 col:24 server 'ecs_http_server_t *' +| |-ParmVarDecl 0x5604680f7598 col:17 delta_time 'float' +| `-FullComment 0x560468199550 +| |-ParagraphComment 0x560468199410 +| | |-TextComment 0x560468199390 Text=" Process server requests. " +| | |-TextComment 0x5604681993b0 Text=" This operation invokes the reply callback for each received request. No new" +| | `-TextComment 0x5604681993d0 Text=" requests will be enqueued while processing requests." +| |-ParagraphComment 0x560468199460 +| | `-TextComment 0x560468199430 Text=" " +| `-ParamCommandComment 0x560468199480 [in] implicitly Param="server" ParamIndex=0 +| `-ParagraphComment 0x560468199510 +| `-TextComment 0x5604681994e0 Text=" The server for which to process requests." +|-FunctionDecl 0x5604680f7828 line:13994:6 ecs_http_server_stop 'void (ecs_http_server_t *)' +| |-ParmVarDecl 0x5604680f7798 col:24 server 'ecs_http_server_t *' +| `-FullComment 0x560468199750 +| |-ParagraphComment 0x560468199610 +| | |-TextComment 0x5604681995c0 Text=" Stop server. " +| | `-TextComment 0x5604681995e0 Text=" After this operation no new requests can be received." +| |-ParagraphComment 0x560468199660 +| | `-TextComment 0x560468199630 Text=" " +| `-ParamCommandComment 0x560468199680 [in] implicitly Param="server" ParamIndex=0 +| `-ParagraphComment 0x560468199710 +| `-TextComment 0x5604681996e0 Text=" The server." +|-FunctionDecl 0x5604680f7aa0 line:14004:13 ecs_http_get_header 'const char *(const ecs_http_request_t *, const char *)' +| |-ParmVarDecl 0x5604680f7908 col:31 req 'const ecs_http_request_t *' +| |-ParmVarDecl 0x5604680f7988 col:17 name 'const char *' +| `-FullComment 0x560468199ab0 +| |-ParagraphComment 0x5604681997f0 +| | `-TextComment 0x5604681997c0 Text=" Find header in request. " +| |-ParagraphComment 0x560468199840 +| | `-TextComment 0x560468199810 Text=" " +| |-ParamCommandComment 0x560468199860 [in] implicitly Param="req" ParamIndex=0 +| | `-ParagraphComment 0x560468199910 +| | |-TextComment 0x5604681998c0 Text=" The request." +| | `-TextComment 0x5604681998e0 Text=" " +| |-ParamCommandComment 0x560468199930 [in] implicitly Param="name" ParamIndex=1 +| | `-ParagraphComment 0x5604681999e0 +| | |-TextComment 0x560468199990 Text=" name of the header to find" +| | `-TextComment 0x5604681999b0 Text=" " +| `-BlockCommandComment 0x560468199a00 Name="return" +| `-ParagraphComment 0x560468199a60 +| `-TextComment 0x560468199a30 Text=" The header value, or NULL if not found." +|-FunctionDecl 0x5604680f7ca8 line:14015:13 ecs_http_get_param 'const char *(const ecs_http_request_t *, const char *)' +| |-ParmVarDecl 0x5604680f7b88 col:31 req 'const ecs_http_request_t *' +| |-ParmVarDecl 0x5604680f7c08 col:17 name 'const char *' +| `-FullComment 0x560468199e10 +| |-ParagraphComment 0x560468199b50 +| | `-TextComment 0x560468199b20 Text=" Find query parameter in request. " +| |-ParagraphComment 0x560468199ba0 +| | `-TextComment 0x560468199b70 Text=" " +| |-ParamCommandComment 0x560468199bc0 [in] implicitly Param="req" ParamIndex=0 +| | `-ParagraphComment 0x560468199c70 +| | |-TextComment 0x560468199c20 Text=" The request." +| | `-TextComment 0x560468199c40 Text=" " +| |-ParamCommandComment 0x560468199c90 [in] implicitly Param="name" ParamIndex=1 +| | `-ParagraphComment 0x560468199d40 +| | |-TextComment 0x560468199cf0 Text=" The parameter name." +| | `-TextComment 0x560468199d10 Text=" " +| `-BlockCommandComment 0x560468199d60 Name="return" +| `-ParagraphComment 0x560468199dc0 +| `-TextComment 0x560468199d90 Text=" The decoded parameter value, or NULL if not found." +|-FunctionDecl 0x5604680f7e80 col:6 ecs_set_os_api_impl 'void (void)' +|-FunctionDecl 0x5604680f8228 line:14120:14 ecs_import 'ecs_entity_t (ecs_world_t *, ecs_module_action_t, const char *)' +| |-ParmVarDecl 0x5604680f7fe8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680f8080 col:25 module 'ecs_module_action_t':'void (*)(ecs_world_t *)' +| |-ParmVarDecl 0x5604680f8100 col:17 module_name 'const char *' +| `-FullComment 0x56046819a420 +| |-ParagraphComment 0x560468199f70 +| | |-TextComment 0x560468199e80 Text=" Import a module." +| | |-TextComment 0x560468199ea0 Text=" This operation will load a modules and store the public module handles in the" +| | |-TextComment 0x560468199ec0 Text=" handles_out out parameter. The module name will be used to verify if the" +| | |-TextComment 0x560468199ee0 Text=" module was already loaded, in which case it won't be reimported. The name" +| | |-TextComment 0x560468199f00 Text=" will be translated from PascalCase to an entity path (pascal.case) before the" +| | `-TextComment 0x560468199f20 Text=" lookup occurs." +| |-ParagraphComment 0x56046819a030 +| | |-TextComment 0x560468199f90 Text=" Module contents will be stored as children of the module entity. This " +| | |-TextComment 0x560468199fb0 Text=" prevents modules from accidentally defining conflicting identifiers. This is" +| | |-TextComment 0x560468199fd0 Text=" enforced by setting the scope before and after loading the module to the " +| | `-TextComment 0x560468199ff0 Text=" module entity id." +| |-ParagraphComment 0x56046819a080 +| | `-TextComment 0x56046819a050 Text=" A more convenient way to import a module is by using the ECS_IMPORT macro." +| |-ParagraphComment 0x56046819a0d0 +| | `-TextComment 0x56046819a0a0 Text=" " +| |-ParamCommandComment 0x56046819a0f0 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046819a1a0 +| | |-TextComment 0x56046819a150 Text=" The world." +| | `-TextComment 0x56046819a170 Text=" " +| |-ParamCommandComment 0x56046819a1c0 [in] implicitly Param="module" ParamIndex=1 +| | `-ParagraphComment 0x56046819a270 +| | |-TextComment 0x56046819a220 Text=" The module import function." +| | `-TextComment 0x56046819a240 Text=" " +| |-ParamCommandComment 0x56046819a290 [in] implicitly Param="module_name" ParamIndex=2 +| | `-ParagraphComment 0x56046819a340 +| | |-TextComment 0x56046819a2f0 Text=" The name of the module." +| | `-TextComment 0x56046819a310 Text=" " +| `-BlockCommandComment 0x56046819a360 Name="return" +| `-ParagraphComment 0x56046819a3c0 +| `-TextComment 0x56046819a390 Text=" The module entity." +|-FunctionDecl 0x5604680f84b0 line:14134:14 ecs_import_c 'ecs_entity_t (ecs_world_t *, ecs_module_action_t, const char *)' +| |-ParmVarDecl 0x5604680f8318 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680f8390 col:25 module 'ecs_module_action_t':'void (*)(ecs_world_t *)' +| |-ParmVarDecl 0x5604680f8410 col:17 module_name_c 'const char *' +| `-FullComment 0x56046819a890 +| |-ParagraphComment 0x56046819a500 +| | |-TextComment 0x56046819a490 Text=" Same as ecs_import, but with name to scope conversion." +| | `-TextComment 0x56046819a4b0 Text=" PascalCase names are automatically converted to scoped names." +| |-ParagraphComment 0x56046819a550 +| | `-TextComment 0x56046819a520 Text=" " +| |-ParamCommandComment 0x56046819a570 [in] implicitly Param="world" ParamIndex=0 +| | `-ParagraphComment 0x56046819a620 +| | |-TextComment 0x56046819a5d0 Text=" The world." +| | `-TextComment 0x56046819a5f0 Text=" " +| |-ParamCommandComment 0x56046819a640 [in] implicitly Param="module" ParamIndex=1 +| | `-ParagraphComment 0x56046819a6f0 +| | |-TextComment 0x56046819a6a0 Text=" The module import function." +| | `-TextComment 0x56046819a6c0 Text=" " +| |-ParamCommandComment 0x56046819a710 [in] implicitly Param="module_name_c" ParamIndex=2 +| | `-ParagraphComment 0x56046819a7c0 +| | |-TextComment 0x56046819a770 Text=" The name of the module." +| | `-TextComment 0x56046819a790 Text=" " +| `-BlockCommandComment 0x56046819a7e0 Name="return" +| `-ParagraphComment 0x56046819a840 +| `-TextComment 0x56046819a810 Text=" The module entity." +|-FunctionDecl 0x5604680f8798 line:14158:14 ecs_import_from_library 'ecs_entity_t (ecs_world_t *, const char *, const char *)' +| |-ParmVarDecl 0x5604680f8578 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680f85f8 col:17 library_name 'const char *' +| `-ParmVarDecl 0x5604680f8678 col:17 module_name 'const char *' +|-FunctionDecl 0x5604680f8aa8 line:14165:14 ecs_module_init 'ecs_entity_t (ecs_world_t *, const char *, const ecs_component_desc_t *)' +| |-ParmVarDecl 0x5604680f8888 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680f8908 col:17 c_name 'const char *' +| |-ParmVarDecl 0x5604680f8980 col:33 desc 'const ecs_component_desc_t *' +| `-FullComment 0x56046819a960 +| `-ParagraphComment 0x56046819a930 +| `-TextComment 0x56046819a900 Text=" Register a new module. " +|-FunctionDecl 0x5604680f8e10 line:14245:7 ecs_cpp_get_type_name 'char *(char *, const char *, size_t)' +| |-ParmVarDecl 0x5604680f8c30 col:11 type_name 'char *' +| |-ParmVarDecl 0x5604680f8cb0 col:17 func_name 'const char *' +| `-ParmVarDecl 0x5604680f8d28 col:12 len 'size_t':'unsigned long' +|-FunctionDecl 0x5604680f9080 line:14251:7 ecs_cpp_get_symbol_name 'char *(char *, const char *, size_t)' +| |-ParmVarDecl 0x5604680f8ee0 col:11 symbol_name 'char *' +| |-ParmVarDecl 0x5604680f8f60 col:17 type_name 'const char *' +| `-ParmVarDecl 0x5604680f8fd8 col:12 len 'size_t':'unsigned long' +|-FunctionDecl 0x5604680fb650 line:14257:7 ecs_cpp_get_constant_name 'char *(char *, const char *, size_t)' +| |-ParmVarDecl 0x5604680f9150 col:11 constant_name 'char *' +| |-ParmVarDecl 0x5604680f91d0 col:17 func_name 'const char *' +| `-ParmVarDecl 0x5604680f9248 col:12 len 'size_t':'unsigned long' +|-FunctionDecl 0x5604680fb838 line:14263:13 ecs_cpp_trim_module 'const char *(ecs_world_t *, const char *)' +| |-ParmVarDecl 0x5604680fb718 col:18 world 'ecs_world_t *' +| `-ParmVarDecl 0x5604680fb798 col:17 type_name 'const char *' +|-FunctionDecl 0x5604680fbd58 line:14268:6 ecs_cpp_component_validate 'void (ecs_world_t *, ecs_entity_t, const char *, const char *, size_t, size_t, bool)' +| |-ParmVarDecl 0x5604680fb8f8 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680fb970 col:18 id 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680fb9f0 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680fba70 col:17 symbol 'const char *' +| |-ParmVarDecl 0x5604680fbae8 col:12 size 'size_t':'unsigned long' +| |-ParmVarDecl 0x5604680fbb60 col:12 alignment 'size_t':'unsigned long' +| `-ParmVarDecl 0x5604680fbbd8 col:10 implicit_name 'bool' +|-FunctionDecl 0x5604680fc378 line:14278:14 ecs_cpp_component_register 'ecs_entity_t (ecs_world_t *, ecs_entity_t, const char *, const char *, ecs_size_t, ecs_size_t, bool, bool *)' +| |-ParmVarDecl 0x5604680fbe40 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680fbeb8 col:18 id 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680fbf38 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680fbfb8 col:17 symbol 'const char *' +| |-ParmVarDecl 0x5604680fc030 col:16 size 'ecs_size_t':'int' +| |-ParmVarDecl 0x5604680fc0a8 col:16 alignment 'ecs_size_t':'int' +| |-ParmVarDecl 0x5604680fc120 col:10 implicit_name 'bool' +| `-ParmVarDecl 0x5604680fc1d0 col:11 existing_out 'bool *' +|-FunctionDecl 0x5604680fca98 line:14289:14 ecs_cpp_component_register_explicit 'ecs_entity_t (ecs_world_t *, ecs_entity_t, ecs_entity_t, const char *, const char *, const char *, size_t, size_t, bool, bool *)' +| |-ParmVarDecl 0x5604680fc468 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680fc4e0 col:18 s_id 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680fc558 col:18 id 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680fc5d8 col:17 name 'const char *' +| |-ParmVarDecl 0x5604680fc658 col:17 type_name 'const char *' +| |-ParmVarDecl 0x5604680fc6d8 col:17 symbol 'const char *' +| |-ParmVarDecl 0x5604680fc750 col:12 size 'size_t':'unsigned long' +| |-ParmVarDecl 0x5604680fc7c8 col:12 alignment 'size_t':'unsigned long' +| |-ParmVarDecl 0x5604680fc840 col:10 is_component 'bool' +| `-ParmVarDecl 0x5604680fc8c0 col:11 existing_out 'bool *' +|-FunctionDecl 0x5604680fcca8 line:14302:6 ecs_cpp_enum_init 'void (ecs_world_t *, ecs_entity_t)' +| |-ParmVarDecl 0x5604680fcb98 col:18 world 'ecs_world_t *' +| `-ParmVarDecl 0x5604680fcc10 col:18 id 'ecs_entity_t':'unsigned long' +|-FunctionDecl 0x5604680fd0a8 line:14307:14 ecs_cpp_enum_constant_register 'ecs_entity_t (ecs_world_t *, ecs_entity_t, ecs_entity_t, const char *, int)' +| |-ParmVarDecl 0x5604680fcd68 col:18 world 'ecs_world_t *' +| |-ParmVarDecl 0x5604680fcde0 col:18 parent 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680fce58 col:18 id 'ecs_entity_t':'unsigned long' +| |-ParmVarDecl 0x5604680fced8 col:17 name 'const char *' +| `-ParmVarDecl 0x5604680fcf58 col:9 value 'int' +|-FunctionDecl 0x5604680fd238 col:9 ecs_cpp_reset_count_get 'int32_t (void)' +`-FunctionDecl 0x5604680fd370 col:9 ecs_cpp_reset_count_inc 'int32_t (void)' diff --git a/gaemstone.ECS.sln b/gaemstone.ECS.sln new file mode 100644 index 0000000..3c594a3 --- /dev/null +++ b/gaemstone.ECS.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{0FC51081-529F-4DC2-91D0-18002C10B733}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gaemstone.ECS", "src\gaemstone.ECS\gaemstone.ECS.csproj", "{7CDAB372-16EB-452C-B984-0BD5F1D0D411}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gaemstone.ECS.BindGen", "src\gaemstone.ECS.BindGen\gaemstone.ECS.BindGen.csproj", "{4DA4F739-1C38-41D3-804B-B1114090FF53}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7CDAB372-16EB-452C-B984-0BD5F1D0D411}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CDAB372-16EB-452C-B984-0BD5F1D0D411}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CDAB372-16EB-452C-B984-0BD5F1D0D411}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CDAB372-16EB-452C-B984-0BD5F1D0D411}.Release|Any CPU.Build.0 = Release|Any CPU + {4DA4F739-1C38-41D3-804B-B1114090FF53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4DA4F739-1C38-41D3-804B-B1114090FF53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DA4F739-1C38-41D3-804B-B1114090FF53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4DA4F739-1C38-41D3-804B-B1114090FF53}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {7CDAB372-16EB-452C-B984-0BD5F1D0D411} = {0FC51081-529F-4DC2-91D0-18002C10B733} + {4DA4F739-1C38-41D3-804B-B1114090FF53} = {0FC51081-529F-4DC2-91D0-18002C10B733} + EndGlobalSection +EndGlobal diff --git a/src/flecs b/src/flecs new file mode 160000 index 0000000..ddf4dfc --- /dev/null +++ b/src/flecs @@ -0,0 +1 @@ +Subproject commit ddf4dfc8d0b09eec42876ea06f5f42849a0c23be diff --git a/src/gaemstone.ECS.BindGen/Program.cs b/src/gaemstone.ECS.BindGen/Program.cs new file mode 100644 index 0000000..a614fe8 --- /dev/null +++ b/src/gaemstone.ECS.BindGen/Program.cs @@ -0,0 +1,421 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using ClangSharp.Interop; + +namespace gaemstone.ECS.BindGen; + +public unsafe static class Program +{ + // TODO: Handle being called from other working directories gracefully. + private const string FlecsRepositoryLocation = "../flecs"; + private const string OutputFolderLocation = "../gaemstone.ECS/flecs"; + + private static readonly Dictionary TypeAliases = new() { + { "int8_t" , "sbyte" }, + { "int16_t", "short" }, + { "int32_t", "int" }, + { "int64_t", "long" }, + + { "uint8_t" , "byte" }, + { "uint16_t", "ushort" }, + { "uint32_t", "uint" }, + { "uint64_t", "ulong" }, + + { "ecs_flags8_t" , "byte" }, + { "ecs_flags16_t", "ushort" }, + { "ecs_flags32_t", "uint" }, + { "ecs_flags64_t", "ulong" }, + + { "ecs_size_t", "int" }, + }; + + public static void Main() + { + using var fileConstants = File.CreateText(Path.Combine(OutputFolderLocation, "flecs+Constants.g.cs")); + using var fileStructs = File.CreateText(Path.Combine(OutputFolderLocation, "flecs+Structs.g.cs")); + using var fileFunctions = File.CreateText(Path.Combine(OutputFolderLocation, "flecs+Functions.g.cs")); + + static string StartProcessAndReturnOutput(string program, string arguments, string workDir = "") + { + var gitProcess = new Process { StartInfo = new() { + FileName = "git", Arguments = "describe --tags --always", WorkingDirectory = workDir, + RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, + } }; + gitProcess.Start(); + var result = gitProcess.StandardOutput.ReadToEnd().Trim(); + gitProcess.WaitForExit(); + return result; + } + + var bindgenVersion = StartProcessAndReturnOutput("git", "describe --tags --always"); + var flecsVersion = StartProcessAndReturnOutput("git", "describe --tags --always", FlecsRepositoryLocation); + + var autoGeneratedHeader = $$""" + // + // Generated by gaemstone.ECS.BindGen {{ bindgenVersion }} + // Time: {{ DateTime.UtcNow :u}} + // Flecs version: {{ flecsVersion }} + // + """; + + fileConstants.WriteLine($$""" + {{ autoGeneratedHeader }} + + #pragma warning disable CS8981 + public static partial class flecs + { + """); + + fileStructs.Write($$""" + {{ autoGeneratedHeader }} + + using System.Runtime.InteropServices; + + #pragma warning disable CS8981 + public static unsafe partial class flecs + { + """); + + fileFunctions.WriteLine($$""" + {{ autoGeneratedHeader }} + + using System; + using System.Runtime.InteropServices; + + #pragma warning disable CS8981 + public static unsafe partial class flecs + { + private const string LibraryName = "flecs"; + + /// Indicates types are marked as "const" on C's end. + [AttributeUsage(AttributeTargets.Parameter, AttributeTargets.ReturnValue)] + public class ConstAttribute : Attribute { } + """); + + using var unit = CXTranslationUnit.CreateFromSourceFile( + CXIndex.Create(), Path.Combine(FlecsRepositoryLocation, "flecs.h"), + default, default); + + unit.Cursor.VisitChildren((cursor, _, _) => { + switch (cursor) { + case { Location.IsFromMainFile: false }: // Not from the file we're trying to parse. + case { Kind: CXCursorKind.CXCursor_MacroInstantiation + or CXCursorKind.CXCursor_InclusionDirective }: // Ignore these altogether. + break; + + case { Kind: CXCursorKind.CXCursor_MacroDefinition }: + WriteMacro(fileConstants, 1, cursor); + break; + + // case { Kind: CXCursorKind.CXCursor_TypedefDecl }: + // WriteTypedef(cursor, output); + // break; + + case { Kind: CXCursorKind.CXCursor_EnumDecl }: + fileStructs.WriteLine(); + WriteEnum(fileStructs, 1, cursor); + break; + + case { Kind: CXCursorKind.CXCursor_StructDecl }: + // Skip forward declarations, unless they're not defined at all. + if (!cursor.IsDefinition && !cursor.Definition.IsNull) break; + fileStructs.WriteLine(); + WriteStruct(fileStructs, 1, cursor); + break; + + case { Kind: CXCursorKind.CXCursor_FunctionDecl }: + fileFunctions.WriteLine(); + WriteFunction(fileFunctions, 1, cursor); + break; + + default: + Console.WriteLine($"{cursor.Kind} {cursor}"); + Console.WriteLine(GetSource(unit, cursor.Extent)); + break; + } + return CXChildVisitResult.CXChildVisit_Continue; + }, default); + + fileConstants.WriteLine("}"); + fileStructs .WriteLine("}"); + fileFunctions.WriteLine("}"); + } + + + private static void WriteMacro(StreamWriter writer, int indent, CXCursor cursor) + { + if (cursor.IsMacroFunctionLike) return; + var unit = cursor.TranslationUnit; + var tokens = unit.Tokenize(cursor.Extent).ToArray(); + if (tokens.Length < 2) return; // No value. + + var type = "uint"; + var name = cursor.Spelling.ToString(); + if (name is "NULL" or "ECS_VECTOR_T_SIZE" + or "EcsLastInternalComponentId" + or "ECS_FUNC_NAME_BACK") return; + + var value = GetSource(unit, Range(unit, tokens[1], tokens[^1])); + if (value is not [ '(', .., ')']) return; + if (value.Contains('\\')) value = value.Replace("\\\n", "").Replace(" ", ""); + if (value.Contains("ull")) { value = value.Replace("ull", "ul"); type = "ulong"; } + if (name == "ECS_MAX_COMPONENT_ID") value = value.Replace("(uint32_t)", "(uint)"); + + WriteComment(writer, indent, cursor); + WriteIndent(writer, indent).WriteLine($"public const {type} {name} = {value};"); + } + + private static void WriteEnum(StreamWriter writer, int indent, CXCursor cursor) + { + WriteComment(writer, indent, cursor); + + WriteIndent(writer, indent).WriteLine($"public {cursor.Type}"); + WriteIndent(writer, indent).WriteLine("{"); + + cursor.VisitChildren((value, _, _) => { + WriteComment(writer, indent + 1, value); + WriteIndent(writer, indent + 1).WriteLine($"{value},"); + return CXChildVisitResult.CXChildVisit_Continue; + }, default); + + WriteIndent(writer, indent).WriteLine("}"); + } + + private static void WriteStruct(StreamWriter writer, int indent, CXCursor cursor, + string? name = null, bool noComment = false) + { + if (!noComment) WriteComment(writer, indent, cursor); + + if (cursor.Kind == CXCursorKind.CXCursor_UnionDecl) + WriteIndent(writer, indent).WriteLine("[StructLayout(LayoutKind.Explicit)]"); + + name ??= cursor.Type.ToString(); + if (name.StartsWith("struct ")) name = name[("struct ".Length)..]; + WriteIndent(writer, indent).Write($"public struct {name}"); + + var hasFields = false; // For creating a shorthand struct definition that doesn't take up 3 lines. + cursor.VisitChildren((field, _, _) => { + // Nested struct and union declarations will be handled when field is written. + if (field.Kind is CXCursorKind.CXCursor_StructDecl + or CXCursorKind.CXCursor_UnionDecl) + return CXChildVisitResult.CXChildVisit_Continue; + + if (field.Kind is not CXCursorKind.CXCursor_FieldDecl) + throw new NotSupportedException(); + + if (!hasFields) { + writer.WriteLine(); + WriteIndent(writer, indent).WriteLine("{"); + hasFields = true; + } + + if (cursor.Kind == CXCursorKind.CXCursor_UnionDecl) + WriteIndent(writer, indent).WriteLine("[FieldOffset(0)]"); + + WriteComment(writer, indent + 1, field); + WriteIndent(writer, indent + 1); + + var name = field.DisplayName.ToString(); + if (IsReservedKeyword(name)) name = $"@{name}"; + + if (field.Type.Declaration.IsAnonymous) { + writer.WriteLine($"public _{field.DisplayName} {name};"); + WriteStruct(writer, indent + 1, field.Type.Declaration, + name: $"_{field.DisplayName}", noComment: true); + } else if (field.Type.kind == CXTypeKind.CXType_ConstantArray) { + writer.WriteLine($"public fixed {field.Type.ArrayElementType} {name}[{field.Type.ArraySize}];"); + } else { + var type = GetTypeString(field.Type, out var isConst); + if (isConst) writer.Write($"[Const] "); + writer.WriteLine($"public {type} {name};"); + } + + return CXChildVisitResult.CXChildVisit_Continue; + }, default); + if (!hasFields) writer.WriteLine(" { }"); + else WriteIndent(writer, indent).WriteLine("}"); + } + + private static void WriteFunction(StreamWriter writer, int indent, CXCursor cursor) + { + WriteComment(writer, indent, cursor); + + var returnType = GetTypeString(cursor.ReturnType, out var returnIsConst); + if (returnIsConst) WriteIndent(writer, indent).WriteLine("[return: Const]"); + WriteIndent(writer, indent).WriteLine("[DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)]"); + WriteIndent(writer, indent).Write($"public static extern {returnType} {cursor.Spelling}("); + + for (var i = 0; i < cursor.NumArguments; i++) { + var arg = cursor.GetArgument((uint)i); + if (i > 0) writer.Write(", "); + + var argType = GetTypeString(arg.Type, out var argIsConst); + if (argIsConst) writer.Write("[Const] "); + var name = arg.DisplayName.ToString(); + if (IsReservedKeyword(name)) name = $"@{name}"; + writer.Write($"{argType} {name}"); + } + + writer.WriteLine(");"); + } + + private static void WriteComment(StreamWriter writer, int indent, CXCursor cursor) + { + var comment = cursor.ParsedComment; + if (comment.Kind == CXCommentKind.CXComment_Null) return; + if (comment.Kind != CXCommentKind.CXComment_FullComment) throw new NotSupportedException(); + + var children = Children(comment).ToArray(); + var paragraphs = children + .TakeWhile(c => c.Kind == CXCommentKind.CXComment_Paragraph) + .Select(GetCommentText).Where(p => p != null).ToArray(); + var @params = children + .Where (c => c.Kind == CXCommentKind.CXComment_ParamCommand) + .Select(c => (c.ParamCommandComment_ParamName, GetCommentText(Children(c).Single()))).ToArray(); + var @return = children + .Where (c => c.Kind == CXCommentKind.CXComment_BlockCommand) + .Where (c => c.BlockCommandComment_CommandName.ToString() == "return") + .Select(c => GetCommentText(Children(c).Single())).FirstOrDefault(); + + if (paragraphs.Length > 1) { + WriteIndent(writer, indent).WriteLine($"/// "); + foreach (var paragraph in paragraphs) + WriteIndent(writer, indent).WriteLine($"///

{paragraph}

"); + WriteIndent(writer, indent).WriteLine($"///
"); + } else if (paragraphs.Length == 1) + WriteIndent(writer, indent).WriteLine($"/// {paragraphs[0]} "); + + foreach (var (name, text) in @params) + WriteIndent(writer, indent).WriteLine($$"""/// {{ text }} """); + + if (@return != null) + WriteIndent(writer, indent).WriteLine($$"""/// {{ @return }} """); + + foreach (var child in Children(comment)) + switch (child.Kind) { + case CXCommentKind.CXComment_Paragraph: + case CXCommentKind.CXComment_ParamCommand: + case CXCommentKind.CXComment_BlockCommand when child.BlockCommandComment_CommandName.ToString() == "return": + break; + default: + WriteIndent(writer, indent); + writer.WriteLine($"//// {child.Kind}"); + break; + } + + static IEnumerable Children(CXComment parent) + => Enumerable.Range(0, (int)parent.NumChildren).Select(i => parent.GetChild((uint)i)); + + static string? GetCommentText(CXComment paragraph) + { + if (paragraph.Kind != CXCommentKind.CXComment_Paragraph) throw new NotSupportedException(); + var sb = new StringBuilder(); + foreach (var part in Children(paragraph)) { + if (part.Kind != CXCommentKind.CXComment_Text) throw new NotSupportedException(); + var str = part.TextComment_Text.ToString().Trim(); + if (str == "") continue; + if (sb.Length > 0) sb.Append(' '); + sb.Append(str); + } + if (sb.Length == 0) return null; + sb.Replace("<", "<").Replace(">", ">"); + if (sb[^1] != '.') sb.Append('.'); + return sb.ToString(); + } + } + + private static StreamWriter WriteIndent(StreamWriter writer, int indent) + { + for (var i = 0; i < indent; i++) + writer.Write('\t'); + return writer; + } + + + private static CXSourceRange Range(CXTranslationUnit unit, CXToken start, CXToken end) + => CXSourceRange.Create(start.GetExtent(unit).Start, end.GetExtent(unit).End); + + private static string GetTypeString(CXType type, out bool isConst) + { + isConst = false; + switch (type) { + case { kind: CXTypeKind.CXType_Pointer, + PointeeType: { kind: CXTypeKind.CXType_FunctionProto } funcType }: + var resultType = GetTypeString(funcType.ResultType, out _); + var argTypes = Enumerable.Range(0, funcType.NumArgTypes) + .Select(i => funcType.GetArgType((uint)i)) + .Select(a => GetTypeString(a, out _)) + .ToArray(); + return $"delegate* unmanaged<{string.Join(", ", argTypes)}, {resultType}>"; + + case { kind: CXTypeKind.CXType_Pointer, + PointeeType: { kind: CXTypeKind.CXType_Elaborated, + Declaration.IsDefined: false} }: + return "void*"; + + case { kind: CXTypeKind.CXType_Pointer }: + return GetTypeString(type.PointeeType, out isConst) + "*"; + + case { kind: CXTypeKind.CXType_VariableArray + or CXTypeKind.CXType_IncompleteArray }: + return GetTypeString(type.ArrayElementType, out isConst) + "[]"; + + case { kind: CXTypeKind.CXType_Record }: + throw new NotSupportedException(); + + case { kind: CXTypeKind.CXType_Elaborated }: + var name = type.Declaration.ToString(); + if (name == "") throw new Exception(); + return name; + + case { kind: CXTypeKind.CXType_FunctionProto }: + throw new NotSupportedException(); + + default: + name = type.ToString(); + if (name == "") throw new Exception(); + if (type.IsConstQualified) { + if (!name.StartsWith("const ")) throw new Exception(); + name = name[("const ".Length)..]; + isConst = true; + } + if (name.Contains(' ')) throw new Exception(); + if (TypeAliases.TryGetValue(name, out var alias)) name = alias; + return name; + } + } + + private static string GetSource(CXTranslationUnit unit, CXSourceRange range) + { + range.Start.GetFileLocation(out var startFile, out _, out _, out var start); + range.End .GetFileLocation(out var endFile , out _, out _, out var end); + if (startFile != endFile) return string.Empty; + return Encoding.UTF8.GetString( + unit.GetFileContents(startFile, out _) + .Slice((int)start, (int)(end - start))); + } + + // See https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ + // Reserved keywords are unlikely to change in future C# versions, as they'd break + // existing programs. New ones are instead added as contextual keywords. + private static bool IsReservedKeyword(string str) + => str is "abstract" or "as" or "base" or "bool" or "break" or "byte" + or "case" or "catch" or "char" or "checked" or "class" + or "const" or "continue" or "decimal" or "default" + or "delegate" or "do" or "double" or "else" or "enum" + or "event" or "explicit" or "extern" or "false" or "finally" + or "fixed" or "float" or "for" or "foreach" or "goto" or "if" + or "implicit" or "in" or "int" or "interface" or "internal" + or "is" or "lock" or "long" or "namespace" or "new" or "null" + or "object" or "operator" or "out" or "override" or "params" + or "private" or "protected" or "public" or "readonly" or "ref" + or "return" or "sbyte" or "sealed" or "short" or"sizeof" + or "stackalloc" or "static" or "string" or "struct" or "switch" + or "this" or "throw" or "true" or "try" or "typeof" or "uint" + or "ulong" or "unchecked" or "unsafe" or "ushort" or "using" + or "virtual" or "void" or "volatile" or "while"; +} diff --git a/src/gaemstone.ECS.BindGen/gaemstone.ECS.BindGen.csproj b/src/gaemstone.ECS.BindGen/gaemstone.ECS.BindGen.csproj new file mode 100644 index 0000000..45faeda --- /dev/null +++ b/src/gaemstone.ECS.BindGen/gaemstone.ECS.BindGen.csproj @@ -0,0 +1,21 @@ + + + + Exe + preview + net7.0 + true + disable + enable + + + + ubuntu.22.04-x64 + false + + + + + + + diff --git a/src/gaemstone.ECS/flecs/flecs+Constants.g.cs b/src/gaemstone.ECS/flecs/flecs+Constants.g.cs new file mode 100644 index 0000000..0cf3cb4 --- /dev/null +++ b/src/gaemstone.ECS/flecs/flecs+Constants.g.cs @@ -0,0 +1,182 @@ +// +// Generated by gaemstone.ECS.BindGen c661367 +// Time: 2023-01-09 18:48:29Z +// Flecs version: v3.1.3 +// + +#pragma warning disable CS8981 +public static partial class flecs +{ + public const uint ECS_ID_CACHE_SIZE = (32); + public const uint ECS_TERM_DESC_CACHE_SIZE = (16); + public const uint ECS_OBSERVER_DESC_EVENT_COUNT_MAX = (8); + public const uint ECS_VARIABLE_COUNT_MAX = (64); + public const uint EcsWorldQuitWorkers = (1u << 0); + public const uint EcsWorldReadonly = (1u << 1); + public const uint EcsWorldQuit = (1u << 2); + public const uint EcsWorldFini = (1u << 3); + public const uint EcsWorldMeasureFrameTime = (1u << 4); + public const uint EcsWorldMeasureSystemTime = (1u << 5); + public const uint EcsWorldMultiThreaded = (1u << 6); + public const uint EcsOsApiHighResolutionTimer = (1u << 0); + public const uint EcsOsApiLogWithColors = (1u << 1); + public const uint EcsOsApiLogWithTimeStamp = (1u << 2); + public const uint EcsOsApiLogWithTimeDelta = (1u << 3); + public const uint EcsEntityObserved = (1u << 31); + public const uint EcsEntityObservedId = (1u << 30); + public const uint EcsEntityObservedTarget = (1u << 29); + public const uint EcsEntityObservedAcyclic = (1u << 28); + public const uint EcsIdOnDeleteRemove = (1u << 0); + public const uint EcsIdOnDeleteDelete = (1u << 1); + public const uint EcsIdOnDeletePanic = (1u << 2); + public const uint EcsIdOnDeleteMask = (EcsIdOnDeletePanic|EcsIdOnDeleteRemove|EcsIdOnDeleteDelete); + public const uint EcsIdOnDeleteObjectRemove = (1u << 3); + public const uint EcsIdOnDeleteObjectDelete = (1u << 4); + public const uint EcsIdOnDeleteObjectPanic = (1u << 5); + public const uint EcsIdOnDeleteObjectMask = (EcsIdOnDeleteObjectPanic|EcsIdOnDeleteObjectRemove|EcsIdOnDeleteObjectDelete); + public const uint EcsIdExclusive = (1u << 6); + public const uint EcsIdDontInherit = (1u << 7); + public const uint EcsIdAcyclic = (1u << 8); + public const uint EcsIdTag = (1u << 9); + public const uint EcsIdWith = (1u << 10); + public const uint EcsIdUnion = (1u << 11); + public const uint EcsIdHasOnAdd = (1u << 15); + public const uint EcsIdHasOnRemove = (1u << 16); + public const uint EcsIdHasOnSet = (1u << 17); + public const uint EcsIdHasUnSet = (1u << 18); + public const uint EcsIdEventMask = (EcsIdHasOnAdd|EcsIdHasOnRemove|EcsIdHasOnSet|EcsIdHasUnSet); + public const uint EcsIdMarkedForDelete = (1u << 30); + public const uint EcsIterIsValid = (1u << 0u); + public const uint EcsIterIsFilter = (1u << 1u); + public const uint EcsIterIsInstanced = (1u << 2u); + public const uint EcsIterHasShared = (1u << 3u); + public const uint EcsIterTableOnly = (1u << 4u); + public const uint EcsIterEntityOptional = (1u << 5u); + public const uint EcsIterNoResults = (1u << 6u); + public const uint EcsIterIgnoreThis = (1u << 7u); + public const uint EcsIterMatchVar = (1u << 8u); + public const uint EcsEventTableOnly = (1u << 8u); + public const uint EcsEventNoOnSet = (1u << 16u); + public const uint EcsFilterMatchThis = (1u << 1u); + public const uint EcsFilterMatchOnlyThis = (1u << 2u); + public const uint EcsFilterMatchPrefab = (1u << 3u); + public const uint EcsFilterMatchDisabled = (1u << 4u); + public const uint EcsFilterMatchEmptyTables = (1u << 5u); + public const uint EcsFilterMatchAnything = (1u << 6u); + public const uint EcsFilterIsFilter = (1u << 7u); + public const uint EcsFilterIsInstanced = (1u << 8u); + public const uint EcsFilterPopulate = (1u << 9u); + public const uint EcsTableHasBuiltins = (1u << 1u); + public const uint EcsTableIsPrefab = (1u << 2u); + public const uint EcsTableHasIsA = (1u << 3u); + public const uint EcsTableHasChildOf = (1u << 4u); + public const uint EcsTableHasPairs = (1u << 5u); + public const uint EcsTableHasModule = (1u << 6u); + public const uint EcsTableIsDisabled = (1u << 7u); + public const uint EcsTableHasCtors = (1u << 8u); + public const uint EcsTableHasDtors = (1u << 9u); + public const uint EcsTableHasCopy = (1u << 10u); + public const uint EcsTableHasMove = (1u << 11u); + public const uint EcsTableHasUnion = (1u << 12u); + public const uint EcsTableHasToggle = (1u << 13u); + public const uint EcsTableHasOverrides = (1u << 14u); + public const uint EcsTableHasOnAdd = (1u << 15u); + public const uint EcsTableHasOnRemove = (1u << 16u); + public const uint EcsTableHasOnSet = (1u << 17u); + public const uint EcsTableHasUnSet = (1u << 18u); + public const uint EcsTableHasObserved = (1u << 20u); + public const uint EcsTableMarkedForDelete = (1u << 30u); + public const uint EcsTableHasLifecycle = (EcsTableHasCtors | EcsTableHasDtors); + public const uint EcsTableIsComplex = (EcsTableHasLifecycle | EcsTableHasUnion | EcsTableHasToggle); + public const uint EcsTableHasAddActions = (EcsTableHasIsA | EcsTableHasUnion | EcsTableHasCtors | EcsTableHasOnAdd | EcsTableHasOnSet); + public const uint EcsTableHasRemoveActions = (EcsTableHasIsA | EcsTableHasDtors | EcsTableHasOnRemove | EcsTableHasUnSet); + public const uint EcsQueryHasRefs = (1u << 1u); + public const uint EcsQueryIsSubquery = (1u << 2u); + public const uint EcsQueryIsOrphaned = (1u << 3u); + public const uint EcsQueryHasOutColumns = (1u << 4u); + public const uint EcsQueryHasMonitor = (1u << 5u); + public const uint EcsAperiodicEmptyTables = (1u << 1u); + public const uint EcsAperiodicComponentMonitors = (1u << 2u); + public const uint EcsAperiodicEmptyQueries = (1u << 4u); + public const uint ecs_world_t_magic = (0x65637377); + public const uint ecs_stage_t_magic = (0x65637373); + public const uint ecs_query_t_magic = (0x65637371); + public const uint ecs_rule_t_magic = (0x65637375); + public const uint ecs_table_t_magic = (0x65637374); + public const uint ecs_filter_t_magic = (0x65637366); + public const uint ecs_trigger_t_magic = (0x65637372); + public const uint ecs_observer_t_magic = (0x65637362); + public const uint ECS_ROW_MASK = (0x0FFFFFFFu); + public const uint ECS_ROW_FLAGS_MASK = (~ECS_ROW_MASK); + public const ulong ECS_ID_FLAGS_MASK = (0xFFul << 60); + public const ulong ECS_ENTITY_MASK = (0xFFFFFFFFul); + public const ulong ECS_GENERATION_MASK = (0xFFFFul << 32); + public const uint ECS_COMPONENT_MASK = (~ECS_ID_FLAGS_MASK); + public const uint FLECS_SPARSE_CHUNK_SIZE = (4096); + public const uint ECS_STRBUF_ELEMENT_SIZE = (511); + public const uint ECS_STRBUF_MAX_LIST_DEPTH = (32); + public const uint EcsSelf = (1u << 1); + public const uint EcsUp = (1u << 2); + public const uint EcsDown = (1u << 3); + public const uint EcsTraverseAll = (1u << 4); + public const uint EcsCascade = (1u << 5); + public const uint EcsParent = (1u << 6); + public const uint EcsIsVariable = (1u << 7); + public const uint EcsIsEntity = (1u << 8); + public const uint EcsFilter = (1u << 9); + public const uint EcsTraverseFlags = (EcsUp|EcsDown|EcsTraverseAll|EcsSelf|EcsCascade|EcsParent); + public const uint flecs_iter_cache_ids = (1u << 0u); + public const uint flecs_iter_cache_columns = (1u << 1u); + public const uint flecs_iter_cache_sources = (1u << 2u); + public const uint flecs_iter_cache_sizes = (1u << 3u); + public const uint flecs_iter_cache_ptrs = (1u << 4u); + public const uint flecs_iter_cache_match_indices = (1u << 5u); + public const uint flecs_iter_cache_variables = (1u << 6u); + public const uint flecs_iter_cache_all = (255); + public const uint ECS_HI_COMPONENT_ID = (256); + public const uint ECS_MAX_COMPONENT_ID = (~((uint)(ECS_ID_FLAGS_MASK >> 32))); + public const uint ECS_MAX_RECURSION = (512); + public const uint ECS_MAX_TOKEN_SIZE = (256); + public const ulong ECS_ID_FLAG_BIT = (1ul << 63); + public const uint EcsFirstUserComponentId = (32); + public const uint EcsFirstUserEntityId = (ECS_HI_COMPONENT_ID + 128); + public const uint ECS_INVALID_OPERATION = (1); + public const uint ECS_INVALID_PARAMETER = (2); + public const uint ECS_CONSTRAINT_VIOLATED = (3); + public const uint ECS_OUT_OF_MEMORY = (4); + public const uint ECS_OUT_OF_RANGE = (5); + public const uint ECS_UNSUPPORTED = (6); + public const uint ECS_INTERNAL_ERROR = (7); + public const uint ECS_ALREADY_DEFINED = (8); + public const uint ECS_MISSING_OS_API = (9); + public const uint ECS_OPERATION_FAILED = (10); + public const uint ECS_INVALID_CONVERSION = (11); + public const uint ECS_ID_IN_USE = (12); + public const uint ECS_CYCLE_DETECTED = (13); + public const uint ECS_LEAK_DETECTED = (14); + public const uint ECS_INCONSISTENT_NAME = (20); + public const uint ECS_NAME_IN_USE = (21); + public const uint ECS_NOT_A_COMPONENT = (22); + public const uint ECS_INVALID_COMPONENT_SIZE = (23); + public const uint ECS_INVALID_COMPONENT_ALIGNMENT = (24); + public const uint ECS_COMPONENT_NOT_REGISTERED = (25); + public const uint ECS_INCONSISTENT_COMPONENT_ID = (26); + public const uint ECS_INCONSISTENT_COMPONENT_ACTION = (27); + public const uint ECS_MODULE_UNDEFINED = (28); + public const uint ECS_MISSING_SYMBOL = (29); + public const uint ECS_ALREADY_IN_USE = (30); + public const uint ECS_ACCESS_VIOLATION = (40); + public const uint ECS_COLUMN_INDEX_OUT_OF_RANGE = (41); + public const uint ECS_COLUMN_IS_NOT_SHARED = (42); + public const uint ECS_COLUMN_IS_SHARED = (43); + public const uint ECS_COLUMN_TYPE_MISMATCH = (45); + public const uint ECS_INVALID_WHILE_READONLY = (70); + public const uint ECS_LOCKED_STORAGE = (71); + public const uint ECS_INVALID_FROM_WORKER = (72); + public const uint ECS_REST_DEFAULT_PORT = (27750); + public const uint ECS_STAT_WINDOW = (60); + public const uint ECS_MEMBER_DESC_CACHE_SIZE = (32); + public const uint ECS_META_MAX_SCOPE_DEPTH = (32); + public const uint ECS_HTTP_HEADER_COUNT_MAX = (32); + public const uint ECS_HTTP_QUERY_PARAM_COUNT_MAX = (32); +} diff --git a/src/gaemstone.ECS/flecs/flecs+Functions.g.cs b/src/gaemstone.ECS/flecs/flecs+Functions.g.cs new file mode 100644 index 0000000..c614b1f --- /dev/null +++ b/src/gaemstone.ECS/flecs/flecs+Functions.g.cs @@ -0,0 +1,3773 @@ +// +// Generated by gaemstone.ECS.BindGen c661367 +// Time: 2023-01-09 18:48:29Z +// Flecs version: v3.1.3 +// + +using System; +using System.Runtime.InteropServices; + +#pragma warning disable CS8981 +public static unsafe partial class flecs +{ + private const string LibraryName = "flecs"; + + /// Indicates types are marked as "const" on C's end. + [AttributeUsage(AttributeTargets.Parameter, AttributeTargets.ReturnValue)] + public class ConstAttribute : Attribute { } + + /// Create new vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_vector_t* _ecs_vector_new(int elem_size, short offset, int elem_count); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_vector_t* _ecs_vector_from_array(int elem_size, short offset, int elem_count, void* array); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_vector_zero(ecs_vector_t* vector, int elem_size, short offset); + + /// Free vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vector_free(ecs_vector_t* vector); + + /// Clear values in vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vector_clear(ecs_vector_t* vector); + + /// Assert when the provided size does not match the vector type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vector_assert_size(ecs_vector_t* vector_inout, int elem_size); + + /// Add element to vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_vector_add(ecs_vector_t** array_inout, int elem_size, short offset); + + /// Insert element to vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_vector_insert_at(ecs_vector_t** array_inout, int elem_size, short offset, int index); + + /// Add n elements to the vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_vector_addn(ecs_vector_t** array_inout, int elem_size, short offset, int elem_count); + + /// Get element from vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_vector_get([Const] ecs_vector_t* vector, int elem_size, short offset, int index); + + /// Get last element from vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_vector_last([Const] ecs_vector_t* vector, int elem_size, short offset); + + /// Set minimum size for vector. If the current size of the vector is larger, the function will have no side effects. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int _ecs_vector_set_min_size(ecs_vector_t** array_inout, int elem_size, short offset, int elem_count); + + /// Set minimum count for vector. If the current count of the vector is larger, the function will have no side effects. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int _ecs_vector_set_min_count(ecs_vector_t** vector_inout, int elem_size, short offset, int elem_count); + + /// Remove last element. This operation requires no swapping of values. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vector_remove_last(ecs_vector_t* vector); + + /// Remove last value, store last element in provided value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool _ecs_vector_pop(ecs_vector_t* vector, int elem_size, short offset, void* value); + + /// Append element at specified index to another vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int _ecs_vector_move_index(ecs_vector_t** dst, ecs_vector_t* src, int elem_size, short offset, int index); + + /// Remove element at specified index. Moves the last value to the index. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int _ecs_vector_remove(ecs_vector_t* vector, int elem_size, short offset, int index); + + /// Shrink vector to make the size match the count. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_vector_reclaim(ecs_vector_t** vector, int elem_size, short offset); + + /// Grow size of vector with provided number of elements. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int _ecs_vector_grow(ecs_vector_t** vector, int elem_size, short offset, int elem_count); + + /// Set allocation size of vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int _ecs_vector_set_size(ecs_vector_t** vector, int elem_size, short offset, int elem_count); + + /// Set count of vector. If the size of the vector is smaller than the provided count, the vector is resized. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int _ecs_vector_set_count(ecs_vector_t** vector, int elem_size, short offset, int elem_count); + + /// Return number of elements in vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_vector_count([Const] ecs_vector_t* vector); + + /// Return size of vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_vector_size([Const] ecs_vector_t* vector); + + /// Return first element of vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_vector_first([Const] ecs_vector_t* vector, int elem_size, short offset); + + /// Sort elements in vector. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_vector_sort(ecs_vector_t* vector, int elem_size, short offset, ecs_comparator_t compare_action); + + /// Copy vectors. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_vector_t* _ecs_vector_copy([Const] ecs_vector_t* src, int elem_size, short offset); + + /// Initialize sparse set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _flecs_sparse_init(ecs_sparse_t* sparse, void* allocator, void* chunk_allocator, int elem_size); + + /// Create new sparse set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_sparse_t* _flecs_sparse_new(void* allocator, void* chunk_allocator, int elem_size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _flecs_sparse_fini(ecs_sparse_t* sparse); + + /// Free sparse set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_sparse_free(ecs_sparse_t* sparse); + + /// Remove all elements from sparse set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_sparse_clear(ecs_sparse_t* sparse); + + /// Set id source. This allows the sparse set to use an external variable for issuing and increasing new ids. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_sparse_set_id_source(ecs_sparse_t* sparse, ulong* id_source); + + /// Add element to sparse set, this generates or recycles an id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_add(ecs_sparse_t* sparse, int elem_size); + + /// Get last issued id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ulong flecs_sparse_last_id([Const] ecs_sparse_t* sparse); + + /// Generate or recycle a new id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ulong flecs_sparse_new_id(ecs_sparse_t* sparse); + + /// Generate or recycle new ids in bulk. The returned pointer points directly to the internal dense array vector with sparse ids. Operations on the sparse set can (and likely will) modify the contents of the buffer. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ulong* flecs_sparse_new_ids(ecs_sparse_t* sparse, int count); + + /// Remove an element. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_sparse_remove(ecs_sparse_t* sparse, ulong id); + + /// Fast version of remove, no liveliness checking. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_remove_fast(ecs_sparse_t* sparse, int elem_size, ulong id); + + /// Remove an element, return pointer to the value in the sparse array. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_remove_get(ecs_sparse_t* sparse, int elem_size, ulong id); + + /// Check whether an id has ever been issued. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool flecs_sparse_exists([Const] ecs_sparse_t* sparse, ulong id); + + /// Check whether an id has ever been issued and is currently alive. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool flecs_sparse_is_valid([Const] ecs_sparse_t* sparse, ulong index); + + /// Test if id is alive, which requires the generation count to match. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool flecs_sparse_is_alive([Const] ecs_sparse_t* sparse, ulong id); + + /// Return identifier with current generation set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ulong flecs_sparse_get_alive([Const] ecs_sparse_t* sparse, ulong id); + + /// Get value from sparse set by dense id. This function is useful in combination with flecs_sparse_count for iterating all values in the set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_get_dense([Const] ecs_sparse_t* sparse, int elem_size, int index); + + /// Get the number of alive elements in the sparse set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int flecs_sparse_count([Const] ecs_sparse_t* sparse); + + /// Get the number of not alive alive elements in the sparse set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int flecs_sparse_not_alive_count([Const] ecs_sparse_t* sparse); + + /// Return total number of allocated elements in the dense array. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int flecs_sparse_size([Const] ecs_sparse_t* sparse); + + /// Get element by (sparse) id. The returned pointer is stable for the duration of the sparse set, as it is stored in the sparse array. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_get([Const] ecs_sparse_t* sparse, int elem_size, ulong id); + + /// Like get_sparse, but don't care whether element is alive or not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_get_any([Const] ecs_sparse_t* sparse, int elem_size, ulong id); + + /// Get or create element by (sparse) id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_ensure(ecs_sparse_t* sparse, int elem_size, ulong id); + + /// Fast version of ensure, no liveliness checking. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_ensure_fast(ecs_sparse_t* sparse, int elem_size, ulong id); + + /// Set value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_sparse_set(ecs_sparse_t* sparse, int elem_size, ulong id, void* value); + + /// Get pointer to ids (alive and not alive). Use with count() or size(). + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ulong* flecs_sparse_ids([Const] ecs_sparse_t* sparse); + + /// Set size of the dense array. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_sparse_set_size(ecs_sparse_t* sparse, int elem_count); + + /// Copy sparse set into a new sparse set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_sparse_t* flecs_sparse_copy([Const] ecs_sparse_t* src); + + /// Restore sparse set into destination sparse set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_sparse_restore(ecs_sparse_t* dst, [Const] ecs_sparse_t* src); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_sparse_t* _ecs_sparse_new(int elem_size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_sparse_add(ecs_sparse_t* sparse, int elem_size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ulong ecs_sparse_last_id([Const] ecs_sparse_t* sparse); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_sparse_count([Const] ecs_sparse_t* sparse); + + /// Override the generation count for a specific id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_sparse_set_generation(ecs_sparse_t* sparse, ulong id); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_sparse_get_dense([Const] ecs_sparse_t* sparse, int elem_size, int index); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_sparse_get([Const] ecs_sparse_t* sparse, int elem_size, ulong id); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_ballocator_init(ecs_block_allocator_t* ba, int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_block_allocator_t* flecs_ballocator_new(int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_ballocator_fini(ecs_block_allocator_t* ba); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_ballocator_free(ecs_block_allocator_t* ba); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* flecs_balloc(ecs_block_allocator_t* allocator); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* flecs_bcalloc(ecs_block_allocator_t* allocator); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_bfree(ecs_block_allocator_t* allocator, void* memory); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* flecs_brealloc(ecs_block_allocator_t* dst, ecs_block_allocator_t* src, void* memory); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* flecs_bdup(ecs_block_allocator_t* ba, void* memory); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_map_params_init(ecs_map_params_t* @params, void* allocator, int elem_size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_map_params_fini(ecs_map_params_t* @params); + + /// Initialize new map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_map_init(ecs_map_t* map, int elem_size, void* allocator, int initial_count); + + /// Initialize new map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_map_init_w_params(ecs_map_t* map, ecs_map_params_t* @params); + + /// Initialize new map if uninitialized, leave as is otherwise. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_map_init_if(ecs_map_t* map, int elem_size, void* allocator, int elem_count); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_map_init_w_params_if(ecs_map_t* result, ecs_map_params_t* @params); + + /// Deinitialize map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_map_fini(ecs_map_t* map); + + /// Create new map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_map_t* _ecs_map_new(int elem_size, void* allocator, int elem_count); + + /// Is map initialized. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_map_is_initialized([Const] ecs_map_t* result); + + /// Get element for key, returns NULL if they key doesn't exist. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_map_get([Const] ecs_map_t* map, int elem_size, ecs_map_key_t key); + + /// Get pointer element. This dereferences the map element as a pointer. This operation returns NULL when either the element does not exist or whether the pointer is NULL, and should therefore only be used when the application knows for sure that a pointer should never be NULL. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_map_get_ptr([Const] ecs_map_t* map, ecs_map_key_t key); + + /// Test if map has key. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_map_has([Const] ecs_map_t* map, ecs_map_key_t key); + + /// Get or create element for key. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_map_ensure(ecs_map_t* map, int elem_size, ecs_map_key_t key); + + /// Set element. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_map_set(ecs_map_t* map, int elem_size, ecs_map_key_t key, [Const] void* payload); + + /// Free map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_map_free(ecs_map_t* map); + + /// Remove key from map. Returns number of remaining elements. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_map_remove(ecs_map_t* map, ecs_map_key_t key); + + /// Remove all elements from map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_map_clear(ecs_map_t* map); + + /// Return number of elements in map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_map_count([Const] ecs_map_t* map); + + /// Return number of buckets in map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_map_bucket_count([Const] ecs_map_t* map); + + /// Return iterator to map contents. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_map_iter_t ecs_map_iter([Const] ecs_map_t* map); + + /// Obtain next element in map from iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_map_next(ecs_map_iter_t* iter, int elem_size, ecs_map_key_t* key); + + /// Obtain next pointer element from iterator. See ecs_map_get_ptr. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _ecs_map_next_ptr(ecs_map_iter_t* iter, ecs_map_key_t* key); + + /// Grow number of buckets in the map for specified number of elements. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_map_grow(ecs_map_t* map, int elem_count); + + /// Set number of buckets in the map for specified number of elements. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_map_set_size(ecs_map_t* map, int elem_count); + + /// Copy map. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_map_t* ecs_map_copy(ecs_map_t* map); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_allocator_init(ecs_allocator_t* a); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_allocator_fini(ecs_allocator_t* a); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_block_allocator_t* flecs_allocator_get(ecs_allocator_t* a, int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* flecs_strdup(ecs_allocator_t* a, [Const] char* str); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_strfree(ecs_allocator_t* a, char* str); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* flecs_dup(ecs_allocator_t* a, int size, [Const] void* src); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_append(ecs_strbuf_t* buffer, [Const] char* fmt); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_vappend(ecs_strbuf_t* buffer, [Const] char* fmt, int args); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendstr(ecs_strbuf_t* buffer, [Const] char* str); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendch(ecs_strbuf_t* buffer, char ch); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendint(ecs_strbuf_t* buffer, long v); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendflt(ecs_strbuf_t* buffer, double v, char nan_delim); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_mergebuff(ecs_strbuf_t* dst_buffer, ecs_strbuf_t* src_buffer); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendstr_zerocpy(ecs_strbuf_t* buffer, char* str); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendstr_zerocpyn(ecs_strbuf_t* buffer, char* str, int n); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendstr_zerocpy_const(ecs_strbuf_t* buffer, [Const] char* str); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendstr_zerocpyn_const(ecs_strbuf_t* buffer, [Const] char* str, int n); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_appendstrn(ecs_strbuf_t* buffer, [Const] char* str, int n); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_strbuf_get(ecs_strbuf_t* buffer); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_strbuf_get_small(ecs_strbuf_t* buffer); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_strbuf_reset(ecs_strbuf_t* buffer); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_strbuf_list_push(ecs_strbuf_t* buffer, [Const] char* list_open, [Const] char* separator); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_strbuf_list_pop(ecs_strbuf_t* buffer, [Const] char* list_close); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_strbuf_list_next(ecs_strbuf_t* buffer); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_list_appendch(ecs_strbuf_t* buffer, char ch); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_list_append(ecs_strbuf_t* buffer, [Const] char* fmt); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_list_appendstr(ecs_strbuf_t* buffer, [Const] char* str); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_strbuf_list_appendstrn(ecs_strbuf_t* buffer, [Const] char* str, int n); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_strbuf_written([Const] ecs_strbuf_t* buffer); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_init(); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_fini(); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_set_api(ecs_os_api_t* os_api); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_os_api_t ecs_os_get_api(); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_set_api_defaults(); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_dbg([Const] char* file, int line, [Const] char* msg); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_trace([Const] char* file, int line, [Const] char* msg); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_warn([Const] char* file, int line, [Const] char* msg); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_err([Const] char* file, int line, [Const] char* msg); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_os_fatal([Const] char* file, int line, [Const] char* msg); + + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_os_strerror(int err); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_sleepf(double t); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern double ecs_time_measure(ecs_time_t* start); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_time_t ecs_time_sub(ecs_time_t t1, ecs_time_t t2); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern double ecs_time_to_double(ecs_time_t t); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_os_memdup([Const] void* src, int size); + + /// Are heap functions available?. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_os_has_heap(); + + /// Are threading functions available?. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_os_has_threading(); + + /// Are time functions available?. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_os_has_time(); + + /// Are logging functions available?. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_os_has_logging(); + + /// Are dynamic library functions available?. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_os_has_dl(); + + /// Are module path functions available?. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_os_has_modules(); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_module_path_from_c([Const] char* c_name); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_identifier_is_0([Const] char* id); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_default_ctor(void* ptr, int count, [Const] ecs_type_info_t* ctx); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_vasprintf([Const] char* fmt, int args); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_asprintf([Const] char* fmt); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int flecs_table_observed_count([Const] ecs_table_t* table); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_vec_t* ecs_vec_init(ecs_allocator_t* allocator, ecs_vec_t* vec, int size, int elem_count); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vec_fini(ecs_allocator_t* allocator, ecs_vec_t* vec, int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_vec_t* ecs_vec_reset(ecs_allocator_t* allocator, ecs_vec_t* vec, int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vec_clear(ecs_vec_t* vec); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_vec_append(ecs_allocator_t* allocator, ecs_vec_t* vec, int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vec_remove(ecs_vec_t* vec, int size, int elem); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vec_remove_last(ecs_vec_t* vec); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_vec_t ecs_vec_copy(ecs_allocator_t* allocator, ecs_vec_t* vec, int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vec_reclaim(ecs_allocator_t* allocator, ecs_vec_t* vec, int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vec_set_size(ecs_allocator_t* allocator, ecs_vec_t* vec, int size, int elem_count); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vec_set_count(ecs_allocator_t* allocator, ecs_vec_t* vec, int size, int elem_count); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_vec_grow(ecs_allocator_t* allocator, ecs_vec_t* vec, int size, int elem_count); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_vec_count([Const] ecs_vec_t* vec); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_vec_size([Const] ecs_vec_t* vec); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_vec_get([Const] ecs_vec_t* vec, int size, int index); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_vec_first([Const] ecs_vec_t* vec); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_vec_last([Const] ecs_vec_t* vec, int size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _flecs_hashmap_init(ecs_hashmap_t* hm, int key_size, int value_size, ecs_hash_value_action_t hash, ecs_compare_action_t compare, ecs_allocator_t* allocator); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_hashmap_fini(ecs_hashmap_t* map); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_hashmap_get([Const] ecs_hashmap_t* map, int key_size, [Const] void* key, int value_size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern flecs_hashmap_result_t _flecs_hashmap_ensure(ecs_hashmap_t* map, int key_size, [Const] void* key, int value_size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _flecs_hashmap_set(ecs_hashmap_t* map, int key_size, void* key, int value_size, [Const] void* value); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _flecs_hashmap_remove(ecs_hashmap_t* map, int key_size, [Const] void* key, int value_size); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _flecs_hashmap_remove_w_hash(ecs_hashmap_t* map, int key_size, [Const] void* key, int value_size, ulong hash); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_hm_bucket_t* flecs_hashmap_get_bucket([Const] ecs_hashmap_t* map, ulong hash); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_hm_bucket_remove(ecs_hashmap_t* map, ecs_hm_bucket_t* bucket, ulong hash, int index); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void flecs_hashmap_copy([Const] ecs_hashmap_t* src, ecs_hashmap_t* dst); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern flecs_hashmap_iter_t flecs_hashmap_iter(ecs_hashmap_t* map); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* _flecs_hashmap_next(flecs_hashmap_iter_t* it, int key_size, void* key_out, int value_size); + + /// + ///

Create a new world. A world manages all the ECS data and supporting infrastructure. Applications must have at least one world. Entities, component and system handles are local to a world and should not be shared between worlds.

+ ///

This operation creates a world with all builtin modules loaded.

+ ///
+ /// A new world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_world_t* ecs_init(); + + /// Same as ecs_init, but with minimal set of modules loaded. + /// A new tiny world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_world_t* ecs_mini(); + + /// Create a new world with arguments. Same as ecs_init, but allows passing in command line arguments. These can be used to dynamically enable flecs features to an application. Currently these arguments are not used. + /// A new world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_world_t* ecs_init_w_args(int argc, char*[] argv); + + /// Delete a world. This operation deletes the world, and everything it contains. + /// The world to delete. + /// Zero if successful, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_fini(ecs_world_t* world); + + /// Returns whether the world is being deleted. + /// The world. + /// True if being deleted, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_is_fini([Const] ecs_world_t* world); + + /// Register action to be executed when world is destroyed. Fini actions are typically used when a module needs to clean up before a world shuts down. + /// The world. + /// The function to execute. + /// Userdata to pass to the function. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_atfini(ecs_world_t* world, ecs_fini_action_t action, void* ctx); + + /// + ///

Begin frame. When an application does not use ecs_progress to control the main loop, it can still use Flecs features such as FPS limiting and time measurements. This operation needs to be invoked whenever a new frame is about to get processed.

+ ///

Calls to ecs_frame_begin must always be followed by ecs_frame_end.

+ ///

The function accepts a delta_time parameter, which will get passed to systems. This value is also used to compute the amount of time the function needs to sleep to ensure it does not exceed the target_fps, when it is set. When 0 is provided for delta_time, the time will be measured.

+ ///

This function should only be ran from the main thread.

+ ///
+ /// The world. + /// Time elapsed since the last frame. + /// The provided delta_time, or measured time if 0 was provided. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern float ecs_frame_begin(ecs_world_t* world, float delta_time); + + /// End frame. This operation must be called at the end of the frame, and always after ecs_frame_begin. + /// The world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_frame_end(ecs_world_t* world); + + /// Register action to be executed once after frame. Post frame actions are typically used for calling operations that cannot be invoked during iteration, such as changing the number of threads. + /// The world. + /// The function to execute. + /// Userdata to pass to the function. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_run_post_frame(ecs_world_t* world, ecs_fini_action_t action, void* ctx); + + /// Signal exit This operation signals that the application should quit. It will cause ecs_progress to return false. + /// The world to quit. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_quit(ecs_world_t* world); + + /// Return whether a quit has been signaled. + /// The world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_should_quit([Const] ecs_world_t* world); + + /// + ///

Measure frame time. Frame time measurements measure the total time passed in a single frame, and how much of that time was spent on systems and on merging.

+ ///

Frame time measurements add a small constant-time overhead to an application. When an application sets a target FPS, frame time measurements are enabled by default.

+ ///
+ /// The world. + /// Whether to enable or disable frame time measuring. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_measure_frame_time(ecs_world_t* world, bool enable); + + /// + ///

Measure system time. System time measurements measure the time spent in each system.

+ ///

System time measurements add overhead to every system invocation and therefore have a small but measurable impact on application performance. System time measurements must be enabled before obtaining system statistics.

+ ///
+ /// The world. + /// Whether to enable or disable system time measuring. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_measure_system_time(ecs_world_t* world, bool enable); + + /// + ///

Set target frames per second (FPS) for application. Setting the target FPS ensures that ecs_progress is not invoked faster than the specified FPS. When enabled, ecs_progress tracks the time passed since the last invocation, and sleeps the remaining time of the frame (if any).

+ ///

This feature ensures systems are ran at a consistent interval, as well as conserving CPU time by not running systems more often than required.

+ ///

Note that ecs_progress only sleeps if there is time left in the frame. Both time spent in flecs as time spent outside of flecs are taken into account.

+ ///
+ /// The world. + /// The target FPS. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_target_fps(ecs_world_t* world, float fps); + + /// + ///

Begin readonly mode. Readonly mode guarantees that no mutations will occur on the world, which makes the world safe to access from multiple threads. While the world is in readonly mode, operations are deferred.

+ ///

Note that while similar to ecs_defer_begin, deferring only does not guarantee the world is not mutated. Operations that are not deferred (like creating a query) update data structures on the world and are allowed when deferring is enabled, but not when the world is in readonly mode.

+ ///

A call to ecs_readonly_begin must be followed up with ecs_readonly_end.

+ ///

The ecs_progress() function automatically enables readonly mode while systems are executed.

+ ///

When a world has more than one stage, the specific stage must be provided to mutating ECS operations. Failing to do so will throw a readonly assert. A world typically has more than one stage when using threads. An example:.

+ ///

ecs_set_stage_count(world, 2); ecs_stage_t *stage = ecs_get_stage(world, 1);.

+ ///

ecs_readonly_begin(world); ecs_add(world, e, Tag); // readonly assert ecs_add(stage, e, Tag); // OK.

+ ///
+ /// The world. + /// Whether world is in readonly mode. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_readonly_begin(ecs_world_t* world); + + /// End readonly mode. This operation ends readonly mode, and must be called after ecs_readonly_begin. Operations that were deferred while the world was in readonly mode will be flushed. + /// The world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_readonly_end(ecs_world_t* world); + + /// + ///

Merge world or stage. When automatic merging is disabled, an application can call this operation on either an individual stage, or on the world which will merge all stages. This operation may only be called when staging is not enabled (either after progress() or after readonly_end()).

+ ///

This operation may be called on an already merged stage or world.

+ ///
+ /// The world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_merge(ecs_world_t* world); + + /// + ///

Defer operations until end of frame. When this operation is invoked while iterating, operations inbetween the defer_begin and defer_end operations are executed at the end of the frame.

+ ///

This operation is thread safe.

+ ///
+ /// The world. + /// true if world changed from non-deferred mode to deferred mode. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_defer_begin(ecs_world_t* world); + + /// Test if deferring is enabled for current stage. + /// The world. + /// True if deferred, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_is_deferred([Const] ecs_world_t* world); + + /// + ///

End block of operations to defer. See defer_begin.

+ ///

This operation is thread safe.

+ ///
+ /// The world. + /// true if world changed from deferred mode to non-deferred mode. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_defer_end(ecs_world_t* world); + + /// + ///

Suspend deferring but do not flush queue. This operation can be used to do an undeferred operation while not flushing the operations in the queue.

+ ///

An application should invoke ecs_defer_resume before ecs_defer_end is called. The operation may only be called when deferring is enabled.

+ ///
+ /// The world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_defer_suspend(ecs_world_t* world); + + /// Resume deferring. See ecs_defer_suspend. + /// The world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_defer_resume(ecs_world_t* world); + + /// + ///

Enable/disable automerging for world or stage. When automerging is enabled, staged data will automatically be merged with the world when staging ends. This happens at the end of progress(), at a sync point or when readonly_end() is called.

+ ///

Applications can exercise more control over when data from a stage is merged by disabling automerging. This requires an application to explicitly call merge() on the stage.

+ ///

When this function is invoked on the world, it sets all current stages to the provided value and sets the default for new stages. When this function is invoked on a stage, automerging is only set for that specific stage.

+ ///
+ /// The world. + /// Whether to enable or disable automerging. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_automerge(ecs_world_t* world, bool automerge); + + /// + ///

Configure world to have N stages. This initializes N stages, which allows applications to defer operations to multiple isolated defer queues. This is typically used for applications with multiple threads, where each thread gets its own queue, and commands are merged when threads are synchronized.

+ ///

Note that the ecs_set_threads function already creates the appropriate number of stages. The set_stage_count() operation is useful for applications that want to manage their own stages and/or threads.

+ ///
+ /// The world. + /// The number of stages. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_stage_count(ecs_world_t* world, int stages); + + /// Get number of configured stages. Return number of stages set by ecs_set_stage_count. + /// The world. + /// The number of stages used for threading. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_get_stage_count([Const] ecs_world_t* world); + + /// Get current stage id. The stage id can be used by an application to learn about which stage it is using, which typically corresponds with the worker thread id. + /// The world. + /// The stage id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_get_stage_id([Const] ecs_world_t* world); + + /// + ///

Get stage-specific world pointer. Flecs threads can safely invoke the API as long as they have a private context to write to, also referred to as the stage. This function returns a pointer to a stage, disguised as a world pointer.

+ ///

Note that this function does not(!) create a new world. It simply wraps the existing world in a thread-specific context, which the API knows how to unwrap. The reason the stage is returned as an ecs_world_t is so that it can be passed transparently to the existing API functions, vs. having to create a dediated API for threading.

+ ///
+ /// The world. + /// The index of the stage to retrieve. + /// A thread-specific pointer to the world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_world_t* ecs_get_stage([Const] ecs_world_t* world, int stage_id); + + /// Test whether the current world is readonly. This function allows the code to test whether the currently used world is readonly or whether it allows for writing. + /// A pointer to a stage or the world. + /// True if the world or stage is readonly. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_stage_is_readonly([Const] ecs_world_t* world); + + /// + ///

Create asynchronous stage. An asynchronous stage can be used to asynchronously queue operations for later merging with the world. An asynchronous stage is similar to a regular stage, except that it does not allow reading from the world.

+ ///

Asynchronous stages are never merged automatically, and must therefore be manually merged with the ecs_merge function. It is not necessary to call defer_begin or defer_end before and after enqueuing commands, as an asynchronous stage unconditionally defers operations.

+ ///

The application must ensure that no commands are added to the stage while the stage is being merged.

+ ///

An asynchronous stage must be cleaned up by ecs_async_stage_free.

+ ///
+ /// The world. + /// The stage. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_world_t* ecs_async_stage_new(ecs_world_t* world); + + /// Free asynchronous stage. The provided stage must be an asynchronous stage. If a non-asynchronous stage is provided, the operation will fail. + /// The stage to free. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_async_stage_free(ecs_world_t* stage); + + /// Test whether provided stage is asynchronous. + /// The stage. + /// True when the stage is asynchronous, false for a regular stage or world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_stage_is_async(ecs_world_t* stage); + + /// Set a world context. This operation allows an application to register custom data with a world that can be accessed anywhere where the application has the world. + /// The world. + /// A pointer to a user defined structure. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_context(ecs_world_t* world, void* ctx); + + /// Get the world context. This operation retrieves a previously set world context. + /// The world. + /// The context set with ecs_set_context. If no context was set, the function returns NULL. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_get_context([Const] ecs_world_t* world); + + /// Get world info. + /// The world. + /// Pointer to the world info. This pointer will remain valid for as long as the world is valid. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_world_info_t* ecs_get_world_info([Const] ecs_world_t* world); + + /// Dimension the world for a specified number of entities. This operation will preallocate memory in the world for the specified number of entities. Specifying a number lower than the current number of entities in the world will have no effect. + /// The world. + /// The number of entities to preallocate. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_dim(ecs_world_t* world, int entity_count); + + /// + ///

Set a range for issueing new entity ids. This function constrains the entity identifiers returned by ecs_new to the specified range. This operation can be used to ensure that multiple processes can run in the same simulation without requiring a central service that coordinates issueing identifiers.

+ ///

If id_end is set to 0, the range is infinite. If id_end is set to a non-zero value, it has to be larger than id_start. If id_end is set and ecs_new is invoked after an id is issued that is equal to id_end, the application will abort.

+ ///
+ /// The world. + /// The start of the range. + /// The end of the range. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_entity_range(ecs_world_t* world, ecs_entity_t id_start, ecs_entity_t id_end); + + /// Enable/disable range limits. When an application is both a receiver of range-limited entities and a producer of range-limited entities, range checking needs to be temporarily disabled when inserting received entities. Range checking is disabled on a stage, so setting this value is thread safe. + /// The world. + /// True if range checking should be enabled, false to disable. + /// The previous value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_enable_range_check(ecs_world_t* world, bool enable); + + /// + ///

Force aperiodic actions. The world may delay certain operations until they are necessary for the application to function correctly. This may cause observable side effects such as delayed triggering of events, which can be inconvenient when for example running a test suite.

+ ///

The flags parameter specifies which aperiodic actions to run. Specify 0 to run all actions. Supported flags start with 'EcsAperiodic'. Flags identify internal mechanisms and may change unannounced.

+ ///
+ /// The world. + /// The flags specifying which actions to run. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_run_aperiodic(ecs_world_t* world, uint flags); + + /// + ///

Cleanup empty tables. This operation cleans up empty tables that meet certain conditions. Having large amounts of empty tables does not negatively impact performance of the ECS, but can take up considerable amounts of memory, especially in applications with many components, and many components per entity.

+ ///

The generation specifies the minimum number of times this operation has to be called before an empty table is cleaned up. If a table becomes non empty, the generation is reset.

+ ///

The operation allows for both a "clear" generation and a "delete" generation. When the clear generation is reached, the table's resources are freed (like component arrays) but the table itself is not deleted. When the delete generation is reached, the empty table is deleted.

+ ///

By specifying a non-zero id the cleanup logic can be limited to tables with a specific (component) id. The operation will only increase the generation count of matching tables.

+ ///

The min_id_count specifies a lower bound for the number of components a table should have. Often the more components a table has, the more specific it is and therefore less likely to be reused.

+ ///

The time budget specifies how long the operation should take at most.

+ ///
+ /// The world. + /// Optional component filter for the tables to evaluate. + /// Free table data when generation > clear_generation. + /// Delete table when generation > delete_generation. + /// Minimum number of component ids the table should have. + /// Amount of time operation is allowed to spend. + /// Number of deleted tables. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_delete_empty_tables(ecs_world_t* world, ecs_id_t id, ushort clear_generation, ushort delete_generation, int min_id_count, double time_budget_seconds); + + /// Get world from poly. + /// A pointer to a poly object. + /// The world. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_world_t* ecs_get_world([Const] ecs_poly_t* poly); + + /// Get entity from poly. + /// A pointer to a poly object. + /// Entity associated with the poly object. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_get_entity([Const] ecs_poly_t* poly); + + /// + ///

Test if pointer is of specified type. Usage: ecs_poly_is(ptr, ecs_world_t).

+ ///

This operation only works for poly types.

+ ///
+ /// The object to test. + /// The id of the type. + /// True if the pointer is of the specified type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool _ecs_poly_is([Const] ecs_poly_t* @object, int type); + + /// Make a pair id. This function is equivalent to using the ecs_pair macro, and is added for convenience to make it easier for non C/C++ bindings to work with pairs. + /// The first element of the pair of the pair. + /// The target of the pair. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_id_t ecs_make_pair(ecs_entity_t first, ecs_entity_t second); + + /// Create new entity id. This operation returns an unused entity id. This operation is guaranteed to return an empty entity as it does not use values set by ecs_set_scope or ecs_set_with. + /// The world. + /// The new entity id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_new_id(ecs_world_t* world); + + /// + ///

Create new low id. This operation returns a new low id. Entity ids start after the ECS_HI_COMPONENT_ID constant. This reserves a range of low ids for things like components, and allows parts of the code to optimize operations.

+ ///

Note that ECS_HI_COMPONENT_ID does not represent the maximum number of components that can be created, only the maximum number of components that can take advantage of these optimizations.

+ ///

This operation is guaranteed to return an empty entity as it does not use values set by ecs_set_scope or ecs_set_with.

+ ///

This operation does not recycle ids.

+ ///
+ /// The world. + /// The new component id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_new_low_id(ecs_world_t* world); + + /// Create new entity with (component) id. This operation creates a new entity with an optional (component) id. When 0 is passed to the id paramter, no component is added to the new entity. + /// The world. + /// The component id to initialize the new entity with. + /// The new entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_new_w_id(ecs_world_t* world, ecs_id_t id); + + /// + ///

Find or create an entity. This operation creates a new entity, or modifies an existing one. When a name is set in the ecs_entity_desc_t::name field and ecs_entity_desc_t::entity is not set, the operation will first attempt to find an existing entity by that name. If no entity with that name can be found, it will be created.

+ ///

If both a name and entity handle are provided, the operation will check if the entity name matches with the provided name. If the names do not match, the function will fail and return 0.

+ ///

If an id to a non-existing entity is provided, that entity id become alive.

+ ///

See the documentation of ecs_entity_desc_t for more details.

+ ///
+ /// The world. + /// Entity init parameters. + /// A handle to the new or existing entity, or 0 if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_entity_init(ecs_world_t* world, [Const] ecs_entity_desc_t* desc); + + /// + ///

Bulk create/populate new entities. This operation bulk inserts a list of new or predefined entities into a single table.

+ ///

The operation does not take ownership of component arrays provided by the application. Components that are non-trivially copyable will be moved into the storage.

+ ///

The operation will emit OnAdd events for each added id, and OnSet events for each component that has been set.

+ ///

If no entity ids are provided by the application, the returned array of ids points to an internal datastructure which changes when new entities are created/deleted.

+ ///

If as a result of the operation triggers are invoked that deletes entities and no entity ids were provided by the application, the returned array of identifiers may be incorrect. To avoid this problem, an application can first call ecs_bulk_init to create empty entities, copy the array to one that is owned by the application, and then use this array to populate the entities.

+ ///
+ /// The world. + /// Bulk creation parameters. + /// Array with the list of entity ids created/populated. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t* ecs_bulk_init(ecs_world_t* world, [Const] ecs_bulk_desc_t* desc); + + /// Create N new entities. This operation is the same as ecs_new_w_id, but creates N entities instead of one and does not recycle ids. + /// The world. + /// The component id to create the entities with. + /// The number of entities to create. + /// The first entity id of the newly created entities. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t* ecs_bulk_new_w_id(ecs_world_t* world, ecs_id_t id, int count); + + /// Clone an entity This operation clones the components of one entity into another entity. If no destination entity is provided, a new entity will be created. Component values are not copied unless copy_value is true. + /// The world. + /// The entity to copy the components to. + /// The entity to copy the components from. + /// If true, the value of components will be copied to dst. + /// The destination entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_clone(ecs_world_t* world, ecs_entity_t dst, ecs_entity_t src, bool copy_value); + + /// Delete an entity. This operation will delete an entity and all of its components. The entity id will be recycled. Repeatedly calling ecs_delete without ecs_new or ecs_new_w_id will cause a memory leak as it will cause the list with ids that can be recycled to grow unbounded. + /// The world. + /// The entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_delete(ecs_world_t* world, ecs_entity_t entity); + + /// Delete all entities with the specified id. This will delete all entities (tables) that have the specified id. The id may be a wildcard and/or a pair. + /// The world. + /// The id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_delete_with(ecs_world_t* world, ecs_id_t id); + + /// Add a (component) id to an entity. This operation adds a single (component) id to an entity. If the entity already has the id, this operation has no side effects. + /// The world. + /// The entity. + /// The id to add. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_add_id(ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// Remove a (component) id from an entity. This operation removes a single (component) id to an entity. If the entity does not have the id, this operation has no side effects. + /// The world. + /// The entity. + /// The id to remove. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_remove_id(ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// + ///

Add override for (component) id. Adding an override to an entity ensures that when the entity is instantiated (by adding an IsA relationship to it) the component with the override is copied to a component that is private to the instance. By default components reachable through an IsA relationship are shared.

+ ///

Adding an override does not add the component. If an override is added to an entity that does not have the component, it will still be added to the instance, but with an uninitialized value (unless the component has a ctor). When the entity does have the entity, the component of the instance will be initialized with the value of the component on the entity.

+ ///

This is the same as what happens when calling ecs_add_id for an id that is inherited (reachable through an IsA relationship).

+ ///

This operation is equivalent to doing: ecs_add_id(world, entity, ECS_OVERRIDE | id);.

+ ///
+ /// The world. + /// The entity. + /// The id to override. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_override_id(ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// Clear all components. This operation will clear all components from an entity but will not delete the entity itself. This effectively prevents the entity id from being recycled. + /// The world. + /// The entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_clear(ecs_world_t* world, ecs_entity_t entity); + + /// Remove all instances of the specified id. This will remove the specified id from all entities (tables). Teh id may be a wildcard and/or a pair. + /// The world. + /// The id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_remove_all(ecs_world_t* world, ecs_id_t id); + + /// Set current with id. New entities are automatically created with the specified id. + /// The world. + /// The id. + /// The previous id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_set_with(ecs_world_t* world, ecs_id_t id); + + /// Get current with id. Get the id set with ecs_set_with. + /// The world. + /// The last id provided to ecs_set_with. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_id_t ecs_get_with([Const] ecs_world_t* world); + + /// Enable or disable entity. This operation enables or disables an entity by adding or removing the EcsDisabled tag. A disabled entity will not be matched with any systems, unless the system explicitly specifies the EcsDisabled tag. + /// The world. + /// The entity to enable or disable. + /// true to enable the entity, false to disable. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_enable(ecs_world_t* world, ecs_entity_t entity, bool enabled); + + /// Enable or disable component. Enabling or disabling a component does not add or remove a component from an entity, but prevents it from being matched with queries. This operation can be useful when a component must be temporarily disabled without destroying its value. It is also a more performant operation for when an application needs to add/remove components at high frequency, as enabling/disabling is cheaper than a regular add or remove. + /// The world. + /// The entity. + /// The component. + /// True to enable the component, false to disable. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_enable_id(ecs_world_t* world, ecs_entity_t entity, ecs_id_t id, bool enable); + + /// Test if component is enabled. Test whether a component is currently enabled or disabled. This operation will return true when the entity has the component and if it has not been disabled by ecs_enable_component. + /// The world. + /// The entity. + /// The component. + /// True if the component is enabled, otherwise false. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_is_enabled_id([Const] ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// Get an immutable pointer to a component. This operation obtains a const pointer to the requested component. The operation accepts the component entity id. + /// The world. + /// The entity. + /// The id of the component to get. + /// The component pointer, NULL if the entity does not have the component. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_get_id([Const] ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// Create a component ref. A ref is a handle to an entity + component which caches a small amount of data to reduce overhead of repeatedly accessing the component. Use ecs_ref_get to get the component data. + /// The world. + /// The entity. + /// The id of the component. + /// The reference. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_ref_t ecs_ref_init_id([Const] ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// Get component from ref. Get component pointer from ref. The ref must be created with ecs_ref_init. + /// The world. + /// The ref. + /// The component id. + /// The component pointer, NULL if the entity does not have the component. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_ref_get_id([Const] ecs_world_t* world, ecs_ref_t* @ref, ecs_id_t id); + + /// Update ref. Ensures contents of ref are up to date. Same as ecs_ref_get_id, but does not return pointer to component id. + /// The world. + /// The ref. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_ref_update([Const] ecs_world_t* world, ecs_ref_t* @ref); + + /// + ///

Get a mutable pointer to a component. This operation is similar to ecs_get_id but it returns a mutable pointer. If this operation is invoked from inside a system, the entity will be staged and a pointer to the staged component will be returned.

+ ///

If the entity did not yet have the component, the component will be added by this operation. In this case the is_added out parameter will be set to true.

+ ///
+ /// The world. + /// The entity. + /// The entity id of the component to obtain. + /// The component pointer. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_get_mut_id(ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// + ///

Begin exclusive write access to entity. This operation provides safe exclusive access to the components of an entity without the overhead of deferring operations.

+ ///

When this operation is called simultaneously for the same entity more than once it will throw an assert. Note that for this to happen, asserts must be enabled. It is up to the application to ensure that access is exclusive, for example by using a read-write mutex.

+ ///

Exclusive access is enforced at the table level, so only one entity can be exclusively accessed per table. The exclusive access check is thread safe.

+ ///

This operation must be followed up with ecs_write_end.

+ ///
+ /// The world. + /// The entity. + /// A record to the entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_record_t* ecs_write_begin(ecs_world_t* world, ecs_entity_t entity); + + /// End exclusive write access to entity. This operation ends exclusive access, and must be called after ecs_write_begin. + /// Record to the entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_write_end(ecs_record_t* record); + + /// + ///

Begin read access to entity. This operation provides safe read access to the components of an entity. Multiple simultaneous reads are allowed per entity.

+ ///

This operation ensures that code attempting to mutate the entity's table will throw an assert. Note that for this to happen, asserts must be enabled. It is up to the application to ensure that this does not happen, for example by using a read-write mutex.

+ ///

This operation does *not* provide the same guarantees as a read-write mutex, as it is possible to call ecs_read_begin after calling ecs_write_begin. It is up to application has to ensure that this does not happen.

+ ///

This operation must be followed up with ecs_read_end.

+ ///
+ /// The world. + /// The entity. + /// A record to the entity. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_record_t* ecs_read_begin(ecs_world_t* world, ecs_entity_t entity); + + /// End read access to entity. This operation ends read access, and must be called after ecs_read_begin. + /// Record to the entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_read_end([Const] ecs_record_t* record); + + /// + ///

Get component from entity record. This operation returns a pointer to a component for the entity associated with the provided record. For safe access to the component, obtain the record with ecs_read_begin or ecs_write_begin.

+ ///

Obtaining a component from a record is faster than obtaining it from the entity handle, as it reduces the number of lookups required.

+ ///
+ /// The world. + /// Record to the entity. + /// The (component) id. + /// Pointer to component, or NULL if entity does not have the component. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_record_get_id(ecs_world_t* world, [Const] ecs_record_t* record, ecs_id_t id); + + /// Same as ecs_record_get_id, but returns a mutable pointer. For safe access to the component, obtain the record with ecs_write_begin. + /// The world. + /// Record to the entity. + /// The (component) id. + /// Pointer to component, or NULL if entity does not have the component. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_record_get_mut_id(ecs_world_t* world, ecs_record_t* record, ecs_id_t id); + + /// + ///

Emplace a component. Emplace is similar to get_mut except that the component constructor is not invoked for the returned pointer, allowing the component to be "constructed" directly in the storage.

+ ///

Emplace can only be used if the entity does not yet have the component. If the entity has the component, the operation will fail.

+ ///
+ /// The world. + /// The entity. + /// The component to obtain. + /// The (uninitialized) component pointer. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_emplace_id(ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// + ///

Signal that a component has been modified. This operation allows an application to signal to Flecs that a component has been modified. As a result, OnSet systems will be invoked.

+ ///

This operation is commonly used together with ecs_get_mut.

+ ///
+ /// The world. + /// The entity. + /// The id of the component that was modified. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_modified_id(ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_set_id(ecs_world_t* world, ecs_entity_t entity, ecs_id_t id, int size, [Const] void* ptr); + + /// + ///

Test whether an entity is valid. Entities that are valid can be used with API functions.

+ ///

An entity is valid if it is not 0 and if it is alive. If the provided id is a pair, the contents of the pair will be checked for validity.

+ ///

is_valid will return true for ids that don't exist (alive or not alive). This allows for using ids that have never been created by ecs_new or similar. In this the function differs from ecs_is_alive, which will return false for entities that do not yet exist.

+ ///

The operation will return false for an id that exists and is not alive, as using this id with an API operation would cause it to assert.

+ ///
+ /// The world. + /// The entity. + /// True if the entity is valid, false if the entity is not valid. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_is_valid([Const] ecs_world_t* world, ecs_entity_t e); + + /// Test whether an entity is alive. An entity is alive when it has been returned by ecs_new (or similar) or if it is not empty (componentts have been explicitly added to the id). + /// The world. + /// The entity. + /// True if the entity is alive, false if the entity is not alive. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_is_alive([Const] ecs_world_t* world, ecs_entity_t e); + + /// Remove generation from entity id. + /// The entity id. + /// The entity id without the generation count. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_id_t ecs_strip_generation(ecs_entity_t e); + + /// + ///

Override the generation of an entity. The generation count of an entity is increased each time an entity is deleted and is used to test whether an entity id is alive.

+ ///

This operation overrides the current generation of an entity with the specified generation, which can be useful if an entity is externally managed, like for external pools, savefiles or netcode.

+ ///
+ /// The world. + /// Entity for which to set the generation with the new generation. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_entity_generation(ecs_world_t* world, ecs_entity_t entity); + + /// + ///

Get alive identifier. In some cases an application may need to work with identifiers from which the generation has been stripped. A typical scenario in which this happens is when iterating relationships in an entity type.

+ ///

For example, when obtaining the parent id from a ChildOf relationship, the parent (second element of the pair) will have been stored in a 32 bit value, which cannot store the entity generation. This function can retrieve the identifier with the current generation for that id.

+ ///

If the provided identifier is not alive, the function will return 0.

+ ///
+ /// The world. + /// The for which to obtain the current alive entity id. + /// The alive entity id if there is one, or 0 if the id is not alive. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_get_alive([Const] ecs_world_t* world, ecs_entity_t e); + + /// + ///

Ensure id is alive. This operation ensures that the provided id is alive. This is useful in scenarios where an application has an existing id that has not been created with ecs_new (such as a global constant or an id from a remote application).

+ ///

When this operation is successful it guarantees that the provided id exists, is valid and is alive.

+ ///

Before this operation the id must either not be alive or have a generation that is equal to the passed in entity.

+ ///

If the provided id has a non-zero generation count and the id does not exist in the world, the id will be created with the specified generation.

+ ///

If the provided id is alive and has a generation count that does not match the provided id, the operation will fail.

+ ///
+ /// The world. + /// The entity id to make alive. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_ensure(ecs_world_t* world, ecs_entity_t entity); + + /// + ///

Same as ecs_ensure, but for (component) ids. An id can be an entity or pair, and can contain id flags. This operation ensures that the entity (or entities, for a pair) are alive.

+ ///

When this operation is successful it guarantees that the provided id can be used in operations that accept an id.

+ ///

Since entities in a pair do not encode their generation ids, this operation will not fail when an entity with non-zero generation count already exists in the world.

+ ///

This is different from ecs_ensure, which will fail if attempted with an id that has generation 0 and an entity with a non-zero generation is currently alive.

+ ///
+ /// The world. + /// The id to make alive. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_ensure_id(ecs_world_t* world, ecs_id_t id); + + /// Test whether an entity exists. Similar as ecs_is_alive, but ignores entity generation count. + /// The world. + /// The entity. + /// True if the entity exists, false if the entity does not exist. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_exists([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Get the type of an entity. + /// The world. + /// The entity. + /// The type of the entity, NULL if the entity has no components. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_type_t* ecs_get_type([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Get the table of an entity. + /// The world. + /// The entity. + /// The table of the entity, NULL if the entity has no components/tags. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_table_t* ecs_get_table([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Convert type to string. The result of this operation must be freed with ecs_os_free. + /// The world. + /// The type. + /// The stringified type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_type_str([Const] ecs_world_t* world, [Const] ecs_type_t* type); + + /// Convert table to string. Same as ecs_type_str(world, ecs_table_get_type(table)). The result of this operation must be freed with ecs_os_free. + /// The world. + /// The table. + /// The stringified table type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_table_str([Const] ecs_world_t* world, [Const] ecs_table_t* table); + + /// + ///

Convert entity to string. Same as combining: - ecs_get_fullpath(world, entity) - ecs_type_str(world, ecs_get_type(world, entity)).

+ ///

The result of this operation must be freed with ecs_os_free.

+ ///
+ /// The world. + /// The entity. + /// The entity path with stringified type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_entity_str([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Test if an entity has an entity. This operation returns true if the entity has the provided entity in its type. + /// The world. + /// The entity. + /// The id to test for. + /// True if the entity has the entity, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_has_id([Const] ecs_world_t* world, ecs_entity_t entity, ecs_id_t id); + + /// + ///

Get the target of a relationship. This will return a target (second element of a pair) of the entity for the specified relationship. The index allows for iterating through the targets, if a single entity has multiple targets for the same relationship.

+ ///

If the index is larger than the total number of instances the entity has for the relationship, the operation will return 0.

+ ///
+ /// The world. + /// The entity. + /// The relationship between the entity and the target. + /// The index of the relationship instance. + /// The target for the relationship at the specified index. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_get_target([Const] ecs_world_t* world, ecs_entity_t entity, ecs_entity_t rel, int index); + + /// + ///

Get the target of a relationship for a given id. This operation returns the first entity that has the provided id by following the specified relationship. If the entity itself has the id then entity will be returned. If the id cannot be found on the entity or by following the relationship, the operation will return 0.

+ ///

This operation can be used to lookup, for example, which prefab is providing a component by specifying the IsA relationship:.

+ ///

// Is Position provided by the entity or one of its base entities? ecs_get_target_for_id(world, entity, EcsIsA, ecs_id(Position)).

+ ///
+ /// The world. + /// The entity. + /// The relationship to follow. + /// The id to lookup. + /// The entity for which the target has been found. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_get_target_for_id([Const] ecs_world_t* world, ecs_entity_t entity, ecs_entity_t rel, ecs_id_t id); + + /// Return depth for entity in tree for relationship rel. Depth is determined by counting the number of targets encountered while traversing up the relationship tree for rel. Only acyclic relationships are supported. + /// The world. + /// The entity. + /// The relationship. + /// The depth of the entity in the tree. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_get_depth([Const] ecs_world_t* world, ecs_entity_t entity, ecs_entity_t rel); + + /// Count entities that have the specified id. Returns the number of entities that have the specified id. + /// The world. + /// The id to search for. + /// The number of entities that have the id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_count_id([Const] ecs_world_t* world, ecs_id_t entity); + + /// Get the name of an entity. This will return the name stored in (EcsIdentifier, EcsName). + /// The world. + /// The entity. + /// The type of the entity, NULL if the entity has no name. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_get_name([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Get the symbol of an entity. This will return the symbol stored in (EcsIdentifier, EcsSymbol). + /// The world. + /// The entity. + /// The type of the entity, NULL if the entity has no name. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_get_symbol([Const] ecs_world_t* world, ecs_entity_t entity); + + /// + ///

Set the name of an entity. This will set or overwrite the name of an entity. If no entity is provided, a new entity will be created.

+ ///

The name is stored in (EcsIdentifier, EcsName).

+ ///
+ /// The world. + /// The entity. + /// The name. + /// The provided entity, or a new entity if 0 was provided. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_set_name(ecs_world_t* world, ecs_entity_t entity, [Const] char* name); + + /// + ///

Set the symbol of an entity. This will set or overwrite the symbol of an entity. If no entity is provided, a new entity will be created.

+ ///

The symbol is stored in (EcsIdentifier, EcsSymbol).

+ ///
+ /// The world. + /// The entity. + /// The symbol. + /// The provided entity, or a new entity if 0 was provided. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_set_symbol(ecs_world_t* world, ecs_entity_t entity, [Const] char* symbol); + + /// + ///

Set alias for entity. An entity can be looked up using its alias from the root scope without providing the fully qualified name if its parent. An entity can only have a single alias.

+ ///

The symbol is stored in (EcsIdentifier, EcsAlias).

+ ///
+ /// The world. + /// The entity. + /// The alias. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_alias(ecs_world_t* world, ecs_entity_t entity, [Const] char* alias); + + /// Lookup an entity by name. Returns an entity that matches the specified name. Only looks for entities in the current scope (root if no scope is provided). + /// The world. + /// The entity name. + /// The entity with the specified name, or 0 if no entity was found. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_lookup([Const] ecs_world_t* world, [Const] char* name); + + /// Lookup a child entity by name. Returns an entity that matches the specified name. Only looks for entities in the provided parent. If no parent is provided, look in the current scope ( root if no scope is provided). + /// The world. + /// The entity name. + /// The entity with the specified name, or 0 if no entity was found. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_lookup_child([Const] ecs_world_t* world, ecs_entity_t parent, [Const] char* name); + + /// + ///

Lookup an entity from a path. Lookup an entity from a provided path, relative to the provided parent. The operation will use the provided separator to tokenize the path expression. If the provided path contains the prefix, the search will start from the root.

+ ///

If the entity is not found in the provided parent, the operation will continue to search in the parent of the parent, until the root is reached. If the entity is still not found, the lookup will search in the flecs.core scope. If the entity is not found there either, the function returns 0.

+ ///
+ /// The world. + /// The entity from which to resolve the path. + /// The path to resolve. + /// The path separator. + /// The path prefix. + /// Recursively traverse up the tree until entity is found. + /// The entity if found, else 0. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_lookup_path_w_sep([Const] ecs_world_t* world, ecs_entity_t parent, [Const] char* path, [Const] char* sep, [Const] char* prefix, bool recursive); + + /// + ///

Lookup an entity by its symbol name. This looks up an entity by symbol stored in (EcsIdentifier, EcsSymbol). The operation does not take into account hierarchies.

+ ///

This operation can be useful to resolve, for example, a type by its C identifier, which does not include the Flecs namespacing.

+ ///
+ [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_lookup_symbol([Const] ecs_world_t* world, [Const] char* symbol, bool lookup_as_path); + + /// + ///

Get a path identifier for an entity. This operation creates a path that contains the names of the entities from the specified parent to the provided entity, separated by the provided separator. If no parent is provided the path will be relative to the root. If a prefix is provided, the path will be prefixed by the prefix.

+ ///

If the parent is equal to the provided child, the operation will return an empty string. If a nonzero component is provided, the path will be created by looking for parents with that component.

+ ///

The returned path should be freed by the application.

+ ///
+ /// The world. + /// The entity from which to create the path. + /// The entity to which to create the path. + /// The separator to use between path elements. + /// The initial character to use for root elements. + /// The relative entity path. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_get_path_w_sep([Const] ecs_world_t* world, ecs_entity_t parent, ecs_entity_t child, [Const] char* sep, [Const] char* prefix); + + /// Write path identifier to buffer. Same as ecs_get_path_w_sep, but writes result to an ecs_strbuf_t. + /// The world. + /// The entity from which to create the path. + /// The entity to which to create the path. + /// The separator to use between path elements. + /// The initial character to use for root elements. + /// The buffer to write to. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_get_path_w_sep_buf([Const] ecs_world_t* world, ecs_entity_t parent, ecs_entity_t child, [Const] char* sep, [Const] char* prefix, ecs_strbuf_t* buf); + + /// + ///

Find or create entity from path. This operation will find or create an entity from a path, and will create any intermediate entities if required. If the entity already exists, no entities will be created.

+ ///

If the path starts with the prefix, then the entity will be created from the root scope.

+ ///
+ /// The world. + /// The entity relative to which the entity should be created. + /// The path to create the entity for. + /// The separator used in the path. + /// The prefix used in the path. + /// The entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_new_from_path_w_sep(ecs_world_t* world, ecs_entity_t parent, [Const] char* path, [Const] char* sep, [Const] char* prefix); + + /// + ///

Add specified path to entity. This operation is similar to ecs_new_from_path, but will instead add the path to an existing entity.

+ ///

If an entity already exists for the path, it will be returned instead.

+ ///
+ /// The world. + /// The entity to which to add the path. + /// The entity relative to which the entity should be created. + /// The path to create the entity for. + /// The separator used in the path. + /// The prefix used in the path. + /// The entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_add_path_w_sep(ecs_world_t* world, ecs_entity_t entity, ecs_entity_t parent, [Const] char* path, [Const] char* sep, [Const] char* prefix); + + /// + ///

Set the current scope. This operation sets the scope of the current stage to the provided entity. As a result new entities will be created in this scope, and lookups will be relative to the provided scope.

+ ///

It is considered good practice to restore the scope to the old value.

+ ///
+ /// The world. + /// The entity to use as scope. + /// The previous scope. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_set_scope(ecs_world_t* world, ecs_entity_t scope); + + /// Get the current scope. Get the scope set by ecs_set_scope. If no scope is set, this operation will return 0. + /// The world. + /// The current scope. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_get_scope([Const] ecs_world_t* world); + + /// Set a name prefix for newly created entities. This is a utility that lets C modules use prefixed names for C types and C functions, while using names for the entity names that do not have the prefix. The name prefix is currently only used by ECS_COMPONENT. + /// The world. + /// The name prefix to use. + /// The previous prefix. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_set_name_prefix(ecs_world_t* world, [Const] char* prefix); + + /// + ///

Set search path for lookup operations. This operation accepts an array of entity ids that will be used as search scopes by lookup operations. The operation returns the current search path. It is good practice to restore the old search path.

+ ///

The search path will be evaluated starting from the last element.

+ ///

The default search path includes flecs.core. When a custom search path is provided it overwrites the existing search path. Operations that rely on looking up names from flecs.core without providing the namespace may fail if the custom search path does not include flecs.core (EcsFlecsCore).

+ ///

The search path array is not copied into managed memory. The application must ensure that the provided array is valid for as long as it is used as the search path.

+ ///

The provided array must be terminated with a 0 element. This enables an application to push/pop elements to an existing array without invoking the ecs_set_lookup_path operation again.

+ ///
+ /// The world. + /// 0-terminated array with entity ids for the lookup path. + /// Current lookup path array. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t* ecs_set_lookup_path(ecs_world_t* world, [Const] ecs_entity_t* lookup_path); + + /// Get current lookup path. Returns value set by ecs_set_lookup_path. + /// The world. + /// The current lookup path. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t* ecs_get_lookup_path([Const] ecs_world_t* world); + + /// + ///

Find or create a component. This operation creates a new component, or finds an existing one. The find or create behavior is the same as ecs_entity_init.

+ ///

When an existing component is found, the size and alignment are verified with the provided values. If the values do not match, the operation will fail.

+ ///

See the documentation of ecs_component_desc_t for more details.

+ ///
+ /// The world. + /// Component init parameters. + /// A handle to the new or existing component, or 0 if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_component_init(ecs_world_t* world, [Const] ecs_component_desc_t* desc); + + /// + ///

Register hooks for component. Hooks allow for the execution of user code when components are constructed, copied, moved, destructed, added, removed or set. Hooks can be assigned as as long as a component has not yet been used (added to an entity).

+ ///

The hooks that are currently set can be accessed with ecs_get_type_info.

+ ///
+ /// The world. + /// The component id for which to register the actions. + /// Type that contains the component actions. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_hooks_id(ecs_world_t* world, ecs_entity_t id, [Const] ecs_type_hooks_t* hooks); + + /// Get hooks for component. + /// The world. + /// The component id for which to retrieve the hooks. + /// The hooks for the component, or NULL if not registered. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_type_hooks_t* ecs_get_hooks_id(ecs_world_t* world, ecs_entity_t id); + + /// + ///

Returns whether specified id a tag. This operation returns whether the specified type is a tag (a component without data/size).

+ ///

An id is a tag when: - it is an entity without the EcsComponent component - it has an EcsComponent with size member set to 0 - it is a pair where both elements are a tag - it is a pair where the first element has the EcsTag tag.

+ ///
+ /// The world. + /// The id. + /// Whether the provided id is a tag. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_id_is_tag([Const] ecs_world_t* world, ecs_id_t id); + + /// Returns whether specified id is in use. This operation returns whether an id is in use in the world. An id is in use if it has been added to one or more tables. + /// The world. + /// The id. + /// Whether the id is in use. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_id_in_use(ecs_world_t* world, ecs_id_t id); + + /// Get the type for an id. This function returnsthe type information for an id. The specified id can be any valid id. For the rules on how type information is determined based on id, see ecs_get_typeid. + /// The world. + /// The id. + /// The type information of the id. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_type_info_t* ecs_get_type_info([Const] ecs_world_t* world, ecs_id_t id); + + /// + ///

Get the type for an id. This operation returns the component id for an id, if the id is associated with a type. For a regular component with a non-zero size (an entity with the EcsComponent component) the operation will return the entity itself.

+ ///

For an entity that does not have the EcsComponent component, or with an EcsComponent value with size 0, the operation will return 0.

+ ///

For a pair id the operation will return the type associated with the pair, by applying the following rules in order: - The first pair element is returned if it is a component - 0 is returned if the relationship entity has the Tag property - The second pair element is returned if it is a component - 0 is returned.

+ ///
+ /// The world. + /// The id. + /// The type id of the id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_get_typeid([Const] ecs_world_t* world, ecs_id_t id); + + /// Utility to match an id with a pattern. This operation returns true if the provided pattern matches the provided id. The pattern may contain a wildcard (or wildcards, when a pair). + /// The id. + /// The pattern to compare with. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_id_match(ecs_id_t id, ecs_id_t pattern); + + /// Utility to check if id is a pair. + /// The id. + /// True if id is a pair. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_id_is_pair(ecs_id_t id); + + /// Utility to check if id is a wildcard. + /// The id. + /// True if id is a wildcard or a pair containing a wildcard. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_id_is_wildcard(ecs_id_t id); + + /// + ///

Utility to check if id is valid. A valid id is an id that can be added to an entity. Invalid ids are: - ids that contain wildcards - ids that contain invalid entities - ids that are 0 or contain 0 entities.

+ ///

Note that the same rules apply to removing from an entity, with the exception of wildcards.

+ ///
+ /// The world. + /// The id. + /// True if the id is valid. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_id_is_valid([Const] ecs_world_t* world, ecs_id_t id); + + /// Get flags associated with id. This operation returns the internal flags (see api_flags.h) that are associated with the provided id. + /// The world. + /// The id. + /// Flags associated with the id, or 0 if the id is not in use. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern uint ecs_id_get_flags([Const] ecs_world_t* world, ecs_id_t id); + + /// Convert id flag to string. This operation converts a id flag to a string. + /// The id flag. + /// The id flag string, or NULL if no valid id is provided. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_id_flag_str(ecs_id_t id_flags); + + /// Convert id to string. This operation interprets the structure of an id and converts it to a string. + /// The world. + /// The id to convert to a string. + /// The id converted to a string. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_id_str([Const] ecs_world_t* world, ecs_id_t id); + + /// Write id string to buffer. Same as ecs_id_str but writes result to ecs_strbuf_t. + /// The world. + /// The id to convert to a string. + /// The buffer to write to. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_id_str_buf([Const] ecs_world_t* world, ecs_id_t id, ecs_strbuf_t* buf); + + /// Iterator for a single (component) id. A term iterator returns all entities (tables) that match a single (component) id. The search for the matching set of entities (tables) is performed in constant time. + /// The world. + /// The term. + /// The iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_term_iter([Const] ecs_world_t* world, ecs_term_t* term); + + /// Return a chained term iterator. A chained iterator applies a filter to the results of the input iterator. The resulting iterator must be iterated with ecs_term_next. + /// The input iterator. + /// The term filter to apply to the iterator. + /// The chained iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_term_chain_iter([Const] ecs_iter_t* it, ecs_term_t* term); + + /// Progress a term iterator. This operation progresses the term iterator to the next table. The iterator must have been initialized with `ecs_term_iter`. This operation must be invoked at least once before interpreting the contents of the iterator. + /// The iterator. + //// CXComment_BlockCommand + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_term_next(ecs_iter_t* it); + + /// Iterator for a parent's children. This operation is equivalent to a term iterator for (ChildOf, parent). Iterate the result with ecs_children_next. + /// The world. + /// The parent for which to iterate the children. + /// The iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_children([Const] ecs_world_t* world, ecs_entity_t parent); + + /// Progress a children iterator. Equivalent to ecs_term_next. + /// The iterator. + //// CXComment_BlockCommand + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_children_next(ecs_iter_t* it); + + /// Test whether term id is set. + /// The term id. + /// True when set, false when not set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_term_id_is_set([Const] ecs_term_id_t* id); + + /// + ///

Test whether a term is set. This operation can be used to test whether a term has been initialized with values or whether it is empty.

+ ///

An application generally does not need to invoke this operation. It is useful when initializing a 0-initialized array of terms (like in ecs_term_desc_t) as this operation can be used to find the last initialized element.

+ ///
+ /// The term. + /// True when set, false when not set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_term_is_initialized([Const] ecs_term_t* term); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_term_match_this([Const] ecs_term_t* term); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_term_match_0([Const] ecs_term_t* term); + + /// + ///

Finalize term. Ensure that all fields of a term are consistent and filled out. This operation should be invoked before using and after assigning members to, or parsing a term. When a term contains unresolved identifiers, this operation will resolve and assign the identifiers. If the term contains any identifiers that cannot be resolved, the operation will fail.

+ ///

An application generally does not need to invoke this operation as the APIs that use terms (such as filters, queries and triggers) will finalize terms when they are created.

+ ///

The name and expr parameters are optional, and only used for giving more descriptive error messages.

+ ///
+ /// The world. + /// The term to finalize. + /// Zero if success, nonzero if an error occurred. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_term_finalize([Const] ecs_world_t* world, ecs_term_t* term); + + /// Copy resources of a term to another term. This operation copies one term to another term. If the source term contains allocated resources (such as identifiers), they will be duplicated so that no memory is shared between the terms. + /// The term to copy from. + /// The destination term. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_term_t ecs_term_copy([Const] ecs_term_t* src); + + /// + ///

Move resources of a term to another term. Same as copy, but moves resources from src, if src->move is set to true. If src->move is not set to true, this operation will do a copy.

+ ///

The conditional move reduces redundant allocations in scenarios where a list of terms is partially created with allocated resources.

+ ///
+ /// The term to move from. + /// The destination term. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_term_t ecs_term_move(ecs_term_t* src); + + /// Free resources of term. This operation frees all resources (such as identifiers) of a term. The term itself is not freed. + /// The term to free. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_term_fini(ecs_term_t* term); + + /// + ///

Initialize filter A filter is a lightweight object that can be used to query for entities in a world. Filters, as opposed to queries, do not cache results. They are therefore slower to iterate, but are faster to create.

+ ///

When a filter is copied by value, make sure to use "ecs_filter_move" to ensure that the terms pointer still points to the inline array:.

+ ///

ecs_filter_move( &dst _filter, &src _filter).

+ ///

Alternatively, the ecs_filter_move function can be called with both arguments set to the same filter, to ensure the pointer is valid:.

+ ///

ecs_filter_move( &f , &f ).

+ ///

It is possible to create a filter without allocating any memory, by setting the .storage member in ecs_filter_desc_t. See the documentation for the member for more details.

+ ///
+ /// The world. + /// Properties for the filter to create. + /// The filter if successful, NULL if not successful. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_filter_t* ecs_filter_init(ecs_world_t* world, [Const] ecs_filter_desc_t* desc); + + /// Deinitialize filter. Free resources associated with filter. + /// The filter to deinitialize. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_filter_fini(ecs_filter_t* filter); + + /// + ///

Finalize filter. When manually assigning an array of terms to the filter struct (so not when using ecs_filter_init), this operation should be used to ensure that all terms are assigned properly and all (derived) fields have been set.

+ ///

When ecs_filter_init is used to create the filter, this function should not be called. The purpose of this operation is to support creation of filters without allocating memory.

+ ///
+ /// The filter to finalize. + /// Zero if filter is valid, non-zero if it contains errors. @. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_filter_finalize([Const] ecs_world_t* world, ecs_filter_t* filter); + + /// + ///

Find index for This variable. This operation looks up the index of the This variable. This index can be used in operations like ecs_iter_set_var and ecs_iter_get_var.

+ ///

The operation will return -1 if the variable was not found. This happens when a filter only has terms that are not matched on the This variable, like a filter that exclusively matches singleton components.

+ ///
+ /// The rule. + /// The index of the This variable. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_filter_find_this_var([Const] ecs_filter_t* filter); + + /// Convert ter, to string expression. Convert term to a string expression. The resulting expression is equivalent to the same term, with the exception of And & Or operators. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_term_str([Const] ecs_world_t* world, [Const] ecs_term_t* term); + + /// Convert filter to string expression. Convert filter terms to a string expression. The resulting expression can be parsed to create the same filter. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_filter_str([Const] ecs_world_t* world, [Const] ecs_filter_t* filter); + + /// Return a filter iterator. A filter iterator lets an application iterate over entities that match the specified filter. If NULL is provided for the filter, the iterator will iterate all tables in the world. + /// The world. + /// The filter. + /// An iterator that can be used with ecs_filter_next. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_filter_iter([Const] ecs_world_t* world, [Const] ecs_filter_t* filter); + + /// Return a chained filter iterator. A chained iterator applies a filter to the results of the input iterator. The resulting iterator must be iterated with ecs_filter_next. + /// The input iterator. + /// The filter to apply to the iterator. + /// The chained iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_filter_chain_iter([Const] ecs_iter_t* it, [Const] ecs_filter_t* filter); + + /// + ///

Get pivot term for filter. The pivot term is the term that matches the smallest set of tables, and is a good default starting point for a search.

+ ///

The following conditions must be met for a term to be considered as pivot: - It must have a This subject - It must have the And operator.

+ ///

When a filter does not have any terms that match those conditions, it will return -1.

+ ///

If one or more terms in the filter have no matching tables the filter won't yield any results. In this case the operation will return -2 which gives a search function the option to early out.

+ ///
+ /// The world. + /// The filter. + /// Index of the pivot term (use with filter->terms). + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_filter_pivot_term([Const] ecs_world_t* world, [Const] ecs_filter_t* filter); + + /// Iterate tables matched by filter. This operation progresses the filter iterator to the next table. The iterator must have been initialized with `ecs_filter_iter`. This operation must be invoked at least once before interpreting the contents of the iterator. + /// The iterator. + /// True if more data is available, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_filter_next(ecs_iter_t* it); + + /// Same as ecs_filter_next, but always instanced. See instanced property of ecs_filter_desc_t. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_filter_next_instanced(ecs_iter_t* it); + + /// Move resources of one filter to another. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_filter_move(ecs_filter_t* dst, ecs_filter_t* src); + + /// Copy resources of one filter to another. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_filter_copy(ecs_filter_t* dst, [Const] ecs_filter_t* src); + + /// + ///

Create a query. This operation creates a query. Queries are used to iterate over entities that match a filter and are the fastest way to find and iterate over entities and their components.

+ ///

Queries should be created once, and reused multiple times. While iterating a query is a cheap operation, creating and deleting a query is expensive. The reason for this is that queries are "prematched", which means that a query stores state about which entities (or rather, tables) match with the query. Building up this state happens during query creation.

+ ///

Once a query is created, matching only happens when new tables are created. In most applications this is an infrequent process, since it only occurs when a new combination of components is introduced. While matching is expensive, it is importent to note that matching does not happen on a per-entity basis, but on a per-table basis. This means that the average time spent on matching per frame should rapidly approach zero over the lifetime of an application.

+ ///

A query provides direct access to the component arrays. When an application creates/deletes entities or adds/removes components, these arrays can shift component values around, or may grow in size. This can cause unexpected or undefined behavior to occur if these operations are performed while iterating. To prevent this from happening an application should either not perform these operations while iterating, or use deferred operations (see ecs_defer_begin and ecs_defer_end).

+ ///

Queries can be created and deleted dynamically. If a query was not deleted (using ecs_query_fini) before the world is deleted, it will be deleted automatically.

+ ///
+ /// The world. + /// A structure describing the query properties. + /// The new query. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_query_t* ecs_query_init(ecs_world_t* world, [Const] ecs_query_desc_t* desc); + + /// Destroy a query. This operation destroys a query and its resources. If the query is used as the parent of subqueries, those subqueries will be orphaned and must be deinitialized as well. + /// The query. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_fini(ecs_query_t* query); + + /// Get filter from a query. This operation obtains a pointer to the internally constructed filter of the query and can be used to introspect the query terms. + /// The query. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_filter_t* ecs_query_get_filter(ecs_query_t* query); + + /// + ///

Return a query iterator. A query iterator lets an application iterate over entities that match the specified query. If a sorting function is specified, the query will check whether a resort is required upon creating the iterator.

+ ///

Creating a query iterator is a cheap operation that does not allocate any resources. An application does not need to deinitialize or free a query iterator before it goes out of scope.

+ ///

To iterate the iterator, an application should use ecs_query_next to progress the iterator and test if it has data.

+ ///

Query iteration requires an outer and an inner loop. The outer loop uses ecs_query_next to test if new tables are available. The inner loop iterates the entities in the table, and is usually a for loop that uses iter.count to loop through the entities and component arrays.

+ ///

The two loops are necessary because of how data is stored internally. Entities are grouped by the components they have, in tables. A single query can (and often does) match with multiple tables. Because each table has its own set of arrays, an application has to reobtain pointers to those arrays for each matching table.

+ ///
+ /// The world or stage, when iterating in readonly mode. + /// The query to iterate. + /// The query iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_query_iter([Const] ecs_world_t* world, ecs_query_t* query); + + /// Progress the query iterator. This operation progresses the query iterator to the next table. The iterator must have been initialized with `ecs_query_iter`. This operation must be invoked at least once before interpreting the contents of the iterator. + /// The iterator. + //// CXComment_BlockCommand + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_query_next(ecs_iter_t* iter); + + /// Same as ecs_query_next, but always instanced. See "instanced" property of ecs_filter_desc_t. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_query_next_instanced(ecs_iter_t* iter); + + /// + ///

Fast alternative to ecs_query_next that only returns matched tables. This operation only populates the ecs_iter_t::table field. To access the matched components, call ecs_query_populate.

+ ///

If this operation is used with a query that has inout/out terms, those terms will not be marked dirty unless ecs_query_populate is called.

+ ///
+ /// The iterator. + //// CXComment_BlockCommand + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_query_next_table(ecs_iter_t* iter); + + /// + ///

Populate iterator fields. This operation can be combined with ecs_query_next_table to populate the iterator fields for the current table.

+ ///

Populating fields conditionally can save time when a query uses change detection, and only needs iterator data when the table has changed. When this operation is called, inout/out terms will be marked dirty.

+ ///

In cases where inout/out terms are conditionally written and no changes were made after calling ecs_query_populate, the ecs_query_skip function can be called to prevent the matched table components from being marked dirty.

+ ///

This operation does should not be used with queries that match disabled components, union relationships, or with queries that use order_by.

+ ///
+ /// The iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_populate(ecs_iter_t* iter); + + /// + ///

Returns whether the query data changed since the last iteration. The operation will return true after: - new entities have been matched with - new tables have been matched/unmatched with - matched entities were deleted - matched components were changed.

+ ///

The operation will not return true after a write-only (EcsOut) or filter (EcsInOutNone) term has changed, when a term is not matched with the current table (This subject) or for tag terms.

+ ///

The changed state of a table is reset after it is iterated. If a iterator was not iterated until completion, tables may still be marked as changed.

+ ///

If no iterator is provided the operation will return the changed state of the all matched tables of the query.

+ ///

If an iterator is provided, the operation will return the changed state of the currently returned iterator result. The following preconditions must be met before using an iterator with change detection:.

+ ///

- The iterator is a query iterator (created with ecs_query_iter) - The iterator must be valid (ecs_query_next must have returned true) - The iterator must be instanced.

+ ///
+ /// The query (optional if 'it' is provided). + /// The iterator result to test (optional if 'query' is provided). + /// true if entities changed, otherwise false. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_query_changed(ecs_query_t* query, [Const] ecs_iter_t* it); + + /// + ///

Skip a table while iterating. This operation lets the query iterator know that a table was skipped while iterating. A skipped table will not reset its changed state, and the query will not update the dirty flags of the table for its out columns.

+ ///

Only valid iterators must be provided (next has to be called at least once & return true) and the iterator must be a query iterator.

+ ///
+ /// The iterator result to skip. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_skip(ecs_iter_t* it); + + /// + ///

Set group to iterate for query iterator. This operation limits the results returned by the query to only the selected group id. The query must have a group_by function, and the iterator must be a query iterator.

+ ///

Groups are sets of tables that are stored together in the query cache based on a group id, which is calculated per table by the group_by function. To iterate a group, an iterator only needs to know the first and last cache node for that group, which can both be found in a fast O(1) operation.

+ ///

As a result, group iteration is one of the most efficient mechanisms to filter out large numbers of entities, even if those entities are distributed across many tables. This makes it a good fit for things like dividing up a world into cells, and only iterating cells close to a player.

+ ///

The group to iterate must be set before the first call to ecs_query_next. No operations that can add/remove components should be invoked between calling ecs_query_set_group and ecs_query_next.

+ ///
+ /// The query iterator. + /// The group to iterate. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_set_group(ecs_iter_t* it, ulong group_id); + + /// Get context of query group. This operation returns the context of a query group as returned by the on_group_create callback. + /// The query. + /// The group for which to obtain the context. + /// The group context, NULL if the group doesn't exist. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_query_get_group_ctx(ecs_query_t* query, ulong group_id); + + /// Get information about query group. This operation returns information about a query group, including the group context returned by the on_group_create callback. + /// The query. + /// The group for which to obtain the group info. + /// The group info, NULL if the group doesn't exist. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_query_group_info_t* ecs_query_get_group_info(ecs_query_t* query, ulong group_id); + + /// Returns whether query is orphaned. When the parent query of a subquery is deleted, it is left in an orphaned state. The only valid operation on an orphaned query is deleting it. Only subqueries can be orphaned. + /// The query. + /// true if query is orphaned, otherwise false. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_query_orphaned(ecs_query_t* query); + + /// Convert query to string. + /// The query. + /// The query string. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_query_str([Const] ecs_query_t* query); + + /// Returns number of tables query matched with. + /// The query. + /// The number of matched tables. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_query_table_count([Const] ecs_query_t* query); + + /// Returns number of empty tables query matched with. + /// The query. + /// The number of matched empty tables. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_query_empty_table_count([Const] ecs_query_t* query); + + /// Returns number of entities query matched with. This operation iterates all non-empty tables in the query cache to find the total number of entities. + /// The query. + /// The number of matched entities. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_query_entity_count([Const] ecs_query_t* query); + + /// + ///

Send event. This sends an event to matching triggers & is the mechanism used by flecs itself to send OnAdd, OnRemove, etc events.

+ ///

Applications can use this function to send custom events, where a custom event can be any regular entity.

+ ///

Applications should not send builtin flecs events, as this may violate assumptions the code makes about the conditions under which those events are sent.

+ ///

Triggers are invoked synchronously. It is therefore safe to use stack-based data as event context, which can be set in the "param" member.

+ ///

To send a notification for a single entity, an application should set the following members in the event descriptor:.

+ ///

- table: set to the table of the entity - offset: set to the row of the entity in the table - count: set to 1.

+ ///

The table & row of the entity can be obtained like this: ecs_record_t *r = ecs_record_find(world, e); desc.table = r->table; desc.offset = ECS_RECORD_TO_ROW(r->row);.

+ ///
+ /// The world. + /// Event parameters. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_emit(ecs_world_t* world, ecs_event_desc_t* desc); + + /// + ///

Create observer. Observers are like triggers, but can subscribe for multiple terms. An observer only triggers when the source of the event meets all terms.

+ ///

See the documentation for ecs_observer_desc_t for more details.

+ ///
+ /// The world. + /// The observer creation parameters. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_observer_init(ecs_world_t* world, [Const] ecs_observer_desc_t* desc); + + /// Default run action for observer. This function can be called from a custom observer run action (see ecs_observer_desc_t::run for more details). This function ensures that the observer's filter is applied to the iterator's table, filters out duplicate events and implements EcsMonitor logic. + /// The iterator. + /// True if the observer was invoked. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_observer_default_run_action(ecs_iter_t* it); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_get_observer_ctx([Const] ecs_world_t* world, ecs_entity_t observer); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_get_observer_binding_ctx([Const] ecs_world_t* world, ecs_entity_t observer); + + /// + ///

Create iterator from poly object. The provided poly object must have the iterable mixin. If an object is provided that does not have the mixin, the function will assert.

+ ///

When a filter is provided, an array of two iterators must be passed to the function. This allows the mixin implementation to create a chained iterator when necessary, which requires two iterator objects.

+ ///

If a filter is provided, the first element in the array of two iterators is the one that should be iterated. The mixin implementation may or may not set the second element, depending on whether an iterator chain is required.

+ ///

Additionally, when a filter is provided the returned iterator will be for a single term with the provided filter id. If the iterator is chained, the previous iterator in the chain can be accessed through it->chain_it.

+ ///
+ /// The world or stage for which to create the iterator. + /// The poly object from which to create the iterator. + /// The iterator (out, ecs_iter_t[2] when filter is set). + /// Optional term used for filtering the results. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_iter_poly([Const] ecs_world_t* world, [Const] ecs_poly_t* poly, ecs_iter_t* iter, ecs_term_t* filter); + + /// + ///

Progress any iterator. This operation is useful in combination with iterators for which it is not known what created them. Example use cases are functions that should accept any kind of iterator (such as serializers) or iterators created from poly objects.

+ ///

This operation is slightly slower than using a type-specific iterator (e.g. ecs_filter_next, ecs_query_next) as it has to call a function pointer which introduces a level of indirection.

+ ///
+ /// The iterator. + /// True if iterator has more results, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_iter_next(ecs_iter_t* it); + + /// + ///

Cleanup iterator resources. This operation cleans up any resources associated with the iterator.

+ ///

This operation should only be used when an iterator is not iterated until completion (next has not yet returned false). When an iterator is iterated until completion, resources are automatically freed.

+ ///
+ /// The iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_iter_fini(ecs_iter_t* it); + + /// + ///

Count number of matched entities in query. This operation returns the number of matched entities. If a query contains no matched entities but still yields results (e.g. it has no terms with This sources) the operation will return 0.

+ ///

To determine the number of matched entities, the operation iterates the iterator until it yields no more results.

+ ///
+ /// The iterator. + /// True if iterator has more results, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_iter_count(ecs_iter_t* it); + + /// + ///

Test if iterator is true. This operation will return true if the iterator returns at least one result. This is especially useful in combination with fact-checking rules (see the rules addon).

+ ///

The operation requires a valid iterator. After the operation is invoked, the application should no longer invoke next on the iterator and should treat it as if the iterator is iterated until completion.

+ ///
+ /// The iterator. + /// true if the iterator returns at least one result. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_iter_is_true(ecs_iter_t* it); + + /// Get first matching entity from iterator. After this operation the application should treat the iterator as if it has been iterated until completion. + /// The iterator. + /// The first matching entity, or 0 if no entities were matched. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_iter_first(ecs_iter_t* it); + + /// + ///

Set value for iterator variable. This constrains the iterator to return only results for which the variable equals the specified value. The default value for all variables is EcsWildcard, which means the variable can assume any value.

+ ///

Example:.

+ ///

// Rule that matches (Eats, *) ecs_rule_t *r = ecs_rule_init(world, & (ecs_filter_desc_t){ .terms = { { .first.id = Eats, .second.name = "_Food" } } });.

+ ///

int food_var = ecs_rule_find_var(r, "Food");.

+ ///

// Set Food to Apples, so we're only matching (Eats, Apples) ecs_iter_t it = ecs_rule_iter(world, r); ecs_iter_set_var( &it , food_var, Apples);.

+ ///

while (ecs_rule_next( &it )) { for (int i = 0; i < it.count; i ++) { // iterate as usual } }.

+ ///

The variable must be initialized after creating the iterator and before the first call to next.

+ ///
+ /// The iterator. + /// The variable index. + /// The entity variable value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_iter_set_var(ecs_iter_t* it, int var_id, ecs_entity_t entity); + + /// Same as ecs_iter_set_var, but for a table. This constrains the variable to all entities in a table. + /// The iterator. + /// The variable index. + /// The table variable value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_iter_set_var_as_table(ecs_iter_t* it, int var_id, [Const] ecs_table_t* table); + + /// Same as ecs_iter_set_var, but for a range of entities This constrains the variable to a range of entities in a table. + /// The iterator. + /// The variable index. + /// The range variable value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_iter_set_var_as_range(ecs_iter_t* it, int var_id, [Const] ecs_table_range_t* range); + + /// + ///

Get value of iterator variable as entity. A variable can be interpreted as entity if it is set to an entity, or if it is set to a table range with count 1.

+ ///

This operation can only be invoked on valid iterators. The variable index must be smaller than the total number of variables provided by the iterator (as set in ecs_iter_t::variable_count).

+ ///
+ /// The iterator. + /// The variable index. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_iter_get_var(ecs_iter_t* it, int var_id); + + /// + ///

Get value of iterator variable as table. A variable can be interpreted as table if it is set as table range with both offset and count set to 0, or if offset is 0 and count matches the number of elements in the table.

+ ///

This operation can only be invoked on valid iterators. The variable index must be smaller than the total number of variables provided by the iterator (as set in ecs_iter_t::variable_count).

+ ///
+ /// The iterator. + /// The variable index. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_table_t* ecs_iter_get_var_as_table(ecs_iter_t* it, int var_id); + + /// + ///

Get value of iterator variable as table range. A value can be interpreted as table range if it is set as table range, or if it is set to an entity with a non-empty type (the entity must have at least one component, tag or relationship in its type).

+ ///

This operation can only be invoked on valid iterators. The variable index must be smaller than the total number of variables provided by the iterator (as set in ecs_iter_t::variable_count).

+ ///
+ /// The iterator. + /// The variable index. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_table_range_t ecs_iter_get_var_as_range(ecs_iter_t* it, int var_id); + + /// + ///

Returns whether variable is constrained. This operation returns true for variables set by one of the ecs_iter_set_var* operations.

+ ///

A constrained variable is guaranteed not to change values while results are being iterated.

+ ///
+ /// The iterator. + /// The variable index. + /// Whether the variable is constrained to a specified value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_iter_var_is_constrained(ecs_iter_t* it, int var_id); + + /// + ///

Create a paged iterator. Paged iterators limit the results to those starting from 'offset', and will return at most 'limit' results.

+ ///

The iterator must be iterated with ecs_page_next.

+ ///

A paged iterator acts as a passthrough for data exposed by the parent iterator, so that any data provided by the parent will also be provided by the paged iterator.

+ ///
+ /// The source iterator. + /// The number of entities to skip. + /// The maximum number of entities to iterate. + /// A page iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_page_iter([Const] ecs_iter_t* it, int offset, int limit); + + /// Progress a paged iterator. Progresses an iterator created by ecs_page_iter. + /// The iterator. + /// true if iterator has more results, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_page_next(ecs_iter_t* it); + + /// + ///

Create a worker iterator. Worker iterators can be used to equally divide the number of matched entities across N resources (usually threads). Each resource will process the total number of matched entities divided by 'count'.

+ ///

Entities are distributed across resources such that the distribution is stable between queries. Two queries that match the same table are guaranteed to match the same entities in that table.

+ ///

The iterator must be iterated with ecs_worker_next.

+ ///

A worker iterator acts as a passthrough for data exposed by the parent iterator, so that any data provided by the parent will also be provided by the worker iterator.

+ ///
+ /// The source iterator. + /// The index of the current resource. + /// The total number of resources to divide entities between. + /// A worker iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_worker_iter([Const] ecs_iter_t* it, int index, int count); + + /// Progress a worker iterator. Progresses an iterator created by ecs_worker_iter. + /// The iterator. + /// true if iterator has more results, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_worker_next(ecs_iter_t* it); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_field_w_size([Const] ecs_iter_t* it, int size, int index); + + /// Test whether the field is readonly. This operation returns whether the field is readonly. Readonly fields are annotated with [in], or are added as a const type in the C++ API. + /// The iterator. + /// The index of the field in the iterator. + /// Whether the field is readonly. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_field_is_readonly([Const] ecs_iter_t* it, int index); + + /// + ///

Test whether the field is writeonly. This operation returns whether this is a writeonly field. Writeonly terms are annotated with [out].

+ ///

Serializers are not required to serialize the values of a writeonly field.

+ ///
+ /// The iterator. + /// The index of the field in the iterator. + /// Whether the field is writeonly. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_field_is_writeonly([Const] ecs_iter_t* it, int index); + + /// Test whether field is set. + /// The iterator. + /// The index of the field in the iterator. + /// Whether the field is set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_field_is_set([Const] ecs_iter_t* it, int index); + + /// Return id matched for field. + /// The iterator. + /// The index of the field in the iterator. + /// The id matched for the field. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_id_t ecs_field_id([Const] ecs_iter_t* it, int index); + + /// Return field source. The field source is the entity on which the field was matched. + /// The iterator. + /// The index of the field in the iterator. + /// The source for the field. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_field_src([Const] ecs_iter_t* it, int index); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_field_size([Const] ecs_iter_t* it, int index); + + /// + ///

Test whether the field is matched on self. This operation returns whether the field is matched on the currently iterated entity. This function will return false when the field is owned by another entity, such as a parent or a prefab.

+ ///

When this operation returns false, the field must be accessed as a single value instead of an array. Fields for which this operation returns true return arrays with it->count values.

+ ///
+ /// The iterator. + /// The index of the field in the iterator. + /// Whether the field is matched on self. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_field_is_self([Const] ecs_iter_t* it, int index); + + /// + ///

Convert iterator to string. Prints the contents of an iterator to a string. Useful for debugging and/or testing the output of an iterator.

+ ///

The function only converts the currently iterated data to a string. To convert all data, the application has to manually call the next function and call ecs_iter_str on each result.

+ ///
+ /// The iterator. + /// A string representing the contents of the iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_iter_str([Const] ecs_iter_t* it); + + /// Get type for table. + /// The table. + /// The type of the table. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_type_t* ecs_table_get_type([Const] ecs_table_t* table); + + /// Get column from table. This operation returns the component array for the provided index. + /// The table. + /// The index of the column (corresponds with element in type). + /// The index of the first row to return (0 for entire column). + /// The component array, or NULL if the index is not a component. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_table_get_column([Const] ecs_table_t* table, int index, int offset); + + /// Get column index for id. This operation returns the index for an id in the table's type. + /// The world. + /// The table. + /// The id. + /// The index of the id in the table type, or -1 if not found. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_table_get_index([Const] ecs_world_t* world, [Const] ecs_table_t* table, ecs_id_t id); + + /// Get column from table by component id. This operation returns the component array for the provided component id. + /// The table. + /// The component id for the column. + /// The index of the first row to return (0 for entire column). + /// The component array, or NULL if the index is not a component. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_table_get_id([Const] ecs_world_t* world, [Const] ecs_table_t* table, ecs_id_t id, int offset); + + /// Return depth for table in tree for relationship rel. Depth is determined by counting the number of targets encountered while traversing up the relationship tree for rel. Only acyclic relationships are supported. + /// The world. + /// The table. + /// The relationship. + /// The depth of the table in the tree. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_table_get_depth([Const] ecs_world_t* world, [Const] ecs_table_t* table, ecs_entity_t rel); + + /// Get storage type for table. + /// The table. + /// The storage type of the table (components only). + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_table_t* ecs_table_get_storage_table([Const] ecs_table_t* table); + + /// Convert index in table type to index in table storage type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_table_type_to_storage_index([Const] ecs_table_t* table, int index); + + /// Convert index in table storage type to index in table type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_table_storage_to_type_index([Const] ecs_table_t* table, int index); + + /// Returns the number of records in the table. This operation returns the number of records that have been populated through the regular (entity) API as well as the number of records that have been inserted using the direct access API. + /// The table. + /// The number of records in a table. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_table_count([Const] ecs_table_t* table); + + /// Get table that has all components of current table plus the specified id. If the provided table already has the provided id, the operation will return the provided table. + /// The world. + /// The table. + /// The id to add. + //// CXComment_BlockCommand + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_table_t* ecs_table_add_id(ecs_world_t* world, ecs_table_t* table, ecs_id_t id); + + /// Get table that has all components of current table minus the specified id. If the provided table doesn't have the provided id, the operation will return the provided table. + /// The world. + /// The table. + /// The id to remove. + //// CXComment_BlockCommand + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_table_t* ecs_table_remove_id(ecs_world_t* world, ecs_table_t* table, ecs_id_t id); + + /// + ///

Lock or unlock table. When a table is locked, modifications to it will throw an assert. When the table is locked recursively, it will take an equal amount of unlock operations to actually unlock the table.

+ ///

Table locks can be used to build safe iterators where it is guaranteed that the contents of a table are not modified while it is being iterated.

+ ///

The operation only works when called on the world, and has no side effects when called on a stage. The assumption is that when called on a stage, operations are deferred already.

+ ///
+ /// The world. + /// The table to lock. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_table_lock(ecs_world_t* world, ecs_table_t* table); + + /// Unlock a table. Must be called after calling ecs_table_lock. + /// The world. + /// The table to unlock. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_table_unlock(ecs_world_t* world, ecs_table_t* table); + + /// Returns whether table is a module or contains module contents Returns true for tables that have module contents. Can be used to filter out tables that do not contain application data. + /// The table. + /// true if table contains module contents, false if not. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_table_has_module(ecs_table_t* table); + + /// Swaps two elements inside the table. This is useful for implementing custom table sorting algorithms. + /// The world. + /// The table to swap elements in. + /// Table element to swap with row_2. + /// Table element to swap with row_1. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_table_swap_rows(ecs_world_t* world, ecs_table_t* table, int row_1, int row_2); + + /// + ///

Commit (move) entity to a table. This operation moves an entity from its current table to the specified table. This may cause the following actions: - Ctor for each component in the target table - Move for each overlapping component - Dtor for each component in the source table. - OnAdd triggers for non-overlapping components in the target table - OnRemove triggers for non-overlapping components in the source table.

+ ///

This operation is a faster than adding/removing components individually.

+ ///

The application must explicitly provide the difference in components between tables as the added/removed parameters. This can usually be derived directly from the result of ecs_table_add_id and esc_table_remove_id. These arrays are required to properly execute OnAdd/OnRemove triggers.

+ ///
+ /// The world. + /// The entity to commit. + /// The entity's record (optional, providing it saves a lookup). + /// The table to commit the entity to. + /// True if the entity got moved, false otherwise. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_commit(ecs_world_t* world, ecs_entity_t entity, ecs_record_t* record, ecs_table_t* table, [Const] ecs_type_t* added, [Const] ecs_type_t* removed); + + /// Find record for entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_record_t* ecs_record_find([Const] ecs_world_t* world, ecs_entity_t entity); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_record_get_column([Const] ecs_record_t* r, int column, int c_size); + + /// + ///

Search for component id in table type. This operation returns the index of first occurrance of the id in the table type. The id may be a wildcard.

+ ///

When id_out is provided, the function will assign it with the found id. The found id may be different from the provided id if it is a wildcard.

+ ///

This is a constant time operation.

+ ///
+ /// The world. + /// The table. + /// The id to search for. + /// If provided, it will be set to the found id (optional). + /// The index of the id in the table type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_search([Const] ecs_world_t* world, [Const] ecs_table_t* table, ecs_id_t id, ecs_id_t* id_out); + + /// + ///

Search for component id in table type starting from an offset. This operation is the same as ecs_search, but starts searching from an offset in the table type.

+ ///

This operation is typically called in a loop where the resulting index is used in the next iteration as offset:.

+ ///

int32_t index = -1; while ((index = ecs_search_offset(world, table, offset, id, NULL))) { // do stuff }.

+ ///

Depending on how the operation is used it is either linear or constant time. When the id has the form (id) or (rel, *) and the operation is invoked as in the above example, it is guaranteed to be constant time.

+ ///

If the provided id has the form (*, tgt) the operation takes linear time. The reason for this is that ids for an target are not packed together, as they are sorted relationship first.

+ ///

If the id at the offset does not match the provided id, the operation will do a linear search to find a matching id.

+ ///
+ /// The world. + /// The table. + /// Offset from where to start searching. + /// The id to search for. + /// If provided, it will be set to the found id (optional). + /// The index of the id in the table type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_search_offset([Const] ecs_world_t* world, [Const] ecs_table_t* table, int offset, ecs_id_t id, ecs_id_t* id_out); + + /// + ///

Search for component/relationship id in table type starting from an offset. This operation is the same as ecs_search_offset, but has the additional capability of traversing relationships to find a component. For example, if an application wants to find a component for either the provided table or a prefab (using the IsA relationship) of that table, it could use the operation like this:.

+ ///

int32_t index = ecs_search_relation( world, // the world table, // the table 0, // offset 0 ecs_id(Position), // the component id EcsIsA, // the relationship to traverse 0, // start at depth 0 (the table itself) 0, // no depth limit NULL, // (optional) entity on which component was found NULL, // see above NULL); // internal type with information about matched id.

+ ///

The operation searches depth first. If a table type has 2 IsA relationships, the operation will first search the IsA tree of the first relationship.

+ ///

When choosing betwen ecs_search, ecs_search_offset and ecs_search_relation, the simpler the function the better its performance.

+ ///
+ /// The world. + /// The table. + /// Offset from where to start searching. + /// The id to search for. + /// The relationship to traverse (optional). + /// Whether to search EcsSelf and/or EcsUp. + /// If provided, it will be set to the matched entity. + /// If provided, it will be set to the found id (optional). + /// Internal datatype. + /// The index of the id in the table type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_search_relation([Const] ecs_world_t* world, [Const] ecs_table_t* table, int offset, ecs_id_t id, ecs_entity_t rel, uint flags, ecs_entity_t* subject_out, ecs_id_t* id_out, void** tr_out); + + /// Construct a value in existing storage. + /// The world. + /// The type of the value to create. + /// Pointer to a value of type 'type'. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_init([Const] ecs_world_t* world, ecs_entity_t type, void* ptr); + + /// Construct a value in existing storage. + /// The world. + /// The type info of the type to create. + /// Pointer to a value of type 'type'. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_init_w_type_info([Const] ecs_world_t* world, [Const] ecs_type_info_t* ti, void* ptr); + + /// Construct a value in new storage. + /// The world. + /// The type of the value to create. + /// Pointer to type if success, NULL if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_value_new(ecs_world_t* world, ecs_entity_t type); + + /// Destruct a value. + /// The world. + /// Type info of the value to destruct. + /// Pointer to constructed value of type 'type'. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_fini_w_type_info([Const] ecs_world_t* world, [Const] ecs_type_info_t* ti, void* ptr); + + /// Destruct a value. + /// The world. + /// The type of the value to destruct. + /// Pointer to constructed value of type 'type'. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_fini([Const] ecs_world_t* world, ecs_entity_t type, void* ptr); + + /// Destruct a value, free storage. + /// The world. + /// The type of the value to destruct. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_free(ecs_world_t* world, ecs_entity_t type, void* ptr); + + /// Copy value. + /// The world. + /// Type info of the value to copy. + /// Pointer to the storage to copy to. + /// Pointer to the value to copy. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_copy_w_type_info([Const] ecs_world_t* world, [Const] ecs_type_info_t* ti, void* dst, [Const] void* src); + + /// Copy value. + /// The world. + /// The type of the value to copy. + /// Pointer to the storage to copy to. + /// Pointer to the value to copy. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_copy([Const] ecs_world_t* world, ecs_entity_t type, void* dst, [Const] void* src); + + /// Move value. + /// The world. + /// Type info of the value to move. + /// Pointer to the storage to move to. + /// Pointer to the value to move. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_move_w_type_info([Const] ecs_world_t* world, [Const] ecs_type_info_t* ti, void* dst, void* src); + + /// Move value. + /// The world. + /// The type of the value to move. + /// Pointer to the storage to move to. + /// Pointer to the value to move. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_move([Const] ecs_world_t* world, ecs_entity_t type, void* dst, void* src); + + /// Move construct value. + /// The world. + /// Type info of the value to move. + /// Pointer to the storage to move to. + /// Pointer to the value to move. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_move_ctor_w_type_info([Const] ecs_world_t* world, [Const] ecs_type_info_t* ti, void* dst, void* src); + + /// Move construct value. + /// The world. + /// The type of the value to move. + /// Pointer to the storage to move to. + /// Pointer to the value to move. + /// Zero if success, nonzero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_value_move_ctor([Const] ecs_world_t* world, ecs_entity_t type, void* dst, void* src); + + /// ///////////////////////////////////////////////////////////////////////////// / Tracing /////////////////////////////////////////////////////////////////////////////. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_deprecated([Const] char* file, int line, [Const] char* msg); + + /// Increase log stack. This operation increases the indent_ value of the OS API and can be useful to make nested behavior more visible. + /// The log level. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_log_push(int level); + + /// Decrease log stack. This operation decreases the indent_ value of the OS API and can be useful to make nested behavior more visible. + /// The log level. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_log_pop(int level); + + /// Should current level be logged. This operation returns true when the specified log level should be logged with the current log level. + /// The log level to check for. + /// Whether logging is enabled for the current level. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_should_log(int level); + + /// Get description for error code. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_strerror(int error_code); + + /// ///////////////////////////////////////////////////////////////////////////// / Logging functions (do nothing when logging is enabled) /////////////////////////////////////////////////////////////////////////////. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_print(int level, [Const] char* file, int line, [Const] char* fmt); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_printv(int level, [Const] char* file, int line, [Const] char* fmt, int args); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_log(int level, [Const] char* file, int line, [Const] char* fmt); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_logv(int level, [Const] char* file, int line, [Const] char* fmt, int args); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_abort(int error_code, [Const] char* file, int line, [Const] char* fmt); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool _ecs_assert(bool condition, int error_code, [Const] char* condition_str, [Const] char* file, int line, [Const] char* fmt); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_parser_error([Const] char* name, [Const] char* expr, long column, [Const] char* fmt); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void _ecs_parser_errorv([Const] char* name, [Const] char* expr, long column, [Const] char* fmt, int args); + + /// + ///

Enable or disable tracing. This will enable builtin tracing. For tracing to work, it will have to be compiled in which requires defining one of the following macros:.

+ ///

FLECS_LOG_0 - All tracing is disabled FLECS_LOG_1 - Enable tracing level 1 FLECS_LOG_2 - Enable tracing level 2 and below FLECS_LOG_3 - Enable tracing level 3 and below.

+ ///

If no tracing level is defined and this is a debug build, FLECS_LOG_3 will have been automatically defined.

+ ///

The provided level corresponds with the tracing level. If -1 is provided as value, warnings are disabled. If -2 is provided, errors are disabled as well.

+ ///
+ /// Desired tracing level. + /// Previous tracing level. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_log_set_level(int level); + + /// Enable/disable tracing with colors. By default colors are enabled. + /// Whether to enable tracing with colors. + /// Previous color setting. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_log_enable_colors(bool enabled); + + /// Enable/disable logging timestamp. By default timestamps are disabled. Note that enabling timestamps introduces overhead as the logging code will need to obtain the current time. + /// Whether to enable tracing with timestamps. + /// Previous timestamp setting. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_log_enable_timestamp(bool enabled); + + /// + ///

Enable/disable logging time since last log. By default deltatime is disabled. Note that enabling timestamps introduces overhead as the logging code will need to obtain the current time.

+ ///

When enabled, this logs the amount of time in seconds passed since the last log, when this amount is non-zero. The format is a '+' character followed by the number of seconds:.

+ ///

+1 trace: log message.

+ ///
+ /// Whether to enable tracing with timestamps. + /// Previous timestamp setting. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_log_enable_timedelta(bool enabled); + + /// Get last logged error code. Calling this operation resets the error code. + /// Last error, 0 if none was logged since last call to last_error. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_log_last_error(); + + /// + ///

Run application. This will run the application with the parameters specified in desc. After the application quits (ecs_quit is called) the world will be cleaned up.

+ ///

If a custom run action is set, it will be invoked by this operation. The default run action calls the frame action in a loop until it returns a non-zero value.

+ ///
+ /// The world. + /// Application parameters. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_app_run(ecs_world_t* world, ecs_app_desc_t* desc); + + /// Default frame callback. This operation will run a single frame. By default this operation will invoke ecs_progress directly, unless a custom frame action is set. + /// The world. + /// The desc struct passed to ecs_app_run. + /// value returned by ecs_progress. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_app_run_frame(ecs_world_t* world, [Const] ecs_app_desc_t* desc); + + /// Set custom run action. See ecs_app_run. + /// The run action. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_app_set_run_action(ecs_app_run_action_t callback); + + /// Set custom frame action. See ecs_app_run_frame. + /// The frame action. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_app_set_frame_action(ecs_app_frame_action_t callback); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsRestImport(ecs_world_t* world); + + /// + ///

Set timer timeout. This operation executes any systems associated with the timer after the specified timeout value. If the entity contains an existing timer, the timeout value will be reset. The timer can be started and stopped with ecs_start_timer and ecs_stop_timer.

+ ///

The timer is synchronous, and is incremented each frame by delta_time.

+ ///

The tick_source entity will be be a tick source after this operation. Tick sources can be read by getting the EcsTickSource component. If the tick source ticked this frame, the 'tick' member will be true. When the tick source is a system, the system will tick when the timer ticks.

+ ///
+ /// The world. + /// The timer for which to set the timeout (0 to create one). + /// The timeout value. + /// The timer entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_set_timeout(ecs_world_t* world, ecs_entity_t tick_source, float timeout); + + /// + ///

Get current timeout value for the specified timer. This operation returns the value set by ecs_set_timeout. If no timer is active for this entity, the operation returns 0.

+ ///

After the timeout expires the EcsTimer component is removed from the entity. This means that if ecs_get_timeout is invoked after the timer is expired, the operation will return 0.

+ ///

The timer is synchronous, and is incremented each frame by delta_time.

+ ///

The tick_source entity will be be a tick source after this operation. Tick sources can be read by getting the EcsTickSource component. If the tick source ticked this frame, the 'tick' member will be true. When the tick source is a system, the system will tick when the timer ticks.

+ ///
+ /// The world. + /// The timer. + /// The current timeout value, or 0 if no timer is active. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern float ecs_get_timeout([Const] ecs_world_t* world, ecs_entity_t tick_source); + + /// + ///

Set timer interval. This operation will continously invoke systems associated with the timer after the interval period expires. If the entity contains an existing timer, the interval value will be reset.

+ ///

The timer is synchronous, and is incremented each frame by delta_time.

+ ///

The tick_source entity will be be a tick source after this operation. Tick sources can be read by getting the EcsTickSource component. If the tick source ticked this frame, the 'tick' member will be true. When the tick source is a system, the system will tick when the timer ticks.

+ ///
+ /// The world. + /// The timer for which to set the interval (0 to create one). + /// The interval value. + /// The timer entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_set_interval(ecs_world_t* world, ecs_entity_t tick_source, float interval); + + /// Get current interval value for the specified timer. This operation returns the value set by ecs_set_interval. If the entity is not a timer, the operation will return 0. + /// The world. + /// The timer for which to set the interval. + /// The current interval value, or 0 if no timer is active. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern float ecs_get_interval([Const] ecs_world_t* world, ecs_entity_t tick_source); + + /// Start timer. This operation resets the timer and starts it with the specified timeout. The entity must have the EcsTimer component (added by ecs_set_timeout and ecs_set_interval). If the entity does not have the EcsTimer component this operation will assert. + /// The world. + /// The timer to start. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_start_timer(ecs_world_t* world, ecs_entity_t tick_source); + + /// Stop timer This operation stops a timer from triggering. The entity must have the EcsTimer component or this operation will assert. + /// The world. + /// The timer to stop. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_stop_timer(ecs_world_t* world, ecs_entity_t tick_source); + + /// + ///

Set rate filter. This operation initializes a rate filter. Rate filters sample tick sources and tick at a configurable multiple. A rate filter is a tick source itself, which means that rate filters can be chained.

+ ///

Rate filters enable deterministic system execution which cannot be achieved with interval timers alone. For example, if timer A has interval 2.0 and timer B has interval 4.0, it is not guaranteed that B will tick at exactly twice the multiple of A. This is partly due to the indeterministic nature of timers, and partly due to floating point rounding errors.

+ ///

Rate filters can be combined with timers (or other rate filters) to ensure that a system ticks at an exact multiple of a tick source (which can be another system). If a rate filter is created with a rate of 1 it will tick at the exact same time as its source.

+ ///

If no tick source is provided, the rate filter will use the frame tick as source, which corresponds with the number of times ecs_progress is called.

+ ///

The tick_source entity will be be a tick source after this operation. Tick sources can be read by getting the EcsTickSource component. If the tick source ticked this frame, the 'tick' member will be true. When the tick source is a system, the system will tick when the timer ticks.

+ ///
+ /// The world. + /// The rate filter entity (0 to create one). + /// The rate to apply. + /// The tick source (0 to use frames). + /// The filter entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_set_rate(ecs_world_t* world, ecs_entity_t tick_source, int rate, ecs_entity_t source); + + /// + ///

Assign tick source to system. Systems can be their own tick source, which can be any of the tick sources (one shot timers, interval times and rate filters). However, in some cases it is must be guaranteed that different systems tick on the exact same frame.

+ ///

This cannot be guaranteed by giving two systems the same interval/rate filter as it is possible that one system is (for example) disabled, which would cause the systems to go out of sync. To provide these guarantees, systems must use the same tick source, which is what this operation enables.

+ ///

When two systems share the same tick source, it is guaranteed that they tick in the same frame. The provided tick source can be any entity that is a tick source, including another system. If the provided entity is not a tick source the system will not be ran.

+ ///

To disassociate a tick source from a system, use 0 for the tick_source parameter.

+ ///
+ /// The world. + /// The system to associate with the timer. + /// The tick source to associate with the system. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_tick_source(ecs_world_t* world, ecs_entity_t system, ecs_entity_t tick_source); + + /// ///////////////////////////////////////////////////////////////////////////// / Module /////////////////////////////////////////////////////////////////////////////. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsTimerImport(ecs_world_t* world); + + /// Create a custom pipeline. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_pipeline_init(ecs_world_t* world, [Const] ecs_pipeline_desc_t* desc); + + /// Set a custom pipeline. This operation sets the pipeline to run when ecs_progress is invoked. + /// The world. + /// The pipeline to set. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_pipeline(ecs_world_t* world, ecs_entity_t pipeline); + + /// Get the current pipeline. This operation gets the current pipeline. + /// The world. + /// The current pipeline. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_get_pipeline([Const] ecs_world_t* world); + + /// + ///

Progress a world. This operation progresses the world by running all systems that are both enabled and periodic on their matching entities.

+ ///

An application can pass a delta_time into the function, which is the time passed since the last frame. This value is passed to systems so they can update entity values proportional to the elapsed time since their last invocation.

+ ///

When an application passes 0 to delta_time, ecs_progress will automatically measure the time passed since the last frame. If an application does not uses time management, it should pass a non-zero value for delta_time (1.0 is recommended). That way, no time will be wasted measuring the time.

+ ///
+ /// The world to progress. + /// The time passed since the last frame. + /// false if ecs_quit has been called, true otherwise. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_progress(ecs_world_t* world, float delta_time); + + /// Set time scale. Increase or decrease simulation speed by the provided multiplier. + /// The world. + /// The scale to apply (default = 1). + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_time_scale(ecs_world_t* world, float scale); + + /// Reset world clock. Reset the clock that keeps track of the total time passed in the simulation. + /// The world. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_reset_clock(ecs_world_t* world); + + /// + ///

Run pipeline. This will run all systems in the provided pipeline. This operation may be invoked from multiple threads, and only when staging is disabled, as the pipeline manages staging and, if necessary, synchronization between threads.

+ ///

If 0 is provided for the pipeline id, the default pipeline will be ran (this is either the builtin pipeline or the pipeline set with set_pipeline()).

+ ///

When using progress() this operation will be invoked automatically for the default pipeline (either the builtin pipeline or the pipeline set with set_pipeline()). An application may run additional pipelines.

+ ///

Note: calling this function from an application currently only works in single threaded applications with a single stage.

+ ///
+ /// The world. + /// The pipeline to run. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_run_pipeline(ecs_world_t* world, ecs_entity_t pipeline, float delta_time); + + /// Set number of worker threads. Setting this value to a value higher than 1 will start as many threads and will cause systems to evenly distribute matched entities across threads. The operation may be called multiple times to reconfigure the number of threads used, but never while running a system / pipeline. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_threads(ecs_world_t* world, int threads); + + /// ///////////////////////////////////////////////////////////////////////////// / Module /////////////////////////////////////////////////////////////////////////////. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsPipelineImport(ecs_world_t* world); + + /// Create a system. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_system_init(ecs_world_t* world, [Const] ecs_system_desc_t* desc); + + /// + ///

Run a specific system manually. This operation runs a single system manually. It is an efficient way to invoke logic on a set of entities, as manual systems are only matched to tables at creation time or after creation time, when a new table is created.

+ ///

Manual systems are useful to evaluate lists of prematched entities at application defined times. Because none of the matching logic is evaluated before the system is invoked, manual systems are much more efficient than manually obtaining a list of entities and retrieving their components.

+ ///

An application may pass custom data to a system through the param parameter. This data can be accessed by the system through the param member in the ecs_iter_t value that is passed to the system callback.

+ ///

Any system may interrupt execution by setting the interrupted_by member in the ecs_iter_t value. This is particularly useful for manual systems, where the value of interrupted_by is returned by this operation. This, in cominbation with the param argument lets applications use manual systems to lookup entities: once the entity has been found its handle is passed to interrupted_by, which is then subsequently returned.

+ ///
+ /// The world. + /// The system to run. + /// The time passed since the last system invocation. + /// A user-defined parameter to pass to the system. + /// handle to last evaluated entity if system was interrupted. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_run(ecs_world_t* world, ecs_entity_t system, float delta_time, void* param); + + /// Same as ecs_run, but subdivides entities across number of provided stages. + /// The world. + /// The system to run. + /// The id of the current stage. + /// The total number of stages. + /// The time passed since the last system invocation. + /// A user-defined parameter to pass to the system. + /// handle to last evaluated entity if system was interrupted. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_run_worker(ecs_world_t* world, ecs_entity_t system, int stage_current, int stage_count, float delta_time, void* param); + + /// + ///

Run system with offset/limit and type filter. This operation is the same as ecs_run, but filters the entities that will be iterated by the system.

+ ///

Entities can be filtered in two ways. Offset and limit control the range of entities that is iterated over. The range is applied to all entities matched with the system, thus may cover multiple archetypes.

+ ///

The type filter controls which entity types the system will evaluate. Only types that contain all components in the type filter will be iterated over. A type filter is only evaluated once per table, which makes filtering cheap if the number of entities is large and the number of tables is small, but not as cheap as filtering in the system signature.

+ ///
+ /// The world. + /// The system to invoke. + /// The time passed since the last system invocation. + /// A user-defined parameter to pass to the system. + /// handle to last evaluated entity if system was interrupted. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_run_w_filter(ecs_world_t* world, ecs_entity_t system, float delta_time, int offset, int limit, void* param); + + /// Get the query object for a system. Systems use queries under the hood. This enables an application to get access to the underlying query object of a system. This can be useful when, for example, an application needs to enable sorting for a system. + /// The world. + /// The system from which to obtain the query. + /// The query. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_query_t* ecs_system_get_query([Const] ecs_world_t* world, ecs_entity_t system); + + /// Get system context. This operation returns the context pointer set for the system. If the provided entity is not a system, the function will return NULL. + /// The world. + /// The system from which to obtain the context. + /// The context. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_get_system_ctx([Const] ecs_world_t* world, ecs_entity_t system); + + /// Get system binding context. The binding context is a context typically used to attach any language binding specific data that is needed when invoking a callback that is implemented in another language. + /// The world. + /// The system from which to obtain the context. + /// The context. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_get_system_binding_ctx([Const] ecs_world_t* world, ecs_entity_t system); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsSystemImport(ecs_world_t* world); + + /// Get world statistics. + /// The world. + /// Out parameter for statistics. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_world_stats_get([Const] ecs_world_t* world, ecs_world_stats_t* stats); + + /// Reduce source measurement window into single destination measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_world_stats_reduce(ecs_world_stats_t* dst, [Const] ecs_world_stats_t* src); + + /// Reduce last measurement into previous measurement, restore old value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_world_stats_reduce_last(ecs_world_stats_t* stats, [Const] ecs_world_stats_t* old, int count); + + /// Repeat last measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_world_stats_repeat_last(ecs_world_stats_t* stats); + + /// Copy last measurement from source to destination. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_world_stats_copy_last(ecs_world_stats_t* dst, [Const] ecs_world_stats_t* src); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_world_stats_log([Const] ecs_world_t* world, [Const] ecs_world_stats_t* stats); + + /// Get query statistics. Obtain statistics for the provided query. + /// The world. + /// The query. + /// Out parameter for statistics. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_stats_get([Const] ecs_world_t* world, [Const] ecs_query_t* query, ecs_query_stats_t* stats); + + /// Reduce source measurement window into single destination measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_stats_reduce(ecs_query_stats_t* dst, [Const] ecs_query_stats_t* src); + + /// Reduce last measurement into previous measurement, restore old value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_stats_reduce_last(ecs_query_stats_t* stats, [Const] ecs_query_stats_t* old, int count); + + /// Repeat last measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_stats_repeat_last(ecs_query_stats_t* stats); + + /// Copy last measurement from source to destination. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_query_stats_copy_last(ecs_query_stats_t* dst, [Const] ecs_query_stats_t* src); + + /// Get system statistics. Obtain statistics for the provided system. + /// The world. + /// The system. + /// Out parameter for statistics. + /// true if success, false if not a system. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_system_stats_get([Const] ecs_world_t* world, ecs_entity_t system, ecs_system_stats_t* stats); + + /// Reduce source measurement window into single destination measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_system_stats_reduce(ecs_system_stats_t* dst, [Const] ecs_system_stats_t* src); + + /// Reduce last measurement into previous measurement, restore old value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_system_stats_reduce_last(ecs_system_stats_t* stats, [Const] ecs_system_stats_t* old, int count); + + /// Repeat last measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_system_stats_repeat_last(ecs_system_stats_t* stats); + + /// Copy last measurement from source to destination. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_system_stats_copy_last(ecs_system_stats_t* dst, [Const] ecs_system_stats_t* src); + + /// Get pipeline statistics. Obtain statistics for the provided pipeline. + /// The world. + /// The pipeline. + /// Out parameter for statistics. + /// true if success, false if not a pipeline. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_pipeline_stats_get(ecs_world_t* world, ecs_entity_t pipeline, ecs_pipeline_stats_t* stats); + + /// Free pipeline stats. + /// The stats to free. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_pipeline_stats_fini(ecs_pipeline_stats_t* stats); + + /// Reduce source measurement window into single destination measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_pipeline_stats_reduce(ecs_pipeline_stats_t* dst, [Const] ecs_pipeline_stats_t* src); + + /// Reduce last measurement into previous measurement, restore old value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_pipeline_stats_reduce_last(ecs_pipeline_stats_t* stats, [Const] ecs_pipeline_stats_t* old, int count); + + /// Repeat last measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_pipeline_stats_repeat_last(ecs_pipeline_stats_t* stats); + + /// Copy last measurement to destination. This operation copies the last measurement into the destination. It does not modify the cursor. + /// The metrics. + /// The metrics to copy. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_pipeline_stats_copy_last(ecs_pipeline_stats_t* dst, [Const] ecs_pipeline_stats_t* src); + + /// Reduce all measurements from a window into a single measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_metric_reduce(ecs_metric_t* dst, [Const] ecs_metric_t* src, int t_dst, int t_src); + + /// Reduce last measurement into previous measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_metric_reduce_last(ecs_metric_t* m, int t, int count); + + /// Copy measurement. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_metric_copy(ecs_metric_t* m, int dst, int src); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsMonitorImport(ecs_world_t* world); + + //// CXComment_VerbatimLine + //// CXComment_BlockCommand + //// CXComment_VerbatimLine + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsCoreDocImport(ecs_world_t* world); + + /// Add human-readable name to entity. Contrary to entity names, human readable names do not have to be unique and can contain special characters used in the query language like '*'. + /// The world. + /// The entity to which to add the name. + /// The name to add. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_doc_set_name(ecs_world_t* world, ecs_entity_t entity, [Const] char* name); + + /// Add brief description to entity. + /// The world. + /// The entity to which to add the description. + /// The description to add. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_doc_set_brief(ecs_world_t* world, ecs_entity_t entity, [Const] char* description); + + /// Add detailed description to entity. + /// The world. + /// The entity to which to add the description. + /// The description to add. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_doc_set_detail(ecs_world_t* world, ecs_entity_t entity, [Const] char* description); + + /// Add link to external documentation to entity. + /// The world. + /// The entity to which to add the link. + /// The link to add. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_doc_set_link(ecs_world_t* world, ecs_entity_t entity, [Const] char* link); + + /// Add color to entity. UIs can use color as hint to improve visualizing entities. + /// The world. + /// The entity to which to add the link. + /// The color to add. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_doc_set_color(ecs_world_t* world, ecs_entity_t entity, [Const] char* color); + + /// + ///

Get human readable name from entity. If entity does not have an explicit human readable name, this operation will return the entity name.

+ ///

To test if an entity has a human readable name, use: ecs_has_pair(world, e, ecs_id(EcsDescription), EcsName); Or in C++: e.has <flecs ::Description>(flecs::Name);.

+ ///
+ /// The world. + /// The entity from which to get the name. + /// The name. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_doc_get_name([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Get brief description from entity. + /// The world. + /// The entity from which to get the description. + /// The description. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_doc_get_brief([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Get detailed description from entity. + /// The world. + /// The entity from which to get the description. + /// The description. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_doc_get_detail([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Get link to external documentation from entity. + /// The world. + /// The entity from which to get the link. + /// The link. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_doc_get_link([Const] ecs_world_t* world, ecs_entity_t entity); + + /// Get color from entity. + /// The world. + /// The entity from which to get the link. + /// The color. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_doc_get_color([Const] ecs_world_t* world, ecs_entity_t entity); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsDocImport(ecs_world_t* world); + + /// Parse JSON string into value. This operation parses a JSON expression into the provided pointer. The memory pointed to must be large enough to contain a value of the used type. + /// The world. + /// The pointer to the expression to parse. + /// The type of the expression to parse. + /// Pointer to the memory to write to. + /// Configuration parameters for deserializer. + /// Pointer to the character after the last one read, or NULL if failed. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_json([Const] ecs_world_t* world, [Const] char* ptr, ecs_entity_t type, void* data_out, [Const] ecs_parse_json_desc_t* desc); + + /// Parse JSON object with multiple component values into entity. The format is the same as the one outputted by ecs_entity_to_json, but at the moment only supports the "ids" and "values" member. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_json_values(ecs_world_t* world, ecs_entity_t e, [Const] char* ptr, [Const] ecs_parse_json_desc_t* desc); + + /// + ///

Serialize value into JSON string. This operation serializes a value of the provided type to a JSON string. The memory pointed to must be large enough to contain a value of the used type.

+ ///

If count is 0, the function will serialize a single value, not wrapped in array brackets. If count is >= 1, the operation will serialize values to a a comma-separated list inside of array brackets.

+ ///
+ /// The world. + /// The type of the value to serialize. + /// The value to serialize. + /// The number of elements to serialize. + /// String with JSON expression, or NULL if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_array_to_json([Const] ecs_world_t* world, ecs_entity_t type, [Const] void* data, int count); + + /// Serialize value into JSON string buffer. Same as ecs_array_to_json_buf, but serializes to an ecs_strbuf_t instance. + /// The world. + /// The type of the value to serialize. + /// The value to serialize. + /// The number of elements to serialize. + /// The strbuf to append the string to. + /// Zero if success, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_array_to_json_buf([Const] ecs_world_t* world, ecs_entity_t type, [Const] void* data, int count, ecs_strbuf_t* buf_out); + + /// Serialize value into JSON string. Same as ecs_array_to_json, with count = 0. + /// The world. + /// The type of the value to serialize. + /// The value to serialize. + /// String with JSON expression, or NULL if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_ptr_to_json([Const] ecs_world_t* world, ecs_entity_t type, [Const] void* data); + + /// Serialize value into JSON string buffer. Same as ecs_ptr_to_json, but serializes to an ecs_strbuf_t instance. + /// The world. + /// The type of the value to serialize. + /// The value to serialize. + /// The strbuf to append the string to. + /// Zero if success, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_ptr_to_json_buf([Const] ecs_world_t* world, ecs_entity_t type, [Const] void* data, ecs_strbuf_t* buf_out); + + /// + ///

Serialize type info to JSON. This serializes type information to JSON, and can be used to store/transmit the structure of a (component) value.

+ ///

If the provided type does not have reflection data, "0" will be returned.

+ ///
+ /// The world. + /// The type to serialize to JSON. + /// A JSON string with the serialized type info, or NULL if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_type_info_to_json([Const] ecs_world_t* world, ecs_entity_t type); + + /// Serialize type info into JSON string buffer. Same as ecs_type_info_to_json, but serializes to an ecs_strbuf_t instance. + /// The world. + /// The type to serialize. + /// The strbuf to append the string to. + /// Zero if success, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_type_info_to_json_buf([Const] ecs_world_t* world, ecs_entity_t type, ecs_strbuf_t* buf_out); + + /// + ///

Serialize entity into JSON string. This creates a JSON object with the entity's (path) name, which components and tags the entity has, and the component values.

+ ///

The operation may fail if the entity contains components with invalid values.

+ ///
+ /// The world. + /// The entity to serialize to JSON. + /// A JSON string with the serialized entity data, or NULL if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_entity_to_json([Const] ecs_world_t* world, ecs_entity_t entity, [Const] ecs_entity_to_json_desc_t* desc); + + /// Serialize entity into JSON string buffer. Same as ecs_entity_to_json, but serializes to an ecs_strbuf_t instance. + /// The world. + /// The entity to serialize. + /// The strbuf to append the string to. + /// Zero if success, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_entity_to_json_buf([Const] ecs_world_t* world, ecs_entity_t entity, ecs_strbuf_t* buf_out, [Const] ecs_entity_to_json_desc_t* desc); + + /// Serialize iterator into JSON string. This operation will iterate the contents of the iterator and serialize them to JSON. The function acccepts iterators from any source. + /// The world. + /// The iterator to serialize to JSON. + /// A JSON string with the serialized iterator data, or NULL if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_iter_to_json([Const] ecs_world_t* world, ecs_iter_t* iter, [Const] ecs_iter_to_json_desc_t* desc); + + /// Serialize iterator into JSON string buffer. Same as ecs_iter_to_json, but serializes to an ecs_strbuf_t instance. + /// The world. + /// The iterator to serialize. + /// The strbuf to append the string to. + /// Zero if success, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_iter_to_json_buf([Const] ecs_world_t* world, ecs_iter_t* iter, ecs_strbuf_t* buf_out, [Const] ecs_iter_to_json_desc_t* desc); + + /// ///////////////////////////////////////////////////////////////////////////// / Module /////////////////////////////////////////////////////////////////////////////. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsUnitsImport(ecs_world_t* world); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_meta_cursor_t ecs_meta_cursor([Const] ecs_world_t* world, ecs_entity_t type, void* ptr); + + /// Get pointer to current field. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void* ecs_meta_get_ptr(ecs_meta_cursor_t* cursor); + + /// Move cursor to next field. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_next(ecs_meta_cursor_t* cursor); + + /// Move cursor to a element. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_elem(ecs_meta_cursor_t* cursor, int elem); + + /// Move cursor to member. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_member(ecs_meta_cursor_t* cursor, [Const] char* name); + + /// Move cursor to member, supports dot-separated nested members. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_dotmember(ecs_meta_cursor_t* cursor, [Const] char* name); + + /// Push a scope (required/only valid for structs & collections). + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_push(ecs_meta_cursor_t* cursor); + + /// Pop a struct or collection scope (must follow a push). + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_pop(ecs_meta_cursor_t* cursor); + + /// Is the current scope a collection?. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_meta_is_collection([Const] ecs_meta_cursor_t* cursor); + + /// Get type of current element. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_meta_get_type([Const] ecs_meta_cursor_t* cursor); + + /// Get unit of current element. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_meta_get_unit([Const] ecs_meta_cursor_t* cursor); + + /// Get member name of current member. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_meta_get_member([Const] ecs_meta_cursor_t* cursor); + + /// Set field with boolean value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_bool(ecs_meta_cursor_t* cursor, bool value); + + /// Set field with char value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_char(ecs_meta_cursor_t* cursor, char value); + + /// Set field with int value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_int(ecs_meta_cursor_t* cursor, long value); + + /// Set field with uint value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_uint(ecs_meta_cursor_t* cursor, ulong value); + + /// Set field with float value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_float(ecs_meta_cursor_t* cursor, double value); + + /// Set field with string value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_string(ecs_meta_cursor_t* cursor, [Const] char* value); + + /// Set field with string literal value (has enclosing ""). + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_string_literal(ecs_meta_cursor_t* cursor, [Const] char* value); + + /// Set field with entity value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_entity(ecs_meta_cursor_t* cursor, ecs_entity_t value); + + /// Set field with null value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_null(ecs_meta_cursor_t* cursor); + + /// Set field with dynamic value. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_set_value(ecs_meta_cursor_t* cursor, [Const] ecs_value_t* value); + + /// Get field value as boolean. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_meta_get_bool([Const] ecs_meta_cursor_t* cursor); + + /// Get field value as char. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char ecs_meta_get_char([Const] ecs_meta_cursor_t* cursor); + + /// Get field value as signed integer. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern long ecs_meta_get_int([Const] ecs_meta_cursor_t* cursor); + + /// Get field value as unsigned integer. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ulong ecs_meta_get_uint([Const] ecs_meta_cursor_t* cursor); + + /// Get field value as float. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern double ecs_meta_get_float([Const] ecs_meta_cursor_t* cursor); + + /// Get field value as string. This operation does not perform conversions. If the field is not a string, this operation will fail. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_meta_get_string([Const] ecs_meta_cursor_t* cursor); + + /// Get field value as entity. This operation does not perform conversions. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_meta_get_entity([Const] ecs_meta_cursor_t* cursor); + + /// Create a new primitive type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_primitive_init(ecs_world_t* world, [Const] ecs_primitive_desc_t* desc); + + /// Create a new enum type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_enum_init(ecs_world_t* world, [Const] ecs_enum_desc_t* desc); + + /// Create a new bitmask type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_bitmask_init(ecs_world_t* world, [Const] ecs_bitmask_desc_t* desc); + + /// Create a new array type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_array_init(ecs_world_t* world, [Const] ecs_array_desc_t* desc); + + /// Create a new vector type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_vector_init(ecs_world_t* world, [Const] ecs_vector_desc_t* desc); + + /// Create a new struct type. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_struct_init(ecs_world_t* world, [Const] ecs_struct_desc_t* desc); + + /// Create a new unit. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_unit_init(ecs_world_t* world, [Const] ecs_unit_desc_t* desc); + + /// Create a new unit prefix. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_unit_prefix_init(ecs_world_t* world, [Const] ecs_unit_prefix_desc_t* desc); + + /// Create a new quantity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_quantity_init(ecs_world_t* world, [Const] ecs_entity_desc_t* desc); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void FlecsMetaImport(ecs_world_t* world); + + /// Write an escaped character. Write a character to an output string, insert escape character if necessary. + /// The string to write the character to. + /// The input character. + /// The delimiiter used (for example '"'). + /// Pointer to the character after the last one written. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_chresc(char* @out, char @in, char delimiter); + + /// Parse an escaped character. Parse a character with a potential escape sequence. + /// Pointer to character in input string. + /// Output string. + /// Pointer to the character after the last one read. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_chrparse([Const] char* @in, char* @out); + + /// Write an escaped string. Write an input string to an output string, escape characters where necessary. To determine the size of the output string, call the operation with a NULL argument for 'out', and use the returned size to allocate a string that is large enough. + /// Pointer to output string (msut be). + /// Maximum number of characters written to output. + /// The delimiter used (for example '"'). + /// The input string. + /// The number of characters that (would) have been written. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_stresc(char* @out, int size, char delimiter, [Const] char* @in); + + /// Return escaped string. Return escaped version of input string. Same as ecs_stresc, but returns an allocated string of the right size. + /// The delimiter used (for example '"'). + /// The input string. + /// Escaped string. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_astresc(char delimiter, [Const] char* @in); + + /// Init variable storage. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vars_init(ecs_world_t* world, ecs_vars_t* vars); + + /// Cleanup variable storage. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vars_fini(ecs_vars_t* vars); + + /// Push variable scope. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_vars_push(ecs_vars_t* vars); + + /// Pop variable scope. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_vars_pop(ecs_vars_t* vars); + + /// Declare variable in current scope. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_expr_var_t* ecs_vars_declare(ecs_vars_t* vars, [Const] char* name, ecs_entity_t type); + + /// Declare variable in current scope from value. This operation takes ownership of the value. The value pointer must be allocated with ecs_value_new. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_expr_var_t* ecs_vars_declare_w_value(ecs_vars_t* vars, [Const] char* name, ecs_value_t* value); + + /// Lookup variable in scope and parent scopes. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_expr_var_t* ecs_vars_lookup(ecs_vars_t* vars, [Const] char* name); + + /// + ///

Parse expression into value. This operation parses a flecs expression into the provided pointer. The memory pointed to must be large enough to contain a value of the used type.

+ ///

If no type and pointer are provided for the value argument, the operation will discover the type from the expression and allocate storage for the value. The allocated value must be freed with ecs_value_free.

+ ///
+ /// The world. + /// The pointer to the expression to parse. + /// The value containing type & pointer to write to. + /// Configuration parameters for deserializer. + /// Pointer to the character after the last one read, or NULL if failed. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_expr(ecs_world_t* world, [Const] char* ptr, ecs_value_t* value, [Const] ecs_parse_expr_desc_t* desc); + + /// Serialize value into expression string. This operation serializes a value of the provided type to a string. The memory pointed to must be large enough to contain a value of the used type. + /// The world. + /// The type of the value to serialize. + /// The value to serialize. + /// String with expression, or NULL if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_ptr_to_expr([Const] ecs_world_t* world, ecs_entity_t type, [Const] void* data); + + /// Serialize value into string buffer. Same as ecs_ptr_to_expr, but serializes to an ecs_strbuf_t instance. + /// The world. + /// The type of the value to serialize. + /// The value to serialize. + /// The strbuf to append the string to. + /// Zero if success, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_ptr_to_expr_buf([Const] ecs_world_t* world, ecs_entity_t type, [Const] void* data, ecs_strbuf_t* buf); + + /// Serialize primitive value into string buffer. Serializes a primitive value to an ecs_strbuf_t instance. This operation can be reused by other serializers to avoid having to write boilerplate code that serializes primitive values to a string. + /// The world. + /// The kind of primitive value. + /// The value ot serialize. + /// The strbuf to append the string to. + /// Zero if success, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_primitive_to_expr_buf([Const] ecs_world_t* world, ecs_primitive_kind_t kind, [Const] void* data, ecs_strbuf_t* buf); + + /// Parse expression token. Expression tokens can contain more characters (such as '|') than tokens parsed by the query (term) parser. + /// The name of the expression (used for debug logs). + /// The full expression (used for debug logs). + /// The pointer to the expression to parse. + /// The buffer to write to (must have size ECS_MAX_TOKEN_SIZE). + /// Pointer to the character after the last one read, or NULL if failed. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_expr_token([Const] char* name, [Const] char* expr, [Const] char* ptr, char* token); + + /// Populate meta information from type descriptor. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_meta_from_desc(ecs_world_t* world, ecs_entity_t component, ecs_type_kind_t kind, [Const] char* desc); + + /// Parse plecs string. This parses a plecs string and instantiates the entities in the world. + /// The world. + /// The script name (typically the file). + /// The plecs string. + /// Zero if success, non-zero otherwise. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_plecs_from_str(ecs_world_t* world, [Const] char* name, [Const] char* str); + + /// Parse plecs file. This parses a plecs file and instantiates the entities in the world. This operation is equivalent to loading the file contents and passing it to ecs_plecs_from_str. + /// The world. + /// The plecs file name. + /// Zero if success, non-zero otherwise. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_plecs_from_file(ecs_world_t* world, [Const] char* filename); + + /// + ///

Create a rule. A rule accepts the same descriptor as a filter, but has the additional ability to use query variables.

+ ///

Query variables can be used to constrain wildcards across multiple terms to the same entity. Regular ECS queries do this in a limited form, as querying for Position, Velocity only returns entities that have both components.

+ ///

Query variables expand this to constrain entities that are resolved while the query is being matched. Consider a query for all entities and the mission they are on: (Mission, *).

+ ///

If an entity is on multiple missions, the wildcard will match it multiple times. Now say we want to only list combat missions. Naively we could try: (Mission, *), CombatMission(*).

+ ///

But this doesn't work, as term 1 returns entities with missions, and term 2 returns all combat missions for all entities. Query variables make it possible to apply CombatMission to the found mission: (Mission, $M), CombatMission($M).

+ ///

By using the same variable ('M') we ensure that CombatMission is applied to the mission found in the current result.

+ ///

Variables can be used in each part of the term (predicate, subject, object). This is a valid query: Likes($X, $Y), Likes($Y, $X).

+ ///

This is also a valid query: _Component, Serializable(_Component).

+ ///

In the query expression syntax, variables are prefixed with a $. When using the descriptor, specify the variable kind: desc.terms[0].second = { .name = "X", .var = EcsVarIsVariable }.

+ ///

Different terms with the same variable name are automatically correlated by the query engine.

+ ///

A rule needs to be explicitly deleted with ecs_rule_fini.

+ ///
+ /// The world. + /// The descriptor (see ecs_filter_desc_t). + /// The rule. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_rule_t* ecs_rule_init(ecs_world_t* world, [Const] ecs_filter_desc_t* desc); + + /// Delete a rule. + /// The rule. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_rule_fini(ecs_rule_t* rule); + + /// Obtain filter from rule. This operation returns the filter with which the rule was created. + /// The rule. + /// The filter. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_filter_t* ecs_rule_get_filter([Const] ecs_rule_t* rule); + + /// Return number of variables in rule. + /// The rule. + /// The number of variables/. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_rule_var_count([Const] ecs_rule_t* rule); + + /// Find variable index. This operation looks up the index of a variable in the rule. This index can be used in operations like ecs_iter_set_var and ecs_iter_get_var. + /// The rule. + /// The variable name. + /// The variable index. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_rule_find_var([Const] ecs_rule_t* rule, [Const] char* name); + + /// Get variable name. This operation returns the variable name for an index. + /// The rule. + /// The variable index. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_rule_var_name([Const] ecs_rule_t* rule, int var_id); + + /// Test if variable is an entity. Internally the rule engine has entity variables and table variables. When iterating through rule variables (by using ecs_rule_variable_count) only the values for entity variables are accessible. This operation enables an appliction to check if a variable is an entity variable. + /// The rule. + /// The variable id. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_rule_var_is_entity([Const] ecs_rule_t* rule, int var_id); + + /// Iterate a rule. Note that rule iterators may allocate memory, and that unless the iterator is iterated until completion, it may still hold resources. When stopping iteration before ecs_rule_next has returned false, use ecs_iter_fini to cleanup any remaining resources. + /// The world. + /// The rule. + /// An iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_rule_iter([Const] ecs_world_t* world, [Const] ecs_rule_t* rule); + + /// Progress rule iterator. + /// The iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_rule_next(ecs_iter_t* it); + + /// Progress instanced iterator. Should not be called unless you know what you're doing :-). + /// The iterator. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_rule_next_instanced(ecs_iter_t* it); + + /// + ///

Convert rule to a string. This will convert the rule program to a string which can aid in debugging the behavior of a rule.

+ ///

The returned string must be freed with ecs_os_free.

+ ///
+ /// The rule. + /// The string. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_rule_str(ecs_rule_t* rule); + + /// Create a snapshot. This operation makes a copy of the current state of the world. + /// The world to snapshot. + /// The snapshot. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_snapshot_t* ecs_snapshot_take(ecs_world_t* world); + + /// Create a filtered snapshot. This operation is the same as ecs_snapshot_take, but accepts an iterator so an application can control what is stored by the snapshot. + /// An iterator to the data to be stored by the snapshot. + /// The snapshot. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_snapshot_t* ecs_snapshot_take_w_iter(ecs_iter_t* iter); + + /// + ///

Restore a snapshot. This operation restores the world to the state it was in when the specified snapshot was taken. A snapshot can only be used once for restoring, as its data replaces the data that is currently in the world. This operation also resets the last issued entity handle, so any calls to ecs_new may return entity ids that have been issued before restoring the snapshot.

+ ///

The world in which the snapshot is restored must be the same as the world in which the snapshot is taken.

+ ///
+ /// The world to restore the snapshot to. + /// The snapshot to restore. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_snapshot_restore(ecs_world_t* world, ecs_snapshot_t* snapshot); + + /// Obtain iterator to snapshot data. + /// The snapshot to iterate over. + /// Iterator to snapshot data. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_iter_t ecs_snapshot_iter(ecs_snapshot_t* snapshot); + + /// Progress snapshot iterator. + /// The snapshot iterator. + /// True if more data is available, otherwise false. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern bool ecs_snapshot_next(ecs_iter_t* iter); + + /// Free snapshot resources. This frees resources associated with a snapshot without restoring it. + /// The snapshot to free. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_snapshot_free(ecs_snapshot_t* snapshot); + + /// Skip whitespace characters. This function skips whitespace characters. Does not skip newlines. + /// Pointer to (potential) whitespaces to skip. + /// Pointer to the next non-whitespace character. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_whitespace([Const] char* ptr); + + /// Skip whitespace and newline characters. This function skips whitespace characters. + /// Pointer to (potential) whitespaces to skip. + /// Pointer to the next non-whitespace character. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_eol_and_whitespace([Const] char* ptr); + + /// Parse digit. This function will parse until the first non-digit character is found. The provided expression must contain at least one digit character. + /// The expression to parse. + /// The output buffer. + /// Pointer to the first non-digit character. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_digit([Const] char* ptr, char* token); + + /// Skip whitespaces and comments. This function skips whitespace characters and comments (single line, //). + /// pointer to (potential) whitespaces/comments to skip. + /// pointer to the next non-whitespace character. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_fluff([Const] char* ptr, char** last_comment); + + /// Parse a single token. This function can be used as simple tokenizer by other parsers. + /// of program (used for logging). + /// pointer to token to parse. + /// pointer to first character to parse. + /// Parsed token (buffer should be ECS_MAX_TOKEN_SIZE large). + /// Pointer to the next token, or NULL if error occurred. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_token([Const] char* name, [Const] char* expr, [Const] char* ptr, char* token_out, char delim); + + /// + ///

Parse term in expression. This operation parses a single term in an expression and returns a pointer to the next term expression.

+ ///

If the returned pointer points to the 0-terminator, the expression is fully parsed. The function would typically be called in a while loop:.

+ ///

const char *ptr = expr; while (ptr[0] & & (ptr = ecs_parse_term(world, name, expr, ptr, &term ))) { }.

+ ///

The operation does not attempt to find entity ids from the names in the expression. Use the ecs_term_resolve_ids function to resolve the identifiers in the parsed term.

+ ///

The returned term will in most cases contain allocated resources, which should freed (or used) by the application. To free the resources for a term, use the ecs_term_free function.

+ ///

The parser accepts expressions in the legacy string format.

+ ///
+ /// The world. + /// The name of the expression (optional, improves error logs). + /// The expression to parse (optional, improves error logs). + /// The pointer to the current term (must be in expr). + /// Out parameter for the term. + /// pointer to next term if successful, NULL if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_parse_term([Const] ecs_world_t* world, [Const] char* name, [Const] char* expr, [Const] char* ptr, ecs_term_t* term_out); + + /// Create server. Use ecs_http_server_start to start receiving requests. + /// Server configuration parameters. + /// The new server, or NULL if creation failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_http_server_t* ecs_http_server_init([Const] ecs_http_server_desc_t* desc); + + /// Destroy server. This operation will stop the server if it was still running. + /// The server to destroy. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_http_server_fini(ecs_http_server_t* server); + + /// Start server. After this operation the server will be able to accept requests. + /// The server to start. + /// Zero if successful, non-zero if failed. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_http_server_start(ecs_http_server_t* server); + + /// Process server requests. This operation invokes the reply callback for each received request. No new requests will be enqueued while processing requests. + /// The server for which to process requests. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_http_server_dequeue(ecs_http_server_t* server, float delta_time); + + /// Stop server. After this operation no new requests can be received. + /// The server. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_http_server_stop(ecs_http_server_t* server); + + /// Find header in request. + /// The request. + /// name of the header to find. + /// The header value, or NULL if not found. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_http_get_header([Const] ecs_http_request_t* req, [Const] char* name); + + /// Find query parameter in request. + /// The request. + /// The parameter name. + /// The decoded parameter value, or NULL if not found. + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_http_get_param([Const] ecs_http_request_t* req, [Const] char* name); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_set_os_api_impl(); + + /// + ///

Import a module. This operation will load a modules and store the public module handles in the handles_out out parameter. The module name will be used to verify if the module was already loaded, in which case it won't be reimported. The name will be translated from PascalCase to an entity path (pascal.case) before the lookup occurs.

+ ///

Module contents will be stored as children of the module entity. This prevents modules from accidentally defining conflicting identifiers. This is enforced by setting the scope before and after loading the module to the module entity id.

+ ///

A more convenient way to import a module is by using the ECS_IMPORT macro.

+ ///
+ /// The world. + /// The module import function. + /// The name of the module. + /// The module entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_import(ecs_world_t* world, ecs_module_action_t module, [Const] char* module_name); + + /// Same as ecs_import, but with name to scope conversion. PascalCase names are automatically converted to scoped names. + /// The world. + /// The module import function. + /// The name of the module. + /// The module entity. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_import_c(ecs_world_t* world, ecs_module_action_t module, [Const] char* module_name_c); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_import_from_library(ecs_world_t* world, [Const] char* library_name, [Const] char* module_name); + + /// Register a new module. + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_module_init(ecs_world_t* world, [Const] char* c_name, [Const] ecs_component_desc_t* desc); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_cpp_get_type_name(char* type_name, [Const] char* func_name, int len); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_cpp_get_symbol_name(char* symbol_name, [Const] char* type_name, int len); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_cpp_get_constant_name(char* constant_name, [Const] char* func_name, int len); + + [return: Const] + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern char* ecs_cpp_trim_module(ecs_world_t* world, [Const] char* type_name); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_cpp_component_validate(ecs_world_t* world, ecs_entity_t id, [Const] char* name, [Const] char* symbol, int size, int alignment, bool implicit_name); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_cpp_component_register(ecs_world_t* world, ecs_entity_t id, [Const] char* name, [Const] char* symbol, int size, int alignment, bool implicit_name, bool* existing_out); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_cpp_component_register_explicit(ecs_world_t* world, ecs_entity_t s_id, ecs_entity_t id, [Const] char* name, [Const] char* type_name, [Const] char* symbol, int size, int alignment, bool is_component, bool* existing_out); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern void ecs_cpp_enum_init(ecs_world_t* world, ecs_entity_t id); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern ecs_entity_t ecs_cpp_enum_constant_register(ecs_world_t* world, ecs_entity_t parent, ecs_entity_t id, [Const] char* name, int value); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_cpp_reset_count_get(); + + [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] + public static extern int ecs_cpp_reset_count_inc(); +} diff --git a/src/gaemstone.ECS/flecs/flecs+Structs.g.cs b/src/gaemstone.ECS/flecs/flecs+Structs.g.cs new file mode 100644 index 0000000..3ba3443 --- /dev/null +++ b/src/gaemstone.ECS/flecs/flecs+Structs.g.cs @@ -0,0 +1,1754 @@ +// +// Generated by gaemstone.ECS.BindGen c661367 +// Time: 2023-01-09 18:48:29Z +// Flecs version: v3.1.3 +// + +using System.Runtime.InteropServices; + +#pragma warning disable CS8981 +public static unsafe partial class flecs +{ + public struct ecs_vector_t { } + + public struct ecs_sparse_t + { + public ecs_vector_t* dense; + public ecs_vector_t* chunks; + public int size; + public int count; + public ulong max_id_local; + public ulong* max_id; + public void* allocator; + public void* chunk_allocator; + } + + public struct ecs_block_allocator_block_t + { + public void* memory; + public void* next; + } + + public struct ecs_block_allocator_chunk_header_t + { + public void* next; + } + + public struct ecs_block_allocator_t + { + public ecs_block_allocator_chunk_header_t* head; + public ecs_block_allocator_block_t* block_head; + public ecs_block_allocator_block_t* block_tail; + public int chunk_size; + public int data_size; + public int chunks_per_block; + public int block_size; + public int alloc_count; + } + + public struct ecs_bucket_entry_t + { + public void* next; + public ecs_map_key_t key; + } + + public struct ecs_bucket_t + { + public ecs_bucket_entry_t* first; + } + + public struct ecs_map_t + { + public ecs_bucket_t* buckets; + public ecs_bucket_t* buckets_end; + public short elem_size; + public byte bucket_shift; + public bool shared_allocator; + public int bucket_count; + public int count; + public void* allocator; + public void* entry_allocator; + } + + public struct ecs_map_iter_t + { + [Const] public ecs_map_t* map; + public ecs_bucket_t* bucket; + public ecs_bucket_entry_t* entry; + } + + public struct ecs_map_params_t + { + public int size; + public void* allocator; + public ecs_block_allocator_t entry_allocator; + public int initial_count; + } + + public struct ecs_allocator_t + { + public ecs_block_allocator_t chunks; + public ecs_sparse_t sizes; + } + + public struct ecs_strbuf_element + { + public bool buffer_embedded; + public int pos; + public char* buf; + public void* next; + } + + public struct ecs_strbuf_element_embedded + { + public ecs_strbuf_element super; + public fixed char buf[512]; + } + + public struct ecs_strbuf_element_str + { + public ecs_strbuf_element super; + public char* alloc_str; + } + + public struct ecs_strbuf_list_elem + { + public int count; + [Const] public char* separator; + } + + public struct ecs_strbuf_t + { + public char* buf; + public int max; + public int size; + public int elementCount; + public ecs_strbuf_element_embedded firstElement; + public ecs_strbuf_element* current; + public fixed ecs_strbuf_list_elem list_stack[32]; + public int list_sp; + public char* content; + public int length; + } + + public struct ecs_time_t + { + public uint sec; + public uint nanosec; + } + + public struct ecs_os_api_t + { + public ecs_os_api_init_t init_; + public ecs_os_api_fini_t fini_; + public ecs_os_api_malloc_t malloc_; + public ecs_os_api_realloc_t realloc_; + public ecs_os_api_calloc_t calloc_; + public ecs_os_api_free_t free_; + public ecs_os_api_strdup_t strdup_; + public ecs_os_api_thread_new_t thread_new_; + public ecs_os_api_thread_join_t thread_join_; + public ecs_os_api_thread_self_t thread_self_; + public ecs_os_api_ainc_t ainc_; + public ecs_os_api_ainc_t adec_; + public ecs_os_api_lainc_t lainc_; + public ecs_os_api_lainc_t ladec_; + public ecs_os_api_mutex_new_t mutex_new_; + public ecs_os_api_mutex_free_t mutex_free_; + public ecs_os_api_mutex_lock_t mutex_lock_; + public ecs_os_api_mutex_lock_t mutex_unlock_; + public ecs_os_api_cond_new_t cond_new_; + public ecs_os_api_cond_free_t cond_free_; + public ecs_os_api_cond_signal_t cond_signal_; + public ecs_os_api_cond_broadcast_t cond_broadcast_; + public ecs_os_api_cond_wait_t cond_wait_; + public ecs_os_api_sleep_t sleep_; + public ecs_os_api_now_t now_; + public ecs_os_api_get_time_t get_time_; + public ecs_os_api_log_t log_; + public ecs_os_api_abort_t abort_; + public ecs_os_api_dlopen_t dlopen_; + public ecs_os_api_dlproc_t dlproc_; + public ecs_os_api_dlclose_t dlclose_; + public ecs_os_api_module_to_path_t module_to_dl_; + public ecs_os_api_module_to_path_t module_to_etc_; + public int log_level_; + public int log_indent_; + public int log_last_error_; + public long log_last_timestamp_; + public uint flags_; + } + + /// An array with (component) ids. + public struct ecs_type_t + { + public ecs_id_t* array; + public int count; + } + + public struct ecs_world_t { } + + public struct ecs_table_t { } + + public struct ecs_query_t { } + + public struct ecs_rule_t { } + + public struct ecs_id_record_t { } + + public struct ecs_table_record_t { } + + public struct ecs_mixins_t { } + + /// Header for ecs_poly_t objects. + public struct ecs_header_t + { + public int magic; + public int type; + public ecs_mixins_t* mixins; + } + + /// Iterable mixin. Allows its container to be iterated. + public struct ecs_iterable_t + { + public ecs_iter_init_action_t init; + } + /// Specify read/write access for term. + public enum ecs_inout_kind_t + { + EcsInOutDefault, + EcsInOutNone, + EcsInOut, + EcsIn, + EcsOut, + } + /// Specify operator for term. + public enum ecs_oper_kind_t + { + EcsAnd, + EcsOr, + EcsNot, + EcsOptional, + EcsAndFrom, + EcsOrFrom, + EcsNotFrom, + } + + /// Type that describes a single identifier in a term. + public struct ecs_term_id_t + { + /// Entity id. If left to 0 and flags does not specify whether id is an entity or a variable the id will be initialized to EcsThis. To explicitly set the id to 0, leave the id member to 0 and set EcsIsEntity in flags. + public ecs_entity_t id; + /// Name. This can be either the variable name (when the EcsIsVariable flag is set) or an entity name. Entity names are used to initialize the id member during term finalization and will be freed when term.move is set to true. + public char* name; + /// Relationship to traverse when looking for the component. The relationship must have the Acyclic property. Default is IsA. + public ecs_entity_t trav; + /// Term flags. + public uint flags; + } + + /// Type that describes a term (single element in a query). + public struct ecs_term_t + { + /// Component id to be matched by term. Can be set directly, or will be populated from the first/second members, which provide more flexibility. + public ecs_id_t id; + /// Source of term. + public ecs_term_id_t src; + /// Component or first element of pair. + public ecs_term_id_t first; + /// Second element of pair. + public ecs_term_id_t second; + /// Access to contents matched by term. + public ecs_inout_kind_t inout; + /// Operator of term. + public ecs_oper_kind_t oper; + /// Id flags of term id. + public ecs_id_t id_flags; + /// Name of term. + public char* name; + /// Index of field for term in iterator. + public int field_index; + /// Cached pointer to internal index. + public ecs_id_record_t* idr; + /// Used by internals. + public bool move; + } + + /// Filters alllow for ad-hoc quick filtering of entity tables. + public struct ecs_filter_t + { + public ecs_header_t hdr; + /// Array containing terms for filter. + public ecs_term_t* terms; + /// Number of elements in terms array. + public int term_count; + /// Number of fields in iterator for filter. + public int field_count; + /// Is filter object owned by filter. + public bool owned; + /// Is terms array owned by filter. + public bool terms_owned; + /// Filter flags. + public uint flags; + /// Array with variable names. + public fixed char * variable_names[1]; + /// Entity associated with filter (optional). + public ecs_entity_t entity; + public ecs_world_t* world; + /// Iterable mixin. + public ecs_iterable_t iterable; + /// Dtor mixin. + public ecs_poly_dtor_t dtor; + } + + public struct ecs_observer_t + { + public ecs_header_t hdr; + /// Query for observer. + public ecs_filter_t filter; + public fixed ecs_entity_t events[8]; + public int event_count; + /// See ecs_observer_desc_t::callback. + public ecs_iter_action_t callback; + /// See ecs_observer_desc_t::run. + public ecs_run_action_t run; + /// Callback context. + public void* ctx; + /// Binding context (for language bindings). + public void* binding_ctx; + /// Callback to free ctx. + public ecs_ctx_free_t ctx_free; + /// Callback to free binding_ctx. + public ecs_ctx_free_t binding_ctx_free; + /// Observable for observer. + public ecs_observable_t* observable; + /// Last handled event id. + public int* last_event_id; + /// Id observer is registered with (single term observers only). + public ecs_id_t register_id; + /// Index of the term in parent observer (single term observers only). + public int term_index; + /// If true, the observer only triggers when the * < filter did not match with the entity before * < the event happened. + public bool is_monitor; + /// If true, the observer triggers on more than one term. + public bool is_multi; + public ecs_poly_dtor_t dtor; + } + + /// Type that contains component lifecycle callbacks. + //// CXComment_VerbatimLine + public struct ecs_type_hooks_t + { + /// ctor. + public ecs_xtor_t ctor; + /// dtor. + public ecs_xtor_t dtor; + /// copy assignment. + public ecs_copy_t copy; + /// move assignment. + public ecs_move_t move; + /// Ctor + copy. + public ecs_copy_t copy_ctor; + /// Ctor + move. + public ecs_move_t move_ctor; + /// Ctor + move + dtor (or move_ctor + dtor). This combination is typically used when a component is moved from one location to a new location, like when it is moved to a new table. If not set explicitly it will be derived from other callbacks. + public ecs_move_t ctor_move_dtor; + /// Move + dtor. This combination is typically used when a component is moved from one location to an existing location, like what happens during a remove. If not set explicitly it will be derived from other callbacks. + public ecs_move_t move_dtor; + /// Callback that is invoked when an instance of a component is added. This callback is invoked before triggers are invoked. + public ecs_iter_action_t on_add; + /// Callback that is invoked when an instance of the component is set. This callback is invoked before triggers are invoked, and enable the component to respond to changes on itself before others can. + public ecs_iter_action_t on_set; + /// Callback that is invoked when an instance of the component is removed. This callback is invoked after the triggers are invoked, and before the destructor is invoked. + public ecs_iter_action_t on_remove; + /// User defined context. + public void* ctx; + /// Language binding context. + public void* binding_ctx; + /// Callback to free ctx. + public ecs_ctx_free_t ctx_free; + /// Callback to free binding_ctx. + public ecs_ctx_free_t binding_ctx_free; + } + + /// Type that contains component information (passed to ctors/dtors/...). + //// CXComment_VerbatimLine + public struct ecs_type_info_t + { + /// Size of type. + public int size; + /// Alignment of type. + public int alignment; + /// Type hooks. + public ecs_type_hooks_t hooks; + /// Handle to component (do not set). + public ecs_entity_t component; + /// Type name. + [Const] public char* name; + } + + public struct ecs_stage_t { } + + public struct ecs_data_t { } + + public struct ecs_switch_t { } + + public struct ecs_query_table_node_t { } + + /// + ///

Mixin for emitting events to triggers/observers.

+ ///

All observers for a specific event.

+ ///
+ public struct ecs_event_record_t + { + public void* any; + public void* wildcard; + public void* wildcard_pair; + public ecs_map_t event_ids; + public ecs_entity_t @event; + } + + public struct ecs_observable_t + { + public ecs_event_record_t on_add; + public ecs_event_record_t on_remove; + public ecs_event_record_t on_set; + public ecs_event_record_t un_set; + public ecs_event_record_t on_wildcard; + public ecs_sparse_t* events; + } + + /// Record for entity index. + public struct ecs_record_t + { + public ecs_id_record_t* idr; + public ecs_table_t* table; + public uint row; + } + + /// Range in table. + public struct ecs_table_range_t + { + public ecs_table_t* table; + public int offset; + public int count; + } + + /// Value of query variable. + public struct ecs_var_t + { + public ecs_table_range_t range; + public ecs_entity_t entity; + } + + /// Cached reference. + public struct ecs_ref_t + { + public ecs_entity_t entity; + public ecs_entity_t id; + public void* tr; + public ecs_record_t* record; + } + + public struct ecs_stack_page_t { } + + public struct ecs_stack_cursor_t + { + public void* cur; + public short sp; + } + + public struct ecs_page_iter_t + { + public int offset; + public int limit; + public int remaining; + } + + public struct ecs_worker_iter_t + { + public int index; + public int count; + } + + public struct ecs_table_cache_iter_t + { + public void* cur; + public void* next; + public void* next_list; + } + + /// Term-iterator specific data. + public struct ecs_term_iter_t + { + public ecs_term_t term; + public ecs_id_record_t* self_index; + public ecs_id_record_t* set_index; + public ecs_id_record_t* cur; + public ecs_table_cache_iter_t it; + public int index; + public int observed_table_count; + public ecs_table_t* table; + public int cur_match; + public int match_count; + public int last_column; + public bool empty_tables; + public ecs_id_t id; + public int column; + public ecs_entity_t subject; + public int size; + public void* ptr; + } + public enum ecs_iter_kind_t + { + EcsIterEvalCondition, + EcsIterEvalTables, + EcsIterEvalChain, + EcsIterEvalNone, + } + + /// Filter-iterator specific data. + public struct ecs_filter_iter_t + { + [Const] public ecs_filter_t* filter; + public ecs_iter_kind_t kind; + public ecs_term_iter_t term_iter; + public int matches_left; + public int pivot_term; + } + + /// Query-iterator specific data. + public struct ecs_query_iter_t + { + public ecs_query_t* query; + public ecs_query_table_node_t* node; + public ecs_query_table_node_t* prev; + public ecs_query_table_node_t* last; + public int sparse_smallest; + public int sparse_first; + public int bitset_first; + public int skip_count; + } + + /// Snapshot-iterator specific data. + public struct ecs_snapshot_iter_t + { + public ecs_filter_t filter; + public ecs_vector_t* tables; + public int index; + } + + /// Rule-iterator specific data. + public struct ecs_rule_iter_t + { + [Const] public ecs_rule_t* rule; + public void* registers; + public void* op_ctx; + public int* columns; + public ecs_entity_t entity; + public bool redo; + public int op; + public int sp; + } + + public struct ecs_iter_cache_t + { + public ecs_stack_cursor_t stack_cursor; + public byte used; + public byte allocated; + } + + public struct ecs_iter_private_t + { + public _iter iter; + [StructLayout(LayoutKind.Explicit)] + public struct _iter + { + [FieldOffset(0)] + public ecs_term_iter_t term; + [FieldOffset(0)] + public ecs_filter_iter_t filter; + [FieldOffset(0)] + public ecs_query_iter_t query; + [FieldOffset(0)] + public ecs_rule_iter_t rule; + [FieldOffset(0)] + public ecs_snapshot_iter_t snapshot; + [FieldOffset(0)] + public ecs_page_iter_t page; + [FieldOffset(0)] + public ecs_worker_iter_t worker; + } + public void* entity_iter; + public ecs_iter_cache_t cache; + } + + /// Iterator. + public struct ecs_iter_t + { + public ecs_world_t* world; + public ecs_world_t* real_world; + public ecs_entity_t* entities; + public void** ptrs; + public int* sizes; + public ecs_table_t* table; + public ecs_table_t* other_table; + public ecs_id_t* ids; + public ecs_var_t* variables; + public int* columns; + public ecs_entity_t* sources; + public int* match_indices; + public ecs_ref_t* references; + public ulong constrained_vars; + public ulong group_id; + public int field_count; + public ecs_entity_t system; + public ecs_entity_t @event; + public ecs_id_t event_id; + public ecs_term_t* terms; + public int table_count; + public int term_index; + public int variable_count; + public char** variable_names; + public void* param; + public void* ctx; + public void* binding_ctx; + public float delta_time; + public float delta_system_time; + public int frame_offset; + public int offset; + public int count; + public int instance_count; + public uint flags; + public ecs_entity_t interrupted_by; + public ecs_iter_private_t priv; + public ecs_iter_next_action_t next; + public ecs_iter_action_t callback; + public ecs_iter_fini_action_t fini; + public ecs_iter_t* chain_it; + } + + /// A component column. + public struct ecs_vec_t + { + public void* array; + public int count; + public int size; + public int elem_size; + } + + public struct ecs_hm_bucket_t + { + public ecs_vec_t keys; + public ecs_vec_t values; + } + + public struct ecs_hashmap_t + { + public ecs_hash_value_action_t hash; + public ecs_compare_action_t compare; + public int key_size; + public int value_size; + public ecs_block_allocator_t* hashmap_allocator; + public ecs_map_t impl; + } + + public struct flecs_hashmap_iter_t + { + public ecs_map_iter_t it; + public ecs_hm_bucket_t* bucket; + public int index; + } + + public struct flecs_hashmap_result_t + { + public void* key; + public void* value; + public ulong hash; + } + + /// Used with ecs_entity_init. + //// CXComment_VerbatimLine + public struct ecs_entity_desc_t + { + public int _canary; + /// Set to modify existing entity (optional). + public ecs_entity_t id; + /// Name of the entity. If no entity is provided, an entity with this name will be looked up first. When an entity is provided, the name will be verified with the existing entity. + [Const] public char* name; + /// Optional custom separator for hierarchical names. Leave to NULL for default ('.') separator. Set to an empty string to prevent tokenization of name. + [Const] public char* sep; + /// Optional, used for identifiers relative to root. + [Const] public char* root_sep; + /// Optional entity symbol. A symbol is an unscoped identifier that can be used to lookup an entity. The primary use case for this is to associate the entity with a language identifier, such as a type or function name, where these identifiers differ from the name they are registered with in flecs. For example, C type "EcsPosition" might be registered as "flecs.components.transform.Position", with the symbol set to "EcsPosition". + [Const] public char* symbol; + /// When set to true, a low id (typically reserved for components) will be used to create the entity, if no id is specified. + public bool use_low_id; + /// Array of ids to add to the new or existing entity. + public fixed ecs_id_t add[32]; + /// String expression with components to add. + [Const] public char* add_expr; + } + + /// Used with ecs_bulk_init. + //// CXComment_VerbatimLine + public struct ecs_bulk_desc_t + { + public int _canary; + /// Entities to bulk insert. Entity ids provided by the application application must be empty (cannot have components). If no entity ids are provided, the operation will create 'count' new entities. + public ecs_entity_t* entities; + /// Number of entities to create/populate. + public int count; + /// Ids to create the entities with. + public fixed ecs_id_t ids[32]; + /// Array with component data to insert. Each element in the array must correspond with an element in the ids array. If an element in the ids array is a tag, the data array must contain a NULL. An element may be set to NULL for a component, in which case the component will not be set by the operation. + public void** data; + /// Table to insert the entities into. Should not be set at the same time as ids. When 'table' is set at the same time as 'data', the elements in the data array must correspond with the ids in the table's type. + public ecs_table_t* table; + } + + /// Used with ecs_component_init. + //// CXComment_VerbatimLine + public struct ecs_component_desc_t + { + public int _canary; + /// Existing entity to associate with observer (optional). + public ecs_entity_t entity; + /// Parameters for type (size, hooks, ...). + public ecs_type_info_t type; + } + + /// Used with ecs_filter_init. + //// CXComment_VerbatimLine + public struct ecs_filter_desc_t + { + public int _canary; + /// Terms of the filter. If a filter has more terms than ECS_TERM_DESC_CACHE_SIZE use terms_buffer. + public fixed ecs_term_t terms[16]; + /// For filters with lots of terms an outside array can be provided. + public ecs_term_t* terms_buffer; + /// Number of terms in array provided in terms_buffer. + public int terms_buffer_count; + /// External storage to prevent allocation of the filter object. + public ecs_filter_t* storage; + /// When true, terms returned by an iterator may either contain 1 or N elements, where terms with N elements are owned, and terms with 1 element are shared, for example from a parent or base entity. When false, the iterator will at most return 1 element when the result contains both owned and shared terms. + public bool instanced; + /// Flags for advanced usage. + public uint flags; + /// Filter expression. Should not be set at the same time as terms array. + [Const] public char* expr; + /// Entity associated with query (optional). + public ecs_entity_t entity; + } + + /// Used with ecs_query_init. + //// CXComment_VerbatimLine + public struct ecs_query_desc_t + { + public int _canary; + /// Filter for the query. + public ecs_filter_desc_t filter; + /// Component to be used by order_by. + public ecs_entity_t order_by_component; + /// Callback used for ordering query results. If order_by_id is 0, the pointer provided to the callback will be NULL. If the callback is not set, results will not be ordered. + public ecs_order_by_action_t order_by; + /// Callback used for ordering query results. Same as order_by, but more efficient. + public ecs_sort_table_action_t sort_table; + /// Id to be used by group_by. This id is passed to the group_by function and can be used identify the part of an entity type that should be used for grouping. + public ecs_id_t group_by_id; + /// Callback used for grouping results. If the callback is not set, results will not be grouped. When set, this callback will be used to calculate a "rank" for each entity (table) based on its components. This rank is then used to sort entities (tables), so that entities (tables) of the same rank are "grouped" together when iterated. + public ecs_group_by_action_t group_by; + /// Callback that is invoked when a new group is created. The return value of the callback is stored as context for a group. + public ecs_group_create_action_t on_group_create; + /// Callback that is invoked when an existing group is deleted. The return value of the on_group_create callback is passed as context parameter. + public ecs_group_delete_action_t on_group_delete; + /// Context to pass to group_by. + public void* group_by_ctx; + /// Function to free group_by_ctx. + public ecs_ctx_free_t group_by_ctx_free; + /// If set, the query will be created as a subquery. A subquery matches at most a subset of its parent query. Subqueries do not directly receive (table) notifications from the world. Instead parent queries forward results to subqueries. This can improve matching performance, as fewer queries need to be matched with new tables. Subqueries can be nested. + public ecs_query_t* parent; + } + + /// Used with ecs_observer_init. + //// CXComment_VerbatimLine + public struct ecs_observer_desc_t + { + public int _canary; + /// Existing entity to associate with observer (optional). + public ecs_entity_t entity; + /// Filter for observer. + public ecs_filter_desc_t filter; + /// Events to observe (OnAdd, OnRemove, OnSet, UnSet). + public fixed ecs_entity_t events[8]; + /// When observer is created, generate events from existing data. For example, EcsOnAdd Position would match all existing instances of Position. This is only supported for events that are iterable (see EcsIterable). + public bool yield_existing; + /// Callback to invoke on an event, invoked when the observer matches. + public ecs_iter_action_t callback; + /// Callback invoked on an event. When left to NULL the default runner is used which matches the event with the observer's filter, and calls 'callback' when it matches. A reason to override the run function is to improve performance, if there are more efficient way to test whether an event matches the observer than the general purpose query matcher. + public ecs_run_action_t run; + /// User context to pass to callback. + public void* ctx; + /// Context to be used for language bindings. + public void* binding_ctx; + /// Callback to free ctx. + public ecs_ctx_free_t ctx_free; + /// Callback to free binding_ctx. + public ecs_ctx_free_t binding_ctx_free; + /// Observable with which to register the observer. + public ecs_poly_t* observable; + /// Optional shared last event id for multiple observers. Ensures only one of the observers with the shared id gets triggered for an event. + public int* last_event_id; + /// Used for internal purposes. + public int term_index; + } + + //// CXComment_VerbatimLine + //// CXComment_BlockCommand + public struct ecs_value_t + { + public ecs_entity_t type; + public void* ptr; + } + + /// Type that contains information about the world. + public struct ecs_world_info_t + { + /// Last issued component entity id. + public ecs_entity_t last_component_id; + /// Last issued entity id. + public ecs_entity_t last_id; + /// First allowed entity id. + public ecs_entity_t min_id; + /// Last allowed entity id. + public ecs_entity_t max_id; + /// Raw delta time (no time scaling). + public float delta_time_raw; + /// Time passed to or computed by ecs_progress. + public float delta_time; + /// Time scale applied to delta_time. + public float time_scale; + /// Target fps. + public float target_fps; + /// Total time spent processing a frame. + public float frame_time_total; + /// Total time spent in systems. + public float system_time_total; + /// Total time spent notifying observers. + public float emit_time_total; + /// Total time spent in merges. + public float merge_time_total; + /// Time elapsed in simulation. + public float world_time_total; + /// Time elapsed in simulation (no scaling). + public float world_time_total_raw; + /// Time spent on query rematching. + public float rematch_time_total; + /// Total number of frames. + public long frame_count_total; + /// Total number of merges. + public long merge_count_total; + /// Total number of rematches. + public long rematch_count_total; + /// Total number of times a new id was created. + public long id_create_total; + /// Total number of times an id was deleted. + public long id_delete_total; + /// Total number of times a table was created. + public long table_create_total; + /// Total number of times a table was deleted. + public long table_delete_total; + /// Total number of pipeline builds. + public long pipeline_build_count_total; + /// Total number of systems ran in last frame. + public long systems_ran_frame; + /// Total number of times observer was invoked. + public long observers_ran_frame; + /// Number of ids in the world (excluding wildcards). + public int id_count; + /// Number of tag (no data) ids in the world. + public int tag_id_count; + /// Number of component (data) ids in the world. + public int component_id_count; + /// Number of pair ids in the world. + public int pair_id_count; + /// Number of wildcard ids. + public int wildcard_id_count; + /// Number of tables. + public int table_count; + /// Number of tag-only tables. + public int tag_table_count; + /// Number of tables with trivial components (no lifecycle callbacks). + public int trivial_table_count; + /// Number of tables without entities. + public int empty_table_count; + /// Total number of table records (entries in table caches). + public int table_record_count; + /// Total number of table storages. + public int table_storage_count; + public _cmd cmd; + public struct _cmd + { + /// add commands processed. + public long add_count; + /// remove commands processed. + public long remove_count; + /// delete commands processed. + public long delete_count; + /// clear commands processed. + public long clear_count; + /// set commands processed. + public long set_count; + /// get_mut/emplace commands processed. + public long get_mut_count; + /// modified commands processed. + public long modified_count; + /// other commands processed. + public long other_count; + /// commands discarded, happens when entity is no longer alive when running the command. + public long discard_count; + /// entities for which commands were batched. + public long batched_entity_count; + /// commands batched. + public long batched_command_count; + } + /// Value set by ecs_set_name_prefix. Used to remove library prefixes of symbol names (such as Ecs, ecs_) when registering them as names. + [Const] public char* name_prefix; + } + + /// Type that contains information about a query group. + public struct ecs_query_group_info_t + { + /// How often tables have been matched/unmatched. + public int match_count; + /// Number of tables in group. + public int table_count; + /// Group context, returned by on_group_create. + public void* ctx; + } + + /// A (string) identifier. Used as pair with EcsName and EcsSymbol tags. + public struct EcsIdentifier + { + /// Identifier string. + public char* value; + /// Length of identifier. + public int length; + /// Hash of current value. + public ulong hash; + /// Hash of existing record in current index. + public ulong index_hash; + /// Current index. + public ecs_hashmap_t* index; + } + + /// Component information. + public struct EcsComponent + { + /// Component size. + public int size; + /// Component alignment. + public int alignment; + } + + /// Component for storing a poly object. + public struct EcsPoly + { + /// Pointer to poly object. + public ecs_poly_t* poly; + } + + //// CXComment_VerbatimLine + //// CXComment_BlockCommand + public struct ecs_event_desc_t + { + public ecs_entity_t @event; + [Const] public ecs_type_t* ids; + public ecs_table_t* table; + public ecs_table_t* other_table; + public int offset; + public int count; + public ecs_entity_t entity; + [Const] public void* param; + public ecs_poly_t* observable; + public uint flags; + } + + /// Used with ecs_app_run. + public struct ecs_app_desc_t + { + /// Target FPS. + public float target_fps; + /// Frame time increment (0 for measured values). + public float delta_time; + /// Number of threads. + public int threads; + /// Number of frames to run (0 for infinite). + public int frames; + /// Allows HTTP clients to access ECS data. + public bool enable_rest; + /// Periodically collect statistics. + public bool enable_monitor; + /// If set, function is ran before starting the main loop. + public ecs_app_init_action_t init; + /// Reserved for custom run/frame actions. + public void* ctx; + } + + public struct EcsRest + { + /// Port of server (optional, default = 27750). + public ushort port; + /// Interface address (optional, default = 0.0.0.0). + public char* ipaddr; + public void* impl; + } + + /// Component used for one shot/interval timer functionality. + public struct EcsTimer + { + /// Timer timeout period. + public float timeout; + /// Incrementing time value. + public float time; + /// Number of times ticked. + public int fired_count; + /// Is the timer active or not. + public bool active; + /// Is this a single shot timer. + public bool single_shot; + } + + /// Apply a rate filter to a tick source. + public struct EcsRateFilter + { + /// Source of the rate filter. + public ecs_entity_t src; + /// Rate of the rate filter. + public int rate; + /// Number of times the rate filter ticked. + public int tick_count; + /// Time elapsed since last tick. + public float time_elapsed; + } + + public struct ecs_pipeline_desc_t + { + public ecs_entity_t entity; + public ecs_query_desc_t query; + } + + /// Component used to provide a tick source to systems. + public struct EcsTickSource + { + /// True if providing tick. + public bool tick; + /// Time elapsed since last tick. + public float time_elapsed; + } + + /// Use with ecs_system_init. + public struct ecs_system_desc_t + { + public int _canary; + /// Existing entity to associate with system (optional). + public ecs_entity_t entity; + /// System query parameters. + public ecs_query_desc_t query; + /// + ///

Callback that is invoked when a system is ran. When left to NULL, the default system runner is used, which calls the "callback" action for each result returned from the system's query.

+ ///

It should not be assumed that the input iterator can always be iterated with ecs_query_next. When a system is multithreaded and/or paged, the iterator can be either a worker or paged iterator. Future use cases may introduce additional inputs for a system, such as rules and filters. The correct function to use for iteration is ecs_iter_next.

+ ///

An implementation can test whether the iterator is a query iterator by testing whether the it->next value is equal to ecs_query_next.

+ ///
+ public ecs_run_action_t run; + /// Callback that is ran for each result returned by the system's query. This means that this callback can be invoked multiple times per system per frame, typically once for each matching table. + public ecs_iter_action_t callback; + /// Context to be passed to callback (as ecs_iter_t::param). + public void* ctx; + /// Binding context, for when system is implemented in other language. + public void* binding_ctx; + /// Functions that are invoked during system cleanup to free context data. When set, functions are called unconditionally, even when the ctx pointers are NULL. + public ecs_ctx_free_t ctx_free; + public ecs_ctx_free_t binding_ctx_free; + /// Interval in seconds at which the system should run. + public float interval; + /// Rate at which the system should run. + public int rate; + /// External tick soutce that determines when system ticks. + public ecs_entity_t tick_source; + /// If true, system will be ran on multiple threads. + public bool multi_threaded; + /// If true, system will have access to actuall world. Cannot be true at the same time as multi_threaded. + public bool no_readonly; + } + + /// Simple value that indicates current state. + public struct ecs_gauge_t + { + public fixed float avg[60]; + public fixed float min[60]; + public fixed float max[60]; + } + + public struct ecs_counter_t + { + /// Keep track of deltas too. + public ecs_gauge_t rate; + public fixed double value[60]; + } + + public struct ecs_world_stats_t + { + public long first_; + public _entities entities; + public struct _entities + { + /// Number of entities. + public ecs_metric_t count; + /// Number of not alive (recyclable) entity ids. + public ecs_metric_t not_alive_count; + } + public _ids ids; + public struct _ids + { + /// Number of ids (excluding wildcards). + public ecs_metric_t count; + /// Number of tag ids (ids without data). + public ecs_metric_t tag_count; + /// Number of components ids (ids with data). + public ecs_metric_t component_count; + /// Number of pair ids. + public ecs_metric_t pair_count; + /// Number of wildcard ids. + public ecs_metric_t wildcard_count; + /// Number of registered types. + public ecs_metric_t type_count; + /// Number of times id has been created. + public ecs_metric_t create_count; + /// Number of times id has been deleted. + public ecs_metric_t delete_count; + } + public _tables tables; + public struct _tables + { + /// Number of tables. + public ecs_metric_t count; + /// Number of empty tables. + public ecs_metric_t empty_count; + /// Number of tables with only tags. + public ecs_metric_t tag_only_count; + /// Number of tables with only trivial components. + public ecs_metric_t trivial_only_count; + /// Number of table cache records. + public ecs_metric_t record_count; + /// Number of table storages. + public ecs_metric_t storage_count; + /// Number of times table has been created. + public ecs_metric_t create_count; + /// Number of times table has been deleted. + public ecs_metric_t delete_count; + } + public _queries queries; + public struct _queries + { + /// Number of queries. + public ecs_metric_t query_count; + /// Number of observers. + public ecs_metric_t observer_count; + /// Number of systems. + public ecs_metric_t system_count; + } + public _commands commands; + public struct _commands + { + public ecs_metric_t add_count; + public ecs_metric_t remove_count; + public ecs_metric_t delete_count; + public ecs_metric_t clear_count; + public ecs_metric_t set_count; + public ecs_metric_t get_mut_count; + public ecs_metric_t modified_count; + public ecs_metric_t other_count; + public ecs_metric_t discard_count; + public ecs_metric_t batched_entity_count; + public ecs_metric_t batched_count; + } + public _frame frame; + public struct _frame + { + /// Number of frames processed. + public ecs_metric_t frame_count; + /// Number of merges executed. + public ecs_metric_t merge_count; + /// Number of query rematches. + public ecs_metric_t rematch_count; + /// Number of system pipeline rebuilds (occurs when an inactive system becomes active). + public ecs_metric_t pipeline_build_count; + /// Number of systems ran. + public ecs_metric_t systems_ran; + /// Number of times an observer was invoked. + public ecs_metric_t observers_ran; + /// Number of events emitted. + public ecs_metric_t event_emit_count; + } + public _performance performance; + public struct _performance + { + /// Actual time passed since simulation start (first time progress() is called). + public ecs_metric_t world_time_raw; + /// Simulation time passed since simulation start. Takes into account time scaling. + public ecs_metric_t world_time; + /// Time spent processing a frame. Smaller than world_time_total when load is not 100%. + public ecs_metric_t frame_time; + /// Time spent on running systems. + public ecs_metric_t system_time; + /// Time spent on notifying observers. + public ecs_metric_t emit_time; + /// Time spent on merging commands. + public ecs_metric_t merge_time; + /// Time spent on rematching. + public ecs_metric_t rematch_time; + /// Frames per second. + public ecs_metric_t fps; + /// Delta_time. + public ecs_metric_t delta_time; + } + public _memory memory; + public struct _memory + { + /// Allocs per frame. + public ecs_metric_t alloc_count; + /// Reallocs per frame. + public ecs_metric_t realloc_count; + /// Frees per frame. + public ecs_metric_t free_count; + /// Difference between allocs & frees. + public ecs_metric_t outstanding_alloc_count; + /// Block allocations per frame. + public ecs_metric_t block_alloc_count; + /// Block frees per frame. + public ecs_metric_t block_free_count; + /// Difference between allocs & frees. + public ecs_metric_t block_outstanding_alloc_count; + /// Page allocations per frame. + public ecs_metric_t stack_alloc_count; + /// Page frees per frame. + public ecs_metric_t stack_free_count; + /// Difference between allocs & frees. + public ecs_metric_t stack_outstanding_alloc_count; + } + public _rest rest; + public struct _rest + { + public ecs_metric_t request_count; + public ecs_metric_t entity_count; + public ecs_metric_t entity_error_count; + public ecs_metric_t query_count; + public ecs_metric_t query_error_count; + public ecs_metric_t query_name_count; + public ecs_metric_t query_name_error_count; + public ecs_metric_t query_name_from_cache_count; + public ecs_metric_t enable_count; + public ecs_metric_t enable_error_count; + public ecs_metric_t world_stats_count; + public ecs_metric_t pipeline_stats_count; + public ecs_metric_t stats_error_count; + } + public _http http; + public struct _http + { + public ecs_metric_t request_received_count; + public ecs_metric_t request_invalid_count; + public ecs_metric_t request_handled_ok_count; + public ecs_metric_t request_handled_error_count; + public ecs_metric_t request_not_handled_count; + public ecs_metric_t request_preflight_count; + public ecs_metric_t send_ok_count; + public ecs_metric_t send_error_count; + public ecs_metric_t busy_count; + } + public long last_; + /// Current position in ringbuffer. + public int t; + } + + public struct ecs_query_stats_t + { + public long first_; + /// Matched non-empty tables. + public ecs_metric_t matched_table_count; + /// Matched empty tables. + public ecs_metric_t matched_empty_table_count; + /// Number of matched entities. + public ecs_metric_t matched_entity_count; + public long last_; + /// Current position in ringbuffer. + public int t; + } + + /// Statistics for a single system (use ecs_system_stats_get). + public struct ecs_system_stats_t + { + public long first_; + /// Time spent processing a system. + public ecs_metric_t time_spent; + /// Number of times system is invoked. + public ecs_metric_t invoke_count; + /// Whether system is active (is matched with >0 entities). + public ecs_metric_t active; + /// Whether system is enabled. + public ecs_metric_t enabled; + public long last_; + /// Is system a task. + public bool task; + public ecs_query_stats_t query; + } + + /// Statistics for all systems in a pipeline. + public struct ecs_pipeline_stats_t + { + /// Vector with system ids of all systems in the pipeline. The systems are stored in the order they are executed. Merges are represented by a 0. + public ecs_vector_t* systems; + /// Map with system statistics. For each system in the systems vector, an entry in the map exists of type ecs_system_stats_t. + public ecs_map_t system_stats; + /// Current position in ringbuffer. + public int t; + /// Number of systems in pipeline. + public int system_count; + /// Number of active systems in pipeline. + public int active_system_count; + /// Number of times pipeline has rebuilt. + public int rebuild_count; + } + + public struct EcsStatsHeader + { + public float elapsed; + public int reduce_count; + } + + public struct EcsWorldStats + { + public EcsStatsHeader hdr; + public ecs_world_stats_t stats; + } + + public struct EcsPipelineStats + { + public EcsStatsHeader hdr; + public ecs_pipeline_stats_t stats; + } + + public struct EcsDocDescription + { + public char* value; + } + + /// Used with ecs_parse_json. + public struct ecs_parse_json_desc_t + { + [Const] public char* name; + [Const] public char* expr; + } + + /// Used with ecs_iter_to_json. + public struct ecs_entity_to_json_desc_t + { + public bool serialize_path; + public bool serialize_meta_ids; + public bool serialize_label; + public bool serialize_brief; + public bool serialize_link; + public bool serialize_color; + public bool serialize_id_labels; + public bool serialize_base; + public bool serialize_private; + public bool serialize_hidden; + public bool serialize_values; + public bool serialize_type_info; + } + + /// Used with ecs_iter_to_json. + public struct ecs_iter_to_json_desc_t + { + public bool serialize_term_ids; + public bool serialize_ids; + public bool serialize_sources; + public bool serialize_variables; + public bool serialize_is_set; + public bool serialize_values; + public bool serialize_entities; + public bool serialize_entity_labels; + public bool serialize_entity_ids; + public bool serialize_variable_labels; + public bool serialize_variable_ids; + public bool serialize_colors; + public bool measure_eval_duration; + public bool serialize_type_info; + } + /// Type kinds supported by reflection type system. + public enum ecs_type_kind_t + { + EcsPrimitiveType, + EcsBitmaskType, + EcsEnumType, + EcsStructType, + EcsArrayType, + EcsVectorType, + EcsTypeKindLast, + } + + /// Component that is automatically added to every type with the right kind. + public struct EcsMetaType + { + public ecs_type_kind_t kind; + public bool existing; + public bool partial; + public int size; + public int alignment; + } + public enum ecs_primitive_kind_t + { + EcsBool, + EcsChar, + EcsByte, + EcsU8, + EcsU16, + EcsU32, + EcsU64, + EcsI8, + EcsI16, + EcsI32, + EcsI64, + EcsF32, + EcsF64, + EcsUPtr, + EcsIPtr, + EcsString, + EcsEntity, + EcsPrimitiveKindLast, + } + + public struct EcsPrimitive + { + public ecs_primitive_kind_t kind; + } + + public struct EcsMember + { + public ecs_entity_t type; + public int count; + public ecs_entity_t unit; + public int offset; + } + + public struct ecs_member_t + { + [Const] public char* name; + public ecs_entity_t type; + public int count; + public int offset; + public ecs_entity_t unit; + public int size; + public ecs_entity_t member; + } + + public struct EcsStruct + { + public ecs_vector_t* members; + } + + public struct ecs_enum_constant_t + { + [Const] public char* name; + public int value; + public ecs_entity_t constant; + } + + public struct EcsEnum + { + public ecs_map_t* constants; + } + + public struct ecs_bitmask_constant_t + { + [Const] public char* name; + public uint value; + public ecs_entity_t constant; + } + + public struct EcsBitmask + { + public ecs_map_t* constants; + } + + public struct EcsArray + { + public ecs_entity_t type; + public int count; + } + + public struct EcsVector + { + public ecs_entity_t type; + } + + public struct ecs_unit_translation_t + { + public int factor; + public int power; + } + + public struct EcsUnit + { + public char* symbol; + public ecs_entity_t prefix; + public ecs_entity_t @base; + public ecs_entity_t over; + public ecs_unit_translation_t translation; + } + + public struct EcsUnitPrefix + { + public char* symbol; + public ecs_unit_translation_t translation; + } + /// Serializer utilities. + public enum ecs_meta_type_op_kind_t + { + EcsOpArray, + EcsOpVector, + EcsOpPush, + EcsOpPop, + EcsOpScope, + EcsOpEnum, + EcsOpBitmask, + EcsOpPrimitive, + EcsOpBool, + EcsOpChar, + EcsOpByte, + EcsOpU8, + EcsOpU16, + EcsOpU32, + EcsOpU64, + EcsOpI8, + EcsOpI16, + EcsOpI32, + EcsOpI64, + EcsOpF32, + EcsOpF64, + EcsOpUPtr, + EcsOpIPtr, + EcsOpString, + EcsOpEntity, + EcsMetaTypeOpKindLast, + } + + public struct ecs_meta_type_op_t + { + public ecs_meta_type_op_kind_t kind; + public int offset; + public int count; + [Const] public char* name; + public int op_count; + public int size; + public ecs_entity_t type; + public ecs_entity_t unit; + public ecs_hashmap_t* members; + } + + public struct EcsMetaTypeSerialized + { + public ecs_vector_t* ops; + } + + public struct ecs_meta_scope_t + { + public ecs_entity_t type; + public ecs_meta_type_op_t* ops; + public int op_count; + public int op_cur; + public int elem_cur; + public int prev_depth; + public void* ptr; + [Const] public EcsComponent* comp; + public ecs_vector_t** vector; + public bool is_collection; + public bool is_inline_array; + } + + /// Type that enables iterating/populating a value using reflection data. + public struct ecs_meta_cursor_t + { + [Const] public ecs_world_t* world; + public fixed ecs_meta_scope_t scope[32]; + public int depth; + public bool valid; + public bool is_primitive_scope; + public delegate* unmanaged lookup_action; + public void* lookup_ctx; + } + + /// Used with ecs_primitive_init. + public struct ecs_primitive_desc_t + { + public ecs_entity_t entity; + public ecs_primitive_kind_t kind; + } + + /// Used with ecs_enum_init. + public struct ecs_enum_desc_t + { + public ecs_entity_t entity; + public fixed ecs_enum_constant_t constants[32]; + } + + /// Used with ecs_bitmask_init. + public struct ecs_bitmask_desc_t + { + public ecs_entity_t entity; + public fixed ecs_bitmask_constant_t constants[32]; + } + + /// Used with ecs_array_init. + public struct ecs_array_desc_t + { + public ecs_entity_t entity; + public ecs_entity_t type; + public int count; + } + + /// Used with ecs_vector_init. + public struct ecs_vector_desc_t + { + public ecs_entity_t entity; + public ecs_entity_t type; + } + + /// Used with ecs_struct_init. + public struct ecs_struct_desc_t + { + public ecs_entity_t entity; + public fixed ecs_member_t members[32]; + } + + /// Used with ecs_unit_init. + public struct ecs_unit_desc_t + { + public ecs_entity_t entity; + [Const] public char* symbol; + public ecs_entity_t quantity; + public ecs_entity_t @base; + public ecs_entity_t over; + public ecs_unit_translation_t translation; + public ecs_entity_t prefix; + } + + /// Used with ecs_unit_prefix_init. + public struct ecs_unit_prefix_desc_t + { + public ecs_entity_t entity; + [Const] public char* symbol; + public ecs_unit_translation_t translation; + } + + /// Storage for parser variables. Variables make it possible to parameterize expression strings, and are referenced with the $ operator (e.g. $var). + public struct ecs_expr_var_t + { + public char* name; + public ecs_value_t value; + } + + public struct ecs_expr_var_scope_t + { + public ecs_hashmap_t var_index; + public ecs_vec_t vars; + public void* parent; + } + + public struct ecs_vars_t + { + public ecs_world_t* world; + public ecs_expr_var_scope_t root; + public ecs_expr_var_scope_t* cur; + } + + /// Used with ecs_parse_expr. + public struct ecs_parse_expr_desc_t + { + [Const] public char* name; + [Const] public char* expr; + public delegate* unmanaged lookup_action; + public void* lookup_ctx; + public ecs_vars_t* vars; + } + + public struct ecs_snapshot_t { } + + public struct ecs_http_server_t { } + + /// A connection manages communication with the remote host. + public struct ecs_http_connection_t + { + public ulong id; + public ecs_http_server_t* server; + public fixed char host[128]; + public fixed char port[16]; + } + + /// Helper type used for headers & URL query parameters. + public struct ecs_http_key_value_t + { + [Const] public char* key; + [Const] public char* value; + } + /// Supported request methods. + public ecs_http_method_t + { + EcsHttpGet, + EcsHttpPost, + EcsHttpPut, + EcsHttpDelete, + EcsHttpOptions, + EcsHttpMethodUnsupported, + } + + /// A request. + public struct ecs_http_request_t + { + public ulong id; + public ecs_http_method_t method; + public char* path; + public char* body; + public fixed ecs_http_key_value_t headers[32]; + public fixed ecs_http_key_value_t @params[32]; + public int header_count; + public int param_count; + public ecs_http_connection_t* conn; + } + + /// A reply. + public struct ecs_http_reply_t + { + /// default = 200. + public int code; + /// default = "". + public ecs_strbuf_t body; + /// default = OK. + [Const] public char* status; + /// default = application/json. + [Const] public char* content_type; + /// default = "". + public ecs_strbuf_t headers; + } + + /// Used with ecs_http_server_init. + public struct ecs_http_server_desc_t + { + public ecs_http_reply_action_t callback; + public void* ctx; + public ushort port; + [Const] public char* ipaddr; + public int send_queue_wait_ms; + } +} diff --git a/src/gaemstone.Utility/Allocators.cs b/src/gaemstone.Utility/Allocators.cs deleted file mode 100644 index f392222..0000000 --- a/src/gaemstone.Utility/Allocators.cs +++ /dev/null @@ -1,171 +0,0 @@ -using System; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading; -using static flecs_hub.flecs.Runtime; - -namespace gaemstone.Utility; - -public interface IAllocator -{ - nint Allocate(int byteCount); - void Free(nint pointer); -} - -public unsafe static class AllocatorExtensions -{ - public static Span Allocate(this IAllocator allocator, int count) where T : unmanaged - => new((void*)allocator.Allocate(sizeof(T) * count), count); - public static void Free(this IAllocator allocator, Span span) where T : unmanaged - => allocator.Free((nint)Unsafe.AsPointer(ref span[0])); - - public static Span AllocateCopy(this IAllocator allocator, ReadOnlySpan orig) where T : unmanaged - { var copy = allocator.Allocate(orig.Length); orig.CopyTo(copy); return copy; } - - public static ref T Allocate(this IAllocator allocator) where T : unmanaged - => ref Unsafe.AsRef((void*)allocator.Allocate(sizeof(T))); - public static void Free(this IAllocator allocator, ref T value) where T : unmanaged - => allocator.Free((nint)Unsafe.AsPointer(ref value)); - - public static CString AllocateCString(this IAllocator allocator, string? value) - { - if (value == null) return default; - var bytes = Encoding.UTF8.GetByteCount(value); - var span = allocator.Allocate(bytes + 1); - Encoding.UTF8.GetBytes(value, span); - span[^1] = 0; // In case the allocated span is not cleared. - return new((nint)Unsafe.AsPointer(ref span[0])); - } - - public static CString AllocateCString(this IAllocator allocator, ReadOnlySpan utf8) - { - var copy = allocator.Allocate(utf8.Length + 1); - utf8.CopyTo(copy); - copy[^1] = 0; // In case the allocated span is not cleared. - return new((nint)Unsafe.AsPointer(ref copy[0])); - } -} - -public static class TempAllocator -{ - public const int Capacity = 1024 * 1024; // 1 MB - private static readonly ThreadLocal _allocator - = new(() => new(Capacity)); - - public static ResetOnDispose Use() - { - var allocator = _allocator.Value!; - return new(allocator, allocator.Used); - } - - public sealed class ResetOnDispose - : IAllocator - , IDisposable - { - private readonly ArenaAllocator _allocator; - private readonly int _start; - - public ResetOnDispose(ArenaAllocator allocator, int start) - { _allocator = allocator; _start = start; } - - // TODO: Print warning in finalizer if Dispose wasn't called manually. - - // IAllocator implementation - public nint Allocate(int byteCount) => _allocator.Allocate(byteCount); - public void Free(nint pointer) { /* Do nothing. */ } - - // IDisposable implementation - public void Dispose() => _allocator.Reset(_start); - } -} - -public class GlobalHeapAllocator - : IAllocator -{ - public static GlobalHeapAllocator Instance { get; } = new(); - - public nint Allocate(int byteCount) - => Marshal.AllocHGlobal(byteCount); - public void Free(nint pointer) - => Marshal.FreeHGlobal(pointer); -} - -public class ArenaAllocator - : IAllocator - , IDisposable -{ - private nint _buffer; - public int Capacity { get; private set; } - public int Used { get; private set; } = 0; - - public ArenaAllocator(int capacity) - { - if (capacity <= 0) throw new ArgumentOutOfRangeException(nameof(capacity)); - _buffer = Marshal.AllocHGlobal(capacity); - Capacity = capacity; - } - - public void Dispose() - { - Marshal.FreeHGlobal(_buffer); - _buffer = default; - Capacity = 0; - } - - public nint Allocate(int byteCount) - { - if (_buffer == default) throw new ObjectDisposedException(nameof(ArenaAllocator)); - if (Used + byteCount > Capacity) throw new InvalidOperationException( - $"Cannot allocate more than {Capacity} bytes with this {nameof(ArenaAllocator)}"); - var ptr = _buffer + Used; - Used += byteCount; - return ptr; - } - - public void Free(nint pointer) - { /* Do nothing. */ } - - public unsafe void Reset(int start = 0) - { - if (start > Used) throw new ArgumentOutOfRangeException(nameof(start)); - new Span((void*)(_buffer + start), Used - start).Clear(); - Used = start; - } -} - -public class RingAllocator - : IAllocator - , IDisposable -{ - private nint _buffer; - private int _current = 0; - public int Capacity { get; private set; } - - public RingAllocator(int capacity) - { - if (capacity <= 0) throw new ArgumentOutOfRangeException(nameof(capacity)); - _buffer = Marshal.AllocHGlobal(capacity); - Capacity = capacity; - } - - public void Dispose() - { - Marshal.FreeHGlobal(_buffer); - _buffer = default; - Capacity = 0; - } - - public nint Allocate(int byteCount) - { - if (_buffer == default) throw new ObjectDisposedException(nameof(RingAllocator)); - if (byteCount > Capacity) throw new ArgumentOutOfRangeException(nameof(byteCount)); - if (_current + byteCount > Capacity) _current = 0; - var ptr = _buffer + _current; - _current += byteCount; - return ptr; - } - - public void Free(nint pointer) - { /* Do nothing. */ } -} diff --git a/src/gaemstone.Utility/CStringExtensions.cs b/src/gaemstone.Utility/CStringExtensions.cs deleted file mode 100644 index 0cc756b..0000000 --- a/src/gaemstone.Utility/CStringExtensions.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using static flecs_hub.flecs; -using static flecs_hub.flecs.Runtime; - -namespace gaemstone.Utility; - -public unsafe static class CStringExtensions -{ - public static CString Empty { get; } = (CString)""; - public static CString ETX { get; } = (CString)"\x3"; // TODO: Temporary, until flecs supports Empty. - - public static unsafe byte[]? FlecsToBytes(this CString str) - { - if (str.IsNull) return null; - var pointer = (byte*)(nint)str; - // Find length of the string by locating the NUL character. - var length = 0; while (true) if (pointer[length++] == 0) break; - // Create span over the region, NUL included, copy it into an array. - return new Span(pointer, length).ToArray(); - } - - public static byte[]? FlecsToBytesAndFree(this CString str) - { var result = str.FlecsToBytes(); str.FlecsFree(); return result; } - - public static string? FlecsToString(this CString str) - => Marshal.PtrToStringUTF8(str); - - public static string? FlecsToStringAndFree(this CString str) - { var result = str.FlecsToString(); str.FlecsFree(); return result; } - - public static void FlecsFree(this CString str) - { if (!str.IsNull) ecs_os_get_api().free_.Data.Pointer((void*)(nint)str); } -} diff --git a/src/gaemstone.Utility/CallbackContextHelper.cs b/src/gaemstone.Utility/CallbackContextHelper.cs deleted file mode 100644 index 3d22015..0000000 --- a/src/gaemstone.Utility/CallbackContextHelper.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; - -namespace gaemstone.Utility; - -public static class CallbackContextHelper -{ - private static readonly Dictionary _contexts = new(); - private static nint _counter = 0; - - public static nint Create(T context) where T : notnull - { - lock (_contexts) { - var id = _counter++; - _contexts.Add(id, context); - return id; - } - } - - public static T Get(nint id) - { - lock (_contexts) - return (T)_contexts[id]; - } - - public static void Free(nint id) - { - lock (_contexts) - _contexts.Remove(id); - } -} diff --git a/src/gaemstone.Utility/FlecsException.cs b/src/gaemstone.Utility/FlecsException.cs deleted file mode 100644 index fa16503..0000000 --- a/src/gaemstone.Utility/FlecsException.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace gaemstone.Utility; - -public class FlecsException - : Exception -{ - public FlecsException() : base() { } - public FlecsException(string message) : base(message) { } -} - -public class FlecsAbortException - : FlecsException -{ - private readonly string _stackTrace = new StackTrace(2, true).ToString(); - public override string? StackTrace => _stackTrace; - - private FlecsAbortException() - : base("Abort was called by flecs") { } - - [UnmanagedCallersOnly] - internal static void Callback() - => throw new FlecsAbortException(); -} diff --git a/src/gaemstone.Utility/SpanExtensions.cs b/src/gaemstone.Utility/SpanExtensions.cs deleted file mode 100644 index 3407363..0000000 --- a/src/gaemstone.Utility/SpanExtensions.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; - -namespace gaemstone.Utility; - -public static class SpanExtensions -{ - public static T? GetOrNull(this Span span, int index) - where T : struct => GetOrNull((ReadOnlySpan)span, index); - public static T? GetOrNull(this ReadOnlySpan span, int index) - where T : struct => (index >= 0 && index < span.Length) ? span[index] : null; - - - public static ReadOnlySpanSplitEnumerator Split(this ReadOnlySpan span, T splitOn) - where T : IEquatable => new(span, splitOn); - - public ref struct ReadOnlySpanSplitEnumerator - where T : IEquatable - { - private readonly ReadOnlySpan _span; - private readonly T _splitOn; - private int _index = -1; - private int _end = -1; - - public ReadOnlySpanSplitEnumerator(ReadOnlySpan span, T splitOn) - { _span = span; _splitOn = splitOn; } - - public ReadOnlySpanSplitEnumerator GetEnumerator() => this; - - public ReadOnlySpan Current - => (_end >= 0) && (_end <= _span.Length) - ? _span[_index.._end] : throw new InvalidOperationException(); - - public bool MoveNext() - { - if (_end == _span.Length) return false; - _end++; _index = _end; - while (_end < _span.Length && !_span[_end].Equals(_splitOn)) _end++; - return true; - } - } -}