25#include "local_proto.h"
28 "------------------------------------------------------------------------" \
29 "------------------\n"
33 if (!
Map->plus.cidx_up_to_date)
37static void check_index(
struct Map_info *
Map,
int index)
44static int ci_search_cat(
struct Cat_index *
ci,
int first,
int cat)
51 if (
ci->cat[
lo][0] > cat)
53 if (
ci->cat[
lo][0] == cat)
63 if (
ci->cat[
mid][0] < cat)
68 if (
ci->cat[
lo][0] == cat)
85 return Map->plus.n_cidx;
101 check_index(
Map, index);
103 return Map->plus.cidx[index].field;
120 G_debug(2,
"Vect_cidx_get_field_index() field = %d", field);
125 for (i = 0; i <
Plus->n_cidx; i++) {
126 if (
Plus->cidx[i].field == field)
147 check_index(
Map, index);
149 return Map->plus.cidx[index].n_ucats;
164 check_index(
Map, index);
166 return Map->plus.cidx[index].n_cats;
225 int i, fi,
count = 0;
227 G_debug(3,
"Vect_cidx_get_type_count() field = %d, type = %d", field, type);
233 G_debug(3,
"field_index = %d", fi);
235 G_debug(3,
"ntypes = %d",
Map->plus.cidx[fi].n_types);
236 for (i = 0; i <
Map->plus.cidx[fi].n_types; i++) {
239 tp =
Map->plus.cidx[fi].type[i][0];
240 cnt =
Map->plus.cidx[fi].type[i][1];
263 int cat_index,
int *cat,
int *type,
int *
id)
305 for (c = 1; c <
ci->n_cats; c++) {
306 if (
ci->cat[c][0] !=
ci->cat[c - 1][0])
310 return list->n_values ==
ci->n_ucats ? 1 : 0;
334 "Vect_cidx_find_next() cat = %d, type_mask = %d, start_index = %d",
355 G_debug(3,
" type match -> record found");
400 if (
ci->cat[idx][0] !=
cat) {
424 G_debug(2,
"Vect_cidx_dump()");
430 "---------- CATEGORY INDEX DUMP: Number of layers: %d "
431 "--------------------------------------\n",
434 for (i = 0; i <
nfields; i++) {
443 "Layer %6d number of unique cats: %7d number of "
444 "cats: %7d number of types: %d\n",
456 fprintf(
out,
" category | type | line/area\n");
457 for (
j = 0;
j < ncats;
j++) {
484 G_debug(2,
"Vect_cidx_save()");
494 G_warning(
_(
"Unable to create category index file for vector map <%s>"),
503 G_warning(
_(
"Error writing out category index file"));
547 G_warning(
_(
"Unable to open category index file for vector map <%s>"),
559 G_debug(3,
"Cannot read cidx");
int Vect_cidx_get_type_count_by_index(struct Map_info *Map, int field_index, int type_index, int *type, int *count)
Get count of feature types for given field and type index.
int Vect_cidx_get_num_types_by_index(struct Map_info *Map, int field_index)
Get number of feature types for given layer index.
int Vect_cidx_open(struct Map_info *Map, int head_only)
Read category index from cidx file if exists.
int Vect_cidx_get_unique_cats_by_index(struct Map_info *Map, int field_index, struct ilist *list)
Get list of unique categories for given layer index.
int Vect_cidx_find_next(struct Map_info *Map, int field_index, int cat, int type_mask, int start_index, int *type, int *id)
Find next line/area id for given category, start_index and type_mask.
int Vect_cidx_get_num_cats_by_index(struct Map_info *Map, int index)
Get number of categories for given layer index.
int Vect_cidx_get_type_count(struct Map_info *Map, int field, int type)
Get count of features of certain type by layer and type.
int Vect_cidx_get_field_index(struct Map_info *Map, int field)
Get layer index for given layer number.
int Vect_cidx_save(struct Map_info *Map)
Save category index to binary file (cidx)
int Vect_cidx_get_cat_by_index(struct Map_info *Map, int field_index, int cat_index, int *cat, int *type, int *id)
Get category, feature type and id for given layer and category index.
int Vect_cidx_get_field_number(struct Map_info *Map, int index)
Get layer number for given index.
void Vect_cidx_find_all(struct Map_info *Map, int layer, int type_mask, int cat, struct ilist *lines)
Find all line/area id's for given category.
int Vect_cidx_dump(struct Map_info *Map, FILE *out)
Write (dump) category index in text form to file.
int Vect_cidx_get_num_fields(struct Map_info *Map)
Get number of layers in category index.
int Vect_cidx_get_num_unique_cats_by_index(struct Map_info *Map, int index)
Get number of unique categories for given layer index.
AMI_err name(char **stream_name)
void G_free(void *)
Free allocated memory.
void void void void G_fatal_error(const char *,...) __attribute__((format(printf
void G_warning(const char *,...) __attribute__((format(printf
FILE * G_fopen_new(const char *, const char *)
Open a new database file.
FILE * G_fopen_old(const char *, const char *, const char *)
Open a database file for reading.
int G_debug(int, const char *,...) __attribute__((format(printf
const char * Vect_get_name(struct Map_info *)
Get name of vector map.
int Vect_list_append(struct ilist *, int)
Append new item to the end of list if not yet present.
const char * Vect_get_full_name(struct Map_info *)
Get fully qualified name of vector map.
int Vect_reset_list(struct ilist *)
Reset ilist structure.
#define GV_CIDX_ELEMENT
Native format, category index.
int dig_write_cidx(struct gvfile *, struct Plus_head *)
int dig__byte_order_out(void)
Get byte order.
int dig_read_cidx(struct gvfile *, struct Plus_head *, int)
Read spatial index file.
void dig_init_portable(struct Port_info *, int)
Set Port_info structure to byte order of file.
void dig_cidx_sort(struct Plus_head *)
void dig_file_init(struct gvfile *file)
Initialize gvfile structure.
int(* cat)[3]
Array of cats (cat, type, lines/area)
int n_cats
Number of items in cat array.
int field
Field (layer) number.
int type[7][2]
Number of elements for each type.
Basic topology-related info.
struct Port_info cidx_port
Portability information for category index.
FILE * file
File descriptor.
char * Vect__get_element_path(char *file_path, struct Map_info *Map, const char *element)
Get map element full path (internal use only)
char * Vect__get_path(char *path, struct Map_info *Map)
Get map directory name (internal use only)