Пример #1
0
/* Функция, устанавливающая итератор на элемент с указанным номером */
void LSQ_SetPosition(LSQ_IteratorT iterator, LSQ_IntegerIndexT pos){
	if(iterator == NULL || ITR(iterator)->list == NULL)
		return;
	if(pos <= (ITR(iterator)->list->size / 2)){
		ITR(iterator)->node = ITR(iterator)->list->BeforFirst;
		LSQ_ShiftPosition(iterator, pos + 1);
	}else{
		ITR(iterator)->node = ITR(iterator)->list->PastRear;
		LSQ_ShiftPosition(iterator, pos - ITR(iterator)->list->size);

	}
}
Пример #2
0
extern void LSQ_SetPosition(LSQ_IteratorT iterator, LSQ_IntegerIndexT pos)
{
	IteratorT * iter = (IteratorT *)iterator;
	if IS_HANDLE_INVALID(iterator)
		return;
	iter->state = IST_BEFORE_FIRST;
	LSQ_ShiftPosition(iterator, pos + 1);
}
Пример #3
0
/* Test moving on list with ShiftPosition */
void test6(void)
{
    int i, j;
    LSQ_IteratorT iter;
    srand ( time(NULL) );

//    print_LSQ(handleAll);
    printf("Testing ShiftPosition forward");
    for(i = 0; i < MAX_TEST_ATTEMPTS; i++)
    {
	iter = LSQ_GetFrontElement(handleAll);
        assert( iter != NULL);

        j = rand() % LSQ_GetSize(handleAll);
        LSQ_ShiftPosition(iter, j);
        assert(*LSQ_DereferenceIterator(iter) == all[j]);
        assert( *LSQ_DereferenceIterator(iter) != MAX_ELEMENT_VALUE + 1);

        LSQ_DestroyIterator(iter);
    }
    printf("\t\t ---\t OK \n");

    printf("Testing ShiftPosition backward");
    for(i = 0; i < MAX_TEST_ATTEMPTS; i++)
    {
        iter = LSQ_GetPastRearElement(handleAll);
        LSQ_RewindOneElement(iter);
        assert( iter != NULL);

        j = rand() % LSQ_GetSize(handleAll);
        LSQ_ShiftPosition(iter, -j);
        assert( *LSQ_DereferenceIterator(iter) == all[LSQ_GetSize(handleAll) - 1 - j]);
        assert( *LSQ_DereferenceIterator(iter) != MAX_ELEMENT_VALUE + 1);

        LSQ_DestroyIterator(iter);
//        printf("i = %d \t j = %d\n", i, j);

    }
    printf("\t\t ---\t OK \n");

}
Пример #4
0
void LSQ_SetPosition(LSQ_IteratorT iterator, LSQ_IntegerIndexT pos){
    TreeIteratorPtr it = iterator;
    
    if(pos < 0 || pos >= it->tree->size){
        setIterator(it, NULL, 0, pos < 0 ? IT_BEFORE_FIRST : IT_PAST_REAR);
        return;
    }

    TreeNodePtr root = it->tree->root;
    setIterator(it, root, 0, IT_NORMAL);
    LSQ_ShiftPosition(it, pos - (isLeaf(root) ? 0 : root->subtreeKeyCount[0]));
}
Пример #5
0
/* Функция, перемещающая итератор на один элемент назад */
void LSQ_RewindOneElement(LSQ_IteratorT iterator){
	LSQ_ShiftPosition(iterator, -1);
}
Пример #6
0
/* Функция, перемещающая итератор на один элемент вперед */
void LSQ_AdvanceOneElement(LSQ_IteratorT iterator){
	LSQ_ShiftPosition(iterator, 1);
}
Пример #7
0
extern void LSQ_SetPosition(LSQ_IteratorT iterator, LSQ_IntegerIndexT pos)
{
	if(iterator == NULL) return;
	((ArrayIteratorPointerT)iterator)->index = 0;
	LSQ_ShiftPosition(iterator, pos);
}
extern void LSQ_SetPosition(LSQ_IteratorT iterator, LSQ_IntegerIndexT pos)
{
	if IS_HANDLE_INVALID(iterator)
		return;
	LSQ_ShiftPosition(iterator, pos - ((IteratorT *)iterator)->index);
}