X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fsuperx.c;fp=src%2Fsuperx.c;h=20dc065b1530eaf2311fb66d6a152bd08bdec48d;hb=a5b34ad069a52ff6cf981f01667d102292988811;hp=45b82271512dba036cabed9a823f147adf6754a2;hpb=20283c6cf5c6951cc1f2787492c67a7fb72aee9a;p=routino diff --git a/src/superx.c b/src/superx.c index 45b8227..20dc065 100644 --- a/src/superx.c +++ b/src/superx.c @@ -1,5 +1,5 @@ /*************************************** - $Header: /home/amb/routino/src/RCS/superx.c,v 1.38 2010/07/05 19:05:51 amb Exp $ + $Header: /home/amb/routino/src/RCS/superx.c,v 1.44 2010/10/09 14:14:42 amb Exp $ Super-Segment data type functions. @@ -22,23 +22,19 @@ ***************************************/ -#include #include #include -#include "results.h" -#include "functions.h" +#include "ways.h" + #include "nodesx.h" #include "segmentsx.h" #include "waysx.h" #include "superx.h" -#include "ways.h" +#include "files.h" +#include "results.h" -/* Variables */ - -/*+ The command line '--slim' option. +*/ -extern int option_slim; /* Local Functions */ @@ -60,9 +56,8 @@ void ChooseSuperNodes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx) index_t i; int nnodes=0; - /* Check the start conditions */ - - assert(segmentsx->firstnode); /* Must have firstnode filled in => segments are updated */ + if(nodesx->number==0 || segmentsx->number==0 || waysx->number==0) + return; /* Print the start message */ @@ -71,16 +66,17 @@ void ChooseSuperNodes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx) /* Map into memory */ - if(!option_slim) - { - segmentsx->xdata=MapFile(segmentsx->filename); - waysx->xdata=MapFile(waysx->filename); - } +#if !SLIM + nodesx->xdata=MapFile(nodesx->filename); + segmentsx->xdata=MapFile(segmentsx->filename); + waysx->xdata=MapFile(waysx->filename); +#endif /* Find super-nodes */ for(i=0;inumber;i++) { + NodeX *nodex=LookupNodeX(nodesx,i,1); int difference=0; index_t index1,index2; @@ -94,12 +90,20 @@ void ChooseSuperNodes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx) index1=IndexNextSegmentX(segmentsx,index1,i); index2=index1; + /* If the node allows less traffic types than any connecting way ... */ + + if((wayx1->way.allow&nodex->allow)!=wayx1->way.allow) + { + difference=1; + break; + } + while(index2!=NO_SEGMENT) { SegmentX *segmentx2=LookupSegmentX(segmentsx,index2,2); WayX *wayx2=LookupWayX(waysx,segmentx2->way,2); - /* If the ways are different in any way and there is a type of traffic that can use both ... */ + /* If the ways are different in any attribute and there is a type of traffic that can use both ... */ if(WaysCompare(&wayx1->way,&wayx2->way)) if(wayx1->way.allow & wayx2->way.allow) @@ -133,11 +137,11 @@ void ChooseSuperNodes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx) /* Unmap from memory */ - if(!option_slim) - { - segmentsx->xdata=UnmapFile(segmentsx->filename); - waysx->xdata=UnmapFile(waysx->filename); - } +#if !SLIM + nodesx->xdata=UnmapFile(nodesx->filename); + segmentsx->xdata=UnmapFile(segmentsx->filename); + waysx->xdata=UnmapFile(waysx->filename); +#endif /* Print the final message */ @@ -166,9 +170,10 @@ SegmentsX *CreateSuperSegments(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx, SegmentsX *supersegmentsx; int sn=0,ss=0; - /* Check the start conditions */ + supersegmentsx=NewSegmentList(0); - assert(segmentsx->firstnode); /* Must have firstnode filled in => segments are updated */ + if(segmentsx->number==0 || waysx->number==0) + return(supersegmentsx); /* Print the start message */ @@ -177,16 +182,13 @@ SegmentsX *CreateSuperSegments(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx, /* Map into memory */ - if(!option_slim) - { - segmentsx->xdata=MapFile(segmentsx->filename); - waysx->xdata=MapFile(waysx->filename); - } +#if !SLIM + segmentsx->xdata=MapFile(segmentsx->filename); + waysx->xdata=MapFile(waysx->filename); +#endif /* Create super-segments for each super-node. */ - supersegmentsx=NewSegmentList(0); - for(i=0;inumber;i++) { if(nodesx->super[i]>iteration) @@ -264,11 +266,10 @@ SegmentsX *CreateSuperSegments(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx, /* Unmap from memory */ - if(!option_slim) - { - segmentsx->xdata=UnmapFile(segmentsx->filename); - waysx->xdata=UnmapFile(waysx->filename); - } +#if !SLIM + segmentsx->xdata=UnmapFile(segmentsx->filename); + waysx->xdata=UnmapFile(waysx->filename); +#endif /* Print the final message */ @@ -295,6 +296,11 @@ SegmentsX *MergeSuperSegments(SegmentsX* segmentsx,SegmentsX* supersegmentsx) int m=0,a=0; SegmentsX* mergedsegmentsx; + mergedsegmentsx=NewSegmentList(0); + + if(segmentsx->number==0 || supersegmentsx->number==0) + return(mergedsegmentsx); + /* Print the start message */ printf("Merging: Segments=0 Super-Segments=0 Merged=0 Added=0"); @@ -302,16 +308,13 @@ SegmentsX *MergeSuperSegments(SegmentsX* segmentsx,SegmentsX* supersegmentsx) /* Map into memory */ - if(!option_slim) - { - segmentsx->xdata=MapFile(segmentsx->filename); - supersegmentsx->xdata=MapFile(supersegmentsx->filename); - } +#if !SLIM + segmentsx->xdata=MapFile(segmentsx->filename); + supersegmentsx->xdata=MapFile(supersegmentsx->filename); +#endif /* Loop through and create a new list of combined segments */ - mergedsegmentsx=NewSegmentList(0); - for(i=0,j=0;inumber;i++) { int super=0; @@ -363,11 +366,10 @@ SegmentsX *MergeSuperSegments(SegmentsX* segmentsx,SegmentsX* supersegmentsx) /* Unmap from memory */ - if(!option_slim) - { - segmentsx->xdata=UnmapFile(segmentsx->filename); - supersegmentsx->xdata=UnmapFile(supersegmentsx->filename); - } +#if !SLIM + segmentsx->xdata=UnmapFile(segmentsx->filename); + supersegmentsx->xdata=UnmapFile(supersegmentsx->filename); +#endif /* Print the final message */