Flecs v3.2
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
Meta Utilities

Macro utilities to automatically insert reflection data. More...

Collaboration diagram for Meta Utilities:

Macros

#define FLECS_META_C_H
 
#define ECS_META_COMPONENT(world, name)
 Declare component with descriptor.
 
#define ECS_STRUCT(name, ...)
 ECS_STRUCT(name, body)
 
#define ECS_ENUM(name, ...)
 ECS_ENUM(name, body)
 
#define ECS_BITMASK(name, ...)
 ECS_BITMASK(name, body)
 
#define ECS_PRIVATE
 Macro used to mark part of type for which no reflection data is created.
 
#define ECS_META_IMPL_CALL_INNER(base, impl, name, type_desc)    base ## impl(name, type_desc)
 
#define ECS_META_IMPL_CALL(base, impl, name, type_desc)    ECS_META_IMPL_CALL_INNER(base, impl, name, type_desc)
 
#define ECS_STRUCT_TYPE(name, ...)    typedef struct __VA_ARGS__ name
 
#define ECS_STRUCT_ECS_META_IMPL   ECS_STRUCT_IMPL
 
#define ECS_STRUCT_IMPL(name, type_desc)
 
#define ECS_STRUCT_DECLARE(name, type_desc)
 
#define ECS_STRUCT_EXTERN(name, type_desc)    extern ECS_COMPONENT_DECLARE(name)
 
#define ECS_ENUM_TYPE(name, ...)    typedef enum __VA_ARGS__ name
 
#define ECS_ENUM_ECS_META_IMPL   ECS_ENUM_IMPL
 
#define ECS_ENUM_IMPL(name, type_desc)
 
#define ECS_ENUM_DECLARE(name, type_desc)
 
#define ECS_ENUM_EXTERN(name, type_desc)    extern ECS_COMPONENT_DECLARE(name)
 
#define ECS_BITMASK_TYPE(name, ...)    typedef enum __VA_ARGS__ name
 
#define ECS_BITMASK_ECS_META_IMPL   ECS_BITMASK_IMPL
 
#define ECS_BITMASK_IMPL(name, type_desc)
 
#define ECS_BITMASK_DECLARE(name, type_desc)
 
#define ECS_BITMASK_EXTERN(name, type_desc)    extern ECS_COMPONENT_DECLARE(name)
 

Functions

FLECS_API int ecs_meta_from_desc (ecs_world_t *world, ecs_entity_t component, ecs_type_kind_t kind, const char *desc)
 Populate meta information from type descriptor.
 

Detailed Description

Macro utilities to automatically insert reflection data.

Macro Definition Documentation

◆ ECS_BITMASK

#define ECS_BITMASK ( name,
... )
Value:
ECS_META_IMPL_CALL(ECS_BITMASK_, ECS_META_IMPL, name, #__VA_ARGS__);\
ECS_ENUM_TYPE(name, __VA_ARGS__)

ECS_BITMASK(name, body)

Definition at line 64 of file meta_c.h.

◆ ECS_BITMASK_DECLARE

#define ECS_BITMASK_DECLARE ( name,
type_desc )
Value:
extern ECS_COMPONENT_DECLARE(name);\
ECS_COMPONENT_DECLARE(name) = 0
#define ECS_COMPONENT_DECLARE(id)
Forward declare a component.
Definition flecs_c.h:112

Definition at line 141 of file meta_c.h.

◆ ECS_BITMASK_ECS_META_IMPL

#define ECS_BITMASK_ECS_META_IMPL   ECS_BITMASK_IMPL

Definition at line 133 of file meta_c.h.

◆ ECS_BITMASK_EXTERN

#define ECS_BITMASK_EXTERN ( name,
type_desc )    extern ECS_COMPONENT_DECLARE(name)

Definition at line 145 of file meta_c.h.

◆ ECS_BITMASK_IMPL

#define ECS_BITMASK_IMPL ( name,
type_desc )
Value:
extern ECS_COMPONENT_DECLARE(name);\
static const char *FLECS__##name##_desc = type_desc;\
static ecs_type_kind_t FLECS__##name##_kind = EcsBitmaskType;\
ECS_COMPONENT_DECLARE(name) = 0
ecs_type_kind_t
Type kinds supported by meta addon.
Definition meta.h:150

Definition at line 135 of file meta_c.h.

◆ ECS_BITMASK_TYPE

#define ECS_BITMASK_TYPE ( name,
... )    typedef enum __VA_ARGS__ name

Definition at line 130 of file meta_c.h.

◆ ECS_ENUM

