diff options
Diffstat (limited to 'src/cobj.h')
-rw-r--r-- | src/cobj.h | 50 |
1 files changed, 28 insertions, 22 deletions
@@ -1,12 +1,13 @@ #ifndef __COBJ_IMPLS_H__ # define __COBJ_IMPLS_H__ -# define get(klass, instance, field, ...) \ - klass##_get_##field(instance, ## __VA_ARGS__) -# define set(klass, instance, field, ...) \ - klass##_set_##field(instance, ## __VA_ARGS__) +# define get(instance, field, ...) \ + (instance)->get_##field(instance, ## __VA_ARGS__) +# define set(instance, field, ...) \ + (instance)->set_##field(instance, ## __VA_ARGS__) +# define call(instance, fun, ...) \ + (instance)->fun(instance, ## __VA_ARGS__) # define new(klass, ...) klass##_new(__VA_ARGS__) # define del(klass, ...) klass##_del(__VA_ARGS__) -# define ask(klass, fun, ...) klass##_##fun(__VA_ARGS__) #endif /* __COBJ_IMPLS_H__ */ #if defined(__USE_C_OBJSYS__) @@ -19,10 +20,8 @@ # undef __USE_C_OBJSYS__ #elif defined(__COBJ_PRIV_IMPLS_H__) # define UNUSED(arg) while(0 && (arg)) -# define CLASS(klass, data) \ - typedef struct klass##_impl_struct data __ ## klass ## _impl # define TYPE(klass) \ - __ ## klass ## _impl + struct __ ## klass ## _impl # define GETTER(klass, field, type, body, ...) \ type klass##_get_##field(klass self, ## __VA_ARGS__) \ body @@ -38,32 +37,39 @@ # define DEL(klass, body, ...) \ void klass ## _del(klass self, ## __VA_ARGS__) \ body -# define NCLASS(klass, data) \ + +# define SELF(name) \ + self->_property_ ## name +# define GET(obj, name) \ + (obj)->_property_ ## name + +#else +# define CLASS(klass, data, ...) \ typedef struct __##klass##_impl * klass; \ + klass klass ## _new(__VA_ARGS__); \ + void klass ## _delete(); \ struct __##klass##_impl data # define LIST(klass, field, type, dim, ...) \ type _property_ ## field dim; \ type* (*get_ ## field)(klass, ## __VA_ARGS__); \ - bool (*set_ ## field)(klass, ## __VA_ARGS__, type *) + bool (*set_ ## field)(klass, ## __VA_ARGS__, const type * const) # define ATOM(klass, field, type, ...) \ type _property_ ## field; \ type (*get_ ## field)(klass, ## __VA_ARGS__);\ bool (*set_ ## field)(klass, ## __VA_ARGS__, type) -# define DEFN(klass, name, type, ...) \ +# define FUNC(klass, name, type, ...) \ type (*name)(klass, ## __VA_ARGS__) -#else -# define CLASS(klass) \ - typedef struct klass ## _impl_struct * klass -# define GETTER(klass, field, type, ...) \ - type klass##_get_##field(klass self, ## __VA_ARGS__) -# define SETTER(klass, field, type, ...) \ - bool klass##_set_##field(klass self, ## __VA_ARGS__, type value) -# define DEFINE(klass, name, type, ...) \ - type klass##_##name(klass self, ## __VA_ARGS__) -# define NEW(klass, ...) klass klass ## _new(__VA_ARGS__) -# define DEL(klass, ...) void klass ## _del(klass self, ## __VA_ARGS__) + +# define PROPERTY(klass, name) \ + (self->get_ ## name) = (& klass ## _ ## get_ ## name), \ + (self->set_ ## name) = (& klass ## _ ## set_ ## name) + +# define CALLABLE(klass, name) \ + (self->name) = (& klass ## _ ## name) + +# define DEL() void (*del)(klass self) # define __USE_C_OBJSYS__ #endif |