From e765fd74fc38cec6b85415e291f5eeccb1afb67f Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 12 Jul 2014 20:54:36 +0000 Subject: [PATCH] Move Highest_segment_index into Segments --- common/main/gameseg.h | 1 - common/main/segment.h | 26 ++++++++++++++++++++++++-- similar/main/mglobal.cpp | 3 +-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/common/main/gameseg.h b/common/main/gameseg.h index a5599b4f3..0e66418e3 100644 --- a/common/main/gameseg.h +++ b/common/main/gameseg.h @@ -49,7 +49,6 @@ struct segmasks struct segment_depth_array_t : public array {}; extern int Highest_vertex_index; // Highest index in Vertices and Vertex_active, an efficiency hack -extern unsigned Highest_segment_index; // Highest index in Segments, an efficiency hack extern int Doing_lighting_hack_flag; extern void compute_center_point_on_side(vms_vector *vp,segment *sp,int side); diff --git a/common/main/segment.h b/common/main/segment.h index 49a73b759..a693c7b38 100644 --- a/common/main/segment.h +++ b/common/main/segment.h @@ -179,14 +179,36 @@ struct group } }; +struct segment_array_t : public array +{ + unsigned highest; +#define Highest_segment_index Segments.highest + typedef array array_t; + template + typename tt::enable_if::value, reference>::type operator[](T n) + { + return array_t::operator[](n); + } + template + typename tt::enable_if::value, const_reference>::type operator[](T n) const + { + return array_t::operator[](n); + } + template + typename tt::enable_if::value, reference>::type operator[](T) const = delete; + segment_array_t() = default; + segment_array_t(const segment_array_t &) = delete; + segment_array_t &operator=(const segment_array_t &) = delete; +}; + // Globals from mglobal.c #define Segment2s Segments extern vms_vector Vertices[MAX_VERTICES]; -extern array Segments; +extern segment_array_t Segments; extern int Num_segments; extern int Num_vertices; -static inline long operator-(const segment *s, const array& S) +static inline long operator-(const segment *s, const segment_array_t &S) { return s - (&*S.begin()); } diff --git a/similar/main/mglobal.cpp b/similar/main/mglobal.cpp index 879740123..7d735ad5a 100644 --- a/similar/main/mglobal.cpp +++ b/similar/main/mglobal.cpp @@ -44,7 +44,7 @@ int d_tick_count = 0; // increments every 50ms int d_tick_step = 0; // true once every 50ms // This is the global mine which create_new_mine returns. -array Segments; +segment_array_t Segments; //lsegment Lsegments[MAX_SEGMENTS]; // Number of vertices in current mine (ie, Vertices, pointed to by Vp) @@ -52,7 +52,6 @@ int Num_vertices = 0; int Num_segments = 0; int Highest_vertex_index=0; -unsigned Highest_segment_index; // Translate table to get opposite side of a face on a segment. const char Side_opposite[MAX_SIDES_PER_SEGMENT] = {WRIGHT, WBOTTOM, WLEFT, WTOP, WFRONT, WBACK};