#define ECS_ENUM ( name,
... )
Value:
ECS_META_IMPL_CALL(ECS_ENUM_, ECS_META_IMPL, name, #__VA_ARGS__);\
ECS_ENUM_TYPE(name, __VA_ARGS__)

ECS_ENUM(name, body)

Definition at line 59 of file meta_c.h.

◆ ECS_ENUM_DECLARE

#define ECS_ENUM_DECLARE ( name,
type_desc )
Value:
extern ECS_COMPONENT_DECLARE(name);\
ECS_COMPONENT_DECLARE(name) = 0

Definition at line 121 of file meta_c.h.

◆ ECS_ENUM_ECS_META_IMPL

#define ECS_ENUM_ECS_META_IMPL   ECS_ENUM_IMPL

Definition at line 113 of file meta_c.h.

◆ ECS_ENUM_EXTERN

#define ECS_ENUM_EXTERN ( name,
type_desc )    extern ECS_COMPONENT_DECLARE(name)

Definition at line 125 of file meta_c.h.

◆ ECS_ENUM_IMPL

#define ECS_ENUM_IMPL ( name,
type_desc )
Value:
extern ECS_COMPONENT_DECLARE(name);\
static const char *FLECS__##name##_desc = type_desc;\
static ecs_type_kind_t FLECS__##name##_kind = EcsEnumType;\
ECS_COMPONENT_DECLARE(name) = 0

Definition at line 115 of file meta_c.h.

◆ ECS_ENUM_TYPE

#define ECS_ENUM_TYPE ( name,
... )    typedef enum __VA_ARGS__ name

Definition at line 110 of file meta_c.h.

◆ ECS_META_COMPONENT

#define ECS_META_COMPONENT ( world,
name )
Value:
ECS_COMPONENT_DEFINE(world, name);\
ecs_meta_from_desc(world, ecs_id(name),\
FLECS__##name##_kind, FLECS__##name##_desc)
#define ECS_COMPONENT_DEFINE(world, id_)
Define a forward declared component.
Definition flecs_c.h:122

Declare component with descriptor.

Definition at line 48 of file meta_c.h.

◆ ECS_META_IMPL_CALL

#define ECS_META_IMPL_CALL ( base,
impl,
name,
type_desc )    ECS_META_IMPL_CALL_INNER(base, impl, name, type_desc)

Definition at line 86 of file meta_c.h.

◆ ECS_META_IMPL_CALL_INNER

#define ECS_META_IMPL_CALL_INNER ( base,
impl,
name,
type_desc )    base ## impl(name, type_desc)

Definition at line 83 of file meta_c.h.

◆ ECS_PRIVATE

#define ECS_PRIVATE

Macro used to mark part of type for which no reflection data is created.

Definition at line 69 of file meta_c.h.

◆ ECS_STRUCT

#define ECS_STRUCT ( name,
... )
Value:
ECS_META_IMPL_CALL(ECS_STRUCT_, ECS_META_IMPL, name, #__VA_ARGS__);\
ECS_STRUCT_TYPE(name, __VA_ARGS__)

ECS_STRUCT(name, body)

Definition at line 54 of file meta_c.h.

◆ ECS_STRUCT_DECLARE

#define ECS_STRUCT_DECLARE ( name,
type_desc )
Value:
extern ECS_COMPONENT_DECLARE(name);\
ECS_COMPONENT_DECLARE(name) = 0

Definition at line 101 of file meta_c.h.

◆ ECS_STRUCT_ECS_META_IMPL

#define ECS_STRUCT_ECS_META_IMPL   ECS_STRUCT_IMPL

Definition at line 93 of file meta_c.h.

◆ ECS_STRUCT_EXTERN

#define ECS_STRUCT_EXTERN ( name,
type_desc )    extern ECS_COMPONENT_DECLARE(name)

Definition at line 105 of file meta_c.h.

◆ ECS_STRUCT_IMPL

#define ECS_STRUCT_IMPL ( name,
type_desc )
Value:
extern ECS_COMPONENT_DECLARE(name);\
static const char *FLECS__##name##_desc = type_desc;\
static ecs_type_kind_t FLECS__##name##_kind = EcsStructType;\
ECS_COMPONENT_DECLARE(name) = 0

Definition at line 95 of file meta_c.h.

◆ ECS_STRUCT_TYPE

#define ECS_STRUCT_TYPE ( name,
... )    typedef struct __VA_ARGS__ name

Definition at line 90 of file meta_c.h.

◆ FLECS_META_C_H

#define FLECS_META_C_H

Definition at line 25 of file meta_c.h.