summaryrefslogtreecommitdiff
path: root/src/cobj.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cobj.h')
-rw-r--r--src/cobj.h50
1 files changed, 28 insertions, 22 deletions
diff --git a/src/cobj.h b/src/cobj.h
index fd28746..736170b 100644
--- a/src/cobj.h
+++ b/src/cobj.h
@@ -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