//----------------------------------------------------------------------------- // 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); }