/*! * \brief Add isle to area if does not exist yet. * * \param[in] plus pointer to Plus_head structure * \param[in] area area id * \param[in] isle isle id * * \return 0 */ int dig_area_add_isle(struct Plus_head *plus, int area, int isle) { int i; struct P_area *Area; G_debug(3, "dig_area_add_isle(): area = %d isle = %d", area, isle); Area = plus->Area[area]; if (Area == NULL) G_fatal_error("Attempt to add isle to dead area"); for (i = 0; i < Area->n_isles; i++) { if (Area->isles[i] == isle) { /* Already exists: bug in vector libs */ G_debug(3, "isle already registered in area"); return 0; } } if (Area->alloc_isles <= Area->n_isles) /* array is full */ dig_area_alloc_isle(Area, 1); Area->isles[Area->n_isles] = isle; Area->n_isles++; G_debug(3, " -> n_isles = %d", Area->n_isles); return 0; }
int dig_Rd_P_area(struct Plus_head *Plus, int n, struct gvfile * fp) { int cnt; struct P_area *ptr; G_debug(4, "dig_Rd_P_area(): n = %d", n); if (0 >= dig__fread_port_P(&cnt, 1, fp)) return (-1); if (cnt == 0) { /* dead */ Plus->Area[n] = NULL; return 0; } ptr = dig_alloc_area(); /* boundaries */ ptr->n_lines = cnt; if (dig_area_alloc_line(ptr, ptr->n_lines) == -1) return -1; if (ptr->n_lines) if (0 >= dig__fread_port_P(ptr->lines, ptr->n_lines, fp)) return -1; /* isles */ if (0 >= dig__fread_port_P(&(ptr->n_isles), 1, fp)) return -1; if (dig_area_alloc_isle(ptr, ptr->n_isles) == -1) return -1; if (ptr->n_isles) if (0 >= dig__fread_port_P(ptr->isles, ptr->n_isles, fp)) return -1; /* centroid */ if (0 >= dig__fread_port_P(&(ptr->centroid), 1, fp)) return -1; Plus->Area[n] = ptr; return (0); }