diff --git a/common/include/valptridx.h b/common/include/valptridx.h index f731e8f58..27bc554e6 100644 --- a/common/include/valptridx.h +++ b/common/include/valptridx.h @@ -530,7 +530,13 @@ public: { } template - basic_ptridx(const magic_constant &m, array_managed_type &a = get_array()) : + basic_ptridx(const magic_constant &m) : + vptr_type(m), + vidx_type(m) + { + } + template + basic_ptridx(const magic_constant &m, array_managed_type &a) : vptr_type(m, a), vidx_type(m) { @@ -642,6 +648,7 @@ template template class valptridx::basic_vptr_global_factory { + using containing_type = valptridx; public: __attribute_warn_unused_result P operator()(typename P::const_pointer_type p) const @@ -654,10 +661,16 @@ public: return P(p, get_array(p)); } __attribute_warn_unused_result - P operator()(typename valptridx::index_type i) const + P operator()(typename containing_type::index_type i) const { return P(i, get_array()); } + template + __attribute_warn_unused_result + P operator()(const containing_type::magic_constant &m) const + { + return P(m, get_array()); + } template P operator()(T &&) const = delete; void *operator &() const = delete; diff --git a/similar/main/aipath.cpp b/similar/main/aipath.cpp index 2cc0ffdc2..8ab936689 100644 --- a/similar/main/aipath.cpp +++ b/similar/main/aipath.cpp @@ -1480,7 +1480,7 @@ static void test_create_path_many(void) for (i=0; i((d_rand() * (Highest_segment_index + 1)) / D_RAND_MAX)); Markedsegp = segptridx(static_cast((d_rand() * (Highest_segment_index + 1)) / D_RAND_MAX)); - create_path_points(object_first, Cursegp, Markedsegp, point_segs.begin(), &num_points, -1, 0, 0, segment_none); + create_path_points(vobjptridx(object_first), Cursegp, Markedsegp, point_segs.begin(), &num_points, -1, 0, 0, segment_none); } } @@ -1491,7 +1491,7 @@ static void test_create_path(void) array point_segs; short num_points; - create_path_points(object_first, Cursegp, Markedsegp, point_segs.begin(), &num_points, -1, 0, 0, segment_none); + create_path_points(vobjptridx(object_first), Cursegp, Markedsegp, point_segs.begin(), &num_points, -1, 0, 0, segment_none); } @@ -1513,7 +1513,7 @@ static void test_create_all_paths(void) const auto &&segp1 = vcsegptr(static_cast(end_seg)); if (segp1->segnum != segment_none) { - create_path_points(object_first, start_seg, end_seg, Point_segs_free_ptr, &resultant_length, -1, 0, 0, segment_none); + create_path_points(vobjptridx(object_first), start_seg, end_seg, Point_segs_free_ptr, &resultant_length, -1, 0, 0, segment_none); } } } diff --git a/similar/main/gamemine.cpp b/similar/main/gamemine.cpp index 1954df9fe..30aa7838e 100644 --- a/similar/main/gamemine.cpp +++ b/similar/main/gamemine.cpp @@ -763,7 +763,7 @@ int load_mine_data(PHYSFS_file *LoadFile) for (int i=0;i<10;i++) Groupside[i] = mine_editor.Groupside[i]; - Cursegp = mine_editor.current_seg != -1 ? segptridx(static_cast(mine_editor.current_seg)) : segment_first; + Cursegp = mine_editor.current_seg != -1 ? segptridx(static_cast(mine_editor.current_seg)) : segptridx(segment_first); Markedsegp = mine_editor.Markedsegp != -1 ? segptridx(static_cast(mine_editor.Markedsegp)) : segment_none; num_groups = 0; diff --git a/similar/main/object.cpp b/similar/main/object.cpp index 28c3e0b2d..8823d181e 100644 --- a/similar/main/object.cpp +++ b/similar/main/object.cpp @@ -866,7 +866,7 @@ void init_objects() ConsoleObject = Viewer = &Objects[0]; init_player_object(); - obj_link(vobjptridx(ConsoleObject),segment_first); //put in the world in segment 0 + obj_link(vobjptridx(ConsoleObject), vsegptridx(segment_first)); //put in the world in segment 0 num_objects = 1; //just the player Highest_object_index = 0; }