00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _CTRL_H
00009 #define _CTRL_H
00010
00011 #define loop(variable, count) for (int variable = 0; variable < (int)(count); variable++)
00012
00013 #define loopi(n) loop(i, n)
00014 #define loopj(n) loop(j, n)
00015 #define loopk(n) loop(k, n)
00016 #define loopx(n) loop(x, n)
00017 #define loopy(n) loop(y, n)
00018
00019 #define loop3i(iteration) loopi(3) { iteration; }
00020
00021 #define looplist(loopvar, itemtype, listvar) \
00022 for (std::list<itemtype>::iterator loopvar = (listvar).begin(); loopvar != (listvar).end(); loopvar++)
00023
00024
00025
00026 #define loopiv(v) for (int i = 0; i < (int)(v).size(); i++)
00027
00028
00029
00030
00031 #define foldl(type, first, listvector, binaryfunc) \
00032 ({ \
00033 type result = first; \
00034 loopiv(listvector) { \
00035 if (i == 0) result = binaryfunc(first, listvector[i]); \
00036 else result = binaryfunc(result, listvector[i]); \
00037 } \
00038 result; \
00039 })
00040
00041 #define setbit(var, bit) var |= (1UL << (unsigned long) bit)
00042 #define rstbit(var, bit) var &= ~(1UL << (unsigned long) bit)
00043 #define togbit(var, bit) var ^= (1UL << (unsigned long) bit)
00044 #define getbit(var, bit) (var & (1UL << (unsigned long) bit))
00045
00046 #define declareArray(typ, name, size, expr) typ name[size]; loopi(size) name[i] = expr;
00047 #define declareValue(typ, name, size, expr) typ name = 0; loopi(size) name += expr;
00048
00049
00050 #endif
00051