Added default overrides in ev_types
Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
This commit is contained in:
@@ -41,15 +41,14 @@
|
||||
|
||||
#if ( EV_CC_MSVC )
|
||||
# define EV_WARNING_DISABLE_MSVC(w) EV_PRAGMA(warning(disable:w))
|
||||
# define EV_WARNING_DISABLE_CLANG(...)
|
||||
# define EV_WARNING_DISABLE_GCC(...)
|
||||
# define EV_WARNING_PUSH() EV_PRAGMA(warning(push))
|
||||
# define EV_WARNING_POP() EV_PRAGMA(warning(pop))
|
||||
# define EV_EXPORT __declspec(dllexport)
|
||||
# define EV_IMPORT __declspec(dllimport)
|
||||
# define EV_UNUSED
|
||||
# define EV_FORCEINLINE __forceinline
|
||||
|
||||
# define EV_WARNING_DISABLE_CLANG(...)
|
||||
# define EV_WARNING_DISABLE_GCC(...)
|
||||
#elif ( EV_CC_GCC || EV_CC_CLANG )
|
||||
# define EV_EXPORT __attribute__((visibility("default")))
|
||||
# define EV_IMPORT
|
||||
@@ -66,8 +65,7 @@
|
||||
# endif
|
||||
# define EV_WARNING_PUSH() EV_PRAGMA(EV_PRAGMA_CC_NAME diagnostic push)
|
||||
# define EV_WARNING_POP() EV_PRAGMA(EV_PRAGMA_CC_NAME diagnostic pop)
|
||||
|
||||
#define EV_WARNING_DISABLE_MSVC()
|
||||
# define EV_WARNING_DISABLE_MSVC(...)
|
||||
#else
|
||||
# error "Unknown Compiler"
|
||||
#endif
|
||||
|
||||
13
ev_types.h
13
ev_types.h
@@ -52,8 +52,8 @@ typedef struct {
|
||||
#define DECLARE_HASH_FUNCTION(T,name) DEFINE_HASH_FUNCTION(T,name);
|
||||
#define DECLARE_EQUAL_FUNCTION(T,name) DEFINE_EQUAL_FUNCTION(T,name);
|
||||
|
||||
#define EV_OVERRIDE_VAR(T) EV_CAT(__ev_internal_override_var_,T)
|
||||
#define TypeData(T) EV_CAT(EV_TYPEDATA_,T)
|
||||
#define TYPEDATA_STRUCT_FROM_(T)
|
||||
#define TYPEDATA_GEN(T, ...) \
|
||||
EV_WARNING_PUSH(); \
|
||||
EV_WARNING_DISABLE_GCC("override-init"); \
|
||||
@@ -66,7 +66,8 @@ typedef struct {
|
||||
.invalid_val = (void*)&(T){0}, \
|
||||
EV_VA_OPT(__VA_ARGS__)(EV_FOREACH_UDATA(__EV_STRUCT_METHOD_DEF, T, __VA_ARGS__)) \
|
||||
}; \
|
||||
EV_WARNING_POP()
|
||||
EV_WARNING_POP(); \
|
||||
EV_UNUSED static T EV_OVERRIDE_VAR(T)
|
||||
|
||||
#define __EV_STRUCT_METHOD_DEF(T, ...) EV_CAT(__EV_,EV_CAT(EV_HEAD __VA_ARGS__,_FN))(T, EV_TAIL __VA_ARGS__)
|
||||
|
||||
@@ -90,7 +91,13 @@ typedef struct {
|
||||
#define EV_FREE(T) METHOD_CHECK(TypeData(T).free_fn)
|
||||
#define EV_HASH(T) METHOD_CHECK(TypeData(T).hash_fn)
|
||||
#define EV_EQUAL(T) METHOD_CHECK(TypeData(T).equal_fn)
|
||||
#define EV_DEFAULT(T) (*(T*)TypeData(T).default_val)
|
||||
#define __EV_OVERRIDE_DEFAULT(T, ...) EV_OVERRIDE_VAR(T).__VA_ARGS__,
|
||||
#define __EV_DEFAULT_INTERNAL(T) (*(T*)TypeData(T).default_val)
|
||||
#define EV_DEFAULT(T, ...) EV_VA_OPT_ELSE(__VA_ARGS__) \
|
||||
((EV_OVERRIDE_VAR(T)=__EV_DEFAULT_INTERNAL(T), \
|
||||
EV_FOREACH_UDATA(__EV_OVERRIDE_DEFAULT, T, __VA_ARGS__) \
|
||||
EV_OVERRIDE_VAR(T))) \
|
||||
(__EV_DEFAULT_INTERNAL(T))
|
||||
#define EV_INVALID(T) (*(T*)TypeData(T).invalid_val)
|
||||
|
||||
#endif // EV_HEADERS_TYPES_H
|
||||
|
||||
5
ev_vec.h
5
ev_vec.h
@@ -132,9 +132,8 @@ ev_vec_init_impl(
|
||||
#define ev_svec_init(T, ...) __ev_svec_init_impl(T, EV_ARRSIZE((T[])__VA_ARGS__), __VA_ARGS__)
|
||||
#define ev_svec_init_w_cap(T, cap) __ev_svec_init_w_cap_impl(T, cap)
|
||||
|
||||
#define __ev_svec_structname(T) EV_CAT(EV_CAT(svec_type_##T##_,__COUNTER__),__LINE__)
|
||||
#define __ev_svec_init_impl(T, len, ...) \
|
||||
(ev_svec(T))&((struct __ev_svec_structname(T) { \
|
||||
(ev_svec(T))&((struct { \
|
||||
struct ev_vec_meta_t meta; \
|
||||
EV_ALIGNAS(EV_ALIGNOF(T)) T data[len]; \
|
||||
}) { \
|
||||
@@ -147,7 +146,7 @@ ev_vec_init_impl(
|
||||
}).data
|
||||
|
||||
#define __ev_svec_init_w_cap_impl(T, cap) \
|
||||
(ev_svec(T))&((struct __ev_svec_structname(T) { \
|
||||
(ev_svec(T))&((struct { \
|
||||
struct ev_vec_meta_t meta; \
|
||||
EV_ALIGNAS(EV_ALIGNOF(T)) T data[cap]; \
|
||||
}) { \
|
||||
|
||||
Reference in New Issue
Block a user