00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00039 #include <stdio.h>
00040 #include <stdlib.h>
00041 #include <assert.h>
00042
00043 #include "splt_array.h"
00044
00045 splt_array *splt_array_new()
00046 {
00047 splt_array *array = malloc(sizeof(splt_array));
00048 if (array == NULL)
00049 {
00050 return NULL;
00051 }
00052
00053 array->elements = NULL;
00054 array->number_of_elements = 0;
00055
00056 return array;
00057 }
00058
00059 long splt_array_append(splt_array *array, void *element)
00060 {
00061 if (!array || !element)
00062 {
00063 return 2;
00064 }
00065
00066 if (array->number_of_elements == 0)
00067 {
00068 array->elements = malloc(sizeof(element));
00069 if (!array->elements)
00070 {
00071 return -1;
00072 }
00073 array->elements[0] = element;
00074 array->number_of_elements++;
00075 }
00076 else
00077 {
00078 size_t malloc_number = sizeof(element) * (array->number_of_elements + 1);
00079 void **new_elements = realloc(array->elements, malloc_number);
00080 if (! new_elements)
00081 {
00082 return -1;
00083 }
00084 array->elements = new_elements;
00085 array->elements[array->number_of_elements] = element;
00086 array->number_of_elements++;
00087 }
00088
00089 return 0;
00090 }
00091
00092 void splt_array_clear(splt_array *array)
00093 {
00094 if (!array)
00095 {
00096 return;
00097 }
00098
00099 if (array->elements)
00100 {
00101 free(array->elements);
00102 array->elements = NULL;
00103 array->number_of_elements = 0;
00104 }
00105 }
00106
00107 void **splt_array_get_elements(splt_array *array)
00108 {
00109 return array->elements;
00110 }
00111
00112 long splt_array_get_number_of_elements(splt_array *array)
00113 {
00114 return array->number_of_elements;
00115 }
00116
00117
00118 void splt_array_free(splt_array **array)
00119 {
00120 if (!array)
00121 {
00122 return;
00123 }
00124
00125 if (*array)
00126 {
00127 splt_array_clear(*array);
00128 free(*array);
00129 *array = NULL;
00130 }
00131 }
00132
00133 void *splt_array_get(splt_array *array, long index)
00134 {
00135 if (!array)
00136 {
00137 return NULL;
00138 }
00139
00140 if (index < 0 || index >= array->number_of_elements)
00141 {
00142 return NULL;
00143 }
00144
00145 return array->elements[index];
00146 }
00147
00148 long splt_array_length(splt_array *array)
00149 {
00150 if (!array)
00151 {
00152 return -1;
00153 }
00154
00155 return array->number_of_elements;
00156 }
00157