diff options
author | Joseph Herlant <herlantj@gmail.com> | 2018-05-25 22:06:51 -0700 |
---|---|---|
committer | Joseph Herlant <aerostitch@users.noreply.github.com> | 2018-05-25 22:17:50 -0700 |
commit | 8a76acb966f7059caf9d72c853175bd923b1e9d7 (patch) | |
tree | 1735178f7a0718831b88d2c36ea18a9955de3224 /navit/search_houseno_interpol.c | |
parent | 032f15287b472f1a4b5349533f3e5b468684b281 (diff) | |
download | navit-8a76acb966f7059caf9d72c853175bd923b1e9d7.tar.gz |
cleanup:global:Use astyle to reformat everything
Diffstat (limited to 'navit/search_houseno_interpol.c')
-rw-r--r-- | navit/search_houseno_interpol.c | 334 |
1 files changed, 164 insertions, 170 deletions
diff --git a/navit/search_houseno_interpol.c b/navit/search_houseno_interpol.c index fe575b73d..f20d8080e 100644 --- a/navit/search_houseno_interpol.c +++ b/navit/search_houseno_interpol.c @@ -37,9 +37,9 @@ #include "search_houseno_interpol.h" struct hn_interpol_attr { - enum attr_type house_number_interpol_attr; - int interpol_increment; - enum include_end_nodes include_end_nodes; + enum attr_type house_number_interpol_attr; + int interpol_increment; + enum include_end_nodes include_end_nodes; }; #define house_number_interpol_attr_END -1 @@ -48,204 +48,198 @@ struct hn_interpol_attr { * along with interpolation information. */ struct hn_interpol_attr house_number_interpol_attrs[] = { - { attr_house_number_left, 1, end_nodes_yes }, - { attr_house_number_left_odd, 2, end_nodes_yes }, - { attr_house_number_left_even, 2, end_nodes_yes }, - { attr_house_number_right, 1, end_nodes_yes }, - { attr_house_number_right_odd, 2, end_nodes_yes }, - { attr_house_number_right_even, 2, end_nodes_yes }, - { attr_house_number_interpolation_no_ends_incrmt_1, 1, end_nodes_no }, - { attr_house_number_interpolation_no_ends_incrmt_2, 2, end_nodes_no }, - { house_number_interpol_attr_END, -1, -1 }, + { attr_house_number_left, 1, end_nodes_yes }, + { attr_house_number_left_odd, 2, end_nodes_yes }, + { attr_house_number_left_even, 2, end_nodes_yes }, + { attr_house_number_right, 1, end_nodes_yes }, + { attr_house_number_right_odd, 2, end_nodes_yes }, + { attr_house_number_right_even, 2, end_nodes_yes }, + { attr_house_number_interpolation_no_ends_incrmt_1, 1, end_nodes_no }, + { attr_house_number_interpolation_no_ends_incrmt_2, 2, end_nodes_no }, + { house_number_interpol_attr_END, -1, -1 }, }; void -house_number_interpolation_clear_current(struct house_number_interpolation *inter) -{ - g_free(inter->first); - g_free(inter->last); - g_free(inter->curr); - inter->first=inter->last=inter->curr=NULL; - inter->increment=inter->include_end_nodes=-1; +house_number_interpolation_clear_current(struct house_number_interpolation *inter) { + g_free(inter->first); + g_free(inter->last); + g_free(inter->curr); + inter->first=inter->last=inter->curr=NULL; + inter->increment=inter->include_end_nodes=-1; } void -house_number_interpolation_clear_all(struct house_number_interpolation *inter) -{ - inter->curr_interpol_attr_idx=0; - house_number_interpolation_clear_current(inter); +house_number_interpolation_clear_all(struct house_number_interpolation *inter) { + inter->curr_interpol_attr_idx=0; + house_number_interpolation_clear_current(inter); } static char * -search_next_house_number_curr_interpol_with_ends(struct house_number_interpolation *inter) -{ - dbg(lvl_debug,"interpolate %s-%s %s",inter->first,inter->last,inter->curr); - if (!inter->first || !inter->last) - return NULL; - if (!inter->curr) - inter->curr=g_strdup(inter->first); - else { - if (strcmp(inter->curr, inter->last)) { - int next=atoi(inter->curr)+(inter->increment); - g_free(inter->curr); - if (next == atoi(inter->last)) - inter->curr=g_strdup(inter->last); - else - inter->curr=g_strdup_printf("%d",next); - } else { - g_free(inter->curr); - inter->curr=NULL; - } - } - dbg(lvl_debug,"interpolate result %s",inter->curr); - return inter->curr; +search_next_house_number_curr_interpol_with_ends(struct house_number_interpolation *inter) { + dbg(lvl_debug,"interpolate %s-%s %s",inter->first,inter->last,inter->curr); + if (!inter->first || !inter->last) + return NULL; + if (!inter->curr) + inter->curr=g_strdup(inter->first); + else { + if (strcmp(inter->curr, inter->last)) { + int next=atoi(inter->curr)+(inter->increment); + g_free(inter->curr); + if (next == atoi(inter->last)) + inter->curr=g_strdup(inter->last); + else + inter->curr=g_strdup_printf("%d",next); + } else { + g_free(inter->curr); + inter->curr=NULL; + } + } + dbg(lvl_debug,"interpolate result %s",inter->curr); + return inter->curr; } static int house_number_is_end_number(char* house_number, struct house_number_interpolation *inter) { - return ( (!strcmp(house_number, inter->first)) - || (!strcmp(house_number, inter->last)) ); + return ( (!strcmp(house_number, inter->first)) + || (!strcmp(house_number, inter->last)) ); } static char * -search_next_house_number_curr_interpol(struct house_number_interpolation *inter) -{ - char* hn=NULL; - switch (inter->include_end_nodes) { - case end_nodes_yes: - hn=search_next_house_number_curr_interpol_with_ends(inter); - break; - case end_nodes_no: - do { - hn=search_next_house_number_curr_interpol_with_ends(inter); - } while (hn!=NULL && house_number_is_end_number(hn, inter)); - break; - } - return hn; +search_next_house_number_curr_interpol(struct house_number_interpolation *inter) { + char* hn=NULL; + switch (inter->include_end_nodes) { + case end_nodes_yes: + hn=search_next_house_number_curr_interpol_with_ends(inter); + break; + case end_nodes_no: + do { + hn=search_next_house_number_curr_interpol_with_ends(inter); + } while (hn!=NULL && house_number_is_end_number(hn, inter)); + break; + } + return hn; } static void -search_house_number_interpolation_split(char *str, struct house_number_interpolation *inter) -{ - char *pos=strchr(str,'-'); - char *first,*last; - int len; - if (!pos) { - inter->first=g_strdup(str); - inter->last=g_strdup(str); - inter->rev=0; - return; - } - len=pos-str; - first=g_malloc(len+1); - strncpy(first, str, len); - first[len]='\0'; - last=g_strdup(pos+1); - dbg(lvl_debug,"%s = %s - %s",str, first, last); - if (atoi(first) > atoi(last)) { - inter->first=last; - inter->last=first; - inter->rev=1; - } else { - inter->first=first; - inter->last=last; - inter->rev=0; - } +search_house_number_interpolation_split(char *str, struct house_number_interpolation *inter) { + char *pos=strchr(str,'-'); + char *first,*last; + int len; + if (!pos) { + inter->first=g_strdup(str); + inter->last=g_strdup(str); + inter->rev=0; + return; + } + len=pos-str; + first=g_malloc(len+1); + strncpy(first, str, len); + first[len]='\0'; + last=g_strdup(pos+1); + dbg(lvl_debug,"%s = %s - %s",str, first, last); + if (atoi(first) > atoi(last)) { + inter->first=last; + inter->last=first; + inter->rev=1; + } else { + inter->first=first; + inter->last=last; + inter->rev=0; + } } struct pcoord * -search_house_number_coordinate(struct item *item, struct house_number_interpolation *inter) -{ - struct pcoord *ret=g_new(struct pcoord, 1); - ret->pro = map_projection(item->map); - dbg(lvl_debug,"%s",item_to_name(item->type)); - if (!inter) { - struct coord c; - if (item_coord_get(item, &c, 1)) { - ret->x=c.x; - ret->y=c.y; - } else { - g_free(ret); - ret=NULL; - } - } else { - int count,max=1024; - int hn_pos,hn_length; - int inter_increment=inter->increment; - struct coord *c=g_alloca(sizeof(struct coord)*max); - item_coord_rewind(item); - count=item_coord_get(item, c, max); - hn_length=atoi(inter->last)-atoi(inter->first); - if (inter->rev) - hn_pos=atoi(inter->last)-atoi(inter->curr); - else - hn_pos=atoi(inter->curr)-atoi(inter->first); - if (count) { - int i,distance_sum=0,hn_distance; - int *distances=g_alloca(sizeof(int)*(count-1)); - dbg(lvl_debug,"count=%d hn_length=%d hn_pos=%d (%s of %s-%s)",count,hn_length,hn_pos,inter->curr,inter->first,inter->last); - if (!hn_length) { - hn_length=2; - hn_pos=1; - } - if (count == max) - dbg(lvl_error,"coordinate overflow"); - for (i = 0 ; i < count-1 ; i++) { - distances[i]=navit_sqrt(transform_distance_sq(&c[i],&c[i+1])); - distance_sum+=distances[i]; - dbg(lvl_debug,"distance[%d]=%d",i,distances[i]); - } - dbg(lvl_debug,"sum=%d",distance_sum); +search_house_number_coordinate(struct item *item, struct house_number_interpolation *inter) { + struct pcoord *ret=g_new(struct pcoord, 1); + ret->pro = map_projection(item->map); + dbg(lvl_debug,"%s",item_to_name(item->type)); + if (!inter) { + struct coord c; + if (item_coord_get(item, &c, 1)) { + ret->x=c.x; + ret->y=c.y; + } else { + g_free(ret); + ret=NULL; + } + } else { + int count,max=1024; + int hn_pos,hn_length; + int inter_increment=inter->increment; + struct coord *c=g_alloca(sizeof(struct coord)*max); + item_coord_rewind(item); + count=item_coord_get(item, c, max); + hn_length=atoi(inter->last)-atoi(inter->first); + if (inter->rev) + hn_pos=atoi(inter->last)-atoi(inter->curr); + else + hn_pos=atoi(inter->curr)-atoi(inter->first); + if (count) { + int i,distance_sum=0,hn_distance; + int *distances=g_alloca(sizeof(int)*(count-1)); + dbg(lvl_debug,"count=%d hn_length=%d hn_pos=%d (%s of %s-%s)",count,hn_length,hn_pos,inter->curr,inter->first, + inter->last); + if (!hn_length) { + hn_length=2; + hn_pos=1; + } + if (count == max) + dbg(lvl_error,"coordinate overflow"); + for (i = 0 ; i < count-1 ; i++) { + distances[i]=navit_sqrt(transform_distance_sq(&c[i],&c[i+1])); + distance_sum+=distances[i]; + dbg(lvl_debug,"distance[%d]=%d",i,distances[i]); + } + dbg(lvl_debug,"sum=%d",distance_sum); #if 0 - hn_distance=distance_sum*hn_pos/hn_length; + hn_distance=distance_sum*hn_pos/hn_length; #else - hn_distance=(distance_sum*hn_pos+distance_sum*inter_increment/2)/(hn_length+inter_increment); + hn_distance=(distance_sum*hn_pos+distance_sum*inter_increment/2)/(hn_length+inter_increment); #endif - dbg(lvl_debug,"hn_distance=%d",hn_distance); - i=0; - while (i < count-1 && hn_distance > distances[i]) - hn_distance-=distances[i++]; - dbg(lvl_debug,"remaining distance=%d from %d",hn_distance,distances[i]); - ret->x=(c[i+1].x-c[i].x)*hn_distance/distances[i]+c[i].x; - ret->y=(c[i+1].y-c[i].y)*hn_distance/distances[i]+c[i].y; - } - } - return ret; + dbg(lvl_debug,"hn_distance=%d",hn_distance); + i=0; + while (i < count-1 && hn_distance > distances[i]) + hn_distance-=distances[i++]; + dbg(lvl_debug,"remaining distance=%d from %d",hn_distance,distances[i]); + ret->x=(c[i+1].x-c[i].x)*hn_distance/distances[i]+c[i].x; + ret->y=(c[i+1].y-c[i].y)*hn_distance/distances[i]+c[i].y; + } + } + return ret; } static int -search_match(char *str, char *search, int partial) -{ - if (!partial) - return (!g_ascii_strcasecmp(str, search)); - else - return (!g_ascii_strncasecmp(str, search, strlen(search))); +search_match(char *str, char *search, int partial) { + if (!partial) + return (!g_ascii_strcasecmp(str, search)); + else + return (!g_ascii_strncasecmp(str, search, strlen(search))); } char * -search_next_interpolated_house_number(struct item *item, struct house_number_interpolation *inter, char *inter_match, int inter_partial) -{ - while (1) { - char *hn; - struct attr attr; - struct hn_interpol_attr curr_interpol_attr; - while((hn=search_next_house_number_curr_interpol(inter))){ - if (search_match(hn, inter_match, inter_partial)) { - return map_convert_string(item->map, hn); - } - } +search_next_interpolated_house_number(struct item *item, struct house_number_interpolation *inter, char *inter_match, + int inter_partial) { + while (1) { + char *hn; + struct attr attr; + struct hn_interpol_attr curr_interpol_attr; + while((hn=search_next_house_number_curr_interpol(inter))) { + if (search_match(hn, inter_match, inter_partial)) { + return map_convert_string(item->map, hn); + } + } - house_number_interpolation_clear_current(inter); - curr_interpol_attr=house_number_interpol_attrs[inter->curr_interpol_attr_idx]; - if (curr_interpol_attr.house_number_interpol_attr==house_number_interpol_attr_END) { - return NULL; - } - if (item_attr_get(item, curr_interpol_attr.house_number_interpol_attr, &attr)) { - search_house_number_interpolation_split(attr.u.str, inter); - inter->increment=curr_interpol_attr.interpol_increment; - inter->include_end_nodes=curr_interpol_attr.include_end_nodes; - } - inter->curr_interpol_attr_idx++; - } + house_number_interpolation_clear_current(inter); + curr_interpol_attr=house_number_interpol_attrs[inter->curr_interpol_attr_idx]; + if (curr_interpol_attr.house_number_interpol_attr==house_number_interpol_attr_END) { + return NULL; + } + if (item_attr_get(item, curr_interpol_attr.house_number_interpol_attr, &attr)) { + search_house_number_interpolation_split(attr.u.str, inter); + inter->increment=curr_interpol_attr.interpol_increment; + inter->include_end_nodes=curr_interpol_attr.include_end_nodes; + } + inter->curr_interpol_attr_idx++; + } } |