swTableRow* swTable_iterator_current(swTable *table) { swTableRow *row = NULL; for (; table->iterator->absolute_index < table->list_n; table->iterator->absolute_index++) { row = swTable_iterator_get(table, table->iterator->absolute_index); if (row == NULL) { table->iterator->skip_count++; continue; } else { break; } } if (table->iterator->collision_index == 0) { return row; } int i; for (i = 0; i < table->iterator->collision_index; i++) { row = row->next; } return row; }
void swTable_iterator_forward(swTable *table) { for (; table->iterator->absolute_index < table->size; table->iterator->absolute_index++) { swTableRow *row = swTable_iterator_get(table, table->iterator->absolute_index); if (row == NULL) { continue; } else if (row->next == NULL) { table->iterator->absolute_index++; table->iterator->row = row; return; } else { int i = 0; for (;; i++) { if (i == table->iterator->collision_index) { if (row == NULL) { table->iterator->collision_index = 0; break; } else { table->iterator->collision_index++; table->iterator->row = row; return; } } row = row->next; } } } table->iterator->row = NULL; }