{
unsigned char *ptr;
- ptr = ((unsigned char*)seg) + sizeof(struct route_graph_segment);
+ ptr = ((unsigned char*)seg) + sizeof(struct route_segment_data);
if (seg->flags & AF_SPEED_LIMIT) {
if (type == attr_maxspeed)
route_path_add_item_from_graph(struct route_path *this, struct route_path *oldpath, struct route_graph_segment *rgs, int dir, struct route_info *pos, struct route_info *dst)
{
struct route_path_segment *segment;
- int i,ccnt = 0, extra=0, ret=1;
+ int i, ccnt, extra=0, ret=1;
struct coord *c,*cd,ca[2048];
int offset=1;
int seg_size,seg_dat_size;
if (rgs->data.flags & AF_SEGMENTED)
offset=RSD_OFFSET(&rgs->data);
- dbg(1,"enter (0x%x,0x%x)\n", rgs->data.item.id_hi, rgs->data.item.id_lo);
- if (oldpath) {
- ccnt = (int)item_hash_lookup(oldpath->path_hash, &rgs->data.item);
- if (ccnt) {
+ dbg(1,"enter (0x%x,0x%x) dir=%d pos=%p dst=%p\n", rgs->data.item.id_hi, rgs->data.item.id_lo, dir, pos, dst);
+ if (oldpath && !pos) {
+ segment=item_hash_lookup(oldpath->path_hash, &rgs->data.item);
+ if (segment && segment->direction == dir) {
segment = route_extract_segment_from_path(oldpath, &rgs->data.item, offset);
if (segment)
goto linkold;
}
} else {
extra=1;
- dbg(0,"pos dir=%d\n", dir);
- dbg(0,"pos pos=%d\n", pos->pos);
- dbg(0,"pos count=%d\n", pos->street->count);
+ dbg(1,"pos dir=%d\n", dir);
+ dbg(1,"pos pos=%d\n", pos->pos);
+ dbg(1,"pos count=%d\n", pos->street->count);
if (dir > 0) {
c=pos->street->c+pos->pos+1;
ccnt=pos->street->count-pos->pos-1;
}
} else if (dst) {
extra=1;
- dbg(0,"dst dir=%d\n", dir);
- dbg(0,"dst pos=%d\n", dst->pos);
+ dbg(1,"dst dir=%d\n", dir);
+ dbg(1,"dst pos=%d\n", dst->pos);
if (dir > 0) {
c=dst->street->c;
ccnt=dst->pos+1;
linkold:
segment->data->len=rgs->data.len;
segment->next=NULL;
- item_hash_insert(this->path_hash, &rgs->data.item, (void *)ccnt);
+ item_hash_insert(this->path_hash, &rgs->data.item, segment);
route_path_add_segment(this, segment);
}
fh_deleteheap(heap);
callback_call_0(cb);
- dbg(0,"return\n");
+ dbg(1,"return\n");
}
/**
struct coord_geo g;
ret=g_new0(struct route_info, 1);
- if (!ret) {
- dbg(0,"Out of memory\n");
- return ret;
- }
mindist = INT_MAX;
h=mapset_open(ms);
callback_list_remove(this_->cbl, cb);
}
-
+int
+route_get_attr(struct route *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter)
+{
+ switch (type) {
+ case attr_map:
+ attr->u.map=route_get_map(this_);
+ return attr->u.map != NULL;
+ default:
+ return 0;
+ }
+}
void
route_init(void)
{
plugin_register_map_type("route", route_map_new);
plugin_register_map_type("route_graph", route_graph_map_new);
}
+