+/* Macros / inline functions */
+
+
+#if !SLIM
+
+#define LookupSegmentX(segmentsx,index,position) &(segmentsx)->xdata[index]
+
+#define LookupSegmentXSegment(segmentsx,index,position) &(segmentsx)->sdata[index]
+
+#else
+
+static SegmentX *LookupSegmentX(SegmentsX* segmentsx,index_t index,int position);
+
+static Segment *LookupSegmentXSegment(SegmentsX* segmentsx,index_t index,int position);
+
+static void PutBackSegmentXSegment(SegmentsX* segmentsx,index_t index,int position);
+
+
+/*++++++++++++++++++++++++++++++++++++++
+ Lookup a particular extended segment.
+
+ SegmentX *LookupSegmentX Returns a pointer to the extended segment with the specified id.
+
+ SegmentsX* segmentsx The set of segments to process.
+
+ index_t index The segment index to look for.
+
+ int position The position in the cache to use.
+ ++++++++++++++++++++++++++++++++++++++*/
+
+static inline SegmentX *LookupSegmentX(SegmentsX* segmentsx,index_t index,int position)
+{
+ SeekFile(segmentsx->fd,(off_t)index*sizeof(SegmentX));
+
+ ReadFile(segmentsx->fd,&segmentsx->xcached[position-1],sizeof(SegmentX));
+
+ return(&segmentsx->xcached[position-1]);
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++
+ Lookup a particular extended segment's normal segment.
+
+ Segment *LookupSegmentXSegment Returns a pointer to the segment with the specified id.
+
+ SegmentsX* segmentsx The set of segments to process.
+
+ index_t index The segment index to look for.
+
+ int position The position in the cache to use.
+ ++++++++++++++++++++++++++++++++++++++*/
+
+static inline Segment *LookupSegmentXSegment(SegmentsX* segmentsx,index_t index,int position)
+{
+ SeekFile(segmentsx->sfd,(off_t)index*sizeof(Segment));
+
+ ReadFile(segmentsx->sfd,&segmentsx->scached[position-1],sizeof(Segment));
+
+ return(&segmentsx->scached[position-1]);
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++
+ Put back an extended segment's normal segment.
+
+ SegmentsX* segmentsx The set of segments to process.
+
+ index_t index The segment index to look for.
+
+ int position The position in the cache to use.
+ ++++++++++++++++++++++++++++++++++++++*/
+
+static inline void PutBackSegmentXSegment(SegmentsX* segmentsx,index_t index,int position)
+{
+ SeekFile(segmentsx->sfd,(off_t)index*sizeof(Segment));
+
+ WriteFile(segmentsx->sfd,&segmentsx->scached[position-1],sizeof(Segment));
+}
+
+#endif /* SLIM */
+
+