GRASS Programmer's Manual 6.4.1(2011)
|
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 }