static void docount( RB_NODE *node, size_t *piSize ) { if ( node != NULL ) { (*piSize)++; docount(node->link[0],piSize); docount(node->link[1],piSize); } }
int generation() { int i, j, trans; char old; trans = 0; for(i = 0; i < maprows; i++) for(j = 0; j < mapcols; j++) switch(map[i][j]) { case '~' : /* old = map[i][j]; if(lo3r(15) == 0) map[i][j] = terrain[lo3r(5)]; if(old != map[i][j]) trans++; */ break; default : old = map[i][j]; mapb[i][j] = terrain[docount(i, j, 1)]; if(old != mapb[i][j]) trans++; break; } for(i = 0; i < maprows; i++) for(j = 0; j < mapcols; j++) map[i][j] = mapb[i][j]; return trans; }
size_t rb_size( RB_TREE *root ) { size_t iSize = 0; docount(*root,&iSize); return iSize; }