Move Highest_segment_index into Segments

This commit is contained in:
Kp 2014-07-12 20:54:36 +00:00
parent b2a7195643
commit e765fd74fc
3 changed files with 25 additions and 5 deletions

View file

@ -49,7 +49,6 @@ struct segmasks
struct segment_depth_array_t : public array<ubyte, MAX_SEGMENTS> {};
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);

View file

@ -179,14 +179,36 @@ struct group
}
};
struct segment_array_t : public array<segment, MAX_SEGMENTS>
{
unsigned highest;
#define Highest_segment_index Segments.highest
typedef array<segment, MAX_SEGMENTS> array_t;
template <typename T>
typename tt::enable_if<tt::is_integral<T>::value, reference>::type operator[](T n)
{
return array_t::operator[](n);
}
template <typename T>
typename tt::enable_if<tt::is_integral<T>::value, const_reference>::type operator[](T n) const
{
return array_t::operator[](n);
}
template <typename T>
typename tt::enable_if<!tt::is_integral<T>::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<segment, MAX_SEGMENTS> Segments;
extern segment_array_t Segments;
extern int Num_segments;
extern int Num_vertices;
static inline long operator-(const segment *s, const array<segment, MAX_SEGMENTS>& S)
static inline long operator-(const segment *s, const segment_array_t &S)
{
return s - (&*S.begin());
}

View file

@ -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<segment, MAX_SEGMENTS> 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};