23 #include <grass/gis.h>
24 #include <grass/Vect.h>
25 #include <grass/glocale.h>
27 static int cmp(
const void *pa,
const void *pb);
62 p = (
struct line_cats *)G_malloc(
sizeof(
struct line_cats));
121 for (n = 0; n < Cats->n_cats; n++) {
122 if (Cats->field[n] == field && Cats->cat[n] == cat)
128 if (n >= GV_NCATS_MAX) {
129 G_fatal_error(_(
"Too many categories (%d), unable to set cat %d (layer %d)"),
130 Cats->n_cats, cat, field);
133 if (Cats->n_cats == Cats->alloc_cats) {
139 Cats->field[n] = field;
170 for (n = 0; n < Cats->n_cats; n++) {
171 if (Cats->field[n] == field) {
199 if (field < 1 || field > GV_FIELD_MAX)
203 for (n = 0; n < Cats->n_cats; n++) {
204 if (Cats->field[n] != field)
209 return cats->n_values;
232 for (n = 0; n < Cats->n_cats; n++) {
233 if (Cats->field[n] == field) {
234 for (m = n; m < Cats->n_cats - 1; m++) {
235 Cats->field[m] = Cats->field[m + 1];
236 Cats->cat[m] = Cats->cat[m + 1];
259 register int n, m, found = 0;
268 for (n = 0; n < Cats->n_cats; n++) {
269 if (Cats->field[n] == field && (Cats->cat[n] == cat || cat == -1)) {
270 for (m = n; m < Cats->n_cats - 1; m++) {
271 Cats->field[m] = Cats->field[m + 1];
272 Cats->cat[m] = Cats->cat[m + 1];
309 p = (
struct cat_list *)G_malloc(
sizeof(
struct cat_list));
357 int i, nr, l,
err = 0;
362 G_debug(3,
"Vect_str_to_cat_list(): str = %s", str);
369 for (i = 0; i < l; i++)
374 if (list->alloc_ranges == 0) {
375 list->min = (
int *)G_malloc(nr *
sizeof(
int));
376 list->max = (
int *)G_malloc(nr *
sizeof(
int));
378 else if (nr > list->alloc_ranges) {
379 list->min = (
int *)G_realloc((
void *)list->min, nr *
sizeof(int));
380 list->max = (
int *)G_realloc((
void *)list->max, nr *
sizeof(int));
388 e = (
char *)strchr(s,
',');
401 if (sscanf(buf,
"%d-%d", &min, &max) == 2) {
403 else if (sscanf(buf,
"%d", &min) == 1)
407 G_warning(_(
"Unable to convert category string '%s' (from '%s') to category range"),
436 G_debug(1,
"Vect_array_to_cat_list()");
438 for (i = 0; i < nvals; i++) {
439 if (i == 0 || (vals[i] - list->max[range]) > 1) {
441 if (range == list->alloc_ranges) {
442 list->alloc_ranges += 1000;
443 list->min = (
int *)G_realloc((
void *)list->min,
447 (
int *)G_realloc((
void *)list->max,
448 list->alloc_ranges *
sizeof(int));
450 list->min[range] = vals[i];
451 list->max[range] = vals[i];
454 list->max[range] = vals[i];
458 list->n_ranges = range + 1;
460 return (list->n_ranges);
476 for (i = 0; i < list->n_ranges; i++)
477 if (cat >= list->min[i] && cat <= list->
max[i])
497 i = bsearch((
void *)&cat, (
void *)array, (
size_t) ncats,
506 static int cmp(
const void *pa,
const void *pb)