Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}