nxs_loop.h

00001 
00012 #ifndef NXS_HEADERS_LOOP
00013 #define NXS_HEADERS_LOOP
00014 
00015 #ifdef HAVE_CONFIG_H
00016 #include "config.h"
00017 #endif
00018 
00019 #include <stdbool.h>
00020 #include <stddef.h>
00021 
00028 #define nxs_do_onbreak(_cond, _expr) \
00029        nxs_for_onbreak(bool _nxs_b = true, _nxs_b, _nxs_b = (_cond), _expr)
00030 
00054 #define nxs_for_eachbreak(_init, _cond, _each) \
00055         nxs_for_onbreak(_init, _cond, _each, _each)
00056 
00079 #define nxs_for_onbreak(_init, _cond, _each, _expr) \
00080     for (bool _nxs_brokeOut = true, _nxs_cond = true;_nxs_cond;             \
00081          _nxs_cond = false, _nxs_brokeOut && ((_expr), 1))                  \
00082         for (_init;_nxs_cond = (_cond);_nxs_brokeOut = false, (_each))
00083 
00098 #define nxs_foreach_array(_var, _array) \
00099     for (size_t _nxs_i = 0;_nxs_i < sizeof(_array) / sizeof(*_array);       \
00100          ++_nxs_i)                                                          \
00101         for (bool _nxs_b = true;_nxs_b;)                                    \
00102             for (_var = (_array)[_nxs_i];_nxs_b;_nxs_b = false)
00103 
00118 #define nxs_forreach_array(_var, _array) \
00119     for (size_t _nxs_i  = sizeof(_array) / sizeof(*_array) - 1,             \
00120                 _nxs_j = 1;_nxs_j;_nxs_i = (_nxs_i > 0 ? (_nxs_i - 1) : 0)) \
00121         for (bool _nxs_ba = true;_nxs_ba;_nxs_j = _nxs_i,                   \
00122                   _nxs_ba = false)                                          \
00123             for (bool _nxs_bb = true;_nxs_bb;)                              \
00124                 for (_var = (_array)[_nxs_i];_nxs_bb;_nxs_bb = false)
00125         
00132 #define nxs_while_onbreak(_cond, _expr) \
00133           nxs_for_onbreak(, _cond, , _expr)
00134 
00136 #endif

Generated on Thu Dec 20 13:42:46 2007 for NXS Toolkit by  doxygen 1.5.4