+ struct coords c = { .x = n->x, .y = n->y };
+ return simp_hash_lookup((byte *) &c);
+}
+
+static void simp_register_symbol(struct symbol *sym)
+{
+ struct osm_object *o = sym->o;
+
+ switch (o->type)
+ {
+ case OSM_TYPE_NODE:
+ simp_lookup_node((struct osm_node *) o);
+ break;
+ case OSM_TYPE_WAY:
+ {
+ struct osm_way *w = (struct osm_way *) o;
+ struct simp_way_ref *wr_last = NULL;
+ struct osm_node *prev_n = NULL;
+
+#if 0
+ for (uint i=0; i<2; i++)
+ {
+ struct osm_node *n = (struct osm_node *) (i ? osm_ref_head(&w->nodes) : osm_ref_tail(&w->nodes));
+ struct sym_point *sp = sym_point_new(&n->o);
+ sp->shape = VALUE_CIRCLE;
+ sp->size = 1;
+ sp->fill_color = 0x0000ff;
+ sp->fill_opacity = 1;
+ sp->do_fill = 1;
+ sym_plan(sp, 100);
+ }
+#endif
+
+ if (clist_size(&w->nodes) < 2)
+ break;
+
+ OSM_FOR_EACH_BEGIN(struct osm_node *, n, w->nodes)
+ {
+ if (n == prev_n)
+ continue;
+
+ struct simp_node *s = simp_lookup_node(n);
+ struct simp_way_ref *wref = mp_alloc(simp_pool, sizeof(*wref));
+ wref->snode = s;
+ wref->sym = sym;
+ wref->node = n;
+ wref->way = w;
+ wref->prev_on_way = wr_last;
+ wref->next_on_way = NULL;
+ if (wr_last)
+ wr_last->next_on_way = wref;
+ wr_last = wref;
+ wref->merge_done = 0;
+ clist_add_tail(&s->way_refs, &wref->n);
+
+ prev_n = n;
+ }
+ OSM_FOR_EACH_END;
+ break;
+ }
+ default:
+ die("Simplify: Unsupported symbol type %u", o->type);
+ }
+}