Code Monkey home page Code Monkey logo

flecs-meta's People

Contributors

arncarveris avatar randy408 avatar sandermertens avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

flecs-meta's Issues

Struct member count

Would be nice if ecs_type_op_t.count was also set for structs as the member count, this would improve serialization performance in flecs-lua.

ECS_ALIAS()

ECS_ALIAS() would be a lightweight typedef that would allow defining new types based on other flecs-meta types.

#define ECS_ALIAS(type, name)\
typedef type name;\
ECS_UNUSED \
static EcsMetaType __##name##__ = __##type##__;\

ECS_STRUCT(vec3, {
    float x;
    float y;
    float z;
});

// we don't have to define the structure again, just specify the underlying type
ECS_ALIAS(vec3, EcsVelocity3);
ECS_ALIAS(vec3, EcsPosition3);
ECS_ALIAS(vec3, EcsAngularVelocity);

This doesn't work because we can't initialize a struct with another struct, potential solutions:

  1. Add an EcsAliasType:
#define ECS_ALIAS(type, name)\
static EcsMetaType __##name##__ = {EcsAliasType, sizeof(type), ECS_ALIGNOF(type), #type};\
typedef type name;
  1. Change all other ECS_<TYPE>() macros to define an EcsMetaType and EcsMetaType* where the latter is the address of the former, define only a EcsMetaType* in ECS_ALIAS() and only look for EcsMetaType* variables when looking up flecs-meta types.

My solution for C:

#define ECS_ALIAS(type, name)\
typedef type name;\
ECS_UNUSED \
static EcsMetaType *__##name##__ = &__##type##__;\
//declare pointer to actual type

#define ECS_META_ALIAS(world, T)\
    ECS_COMPONENT(world, T);\
    ecs_new_meta(world, ecs_entity(T), __##T##__);
//removed address-of                  ^

//use ECS_META_ALIAS() instead of ECS_META() in import function

Memory leak for EcsMetaType component

#include <flecs_meta.h>

int main(void)
{
    ecs_world_t *w = ecs_init();
    
    ECS_IMPORT(w, FlecsMeta);
    
    ecs_fini(w);
}
Expand for error message
==4371==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 283 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb14874550 in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:536
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 148 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb14873e5e in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:511
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 113 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb148744df in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:535
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 106 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb14874099 in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:515
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 99 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb1487446e in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:534
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 54 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb14874421 in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:533
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 52 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb148742ce in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:530
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 46 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb1487433f in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:531
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 46 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb148741ec in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:528
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 46 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb1487417b in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:527
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 36 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb1487473b in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:540
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 35 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb1487425d in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:529
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 35 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb148748b5 in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:548
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 35 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb148745c1 in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:537
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 31 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb1487410a in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:526
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 31 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb148743b0 in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:532
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

Direct leak of 20 byte(s) in 1 object(s) allocated from:
    #0 0x7feb14a7f330 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xe9330)
    #1 0x7feb148dab6c in ecs_os_api_malloc ../subprojects/flecs/src/os_api.c:126
    #2 0x7feb148dad20 in ecs_os_api_strdup ../subprojects/flecs/src/os_api.c:161
    #3 0x7feb1486800b in EcsMetaType_copy ../subprojects/flecs-meta/src/main.c:17
    #4 0x7feb148f0742 in assign_ptr_w_entity ../subprojects/flecs/src/entity.c:2082
    #5 0x7feb148f09d0 in ecs_set_ptr_w_entity ../subprojects/flecs/src/entity.c:2115
    #6 0x7feb14874a2f in FlecsMetaImport ../subprojects/flecs-meta/src/main.c:556
    #7 0x7feb149030ef in ecs_import ../subprojects/flecs/src/addons/module.c:49
    #8 0x56229365b4b7 in main ../test/fuck.c:7
    #9 0x7feb146b909a in __libc_start_main ../csu/libc-start.c:308

SUMMARY: AddressSanitizer: 1216 byte(s) leaked in 17 allocation(s).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.