// In some languages, you can do this // USAGE for enemy_iterator() { // do things with enemy enemy.name = "clown"; } // IMPLEMENTATION enemy_iterator() { chunks = get_chunks(...) for each chunk { for each enemy in chunk { yield; // this basically pastes the enemy.name = "clown"; in here } } } // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // To do this in C, you can do something like this (kinda cringe) // USAGE EnemyIterator iterator = {}; while(enemy_iterator(&iterator)) { iterator.enemy.name = "clown"; } // IMPLEMENTATION bool enemy_iterator(EnemyIterator* iterator) { chunks = get_chunks(...); for(int i = iterator->chunk_index; i < chunk_count; i += 1) { Chunk chunk = chunks[i]; iterator->chunk_index += 1; for(int j = iterator->enemy_index; j < chunk.enemy_count; j += 1) { iterator->enemy_index += 1; Enemy* enemy = chunk.enemies[j]; iterator->enemy = enemy; return true; } } return false; }