Vlib/list.c

Go to the documentation of this file.
00001 
00021 #include <stdlib.h>
00022 #include <grass/Vect.h>
00023 #include <grass/gis.h>
00024 
00034 struct ilist *Vect_new_list(void)
00035 {
00036     struct ilist *p;
00037 
00038     p = (struct ilist *)G_malloc(sizeof(struct ilist));
00039 
00040     if (p) {
00041         p->value = NULL;
00042         p->n_values = 0;
00043         p->alloc_values = 0;
00044     }
00045 
00046     return p;
00047 }
00048 
00059 int Vect_reset_list(struct ilist *list)
00060 {
00061     list->n_values = 0;
00062 
00063     return 0;
00064 }
00065 
00074 int Vect_destroy_list(struct ilist *list)
00075 {
00076     if (list) {                 /* probably a moot test */
00077         if (list->alloc_values) {
00078             G_free((void *)list->value);
00079         }
00080         G_free((void *)list);
00081     }
00082     list = NULL;
00083 
00084     return 0;
00085 }
00086 
00096 int Vect_list_append(struct ilist *list, int val)
00097 {
00098     int i;
00099     size_t size;
00100 
00101     if (list == NULL)
00102         return 1;
00103 
00104     for (i = 0; i < list->n_values; i++) {
00105         if (val == list->value[i])
00106             return 0;
00107     }
00108 
00109     if (list->n_values == list->alloc_values) {
00110         size = (list->n_values + 1000) * sizeof(int);
00111         list->value = (int *)G_realloc((void *)list->value, size);
00112         list->alloc_values = list->n_values + 1000;
00113     }
00114 
00115     list->value[list->n_values] = val;
00116     list->n_values++;
00117 
00118     return 0;
00119 }
00120 
00130 int Vect_list_append_list(struct ilist *alist, struct ilist *blist)
00131 {
00132     int i;
00133 
00134     if (alist == NULL || blist == NULL)
00135         return 1;
00136 
00137     for (i = 0; i < blist->n_values; i++)
00138         Vect_list_append(alist, blist->value[i]);
00139 
00140     return 0;
00141 }
00142 
00152 int Vect_list_delete(struct ilist *list, int val)
00153 {
00154     int i, j;
00155 
00156     if (list == NULL)
00157         return 1;
00158 
00159     for (i = 0; i < list->n_values; i++) {
00160         if (val == list->value[i]) {
00161             for (j = i + 1; j < list->n_values; j++)
00162                 list->value[j - 1] = list->value[j];
00163 
00164             list->n_values--;
00165             return 0;
00166         }
00167     }
00168 
00169     return 0;
00170 }
00171 
00181 int Vect_list_delete_list(struct ilist *alist, struct ilist *blist)
00182 {
00183     int i;
00184 
00185     if (alist == NULL || blist == NULL)
00186         return 1;
00187 
00188     for (i = 0; i < blist->n_values; i++)
00189         Vect_list_delete(alist, blist->value[i]);
00190 
00191     return 0;
00192 }
00193 
00203 int Vect_val_in_list(struct ilist *list, int val)
00204 {
00205     int i;
00206 
00207     if (list == NULL)
00208         return 0;
00209 
00210     for (i = 0; i < list->n_values; i++) {
00211         if (val == list->value[i])
00212             return 1;
00213     }
00214 
00215     return 0;
00216 }

Generated on Sat Oct 24 03:25:20 2009 for GRASS Programmer's Manual by  doxygen 1.6.1