7typedef struct Iterator Iterator;
8typedef struct Iterator_WeakRef Iterator_WeakRef;
12typedef struct Sortable {
17 intptr (*cmp)(_In_
void* self,
void* other, uint32 flags);
19extern Sortable Sortable_tmpl;
21typedef struct Hashable {
26 uint32 (*hash)(_In_
void* self, uint32 flags);
28extern Hashable Hashable_tmpl;
30typedef struct Convertible {
41 bool (*convert)(_In_
void* self, stype st, stgeneric* dest, uint32 flags);
43extern Convertible Convertible_tmpl;
45typedef struct IteratorIf {
50 bool (*valid)(_In_
void* self);
51 bool (*next)(_In_
void* self);
52 bool (*get)(_In_
void* self,
stvar* out);
54extern IteratorIf IteratorIf_tmpl;
56typedef struct Iterable {
62 Iterator* (*iter)(_In_
void* self);
64extern Iterable Iterable_tmpl;
66typedef struct Iterator_ClassIf {
71 bool (*valid)(_In_
void* self);
72 bool (*next)(_In_
void* self);
73 bool (*get)(_In_
void* self,
stvar* out);
75extern Iterator_ClassIf Iterator_ClassIf_tmpl;
77typedef struct Iterator {
89#define Iterator(inst) ((Iterator*)(unused_noeval((inst) && &((inst)->_is_Iterator)), (inst)))
90#define IteratorNone ((Iterator*)NULL)
92typedef struct Iterator_WeakRef {
95 void* _is_Iterator_WeakRef;
96 void* _is_ObjInst_WeakRef;
101#define Iterator_WeakRef(inst) ((Iterator_WeakRef*)(unused_noeval((inst) && &((inst)->_is_Iterator_WeakRef)), (inst)))
104#define iteratorValid(self) (self)->_->valid(Iterator(self))
106#define iteratorNext(self) (self)->_->next(Iterator(self))
108#define iteratorGet(self, out) (self)->_->get(Iterator(self), out)
#define saDeclarePtr(name)
#define stvar(typen, val)
CX Object System - Object-oriented programming in C.