Changed how types are registered
Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
This commit is contained in:
17
ev_numeric.h
17
ev_numeric.h
@@ -5,36 +5,19 @@
|
|||||||
#include "ev_types.h"
|
#include "ev_types.h"
|
||||||
|
|
||||||
// Signed integers
|
// Signed integers
|
||||||
EV_REGISTER_TYPE(i8);
|
|
||||||
TYPEDATA_GEN(i8 , DEFAULT(0));
|
TYPEDATA_GEN(i8 , DEFAULT(0));
|
||||||
|
|
||||||
EV_REGISTER_TYPE(i16);
|
|
||||||
TYPEDATA_GEN(i16, DEFAULT(0));
|
TYPEDATA_GEN(i16, DEFAULT(0));
|
||||||
|
|
||||||
EV_REGISTER_TYPE(i32);
|
|
||||||
TYPEDATA_GEN(i32, DEFAULT(0));
|
TYPEDATA_GEN(i32, DEFAULT(0));
|
||||||
|
|
||||||
EV_REGISTER_TYPE(i64);
|
|
||||||
TYPEDATA_GEN(i64, DEFAULT(0));
|
TYPEDATA_GEN(i64, DEFAULT(0));
|
||||||
|
|
||||||
// Unsigned integers
|
// Unsigned integers
|
||||||
EV_REGISTER_TYPE(u8);
|
|
||||||
TYPEDATA_GEN(u8 , DEFAULT(0));
|
TYPEDATA_GEN(u8 , DEFAULT(0));
|
||||||
|
|
||||||
EV_REGISTER_TYPE(u16);
|
|
||||||
TYPEDATA_GEN(u16, DEFAULT(0));
|
TYPEDATA_GEN(u16, DEFAULT(0));
|
||||||
|
|
||||||
EV_REGISTER_TYPE(u32);
|
|
||||||
TYPEDATA_GEN(u32, DEFAULT(0));
|
TYPEDATA_GEN(u32, DEFAULT(0));
|
||||||
|
|
||||||
EV_REGISTER_TYPE(u64);
|
|
||||||
TYPEDATA_GEN(u64, DEFAULT(0));
|
TYPEDATA_GEN(u64, DEFAULT(0));
|
||||||
|
|
||||||
// Floating-Point Numbers
|
// Floating-Point Numbers
|
||||||
EV_REGISTER_TYPE(f32);
|
|
||||||
TYPEDATA_GEN(f32, DEFAULT(0.0f));
|
TYPEDATA_GEN(f32, DEFAULT(0.0f));
|
||||||
|
|
||||||
EV_REGISTER_TYPE(f64);
|
|
||||||
TYPEDATA_GEN(f64, DEFAULT(0.0));
|
TYPEDATA_GEN(f64, DEFAULT(0.0));
|
||||||
|
|
||||||
struct Int8Data { i8 MIN; i8 MAX; };
|
struct Int8Data { i8 MIN; i8 MAX; };
|
||||||
|
|||||||
27
ev_types.h
27
ev_types.h
@@ -43,34 +43,21 @@ typedef struct {
|
|||||||
DEFINE_HASH_FUNCTION(T,DEFAULT) { ev_hash_murmur3(self, sizeof(T), seed); }
|
DEFINE_HASH_FUNCTION(T,DEFAULT) { ev_hash_murmur3(self, sizeof(T), seed); }
|
||||||
|
|
||||||
#define DEFINE_EQUAL_FUNCTION(T,name) bool EQUAL_FUNCTION(T,name)(T *self, T *other)
|
#define DEFINE_EQUAL_FUNCTION(T,name) bool EQUAL_FUNCTION(T,name)(T *self, T *other)
|
||||||
|
// NOTE: This shouldn't be used for non-arithmetic types.
|
||||||
#define DEFINE_DEFAULT_EQUAL_FUNCTION(T) \
|
#define DEFINE_DEFAULT_EQUAL_FUNCTION(T) \
|
||||||
DEFINE_EQUAL_FUNCTION(T,DEFAULT) { return *self == *other; }
|
DEFINE_EQUAL_FUNCTION(T,DEFAULT) { return memcmp(self, other, sizeof(T)); }
|
||||||
|
|
||||||
#define DECLARE_COPY_FUNCTION(T,name) DEFINE_COPY_FUNCTION(T,name);
|
#define DECLARE_COPY_FUNCTION(T,name) DEFINE_COPY_FUNCTION(T,name);
|
||||||
#define DECLARE_FREE_FUNCTION(T,name) DEFINE_FREE_FUNCTION(T,name);
|
#define DECLARE_FREE_FUNCTION(T,name) DEFINE_FREE_FUNCTION(T,name);
|
||||||
#define DECLARE_HASH_FUNCTION(T,name) DEFINE_HASH_FUNCTION(T,name);
|
#define DECLARE_HASH_FUNCTION(T,name) DEFINE_HASH_FUNCTION(T,name);
|
||||||
#define DECLARE_EQUAL_FUNCTION(T,name) DEFINE_EQUAL_FUNCTION(T,name);
|
#define DECLARE_EQUAL_FUNCTION(T,name) DEFINE_EQUAL_FUNCTION(T,name);
|
||||||
|
|
||||||
#define EV_REGISTER_TYPE(T) \
|
|
||||||
DEFINE_DEFAULT_COPY_FUNCTION(T) \
|
|
||||||
DEFINE_DEFAULT_FREE_FUNCTION(T) \
|
|
||||||
DEFINE_DEFAULT_HASH_FUNCTION(T) \
|
|
||||||
DEFINE_DEFAULT_EQUAL_FUNCTION(T)
|
|
||||||
|
|
||||||
#define EV_TYPEDEF(T, ...) \
|
|
||||||
typedef __VA_ARGS__ T; \
|
|
||||||
EV_REGISTER_TYPE(T)
|
|
||||||
|
|
||||||
#define TypeData(T) EV_CAT(EV_TYPEDATA_,T)
|
#define TypeData(T) EV_CAT(EV_TYPEDATA_,T)
|
||||||
#define TYPEDATA_GEN(T, ...) \
|
#define TYPEDATA_GEN(T, ...) \
|
||||||
static const EvTypeData TypeData(T) = { \
|
static const EvTypeData TypeData(T) = { \
|
||||||
EV_DEBUG(.name = EV_STRINGIZE(T),) \
|
EV_DEBUG(.name = EV_STRINGIZE(T),) \
|
||||||
.size = sizeof(T), \
|
.size = sizeof(T), \
|
||||||
.alignment = EV_ALIGNOF(T), \
|
.alignment = EV_ALIGNOF(T), \
|
||||||
.copy_fn = (ev_copy_fn)COPY_FUNCTION(T, DEFAULT), \
|
|
||||||
.hash_fn = (ev_hash_fn)HASH_FUNCTION(T, DEFAULT), \
|
|
||||||
.free_fn = (ev_free_fn)FREE_FUNCTION(T, DEFAULT), \
|
|
||||||
.equal_fn = (ev_equal_fn)EQUAL_FUNCTION(T, DEFAULT), \
|
|
||||||
.default_val = (void*)&(T){0}, \
|
.default_val = (void*)&(T){0}, \
|
||||||
.invalid_val = (void*)&(T){0}, \
|
.invalid_val = (void*)&(T){0}, \
|
||||||
EV_VA_OPT(__VA_ARGS__)(EV_FOREACH_UDATA(__EV_STRUCT_METHOD_DEF, T, __VA_ARGS__)) \
|
EV_VA_OPT(__VA_ARGS__)(EV_FOREACH_UDATA(__EV_STRUCT_METHOD_DEF, T, __VA_ARGS__)) \
|
||||||
@@ -92,10 +79,12 @@ typedef struct {
|
|||||||
#define __EV_DEFAULT_FN(T, ...) .default_val = (void*)&(T){ __VA_ARGS__ },
|
#define __EV_DEFAULT_FN(T, ...) .default_val = (void*)&(T){ __VA_ARGS__ },
|
||||||
#define __EV_INVALID_FN(T, ...) .invalid_val = (void*)&(T){ __VA_ARGS__ },
|
#define __EV_INVALID_FN(T, ...) .invalid_val = (void*)&(T){ __VA_ARGS__ },
|
||||||
|
|
||||||
#define EV_COPY(T) TypeData(T).copy_fn
|
#define METHOD_CHECK(...) __VA_ARGS__ EV_DEBUG(?__VA_ARGS__:assert(!EV_STR(__VA_ARGS__)"not defined"))
|
||||||
#define EV_FREE(T) TypeData(T).free_fn
|
|
||||||
#define EV_HASH(T) TypeData(T).hash_fn
|
#define EV_COPY(T) METHOD_CHECK(TypeData(T).copy_fn)
|
||||||
#define EV_EQUAL(T) TypeData(T).equal_fn
|
#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) *TypeData(T).default_val
|
#define EV_DEFAULT(T) *TypeData(T).default_val
|
||||||
#define EV_INVALID(T) *TypeData(T).invalid_val
|
#define EV_INVALID(T) *TypeData(T).invalid_val
|
||||||
|
|
||||||
|
|||||||
24
ev_vec.h
24
ev_vec.h
@@ -30,24 +30,22 @@
|
|||||||
#define EV_VEC_GROWTH_RATE 3 / 2
|
#define EV_VEC_GROWTH_RATE 3 / 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EV_TYPEDEF(ev_vec_t, void *);
|
typedef void *ev_vec_t;
|
||||||
TYPEDATA_GEN(ev_vec_t);
|
TYPEDATA_GEN(ev_vec_t, INVALID(0));
|
||||||
EV_TYPEDEF(ev_svec_t, void *);
|
typedef void *ev_svec_t;
|
||||||
TYPEDATA_GEN(ev_svec_t);
|
TYPEDATA_GEN(ev_svec_t, INVALID(0));
|
||||||
|
|
||||||
EV_TYPEDEF(ev_vec_error_t, enum {
|
typedef enum {
|
||||||
EV_VEC_ERR_NONE = 0,
|
EV_VEC_ERR_NONE = 0,
|
||||||
EV_VEC_ERR_OOM = 1,
|
EV_VEC_ERR_OOM = 1
|
||||||
});
|
} ev_vec_error_t;
|
||||||
|
TYPEDATA_GEN(ev_vec_error_t, DEFAULT(EV_VEC_ERR_NONE));
|
||||||
|
|
||||||
#if defined(EV_VEC_SHORTNAMES)
|
#if defined(EV_VEC_SHORTNAMES)
|
||||||
EV_TYPEDEF(vec_t, ev_vec_t);
|
#define vec_t ev_vec_t
|
||||||
TYPEDATA_GEN(vec_t);
|
#define svec_t ev_svec_t
|
||||||
EV_TYPEDEF(svec_t, ev_svec_t);
|
|
||||||
TYPEDATA_GEN(svec_t);
|
|
||||||
|
|
||||||
EV_TYPEDEF(vec_error_t, ev_vec_error_t);
|
#define vec_error_t ev_vec_error_t
|
||||||
TYPEDATA_GEN(vec_error_t);
|
|
||||||
|
|
||||||
# define vec(T) ev_vec(T)
|
# define vec(T) ev_vec(T)
|
||||||
# define svec(T) ev_svec(T)
|
# define svec(T) ev_svec(T)
|
||||||
|
|||||||
Reference in New Issue
Block a user