CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
objstdif.h
1#pragma once
2// This header file is auto-generated!
3// Do not make changes to this file or they will be overwritten.
4// clang-format off
5#include <cx/obj.h>
6#include <cx/struct.h>
7
8CX_C_BEGIN
9
10typedef struct Iterator Iterator;
11typedef struct Iterator_WeakRef Iterator_WeakRef;
12saDeclarePtr(Iterator);
13saDeclarePtr(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)
21
22typedef struct Sortable {
23 ObjIface* _implements;
24 ObjIface* _parent;
25 size_t _size;
26
27 intptr (*cmp)(_In_ void* self, void* other, uint32 flags);
28} Sortable;
29extern Sortable Sortable_tmpl;
30
31typedef struct Hashable {
32 ObjIface* _implements;
33 ObjIface* _parent;
34 size_t _size;
35
36 uint32 (*hash)(_In_ void* self, uint32 flags);
37} Hashable;
38extern Hashable Hashable_tmpl;
39
40typedef struct Convertible {
41 ObjIface* _implements;
42 ObjIface* _parent;
43 size_t _size;
44
45 // NOTE: While this is used by stConvert, the object interface is a higher level interface.
46 // The normal convention of blindly overwriting the destination does not apply here. For
47 // example, when called to convert to a string, the destination should be properly reused
48 // or destroyed first.
49 // The layer between stConvert and Convertible takes care of making sure the destination is
50 // always initialized.
51 bool (*convert)(_In_ void* self, stype st, stgeneric* dest, uint32 flags);
52} Convertible;
53extern Convertible Convertible_tmpl;
54
55typedef struct Serializable {
56 ObjIface* _implements;
57 ObjIface* _parent;
58 size_t _size;
59
60 bool (*serialize)(_In_ void* self, SerWriter* w);
61 bool (*deserialize)(_In_ void* self, SerReader* r);
62} Serializable;
63extern Serializable Serializable_tmpl;
64
65typedef struct IteratorIf {
66 ObjIface* _implements;
67 ObjIface* _parent;
68 size_t _size;
69
70 bool (*valid)(_In_ void* self);
71 bool (*next)(_In_ void* self);
72 bool (*get)(_In_ void* self, stvar* out);
73} IteratorIf;
74extern IteratorIf IteratorIf_tmpl;
75
76typedef struct Iterable {
77 ObjIface* _implements;
78 ObjIface* _parent;
79 size_t _size;
80
81 // Caller owns the iterator and must release it with objRelease
82 Iterator* (*iter)(_In_ void* self);
83} Iterable;
84extern Iterable Iterable_tmpl;
85
86typedef struct Iterator_ClassIf {
87 ObjIface* _implements;
88 ObjIface* _parent;
89 size_t _size;
90
91 bool (*valid)(_In_ void* self);
92 bool (*next)(_In_ void* self);
93 bool (*get)(_In_ void* self, stvar* out);
94} Iterator_ClassIf;
95extern Iterator_ClassIf Iterator_ClassIf_tmpl;
96
97typedef struct Iterator {
98 union {
99 Iterator_ClassIf* _;
100 void* _is_Iterator;
101 void* _is_ObjInst;
102 };
103 ObjClassInfo* _clsinfo;
104 atomic(uintptr) _ref;
105 atomic(ptr) _weakref;
106
107} Iterator;
108extern ObjClassInfo Iterator_clsinfo;
109#define Iterator(inst) objInstCheckClass(Iterator, inst)
110#define IteratorNone ((Iterator*)NULL)
111
112typedef struct Iterator_WeakRef {
113 union {
114 ObjInst* _inst;
115 void* _is_Iterator_WeakRef;
116 void* _is_ObjInst_WeakRef;
117 };
118 atomic(uintptr) _ref;
119 RWLock _lock;
120} Iterator_WeakRef;
121#define Iterator_WeakRef(inst) objWeakRefCheckClass(Iterator, inst)
122
123// bool iteratorValid(Iterator* self);
124#define iteratorValid(self) (self)->_->valid(Iterator(self))
125// bool iteratorNext(Iterator* self);
126#define iteratorNext(self) (self)->_->next(Iterator(self))
127// bool iteratorGet(Iterator* self, stvar* out);
128#define iteratorGet(self, out) (self)->_->get(Iterator(self), out)
129
130CX_C_END
#define saDeclarePtr(name)
Definition sarray.h:100
#define stvar(typen, val)
Definition stvar.h:162
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.