diff options
| author | Tyge Løvset <[email protected]> | 2022-05-04 18:50:28 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2022-05-04 18:50:28 +0200 |
| commit | 734a6f730ced85afd06ce7d4704b0cc79ac6678d (patch) | |
| tree | 03ef89b9d772e1fab6a297307a1ecf8a799598bd | |
| parent | 6d7c466b5e45780075178c8a65634056fd937e51 (diff) | |
| download | STC-modified-734a6f730ced85afd06ce7d4704b0cc79ac6678d.tar.gz STC-modified-734a6f730ced85afd06ce7d4704b0cc79ac6678d.zip | |
Small change in find_if/it macro + doc of index variable.
| -rw-r--r-- | docs/ccommon_api.md | 3 | ||||
| -rw-r--r-- | include/stc/ccommon.h | 12 |
2 files changed, 9 insertions, 6 deletions
diff --git a/docs/ccommon_api.md b/docs/ccommon_api.md index 6922bf3a..ab4a89d9 100644 --- a/docs/ccommon_api.md +++ b/docs/ccommon_api.md @@ -183,6 +183,9 @@ int* v; c_find_if (v, cvec_i, vec, *v == 2); if (v) printf("%d\n", *v); +c_find_if (v, cvec_i, vec, index == 2); // index is internal in find_if. +if (v) printf("%d\n", *v); // 3 + cvec_i_iter it; c_find_it (it, cvec_i, vec, *it.ref == 2); cvec_i_erase_at(&vec, it); // assume found diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h index d3749cf1..8885626c 100644 --- a/include/stc/ccommon.h +++ b/include/stc/ccommon.h @@ -168,7 +168,7 @@ STC_INLINE char* c_strnstrn(const char *s, const char *needle, size_t slen, cons #define c_autovar(...) c_MACRO_OVERLOAD(c_autovar, __VA_ARGS__)
#define c_autovar2(declvar, drop) for (declvar, **_c_ii = NULL; !_c_ii; ++_c_ii, drop)
-#define c_autovar3(declvar, cond, drop) for (declvar, **_c_ii = NULL; !_c_ii && (cond); ++_c_ii, drop)
+#define c_autovar3(declvar, pred, drop) for (declvar, **_c_ii = NULL; !_c_ii && (pred); ++_c_ii, drop)
#define c_autoscope(init, drop) for (int _c_ii = (init, 0); !_c_ii; ++_c_ii, drop)
#define c_autodefer(...) for (int _c_ii = 0; !_c_ii; ++_c_ii, __VA_ARGS__)
#define c_breakauto continue
@@ -209,15 +209,15 @@ STC_INLINE char* c_strnstrn(const char *s, const char *needle, size_t slen, cons #define c_find_it(it, C, cnt, pred) do { \
size_t index = 0; \
C##_iter _end = C##_end(&cnt); \
- for (it = C##_begin(&cnt); it.ref != _end.ref; C##_next(&it)) \
- if (pred) break; else ++index; \
+ for (it = C##_begin(&cnt); it.ref != _end.ref && !(pred); C##_next(&it)) \
+ ++index; \
} while (0)
#define c_find_if(vp, C, cnt, pred) do { \
size_t index = 0; \
- C##_iter _it, _end = C##_end(&cnt); \
- for (_it = C##_begin(&cnt); _it.ref != _end.ref; C##_next(&_it)) \
- if (vp = _it.ref, pred) break; else ++index; \
+ C##_iter _it = C##_begin(&cnt), _end = C##_end(&cnt); \
+ for (; vp = _it.ref, _it.ref != _end.ref && !(pred); C##_next(&_it)) \
+ ++index; \
if (_it.ref == _end.ref) vp = NULL; \
} while (0)
|
