/***************************************
- $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.
#include <stdlib.h>
#include "types.h"
-#include "functions.h"
#include "nodes.h"
#include "segments.h"
#include "ways.h"
+
+#include "files.h"
#include "profiles.h"
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);
}
{
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));
}
}