From 0ea95e87e7c87da24cf4522d271ed97c80ffa638 Mon Sep 17 00:00:00 2001 From: Kp Date: Wed, 28 Jan 2015 03:42:52 +0000 Subject: [PATCH] Pass array<> to create_bfs_list --- common/main/ai.h | 8 +++++--- d2x-rebirth/main/escort.cpp | 22 +++++++--------------- similar/main/ai.cpp | 6 ++---- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/common/main/ai.h b/common/main/ai.h index aaefdc2f7..5374cd2e6 100644 --- a/common/main/ai.h +++ b/common/main/ai.h @@ -267,12 +267,14 @@ extern int Stolen_item_index; // Used in ai.c for controlling rate of Thief fl // -- unused, 08/07/95 -- extern void ai_turn_randomly(vms_vector *vec_to_player, object *obj, fix rate, int previous_visibility); extern void init_ai_frame(void); -void create_bfs_list(segnum_t start_seg, segnum_t bfs_list[], unsigned &length, unsigned max_segs); +__attribute_warn_unused_result +std::size_t create_bfs_list(segnum_t start_seg, segnum_t *bfs_list, std::size_t max_segs); template -void create_bfs_list(segnum_t start_seg, segnum_t (&bfs_list)[N], unsigned &length) +__attribute_warn_unused_result +std::size_t create_bfs_list(segnum_t start_seg, array &bfs_list) { - create_bfs_list(start_seg, bfs_list, length, N); + return create_bfs_list(start_seg, bfs_list.data(), N); } extern void init_thief_for_level(); diff --git a/d2x-rebirth/main/escort.cpp b/d2x-rebirth/main/escort.cpp index 01cbfc0dc..a38fa2b6f 100644 --- a/d2x-rebirth/main/escort.cpp +++ b/d2x-rebirth/main/escort.cpp @@ -191,14 +191,10 @@ static int segment_is_reachable(const vcsegptr_t segp, int sidenum) // Output: // bfs_list: array of shorts, each reachable segment. Includes start segment. // length: number of elements in bfs_list -void create_bfs_list(segnum_t start_seg, segnum_t bfs_list[], unsigned &length, unsigned max_segs) +std::size_t create_bfs_list(segnum_t start_seg, segnum_t *const bfs_list, std::size_t max_segs) { - int head, tail; + std::size_t head = 0, tail = 0; visited_segment_bitarray_t visited; - - head = 0; - tail = 0; - bfs_list[head++] = start_seg; visited[start_seg] = true; @@ -222,7 +218,7 @@ void create_bfs_list(segnum_t start_seg, segnum_t bfs_list[], unsigned &length, } } } - length = head; + return head; } // ----------------------------------------------------------------------------- @@ -556,10 +552,8 @@ static objnum_t exists_in_mine_2(const vcsegptridx_t segp, int objtype, int obji // ----------------------------------------------------------------------------- static segnum_t exists_fuelcen_in_mine(segnum_t start_seg) { - segnum_t bfs_list[MAX_SEGMENTS]; - unsigned length; - - create_bfs_list(start_seg, bfs_list, length); + array bfs_list; + const auto length = create_bfs_list(start_seg, bfs_list); auto predicate = [](const segnum_t &s) { return Segments[s].special == SEGMENT_IS_FUELCEN; }; { auto rb = partial_range(bfs_list, length); @@ -581,10 +575,8 @@ static segnum_t exists_fuelcen_in_mine(segnum_t start_seg) // -2 means object does exist in mine, but buddy-bot can't reach it (eg, behind triggered wall) static objnum_t exists_in_mine(segnum_t start_seg, int objtype, int objid, int special) { - segnum_t bfs_list[MAX_SEGMENTS]; - unsigned length; - - create_bfs_list(start_seg, bfs_list, length); + array bfs_list; + const auto length = create_bfs_list(start_seg, bfs_list); range_for (auto segnum, partial_range(bfs_list, length)) { diff --git a/similar/main/ai.cpp b/similar/main/ai.cpp index 5ad7348c5..6dec831bd 100644 --- a/similar/main/ai.cpp +++ b/similar/main/ai.cpp @@ -2863,10 +2863,8 @@ void init_ai_frame(void) #define MNRS_SEG_MAX 70 static void make_nearby_robot_snipe(void) { - unsigned bfs_length; - segnum_t bfs_list[MNRS_SEG_MAX]; - - create_bfs_list(ConsoleObject->segnum, bfs_list, bfs_length); + array bfs_list; + const auto bfs_length = create_bfs_list(ConsoleObject->segnum, bfs_list); range_for (auto &i, partial_range(bfs_list, bfs_length)) { range_for (auto objp, objects_in(Segments[i]))