1 #include <opensrf/string_array.h>
3 osrfStringArray* osrfNewStringArray(int size) {
4 return init_string_array(size);
7 string_array* init_string_array(int size) {
8 if(size > STRING_ARRAY_MAX_SIZE)
9 osrfLogError( OSRF_LOG_MARK, "init_string_array size is too large");
12 OSRF_MALLOC( arr, sizeof(string_array));
13 arr->list = osrfNewListSize(size);
14 osrfListSetDefaultFree(arr->list);
20 void osrfStringArrayAdd(osrfStringArray* arr, char* string) {
21 string_array_add(arr, string);
24 void string_array_add(string_array* arr, char* str) {
25 if(arr == NULL || str == NULL ) return;
26 if( arr->size > STRING_ARRAY_MAX_SIZE )
27 osrfLogError( OSRF_LOG_MARK, "string_array_add size is too large");
28 osrfListPush(arr->list, strdup(str));
29 arr->size = arr->list->size;
32 char* osrfStringArrayGetString(osrfStringArray* arr, int index) {
34 return OSRF_LIST_GET_INDEX(arr->list, index);
37 char* string_array_get_string(string_array* arr, int index) {
39 return OSRF_LIST_GET_INDEX(arr->list, index);
43 void osrfStringArrayFree(osrfStringArray* arr) {
44 OSRF_STRING_ARRAY_FREE(arr);
47 void string_array_destroy(string_array* arr) {
48 OSRF_STRING_ARRAY_FREE(arr);
52 int osrfStringArrayContains( osrfStringArray* arr, char* string ) {
53 if(!(arr && string)) return 0;
55 for( i = 0; i < arr->size; i++ ) {
56 char* str = OSRF_LIST_GET_INDEX(arr->list, i);
57 if(str && !strcmp(str, string))
64 void osrfStringArrayRemove( osrfStringArray* arr, char* tstr) {
65 if(!(arr && tstr)) return;
69 for( i = 0; i < arr->size; i++ ) {
70 /* find and remove the string */
71 str = OSRF_LIST_GET_INDEX(arr->list, i);
72 if(str && !strcmp(str, tstr)) {
73 osrfListRemove(arr->list, i);
78 /* disable automatic item freeing on delete and shift
79 * items up in the array to fill in the gap
81 arr->list->freeItem = NULL;
82 for( ; i < arr->size - 1; i++ )
83 osrfListSet(arr->list, OSRF_LIST_GET_INDEX(arr->list, i+1) , i);
85 /* remove the last item since it was shifted up */
86 osrfListRemove(arr->list, i);
88 /* re-enable automatic item freeing in delete */
89 osrfListSetDefaultFree(arr->list);