CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
cchain.h
Go to the documentation of this file.
1
56
57#pragma once
58
59#include <cx/closure/closure.h>
60#include <cx/thread/atomic.h>
61
62CX_C_BEGIN
63
64typedef struct cchain_ref {
65 void* _is_closure_chain;
66} cchain_ref;
67
68_Success_(return) bool _cchainAttach(_Inout_ptr_opt_ cchain* chain, _In_ closureFunc func, intptr token,
69 int n, stvar cvars[]);
70
82#define cchainAttach(chain, func, ...) \
83 _cchainAttach(chain, func, 0, count_macro_args(__VA_ARGS__), (stvar[]) { __VA_ARGS__ })
84
98#define cchainAttachToken(chain, func, token, ...) \
99 _cchainAttach(chain, func, token, count_macro_args(__VA_ARGS__), (stvar[]) { __VA_ARGS__ })
100
111_Success_(return) bool cchainDetach(_Inout_ptr_opt_ cchain* chain, _In_ closureFunc func, intptr token);
112
113_Success_(return) bool _cchainCall(_In_ptr_opt_ cchain* chain, int n, stvar args[]);
114
129#define cchainCall(chain, ...) \
130 _cchainCall(chain, count_macro_args(__VA_ARGS__), (stvar[]) { __VA_ARGS__ })
131
132_Success_(return) bool _cchainCallOnce(_Inout_ptr_opt_ cchain* chain, int n, stvar args[]);
133
145#define cchainCallOnce(chain, ...) \
146 _cchainCallOnce(chain, count_macro_args(__VA_ARGS__), (stvar[]) { __VA_ARGS__ })
147
156_Success_(return) bool cchainTransfer(_Inout_ptr_opt_ cchain* dest, _Inout_ptr_opt_ cchain* src);
157
167_Success_(return) bool cchainClone(_Inout_ptr_opt_ cchain* dest, _In_ptr_opt_ cchain* src);
168
176_Success_(return) bool cchainReset(_Inout_ptr_opt_ cchain* chain);
177
185_Success_(return) bool cchainClear(_Inout_ptr_opt_ cchain* chain);
186
192void cchainDestroy(_Inout_ptr_opt_ cchain* chain);
193
195// end of closure_chain group
196
197CX_C_END
Atomic operations.
Basic closure functionality.
bool(* closureFunc)(stvlist *cvars, stvlist *args)
Definition closure.h:122
bool cchainTransfer(cchain *dest, cchain *src)
bool cchainClear(cchain *chain)
bool cchainDetach(cchain *chain, closureFunc func, intptr token)
bool cchainReset(cchain *chain)
void cchainDestroy(cchain *chain)
bool cchainClone(cchain *dest, _In_ptr_opt_ cchain *src)
#define stvar(typen, val)
Definition stvar.h:162