Pass array<> to create_bfs_list

This commit is contained in:
Kp 2015-01-28 03:42:52 +00:00
parent bb60f64001
commit 0ea95e87e7
3 changed files with 14 additions and 22 deletions

View file

@ -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); // -- 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); 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 <std::size_t N> template <std::size_t N>
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<segnum_t, N> &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(); extern void init_thief_for_level();

View file

@ -191,14 +191,10 @@ static int segment_is_reachable(const vcsegptr_t segp, int sidenum)
// Output: // Output:
// bfs_list: array of shorts, each reachable segment. Includes start segment. // bfs_list: array of shorts, each reachable segment. Includes start segment.
// length: number of elements in bfs_list // 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; visited_segment_bitarray_t visited;
head = 0;
tail = 0;
bfs_list[head++] = start_seg; bfs_list[head++] = start_seg;
visited[start_seg] = true; 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) static segnum_t exists_fuelcen_in_mine(segnum_t start_seg)
{ {
segnum_t bfs_list[MAX_SEGMENTS]; array<segnum_t, MAX_SEGMENTS> bfs_list;
unsigned length; const auto length = create_bfs_list(start_seg, bfs_list);
create_bfs_list(start_seg, bfs_list, length);
auto predicate = [](const segnum_t &s) { return Segments[s].special == SEGMENT_IS_FUELCEN; }; auto predicate = [](const segnum_t &s) { return Segments[s].special == SEGMENT_IS_FUELCEN; };
{ {
auto rb = partial_range(bfs_list, length); 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) // -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) static objnum_t exists_in_mine(segnum_t start_seg, int objtype, int objid, int special)
{ {
segnum_t bfs_list[MAX_SEGMENTS]; array<segnum_t, MAX_SEGMENTS> bfs_list;
unsigned length; const auto length = create_bfs_list(start_seg, bfs_list);
create_bfs_list(start_seg, bfs_list, length);
range_for (auto segnum, partial_range(bfs_list, length)) range_for (auto segnum, partial_range(bfs_list, length))
{ {

View file

@ -2863,10 +2863,8 @@ void init_ai_frame(void)
#define MNRS_SEG_MAX 70 #define MNRS_SEG_MAX 70
static void make_nearby_robot_snipe(void) static void make_nearby_robot_snipe(void)
{ {
unsigned bfs_length; array<segnum_t, MNRS_SEG_MAX> bfs_list;
segnum_t bfs_list[MNRS_SEG_MAX]; const auto bfs_length = create_bfs_list(ConsoleObject->segnum, bfs_list);
create_bfs_list(ConsoleObject->segnum, bfs_list, bfs_length);
range_for (auto &i, partial_range(bfs_list, bfs_length)) { range_for (auto &i, partial_range(bfs_list, bfs_length)) {
range_for (auto objp, objects_in(Segments[i])) range_for (auto objp, objects_in(Segments[i]))