コード例 #1
0
ファイル: lsq_tests.c プロジェクト: Taller/Rhonda
/* Test before first and past rear */
void test3(void)
{
    LSQ_IteratorT iter = LSQ_GetFrontElement(handle);
    assert( iter != NULL);
    assert(LSQ_IsIteratorBeforeFirst(iter) != 1);
    LSQ_RewindOneElement(iter);
    assert(LSQ_IsIteratorBeforeFirst(iter) == 1);
    printf("LSQ_IsIteratorBeforeFirst\t --- \t OK \n");


    LSQ_IteratorT iter2 = LSQ_GetPastRearElement(handle);
    assert( iter2 != NULL);
    assert(LSQ_IsIteratorPastRear(iter2) == 1);
    LSQ_RewindOneElement(iter2);
    assert(LSQ_IsIteratorPastRear(iter2) != 1);
    printf("LSQ_IsIteratorPastRear\t\t --- \t OK \n");

    LSQ_DestroyIterator(iter);
    LSQ_DestroyIterator(iter2);
}	
コード例 #2
0
ファイル: avl_tree.c プロジェクト: msporyshev/data_structures
extern void LSQ_RewindOneElement(LSQ_IteratorT iterator)
{
	IteratorT * iter = (IteratorT *)iterator;
	if (IS_HANDLE_INVALID(iterator) || (iter->tree->size == 0))
		return;
	if (LSQ_IsIteratorPastRear(iterator)){
		iter->node = treeMaximum(iter->tree->root);	
		iter->state = IST_DEREFERENCABLE;
		return;
	}
	iter->node = predecessor(iter->node);
	if (iter->node == NULL)
		iter->state = IST_BEFORE_FIRST;
}
コード例 #3
0
ファイル: linear_sequence.c プロジェクト: khomyakov42/C
/* Функция, перемещающая итератор на заданное смещение со знаком */
void LSQ_ShiftPosition(LSQ_IteratorT iterator, LSQ_IntegerIndexT shift){
	if(iterator == NULL)
		return;

	if(shift > 0)
		while(shift > 0 && !LSQ_IsIteratorPastRear(iterator)){
			shift--;
			ITR(iterator)->node = ITR(iterator)->node->next;
		}
	else
		while(shift < 0 && !LSQ_IsIteratorBeforeFirst(iterator)){
			ITR(iterator)->node = ITR(iterator)->node->prev;
			shift++;
		}
}
コード例 #4
0
ファイル: avl-tree.c プロジェクト: twigil/loulou
void LSQ_AdvanceOneElement(LSQ_IteratorT iterator)
{
    IteratorPtr iter = iterator;
    NodePtr node = NULL;
    NodePtr temp = NULL;
    if (iter == NULL || LSQ_IsIteratorPastRear(iter)) return;
    node = iter->node;
    if (node->right != NULL) iter->node = get_leftmost_node(node->right);
    else
    {
        temp = node->parent;
        while (temp != NULL && node == temp->right)
        {
            node = temp;
            temp = temp->parent;
        }
        iter->node = temp;
    }
}
コード例 #5
0
ファイル: lsq_tests.c プロジェクト: Taller/Rhonda
/* Test IsIteratorDereferencable, DeleteGivenElement pastReaer, beforeFirst */
void test10(void)
{
    int i, j;

    printf("Testing IsIteratorDereferencable");
    LSQ_IteratorT iterator = LSQ_GetPastRearElement(handleAll);
    assert(LSQ_IsIteratorDereferencable(iterator) == 0);
    assert(LSQ_IsIteratorPastRear(iterator) == 1);
    LSQ_DeleteGivenElement(iterator);
    LSQ_DestroyIterator(iterator);
    printf("\t\t ---\t OK \n");
    
    iterator = LSQ_GetFrontElement(handleAll);
    LSQ_RewindOneElement(iterator);
    printf("Testing IsIteratorBeforeFirst");
    assert(LSQ_IsIteratorDereferencable(iterator) == 0);
    assert(LSQ_IsIteratorBeforeFirst(iterator) == 1);
    LSQ_DeleteGivenElement(iterator);
    LSQ_DestroyIterator(iterator);
    printf("\t\t ---\t OK \n");
}
コード例 #6
0
ファイル: array.c プロジェクト: Larkina/Data-structures
/* Функция, определяющая, может ли данный итератор быть разыменован */
extern int LSQ_IsIteratorDereferencable(LSQ_IteratorT iterator){
	return	(iterator != NULL) ? !LSQ_IsIteratorBeforeFirst(iterator) && !LSQ_IsIteratorPastRear(iterator) : 0;
}
コード例 #7
0
ファイル: static_arrays.c プロジェクト: twigil/loulou
int LSQ_IsIteratorDereferencable(LSQ_IteratorT iterator)
{
    return !(LSQ_IsIteratorBeforeFirst(iterator) || LSQ_IsIteratorPastRear(iterator));
}