34 lines
664 B
C
34 lines
664 B
C
#ifndef CUTES_DROP_H
|
|
#define CUTES_DROP_H
|
|
|
|
#include "typeclass_helpers.h"
|
|
|
|
typedef struct {
|
|
void (*const drop)(void* self);
|
|
} IDrop;
|
|
|
|
typedef struct {
|
|
void* data;
|
|
IDrop const* tc;
|
|
} Drop;
|
|
|
|
#define impl_Drop_for(T, drop_f)\
|
|
Drop T##_as_Drop(T* x) {\
|
|
TC_FN_TYPECHECK(void, drop_f, T*);\
|
|
static IDrop const tc = {\
|
|
.drop = (void(*const)(void*)) drop_f,\
|
|
};\
|
|
return (Drop){.tc = &tc, .data = x};\
|
|
}
|
|
|
|
extern void default_drop(void*);
|
|
|
|
#define impl_default_Drop_for(T)\
|
|
Drop T##_as_Drop(T* x) {\
|
|
static IDrop const tc = {\
|
|
.drop = default_drop,\
|
|
};\
|
|
return (Drop){.tc = &tc, .data = x};\
|
|
}
|
|
#endif // !CUTES_DROP_H
|