Example #1
0
//-----------------------------------------------------------------------------
// Compose a single buffer from pieces stored in the linked list ll.
//
char * compose_buffer(
    const axutil_env_t * env,
    int image_size,
    axutil_linked_list_t *ll)
{
    char     *image = NULL;
    char     *ip    = NULL;

    TmpStore *ts     = NULL;

    int check = 0;
    if (axutil_linked_list_size(ll, env) > 0)
    {
        ip = image = (char *)AXIS2_MALLOC(env->allocator, image_size);
        entry_t *le = axutil_linked_list_get_entry(ll, env, 0);
        while( le != NULL)
        {
            ts = (TmpStore *)le->data;
            if (NULL != ts)
            {
                memcpy(ip, ts->buf, ts->size);
                ip += ts->size;
                AXIS2_FREE(env->allocator, ts);
                le->data = NULL;
                check += ts->size;
            }
            le = le->next;
        }
    }

    assert( check==image_size );
    return image;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axutil_linked_list_add_at_index(
    axutil_linked_list_t *linked_list,
    const axutil_env_t *env,
    int index,
    void *o)
{
    entry_t *after = NULL;
    entry_t *e;
    AXIS2_PARAM_CHECK(env->error, o, AXIS2_FAILURE);

    axutil_linked_list_check_bounds_inclusive(linked_list, env, index);
    e = axutil_linked_list_create_entry(env, o);

    if (index < linked_list->size)
    {
        linked_list->mod_count++;
        after = axutil_linked_list_get_entry(linked_list, env, index);
        e->next = after;
        e->previous = after->previous;
        if (after->previous == NULL)
            linked_list->first = e;
        else
            after->previous->next = e;
        after->previous = e;
        linked_list->size++;
    }
    else
    {
        axutil_linked_list_add_last_entry(linked_list, env, e);
    }

    return AXIS2_SUCCESS;
}
AXIS2_EXTERN void *AXIS2_CALL
axutil_linked_list_get(
    axutil_linked_list_t *linked_list,
    const axutil_env_t *env,
    int index)
{
    axutil_linked_list_check_bounds_exclusive(linked_list, env, index);
    return axutil_linked_list_get_entry(linked_list, env, index)->data;
}
AXIS2_EXTERN void *AXIS2_CALL
axutil_linked_list_remove_at_index(
    axutil_linked_list_t *linked_list,
    const axutil_env_t *env,
    int index)
{
    entry_t *e;
    axutil_linked_list_check_bounds_exclusive(linked_list, env, index);
    e = axutil_linked_list_get_entry(linked_list, env, index);
    axutil_linked_list_remove_entry(linked_list, env, e);
    return e->data;
}
AXIS2_EXTERN void *AXIS2_CALL
axutil_linked_list_set(
    axutil_linked_list_t *linked_list,
    const axutil_env_t *env,
    int index,
    void *o)
{
    entry_t *e;
    void *old;
    AXIS2_PARAM_CHECK(env->error, o, NULL);
    axutil_linked_list_check_bounds_exclusive(linked_list, env, index);
    e = axutil_linked_list_get_entry(linked_list, env, index);
    old = e->data;
    e->data = o;
    return old;
}
void test_link_list(axutil_env_t *env,char * first_item,char * second_item,char * third_item,char *last_item,char *array)
{ 
    int index_of_item;
	int index_of_last_item;
	entry_t * entry;
	void *get_item;
	axis2_status_t status;
	axis2_bool_t bresult;
	void **array_from_list;
	
	linked_list = axutil_linked_list_create(env);
    CUT_ASSERT(linked_list != NULL);
    if (!linked_list) return;
    status = axutil_linked_list_add_first(linked_list,env,(void *)first_item);
	CUT_ASSERT(status = AXIS2_SUCCESS);
    bresult = axutil_linked_list_contains(linked_list,env,(void *)second_item);
	CUT_ASSERT(bresult == AXIS2_FALSE);
    status = axutil_linked_list_add(linked_list,env,(void *)third_item);
	CUT_ASSERT(status = AXIS2_SUCCESS);
    status = axutil_linked_list_add_last(linked_list,env,(void *)last_item);
	CUT_ASSERT(status = AXIS2_SUCCESS);
 	CUT_ASSERT(axutil_linked_list_size(linked_list,env) == 3);
    index_of_item = axutil_linked_list_index_of(linked_list,env,third_item);
    CUT_ASSERT(index_of_item == 1);
    index_of_last_item = axutil_linked_list_last_index_of(linked_list,env,last_item);
    CUT_ASSERT(index_of_last_item == 2);
    entry = axutil_linked_list_get_entry(linked_list,env,0);
    CUT_ASSERT(entry != NULL);
    get_item = axutil_linked_list_get(linked_list,env,1);
    CUT_ASSERT(get_item != NULL);
	CUT_ASSERT(strcmp((char*)get_item, third_item) == 0);
    get_item = axutil_linked_list_set(linked_list,env,1,(void *)array);
    CUT_ASSERT(get_item != NULL);
	CUT_ASSERT(strcmp((char*)get_item, third_item) == 0);
    array_from_list = axutil_linked_list_to_array(linked_list,env);
	CUT_ASSERT(array_from_list != NULL);
    status = axutil_linked_list_add_at_index(linked_list,env,1,(void *)second_item);
	CUT_ASSERT(status == AXIS2_SUCCESS);
    get_item = axutil_linked_list_remove_at_index(linked_list,env,1);
	CUT_ASSERT(get_item != NULL);
    bresult = axutil_linked_list_check_bounds_inclusive(linked_list,env,1);
	CUT_ASSERT(bresult == AXIS2_TRUE);
    status = axutil_linked_list_remove_entry(linked_list,env,entry);
 	CUT_ASSERT(status == AXIS2_SUCCESS);
    get_item = axutil_linked_list_remove_first(linked_list,env);
	CUT_ASSERT(get_item != NULL);
    get_item = axutil_linked_list_remove_last(linked_list,env);
	CUT_ASSERT(get_item != NULL);
	CUT_ASSERT(axutil_linked_list_size(linked_list,env) == 0);

    bresult = axutil_linked_list_remove(linked_list,env,(void *)third_item);
 	CUT_ASSERT(bresult == AXIS2_FALSE);
    
    /* To avoid warning of not using cut_ptr_equal */
    CUT_ASSERT_PTR_EQUAL(NULL, NULL, 0);
    /* To avoid warning of not using cut_int_equal */
    CUT_ASSERT_INT_EQUAL(0, 0, 0);
    /* To avoid warning of not using cut_str_equal */
    CUT_ASSERT_STR_EQUAL("", "", 0);

    axutil_linked_list_free(linked_list,env);
}