1 #ifndef _LEO_LABELLER_H
2 #define _LEO_LABELLER_H
44 enum request_type type;
50 struct request request;
58 struct point_variant *variants;
61 struct request_segment
63 struct request request;
64 struct request_line *rl;
70 struct point_variant *variant;
74 struct request_section
76 struct request request;
78 struct request_segment *segments;
83 struct request request;
87 struct line_variant *variants;
88 struct request_segment *segments;
89 struct request_section *sections;
94 struct request request;
95 struct osm_multipolygon *o;
97 struct point_variant *variants;
104 struct sym_line *line;
108 struct buffer_linelabel
111 struct symbol *label;
119 struct graph_edge **edges;
129 struct graph_edge *prev;
130 struct graph_edge *next;
131 struct graph_node *n1;
132 struct graph_node *n2;
134 struct symbol *label;
135 struct sym_line *line;
138 struct graph_node *anode;
139 struct graph_node *bnode; // DEBUG PRINT
146 struct graph_edge *first;
151 struct request *request;
164 struct placement *placements;
165 struct map_part **map;
169 void labeller_init(void);
170 void labeller_add_point(struct symbol *sym, struct osm_object *object, z_index_t zindex);
171 void labeller_add_line(struct symbol *sym, z_index_t zindex);
172 void labeller_label(void);
173 void labeller_add_linelabel(struct symbol *sym, struct osm_object *o, z_index_t zindex);
174 void labeller_add_arealabel(struct symbol *sym, struct osm_object *o, z_index_t zindex);
176 void make_bitmap_icon(struct point_variant *v, struct sym_icon *si);
177 void make_bitmap_point(struct point_variant *v, struct sym_point *sp);
178 void make_bitmap_label(struct point_variant *v, struct sym_text *text);
180 void make_graph(void);
181 void label_graph(void);
182 void join_edge(struct graph_edge *e, int dir);
184 void make_segments(void);
186 void make_population(void);
187 bool shall_terminate(void);
191 void rank_population(void);
193 struct individual **perform_crossover(struct individual *parent1, struct individual *parent2);
194 void perform_mutation(struct individual *individual);
196 void init_placement(struct placement *p, struct request *r);
197 void init_individual(struct individual *i);
198 struct map_part **get_parts(struct placement *symbol, struct individual *individual);
200 int randint(int min, int max);
202 struct placement **get_closure(struct placement *placement, struct individual *parent1, struct individual *parent2);
203 void copy_symbols(struct placement **closure, struct individual *parent, struct individual *child);
204 void move_symbol(struct placement *p);
205 void move_symbol_point(struct placement *p);
207 struct placement **get_overlapping(struct placement *p);
208 void filter(struct placement **list, bool *pred);
210 int flip(int a, int b);
211 double randdouble(void);
215 void copy_individual(struct individual *src, struct individual *dest);