Example #1
0
static int print_queue(c_pqueue ps)
{
	c_vector tmpvt;
	__c_vector(&tmpvt, int_comparer);

	printf("queue is : \n");
	while(!c_queue_empty(ps))
	{
		int * tmp = c_queue_front(ps);
		printf("front is : %d, size is : %d, back is : %d\n", 
				*tmp, 
				c_queue_size(ps),
				*(int *)c_queue_back(ps));
		c_queue_pop(ps);
		c_vector_push_back(&tmpvt, tmp);
	}

	// recover queue
	do
	{
		c_iterator iter = c_vector_begin(&tmpvt);
		c_iterator end = c_vector_end(&tmpvt);
		for(; !ITER_EQUAL(iter, end); ITER_INC(iter))
		{
			c_queue_push(ps, ITER_REF(iter));
		}
	} while(0);	

	__c_rotcev(&tmpvt);
	return 0;
}
Example #2
0
static void create_with_push_back(c_vector * p)
{
    int i = 0;
    for (; i < sizeof(array) / sizeof(int); ++ i)
    {
        c_vector_push_back(p, &array[i]);
    }
}
Example #3
0
static void vector_swap(c_vector * p)
{
    c_vector lvt;
    __c_vector(&lvt, int_comparer);
    c_vector_push_back(&lvt, &array[3]);
    
    c_vector_swap(p, &lvt);
    printf("local vector is : \n");
    print_vector(&lvt);
    printf("outside vector is : \n");
    print_vector(p);
    __c_rotcev(&lvt);    
}
Example #4
0
static int create_with_insert_unique2(c_pmap thiz)
{
	c_vector vt;
	int i = 0;
	c_vector_create(&vt, int_comparer);
	for(i = 0; i < sizeof(values) / sizeof(int); ++ i)
	{
		c_iterator v_beg, v_end;
		c_vector_push_back(&vt, &pairs[i]);

		v_beg = c_vector_begin(&vt);
		v_end = c_vector_end(&vt);
		c_map_insert2(thiz, v_beg, v_end);

		assert(__c_rb_tree_verify(thiz->_l));
	}

	c_vector_destroy(&vt);
	return 0;
}
Example #5
0
int main(int agrc, char **argv)
{
    size_t error;
    c_vector *vector;

    // Пытаемся создать вектор емкостью CAPACITY, который содержит объекты типа object.
    vector = c_vector_create(sizeof(object), CAPACITY, &error);

    // Если вектор создать не удалось, выводим причину ошибки.
    if (vector == NULL)
    {
        printf("create error: %Iu\n", error);
        printf("Program end.\n");
        getchar();
        return -1;
    }

    // Вставляем в конец вектора 11 объектов.
    for (size_t i = 0; i < 11; ++i)
    {
        object *const obj = c_vector_push_back(vector, &error);
        // Если вставить объект не удалось, выводим причину ошибки.
        if (obj == NULL)
        {
            printf("push back error: %Iu\n", error);
            printf("Proogram end.\n");
            getchar();
            return -2;
        }

        // Инициализируем вставленный объект.
        obj->i = i;
        obj->f = i + 3.14f;
    }

    // Покажем размер вектора.
    {
        error = 0;
        const size_t size = c_vector_size(vector, &error);
        // Если size == 0 и error > 0, значит возникла ошибка.
        if ( (size == 0) && (error > 0) )
        {
            printf("size error: %Iu\n", error);
            printf("Program end.\n");
            getchar();
            return -3;
        }
        // Покажем размер.
        printf("size: %Iu\n", size);
    }

    // Покажем емкость вектора.
    {
        error = 0;
        const size_t capacity = c_vector_capacity(vector, &error);
        // Если capacity == 0 и error > 0, значит произошла ошибка.
        if ( (capacity == 0) && (error > 0) )
        {
            printf("capacity error: %Iu\n", error);
            printf("Program end.\n");
            getchar();
            return -4;
        }
        // Покажем емкость.
        printf("capacity: %Iu\n", capacity);
    }

    // Используя функцию обхода, выведем содержимое каждого элемента вектора.
    {
        const ptrdiff_t r_code = c_vector_for_each(vector, print_object);
        // Если произошла ошибка, покажем ее.
        if (r_code < 0)
        {
            printf("for each error, r_code: %Id\n", r_code);
            printf("Program end.\n");
            getchar();
            return -5;
        }
    }

    // Удалим из вектора несколько элементов, используя массив индексов.
    {
        size_t indexes[5] = {0, 2, 1, 3, 99};
        error = 0;
        // Специализированная функция для удаления объекта типа object не нужна.
        const size_t d_count = c_vector_erase_few(vector, indexes, 5, NULL, &error);
        // Если произошла ошибка, покажем ее.
        if ( (d_count == 0) && (error > 0) )
        {
            printf("erase few error: %Iu\n", error);
            printf("Program end.\n");
            getchar();
            return -6;
        }
        // Покажем, сколько элементов было удалено.
        printf("d_count: %Iu\n", d_count);
    }

    // Используя функцию обхода, выведем содержимое каждого элемента вектора.
    {
        const ptrdiff_t r_code = c_vector_for_each(vector, print_object);
        // Если произошла ошибка, покажем ее.
        if (r_code < 0)
        {
            printf("for each error, r_code: %Id\n", r_code);
            printf("Program end.\n");
            getchar();
            return -7;
        }
    }

    // Удалим из вектора все элементы, f которых > 9.
    {
        error = 0;
        const size_t d_count = c_vector_remove_few(vector, pred_object, NULL, &error);
        // Если произошла ошибка, покажем ее.
        if ( (d_count == 0) && (error > 0) )
        {
            printf("remove few error: %Iu\n", error);
            printf("Program end.\n");
            getchar();
            return -8;
        }
        // Покажем, сколько элементов было удалено.
        printf("d_count: %Iu\n", d_count);
    }

    // Используя функцию обхода, выведем содержимое каждого элемента вектора.
    {
        const ptrdiff_t r_code = c_vector_for_each(vector, print_object);
        // Если произошла ошибка, покажем ее.
        if (r_code < 0)
        {
            printf("for each error, r_code: %Id\n", r_code);
            printf("Program end.\n");
            getchar();
            return -9;
        }
    }

    // Удалим вектор.
    {
        const ptrdiff_t r_code = c_vector_delete(vector, NULL);
        // Если возникла ошибка, покажем ее.
        if (r_code < 0)
        {
            printf("delete error, r_code: %Id\n", r_code);
            printf("Program end.\n");
            getchar();
            return -10;
        }
    }

    getchar();
    return 0;
}