CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
foreach.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <cx/utils/macros.h>
4
7
223
248
#define foreach(type, itervar, ...) foreach_##type(type, itervar, __VA_ARGS__)
249
250
#define foreach_generic(type, itervar, ...) for (register char _foreach_outer = 1; _foreach_outer; _foreach_outer = 0) \
251
for(ForEachIterType_##type itervar = ForEachIterInit_##type; _foreach_outer; _foreach_outer = 0) \
252
for(; _foreach_outer; ForEachFinish_##type(itervar), _foreach_outer = 0) \
253
for(ForEachInit_##type(itervar, __VA_ARGS__); ForEachValid_##type(itervar); ForEachNext_##type(itervar))
254
255
#define foreach_sarray(...) _foreach_array_msvc_workaround((__VA_ARGS__))
256
#define _foreach_array_msvc_workaround(args) _foreach_sarray args
257
#define _foreach_sarray(type, itervar, elemtype, elemvar, arrref) if ((arrref)._is_sarray) \
258
for (register char _foreach_outer = 1; _foreach_outer; _foreach_outer = 0) \
259
for (int32 itervar = 0, _##itervar##_max = saSize(arrref); _foreach_outer; _foreach_outer = 0) \
260
for (elemtype elemvar = (elemtype){0}; _foreach_outer; _foreach_outer = 0) \
261
for (itervar = 0; itervar < _##itervar##_max && (elemvar = (arrref).a[itervar], 1); ++itervar)
262
263
#define foreach_hashtable foreach_generic
264
#define ForEachIterType_hashtable htiter
265
#define ForEachIterInit_hashtable {0}
266
#define ForEachInit_hashtable(itervar, ht) htiInit(&itervar, ht)
267
#define ForEachValid_hashtable(itervar) htiValid(&itervar)
268
#define ForEachNext_hashtable(itervar) htiNext(&itervar)
269
#define ForEachFinish_hashtable(itervar) htiFinish(&itervar)
270
271
#define foreach_string foreach_generic
272
#define ForEachIterType_string striter
273
#define ForEachIterInit_string {0}
274
#define ForEachInit_string(itervar, str) striInit(&itervar, str)
275
#define ForEachValid_string(itervar) striValid(&itervar)
276
#define ForEachNext_string(itervar) striNext(&itervar)
277
#define ForEachFinish_string(itervar) striFinish(&itervar)
278
279
#define foreach_vfssearch foreach_generic
280
#define ForEachIterType_vfssearch FSSearchIter
281
#define ForEachIterInit_vfssearch {0}
282
#define ForEachInit_vfssearch(itervar, ...) vfsSearchInit(&itervar, __VA_ARGS__)
283
#define ForEachValid_vfssearch(itervar) vfsSearchValid(&itervar)
284
#define ForEachNext_vfssearch(itervar) vfsSearchNext(&itervar)
285
#define ForEachFinish_vfssearch(itervar) vfsSearchFinish(&itervar)
286
287
#define foreach_object(...) _foreach_object_msvc_workaround((__VA_ARGS__))
288
#define _foreach_object_msvc_workaround(args) _foreach_object args
289
#define _foreach_object(type, itervar, ivartype, obj) for (register char _foreach_outer = 1; _foreach_outer; _foreach_outer = 0) \
290
for(ivartype *itervar = (obj) ? (obj)->_->iter(obj) : NULL; _foreach_outer; objRelease(&itervar), _foreach_outer = 0) \
291
for(; itervar && itervar->_->valid(itervar); itervar->_->next(itervar))
292
293
#define foreach_ssd(...) _foreach_ssd_msvc_workaround((__VA_ARGS__))
294
#define _foreach_ssd_msvc_workaround(args) _foreach_ssd args
295
#define _foreach_ssd(type, itervar, idxvar, keyvar, valvar, root) for (register char _foreach_outer = 1; _foreach_outer; _foreach_outer = 0) \
296
ssdLockedTransaction(root) \
297
for(SSDIterator *itervar = (root) ? (root)->_->_iterLocked(root, _ssdCurrentLockState) : NULL; _foreach_outer; objRelease(&itervar), _foreach_outer = 0) \
298
for(int32 idxvar = 0; _foreach_outer; _foreach_outer = 0) \
299
for(strref keyvar = 0; _foreach_outer; _foreach_outer = 0) \
300
for(stvar *valvar = 0; itervar && itervar->_->iterOut(itervar, &idxvar, &keyvar, &valvar); itervar->_->next(itervar))
cx
container
foreach.h
Generated by
1.9.8