Use vcobjidx_t for fvi ignore_obj_list
Enforce that callers provide vcobjidx_t, instead of permitting any type compatible with objnum_t.
This commit is contained in:
parent
aa9e6da297
commit
2f537133e8
|
@ -62,6 +62,7 @@ struct fvi_info : prohibit_void_ptr<fvi_info>
|
|||
#define FQ_GET_SEGLIST 8 //build a list of segments
|
||||
#define FQ_IGNORE_POWERUPS 16 //ignore powerups
|
||||
|
||||
#ifdef dsx
|
||||
//this data contains the parms to fvi()
|
||||
struct fvi_query : prohibit_void_ptr<fvi_query>
|
||||
{
|
||||
|
@ -69,7 +70,7 @@ struct fvi_query : prohibit_void_ptr<fvi_query>
|
|||
segnum_t startseg;
|
||||
objnum_t thisobjnum;
|
||||
fix rad;
|
||||
std::pair<const objnum_t *, const objnum_t *> ignore_obj_list;
|
||||
std::pair<const vcobjidx_t *, const vcobjidx_t *> ignore_obj_list;
|
||||
int flags;
|
||||
};
|
||||
|
||||
|
@ -90,7 +91,6 @@ struct fvi_hitpoint
|
|||
//Returns the hit_data->hit_type
|
||||
int find_vector_intersection(const fvi_query &fq, fvi_info &hit_data);
|
||||
|
||||
#if defined(DXX_BUILD_DESCENT_I) || defined(DXX_BUILD_DESCENT_II)
|
||||
//finds the uv coords of the given point on the given seg & side
|
||||
//fills in u & v. if l is non-NULL fills it in also
|
||||
namespace dsx {
|
||||
|
|
|
@ -607,7 +607,7 @@ struct fvi_segments_visited_t : public fvi_segment_visit_count_t, public visited
|
|||
}
|
||||
|
||||
namespace dsx {
|
||||
static int fvi_sub(vms_vector &intp, segnum_t &ints, const vms_vector &p0, const vcsegptridx_t startseg, const vms_vector &p1, fix rad, const icobjptridx_t thisobjnum, const std::pair<const objnum_t *, const objnum_t *> ignore_obj_list, int flags, fvi_info::segment_array_t &seglist, segnum_t entry_seg, fvi_segments_visited_t &visited, unsigned &fvi_hit_side, icsegidx_t &fvi_hit_side_seg, unsigned &fvi_nest_count, icsegidx_t &fvi_hit_pt_seg, const vms_vector *&wall_norm, icobjidx_t &fvi_hit_object);
|
||||
static int fvi_sub(vms_vector &intp, segnum_t &ints, const vms_vector &p0, const vcsegptridx_t startseg, const vms_vector &p1, fix rad, const icobjptridx_t thisobjnum, const std::pair<const vcobjidx_t *, const vcobjidx_t *> ignore_obj_list, int flags, fvi_info::segment_array_t &seglist, segnum_t entry_seg, fvi_segments_visited_t &visited, unsigned &fvi_hit_side, icsegidx_t &fvi_hit_side_seg, unsigned &fvi_nest_count, icsegidx_t &fvi_hit_pt_seg, const vms_vector *&wall_norm, icobjidx_t &fvi_hit_object);
|
||||
|
||||
//What the hell is fvi_hit_seg for???
|
||||
|
||||
|
@ -762,7 +762,7 @@ int find_vector_intersection(const fvi_query &fq, fvi_info &hit_data)
|
|||
}
|
||||
|
||||
__attribute_warn_unused_result
|
||||
static bool obj_in_list(objnum_t objnum,const std::pair<const objnum_t *, const objnum_t *> obj_list)
|
||||
static bool obj_in_list(const vcobjidx_t objnum, const std::pair<const vcobjidx_t *, const vcobjidx_t *> obj_list)
|
||||
{
|
||||
if (unlikely(!obj_list.first))
|
||||
return false;
|
||||
|
@ -783,7 +783,7 @@ static void append_segments(fvi_info::segment_array_t &dst, const fvi_info::segm
|
|||
}
|
||||
|
||||
namespace dsx {
|
||||
static int fvi_sub(vms_vector &intp, segnum_t &ints, const vms_vector &p0, const vcsegptridx_t startseg, const vms_vector &p1, fix rad, icobjptridx_t thisobjnum, const std::pair<const objnum_t *, const objnum_t *> ignore_obj_list, int flags, fvi_info::segment_array_t &seglist, segnum_t entry_seg, fvi_segments_visited_t &visited, unsigned &fvi_hit_side, icsegidx_t &fvi_hit_side_seg, unsigned &fvi_nest_count, icsegidx_t &fvi_hit_pt_seg, const vms_vector *&wall_norm, icobjidx_t &fvi_hit_object)
|
||||
static int fvi_sub(vms_vector &intp, segnum_t &ints, const vms_vector &p0, const vcsegptridx_t startseg, const vms_vector &p1, fix rad, icobjptridx_t thisobjnum, const std::pair<const vcobjidx_t *, const vcobjidx_t *> ignore_obj_list, int flags, fvi_info::segment_array_t &seglist, segnum_t entry_seg, fvi_segments_visited_t &visited, unsigned &fvi_hit_side, icsegidx_t &fvi_hit_side_seg, unsigned &fvi_nest_count, icsegidx_t &fvi_hit_pt_seg, const vms_vector *&wall_norm, icobjidx_t &fvi_hit_object)
|
||||
{
|
||||
int startmask,endmask; //mask of faces
|
||||
//@@int sidemask; //mask of sides - can be on back of face but not side
|
||||
|
|
|
@ -270,22 +270,25 @@ namespace {
|
|||
|
||||
class ignore_objects_array_t
|
||||
{
|
||||
typedef array<objnum_t, MAX_IGNORE_OBJS> array_t;
|
||||
array_t a;
|
||||
using array_t = array<vcobjidx_t, MAX_IGNORE_OBJS>;
|
||||
array_t::iterator e;
|
||||
union {
|
||||
array_t a;
|
||||
};
|
||||
public:
|
||||
ignore_objects_array_t() :
|
||||
e(a.begin())
|
||||
{
|
||||
}
|
||||
bool push_back(objnum_t o)
|
||||
bool push_back(const vcobjidx_t o)
|
||||
{
|
||||
if (e == a.end())
|
||||
if (unlikely(e == a.end()))
|
||||
return false;
|
||||
*e++ = o;
|
||||
std::uninitialized_fill_n(e, 1, o);
|
||||
++e;
|
||||
return true;
|
||||
}
|
||||
operator std::pair<const objnum_t *, const objnum_t *>() const
|
||||
operator std::pair<const vcobjidx_t *, const vcobjidx_t *>() const
|
||||
{
|
||||
return {a.begin(), e};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue