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
7typedef struct Iterator Iterator;
8typedef struct Iterator_WeakRef Iterator_WeakRef;
9saDeclarePtr(Iterator);
10saDeclarePtr(Iterator_WeakRef);
11
12typedef struct Sortable {
13 ObjIface* _implements;
14 ObjIface* _parent;
15 size_t _size;
16
17 intptr (*cmp)(_In_ void* self, void* other, uint32 flags);
18} Sortable;
19extern Sortable Sortable_tmpl;
20
21typedef struct Hashable {
22 ObjIface* _implements;
23 ObjIface* _parent;
24 size_t _size;
25
26 uint32 (*hash)(_In_ void* self, uint32 flags);
27} Hashable;
28extern Hashable Hashable_tmpl;
29
30typedef struct Convertible {
31 ObjIface* _implements;
32 ObjIface* _parent;
33 size_t _size;
34
35 // NOTE: While this is used by stConvert, the object interface is a higher level interface.
36 // The normal convention of blindly overwriting the destination does not apply here. For
37 // example, when called to convert to a string, the destination should be properly reused
38 // or destroyed first.
39 // The layer between stConvert and Convertible takes care of making sure the destination is
40 // always initialized.
41 bool (*convert)(_In_ void* self, stype st, stgeneric* dest, uint32 flags);
42} Convertible;
43extern Convertible Convertible_tmpl;
44
45typedef struct IteratorIf {
46 ObjIface* _implements;
47 ObjIface* _parent;
48 size_t _size;
49
50 bool (*valid)(_In_ void* self);
51 bool (*next)(_In_ void* self);
52 bool (*get)(_In_ void* self, stvar* out);
53} IteratorIf;
54extern IteratorIf IteratorIf_tmpl;
55
56typedef struct Iterable {
57 ObjIface* _implements;
58 ObjIface* _parent;
59 size_t _size;
60
61 // Caller owns the iterator and must release it with objRelease
62 Iterator* (*iter)(_In_ void* self);
63} Iterable;
64extern Iterable Iterable_tmpl;
65
66typedef struct Iterator_ClassIf {
67 ObjIface* _implements;
68 ObjIface* _parent;
69 size_t _size;
70
71 bool (*valid)(_In_ void* self);
72 bool (*next)(_In_ void* self);
73 bool (*get)(_In_ void* self, stvar* out);
74} Iterator_ClassIf;
75extern Iterator_ClassIf Iterator_ClassIf_tmpl;
76
77typedef struct Iterator {
78 union {
79 Iterator_ClassIf* _;
80 void* _is_Iterator;
81 void* _is_ObjInst;
82 };
83 ObjClassInfo* _clsinfo;
84 atomic(uintptr) _ref;
85 atomic(ptr) _weakref;
86
87} Iterator;
88extern ObjClassInfo Iterator_clsinfo;
89#define Iterator(inst) ((Iterator*)(unused_noeval((inst) && &((inst)->_is_Iterator)), (inst)))
90#define IteratorNone ((Iterator*)NULL)
91
92typedef struct Iterator_WeakRef {
93 union {
94 ObjInst* _inst;
95 void* _is_Iterator_WeakRef;
96 void* _is_ObjInst_WeakRef;
97 };
98 atomic(uintptr) _ref;
99 RWLock _lock;
100} Iterator_WeakRef;
101#define Iterator_WeakRef(inst) ((Iterator_WeakRef*)(unused_noeval((inst) && &((inst)->_is_Iterator_WeakRef)), (inst)))
102
103// bool iteratorValid(Iterator* self);
104#define iteratorValid(self) (self)->_->valid(Iterator(self))
105// bool iteratorNext(Iterator* self);
106#define iteratorNext(self) (self)->_->next(Iterator(self))
107// bool iteratorGet(Iterator* self, stvar* out);
108#define iteratorGet(self, out) (self)->_->get(Iterator(self), out)
109
#define saDeclarePtr(name)
Definition sarray.h:98
#define stvar(typen, val)
Definition stvar.h:153
CX Object System - Object-oriented programming in C.