00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __GB_ExtraMacros_h__
00022 #define __GB_ExtraMacros_h__
00023
00024 #define FOR_ALL_PRIMITIVES(gdp, prim) \
00025 for (prim=(gdp)->primitives().head(); prim; \
00026 prim=(gdp)->primitives().next(prim))
00027
00028 #define FOR_SAFE_PRIMITIVES(gdp, prim, next_prim) \
00029 for (prim=(gdp)->primitives().head(); \
00030 prim &&((next_prim=(gdp)->primitives().next(prim))||1); \
00031 prim=next_prim)
00032
00033 #define FOR_SAFE_POINTS(gdp, cur_point, next_point) \
00034 for (cur_point=(gdp)->points().head(); \
00035 cur_point && ((next_point=(gdp)->points().next(cur_point)) || 1);\
00036 cur_point=next_point)
00037
00038 #define FOR_MASK_PRIMITIVES(gdp, prim, mask) \
00039 for (prim=(gdp)->primitives().head(mask); prim; \
00040 prim=(gdp)->primitives().next(prim, mask))
00041
00042 #define FOR_ALL_GROUP_PRIMITIVES(gdp, grp, prim) \
00043 for (prim=(gdp)->primitives().head(*(grp)); prim; \
00044 prim=(gdp)->primitives().next(prim,*(grp)))
00045
00046 #define FOR_SAFE_GROUP_PRIMITIVES(gdp, grp, prim, next) \
00047 for (prim = (gdp)->primitives().head(*(grp)); \
00048 prim && \
00049 ((next = (gdp)->primitives().next(prim, *(grp))) || 1);\
00050 prim = next)
00051
00052 #define FOR_ALL_OPT_GROUP_PRIMITIVES(gdp, grp, prim) \
00053 for (prim = (grp) ? (gdp)->primitives().head(*(grp))\
00054 : (gdp)->primitives().head(); \
00055 prim; \
00056 prim = (grp) ? (gdp)->primitives().next(prim, *(grp))\
00057 : (gdp)->primitives().next(prim))
00058
00059 #define FOR_ALL_GPOINTS(gdp, ppt) \
00060 for (ppt=(gdp)->points().head(); ppt; \
00061 ppt=(gdp)->points().next(ppt))
00062
00063 #define FOR_ALL_GROUP_POINTS(gdp, grp, ppt) \
00064 for (ppt=(gdp)->points().head(*(grp)); ppt; \
00065 ppt=(gdp)->points().next(ppt,*(grp)))
00066
00067 #define FOR_ALL_OPT_GROUP_POINTS(gdp, grp, ppt) \
00068 for (ppt = (grp) ? (gdp)->points().head(*(grp)) \
00069 : (gdp)->points().head(); \
00070 ppt; \
00071 ppt = (grp) ? (gdp)->points().next(ppt, *(grp))\
00072 : (gdp)->points().next(ppt))
00073
00074 #define FOR_PAIRS_OF_POINTS(gdp1, ppt1, gdp2, ppt2) \
00075 for (ppt1 = (gdp1)->points().head(), \
00076 ppt2 = (gdp2)->points().head(); \
00077 ppt1 && ppt2; \
00078 ppt1 = (gdp1)->points().next(ppt1), \
00079 ppt2 = (gdp2)->points().next(ppt2))
00080
00081 #define FOR_PAIRS_OF_GROUP_POINTS(gdp1, grp1, ppt1, gdp2, grp2, ppt2) \
00082 for (ppt1 = (gdp1)->points().head(*(grp1)), \
00083 ppt2 = (gdp2)->points().head(*(grp2)); \
00084 ppt1 && ppt2; \
00085 ppt1 = (gdp1)->points().next(ppt1, *(grp1)), \
00086 ppt2 = (gdp2)->points().next(ppt2, *(grp2)))
00087
00088 #define FOR_PAIRS_OF_PRIMITIVES(gdp1, prim1, gdp2, prim2) \
00089 for (prim1 = (gdp1)->primitives().head(), \
00090 prim2 = (gdp2)->primitives().head(); \
00091 prim1 && prim2; \
00092 prim1 = (gdp1)->primitives().next(prim1), \
00093 prim2 = (gdp2)->primitives().next(prim2) )
00094
00095 #define FOR_PAIRS_OF_GROUP_PRIMITIVES(gdp1, grp1, prim1, gdp2, grp2, prim2) \
00096 for (prim1 = (gdp1)->primitives().head(*(grp1)), \
00097 prim2 = (gdp2)->primitives().head(*(grp2)); \
00098 prim1 && prim2; \
00099 prim1 = (gdp1)->primitives().next(prim1, *(grp1)), \
00100 prim2 = (gdp2)->primitives().next(prim2, *(grp2)))
00101
00102 #define FOR_PAIRS_OF_OPT_GROUP_PRIMITIVES(gdp1, grp1, prim1, gdp2, grp2, prim2) \
00103 for (prim1 = (grp1) ? (gdp1)->primitives().head(*(grp1)) \
00104 : (gdp1)->primitives().head(), \
00105 prim2 = (grp2) ? (gdp2)->primitives().head(*(grp2)) \
00106 : (gdp2)->primitives().head(); \
00107 prim1 && prim2; \
00108 prim1 = (grp1) ? (gdp1)->primitives().next(prim1, *(grp1)) \
00109 : (gdp1)->primitives().next(prim1), \
00110 prim2 = (grp2) ? (gdp2)->primitives().next(prim2, *(grp2)) \
00111 : (gdp2)->primitives().next(prim2))
00112
00113 #define FOR_ALL_GROUP_EDGES(grp, edge) \
00114 for (edge=(GB_Edge *)(grp)->list().head(); edge; \
00115 edge=(GB_Edge *)edge->next())
00116
00117 #define FOR_SAFE_GROUP_EDGES(grp, edge, next) \
00118 for (edge=(GB_Edge *)(grp)->list().head(); \
00119 edge && ((next = (GB_Edge *)edge->next()) || 1); \
00120 edge=next)
00121
00122 #define FOR_ALL_GROUP_BREAKPOINTS(grp, bkp) \
00123 for (bkp=(GB_Breakpoint *)(grp)->list().head(); bkp; \
00124 bkp=(GB_Breakpoint *)bkp->next())
00125
00126 #define FOR_ALL_ATTRIBUTES(dict, attribute) \
00127 for (attribute=dict.getHead(); \
00128 attribute; \
00129 attribute = (GB_Attribute *)attribute->next())
00130
00131 #define FOR_ALL_DETAIL_ATTRIBUTES(gdp, attribute) \
00132 FOR_ALL_ATTRIBUTES((gdp)->attribs(), attribute)
00133
00134 #define FOR_ALL_PRIMITIVE_ATTRIBUTES(gdp, attribute) \
00135 FOR_ALL_ATTRIBUTES((gdp)->primitiveAttribs(), attribute)
00136
00137 #define FOR_ALL_POINT_ATTRIBUTES(gdp, attribute) \
00138 FOR_ALL_ATTRIBUTES((gdp)->pointAttribs(), attribute)
00139
00140 #define FOR_ALL_VERTEX_ATTRIBUTES(gdp, attribute) \
00141 FOR_ALL_ATTRIBUTES((gdp)->vertexAttribs(), attribute)
00142
00143 #endif