10typedef struct Iterator Iterator;
11typedef struct Iterator_WeakRef Iterator_WeakRef;
14#define _sti_Iterator _sti_object
15#define SType_Iterator Iterator*
16#define STStorageType_Iterator Iterator*
17#define STypeArg_Iterator(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(Iterator, val))
18#define STypeArgPtr_Iterator(type, val) (stgeneric*)objInstCheckClassPtr(Iterator, val)
19#define STypeCheckedArg_Iterator(type, val) stType(type), stArg(type, val)
20#define STypeCheckedPtrArg_Iterator(type, val) stType(type), stArgPtr(type, val)
22typedef struct Sortable {
27 intptr (*cmp)(_In_
void* self,
void* other, uint32 flags);
29extern Sortable Sortable_tmpl;
31typedef struct Hashable {
36 uint32 (*hash)(_In_
void* self, uint32 flags);
38extern Hashable Hashable_tmpl;
40typedef struct Convertible {
51 bool (*convert)(_In_
void* self,
stype st, stgeneric* dest, uint32 flags);
53extern Convertible Convertible_tmpl;
55typedef struct Serializable {
60 bool (*serialize)(_In_
void* self,
SerWriter* w);
61 bool (*deserialize)(_In_
void* self, SerReader* r);
63extern Serializable Serializable_tmpl;
65typedef struct IteratorIf {
70 bool (*valid)(_In_
void* self);
71 bool (*next)(_In_
void* self);
72 bool (*get)(_In_
void* self,
stvar* out);
74extern IteratorIf IteratorIf_tmpl;
76typedef struct Iterable {
82 Iterator* (*iter)(_In_
void* self);
84extern Iterable Iterable_tmpl;
86typedef struct Iterator_ClassIf {
91 bool (*valid)(_In_
void* self);
92 bool (*next)(_In_
void* self);
93 bool (*get)(_In_
void* self,
stvar* out);
95extern Iterator_ClassIf Iterator_ClassIf_tmpl;
97typedef struct Iterator {
104 atomic(uintptr) _ref;
105 atomic(ptr) _weakref;
109#define Iterator(inst) objInstCheckClass(Iterator, inst)
110#define IteratorNone ((Iterator*)NULL)
112typedef struct Iterator_WeakRef {
115 void* _is_Iterator_WeakRef;
116 void* _is_ObjInst_WeakRef;
118 atomic(uintptr) _ref;
121#define Iterator_WeakRef(inst) objWeakRefCheckClass(Iterator, inst)
124#define iteratorValid(self) (self)->_->valid(Iterator(self))
126#define iteratorNext(self) (self)->_->next(Iterator(self))
128#define iteratorGet(self, out) (self)->_->get(Iterator(self), out)
#define saDeclarePtr(name)
#define stvar(typen, val)
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.