Imported Upstream version 1.5
[routino] / src / segments.c
index 0557d50..4b9f274 100644 (file)
@@ -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.
 
 #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);
 }
@@ -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));
    }
 }