]> git.evergreen-ils.org Git - Evergreen.git/blob - OpenSRF/src/utils/string_array.c
moving to UNIVERSAL::require to suck in implementation modules
[Evergreen.git] / OpenSRF / src / utils / string_array.c
1 #include "string_array.h"
2
3 osrfStringArray* osrfNewStringArray(int size) {
4         return init_string_array(size);
5 }
6
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");
10
11         string_array* arr = 
12                 (string_array*) safe_malloc(sizeof(string_array));
13         arr->array = (char**) safe_malloc(size * sizeof(char*));
14         arr->size = 0;
15         arr->arr_size = size;
16         return arr;
17 }
18
19
20 void osrfStringArrayAdd(osrfStringArray* arr, char* string) {
21         string_array_add(arr, string);
22 }
23
24 void string_array_add(string_array* arr, char* str) {
25         if(arr == NULL || str == NULL ) return;
26         if( strlen(str) < 1 ) return;
27
28         arr->size++;
29
30         if( arr->size > STRING_ARRAY_MAX_SIZE ) 
31                 osrfLogError( OSRF_LOG_MARK, "string_array_add size is too large");
32
33         /* if necessary, double capacity */
34         if(arr->size >= arr->arr_size) {
35                 arr->arr_size *= 2;
36                 char** tmp = (char**) safe_malloc(arr->arr_size * sizeof(char*));
37                 int i;
38
39                 /* copy the string pointers over */
40                 for( i = 0; i!= arr->size; i++ ) 
41                         tmp[i] = arr->array[i];
42
43                 free(arr->array);
44                 arr->array = tmp;
45         }
46
47         arr->array[arr->size - 1] = strdup(str);
48 }
49
50 char* osrfStringArrayGetString(osrfStringArray* arr, int index) {
51         return string_array_get_string(arr, index);
52 }
53
54 char* string_array_get_string(string_array* arr, int index) {
55         if(!arr || index < 0 || index >= arr->size ) return NULL;
56         return arr->array[index]; 
57 }
58
59
60 void osrfStringArrayFree(osrfStringArray* arr) {
61         string_array_destroy(arr);
62 }
63
64 void string_array_destroy(string_array* arr) {
65         if(arr) {
66                 int i = 0;
67                 while( i < arr->size ) free(arr->array[i++]);
68                 free(arr->array);
69                 free(arr);
70         }
71 }
72
73
74 int osrfStringArrayContains( osrfStringArray* arr, char* string ) {
75         if(!(arr && string)) return 0;
76         
77         int i;
78         for( i = 0; i != arr->size; i++ ) {
79                 char* str = osrfStringArrayGetString(arr, i);
80                 if(str) {
81                         if(!strcmp(str, string)) return 1;
82                 }
83         }
84
85         return 0;
86 }
87