diff options
| author | Tyge Løvset <[email protected]> | 2023-08-11 16:04:52 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2023-08-11 16:14:10 +0200 |
| commit | 0c29a8413619870f23682b74c032137e81db17e2 (patch) | |
| tree | 6ae1cdd3fa6e26777d1e8977a045732a839b6afa | |
| parent | 3f9337aad678508f25ea83bcd4f5e5b95e69902c (diff) | |
| download | STC-modified-0c29a8413619870f23682b74c032137e81db17e2.tar.gz STC-modified-0c29a8413619870f23682b74c032137e81db17e2.zip | |
Minor internals.
| -rw-r--r-- | include/stc/coroutine.h | 21 | ||||
| -rw-r--r-- | include/stc/priv/template.h | 24 |
2 files changed, 20 insertions, 25 deletions
diff --git a/include/stc/coroutine.h b/include/stc/coroutine.h index cecd4002..5f06e7b8 100644 --- a/include/stc/coroutine.h +++ b/include/stc/coroutine.h @@ -131,16 +131,19 @@ typedef enum { (void)((co)->cco_state = 0) /* - * Generators + * Iterator (for generators) + * User define: Gen must be an existing typedef struct: + * Gen_iter Gen_begin(Gen* g); // function + * int Gen_next(Gen_iter* it); // coroutine */ -#define cco_iter_struct(Name, ...) \ - typedef Name Name##_value; \ - typedef struct { \ - Name##_value* ref; \ +#define cco_iter_struct(Gen, ...) \ + typedef Gen Gen##_value; \ + typedef struct Gen##_iter { \ + Gen##_value* ref; \ int cco_state; \ __VA_ARGS__ \ - } Name##_iter + } Gen##_iter /* * Tasks @@ -148,9 +151,9 @@ typedef enum { struct cco_runtime; -#define cco_task_struct(Name, ...) \ - struct Name { \ - int (*cco_func)(struct Name*, struct cco_runtime*); \ +#define cco_task_struct(Task, ...) \ + struct Task { \ + int (*cco_func)(struct Task*, struct cco_runtime*); \ int cco_state, cco_expect; \ __VA_ARGS__ \ } diff --git a/include/stc/priv/template.h b/include/stc/priv/template.h index 3b8a5b39..65dee203 100644 --- a/include/stc/priv/template.h +++ b/include/stc/priv/template.h @@ -140,14 +140,14 @@ #ifndef i_keyclone #define i_keyclone c_PASTE(i_key, _clone) #endif - #if !defined i_keyto && defined i_keyraw - #define i_keyto c_PASTE(i_key, _toraw) + #ifndef i_keydrop + #define i_keydrop c_PASTE(i_key, _drop) #endif #if !defined i_keyfrom && defined i_keyraw #define i_keyfrom c_PASTE(i_key, _from) #endif - #ifndef i_keydrop - #define i_keydrop c_PASTE(i_key, _drop) + #if !defined i_keyto && defined i_keyraw + #define i_keyto c_PASTE(i_key, _toraw) #endif #if !defined i_keyraw && (defined i_cmp || defined i_less || defined i_eq || defined i_hash) #define i_use_cmp @@ -245,22 +245,14 @@ #ifndef i_valclone #define i_valclone c_PASTE(i_val, _clone) #endif - #if !defined i_valto && defined i_valraw - #define i_valto c_PASTE(i_val, _toraw) + #ifndef i_valdrop + #define i_valdrop c_PASTE(i_val, _drop) #endif #if !defined i_valfrom && defined i_valraw #define i_valfrom c_PASTE(i_val, _from) #endif - #ifndef i_valdrop - #define i_valdrop c_PASTE(i_val, _drop) - #endif -#endif - -#if !defined i_valraw && !defined i_no_clone - #if !defined i_valfrom && defined i_valclone - #define i_valfrom i_valclone - #elif !defined i_valclone && defined i_valfrom - #define i_valclone i_valfrom + #if !defined i_valto && defined i_valraw + #define i_valto c_PASTE(i_val, _toraw) #endif #endif |
