123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- #ifndef ifa_H_INCLUDED
- #define ifa_H_INCLUDED
- /** Ifa contains functionality to emulate go language style interfaces in C. */
- #define INTERFACE_BODY() \
- void * self;
-
- #define INTERFACE(NAME) \
- struct name
- #define INTERFACE_SELF(IFA) ((IFA)->self)
- #define INTERFACE_INIT(IFA, SELF) do { ((IFA)->self) = SELF; } while(0)
- typedef struct Ifa_ Ifa;
- typedef struct Metab_ Metab;
- struct Metab_ {
- void * (*free)(void * ptr);
- void * (*done)(void * ptr);
- };
- struct Ifa_ {
- void * data;
- struct Metab * methods;
- };
- /** Ref is a reference counted wrapper around arbitrary data pointer, */
- struct Ref_ {
- struct Inter_ * inter;
- int refcount;
- };
- #endif
|