1 #include <opensrf/string_array.h>
3 osrfStringArray* osrfNewStringArray(int size) {
4 if(size > STRING_ARRAY_MAX_SIZE)
5 osrfLogError( OSRF_LOG_MARK, "osrfNewStringArray size is too large");
8 OSRF_MALLOC( arr, sizeof(osrfStringArray));
9 arr->list = osrfNewListSize(size);
10 osrfListSetDefaultFree(arr->list);
16 void osrfStringArrayAdd(osrfStringArray* arr, char* str) {
17 if(arr == NULL || str == NULL ) return;
18 if( arr->size > STRING_ARRAY_MAX_SIZE )
19 osrfLogError( OSRF_LOG_MARK, "osrfStringArrayAdd size is too large");
20 osrfListPush(arr->list, strdup(str));
21 arr->size = arr->list->size;
24 char* osrfStringArrayGetString(osrfStringArray* arr, int index) {
26 return OSRF_LIST_GET_INDEX(arr->list, index);
29 void osrfStringArrayFree(osrfStringArray* arr) {
30 OSRF_STRING_ARRAY_FREE(arr);
33 int osrfStringArrayContains( osrfStringArray* arr, char* string ) {
34 if(!(arr && string)) return 0;
36 for( i = 0; i < arr->size; i++ ) {
37 char* str = OSRF_LIST_GET_INDEX(arr->list, i);
38 if(str && !strcmp(str, string))
45 void osrfStringArrayRemove( osrfStringArray* arr, char* tstr) {
46 if(!(arr && tstr)) return;
50 for( i = 0; i < arr->size; i++ ) {
51 /* find and remove the string */
52 str = OSRF_LIST_GET_INDEX(arr->list, i);
53 if(str && !strcmp(str, tstr)) {
54 osrfListRemove(arr->list, i);
59 /* disable automatic item freeing on delete and shift
60 * items up in the array to fill in the gap
62 arr->list->freeItem = NULL;
63 for( ; i < arr->size - 1; i++ )
64 osrfListSet(arr->list, OSRF_LIST_GET_INDEX(arr->list, i+1) , i);
66 /* remove the last item since it was shifted up */
67 osrfListRemove(arr->list, i);
69 /* re-enable automatic item freeing in delete */
70 osrfListSetDefaultFree(arr->list);