X-Git-Url: http://git.maemo.org/git/?p=routino;a=blobdiff_plain;f=src%2Fsegments.c;fp=src%2Fsegments.c;h=4b9f2743507d37b91a41834ac794788ee7d31b0b;hp=0557d50aa7eb8432cdc10b919569c565c89d5266;hb=a5b34ad069a52ff6cf981f01667d102292988811;hpb=20283c6cf5c6951cc1f2787492c67a7fb72aee9a diff --git a/src/segments.c b/src/segments.c index 0557d50..4b9f274 100644 --- a/src/segments.c +++ b/src/segments.c @@ -1,5 +1,5 @@ /*************************************** - $Header: /home/amb/routino/src/RCS/segments.c,v 1.45 2010/04/28 17:27:02 amb Exp $ + $Header: /home/amb/routino/src/RCS/segments.c,v 1.47 2010/07/23 14:35:27 amb Exp $ Segment data type functions. @@ -26,10 +26,11 @@ #include #include "types.h" -#include "functions.h" #include "nodes.h" #include "segments.h" #include "ways.h" + +#include "files.h" #include "profiles.h" @@ -43,21 +44,35 @@ Segments *LoadSegmentList(const char *filename) { - void *data; Segments *segments; segments=(Segments*)malloc(sizeof(Segments)); - data=MapFile(filename); +#if !SLIM + + segments->data=MapFile(filename); + + /* Copy the SegmentsFile structure from the loaded data */ + + segments->file=*((SegmentsFile*)segments->data); + + /* Set the pointers in the Segments structure. */ + + segments->segments=(Segment*)(segments->data+sizeof(SegmentsFile)); + +#else - /* Copy the Segments structure from the loaded data */ + segments->fd=ReOpenFile(filename); - *segments=*((Segments*)data); + /* Copy the SegmentsFile header structure from the loaded data */ - /* Adjust the pointers in the Segments structure. */ + ReadFile(segments->fd,&segments->file,sizeof(SegmentsFile)); - segments->data=data; - segments->segments=(Segment*)(data+sizeof(Segments)); + segments->incache[0]=NO_SEGMENT; + segments->incache[1]=NO_SEGMENT; + segments->incache[2]=NO_SEGMENT; + +#endif return(segments); } @@ -79,18 +94,31 @@ Segment *NextSegment(Segments* segments,Segment *segment,index_t node) { if(segment->node1==node) { +#if SLIM + index_t index=IndexSegment(segments,segment); + index++; + + if(index>=segments->file.number) + return(NULL); + segment=LookupSegment(segments,index,1); + if(segment->node1!=node) + return(NULL); + else + return(segment); +#else segment++; - if((segment-segments->segments)>=segments->number || segment->node1!=node) + if(IndexSegment(segments,segment)>=segments->file.number || segment->node1!=node) return(NULL); else return(segment); +#endif } else { if(segment->next2==NO_NODE) return(NULL); else - return(LookupSegment(segments,segment->next2)); + return(LookupSegment(segments,segment->next2,1)); } }