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);
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>
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();

View file

@ -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<segnum_t, MAX_SEGMENTS> 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<segnum_t, MAX_SEGMENTS> bfs_list;
const auto length = create_bfs_list(start_seg, bfs_list);
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
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<segnum_t, MNRS_SEG_MAX> 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]))