From 0753ea0174a181d76bb0be939967f766086d7001 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 17 Sep 2016 08:28:33 +0200 Subject: [PATCH] fix travelthru reporting (passes unit test) --- src/report.c | 6 +++--- src/report.h | 2 +- src/reports.c | 17 +++++++++-------- src/reports.h | 2 +- src/travelthru.c | 2 +- src/travelthru.h | 2 +- src/travelthru.test.c | 2 +- 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/report.c b/src/report.c index 64febfb44..c7093da73 100644 --- a/src/report.c +++ b/src/report.c @@ -1951,7 +1951,7 @@ static void init_cb(cb_data *data, stream *out, char *buffer, size_t size, const data->counter = 0; } -static void cb_write_travelthru(const region *r, unit *u, void *cbdata) { +static void cb_write_travelthru(region *r, unit *u, void *cbdata) { cb_data *data = (cb_data *)cbdata; const faction *f = data->f; @@ -2006,7 +2006,7 @@ static void cb_write_travelthru(const region *r, unit *u, void *cbdata) { } } -void write_travelthru(stream *out, const region *r, const faction *f) +void write_travelthru(stream *out, region *r, const faction *f) { int maxtravel; char buf[8192]; @@ -2038,7 +2038,7 @@ report_plaintext(const char *filename, report_context * ctx, int flag = 0; char ch; int anyunits, no_units, no_people; - const struct region *r; + region *r; faction *f = ctx->f; unit *u; char pzTime[64]; diff --git a/src/report.h b/src/report.h index ec0ee903c..84a6c66d4 100644 --- a/src/report.h +++ b/src/report.h @@ -27,7 +27,7 @@ extern "C" { void register_nr(void); void report_cleanup(void); void write_spaces(struct stream *out, size_t num); - void write_travelthru(struct stream *out, const struct region * r, const struct faction * f); + void write_travelthru(struct stream *out, struct region * r, const struct faction * f); void nr_spell_syntax(struct stream *out, struct spellbook_entry * sbe, const struct locale *lang); void nr_spell(struct stream *out, struct spellbook_entry * sbe, const struct locale *lang); diff --git a/src/reports.c b/src/reports.c index cdf85d096..50e220393 100644 --- a/src/reports.c +++ b/src/reports.c @@ -971,7 +971,7 @@ typedef struct address_data { int stealthmod; } address_data; -static void cb_add_address(const region *r, unit *ut, void *cbdata) { +static void cb_add_address(region *r, unit *ut, void *cbdata) { address_data *data = (address_data *)cbdata; faction *f = data->f; @@ -1292,10 +1292,11 @@ static region *firstregion(faction * f) #endif } -static void cb_add_seen(const region *rc, unit *u, void *cbdata) { - region *r = (region *)cbdata; - assert(rc == r); - faction_add_seen(u->faction, r, seen_travel); +static void cb_add_seen(region *r, unit *u, void *cbdata) { + faction *f = (faction *)cbdata; + if (u->faction==f) { + faction_add_seen(f, r, seen_travel); + } } /** set region.seen based on visibility by one faction. @@ -1359,7 +1360,7 @@ void prepare_report(report_context *ctx, faction *f) } if (fval(r, RF_TRAVELUNIT)) { - travelthru_map(r, cb_add_seen, r); + travelthru_map(r, cb_add_seen, f); } } // [fast,last) interval of seen regions (with lighthouses and travel) @@ -2062,7 +2063,7 @@ typedef struct count_data { const struct faction *f; } count_data; -static void count_cb(const region *r, unit *u, void *cbdata) { +static void count_cb(region *r, unit *u, void *cbdata) { count_data *data = (count_data *)cbdata; const struct faction *f = data->f; if (r != u->region && (!u->ship || ship_owner(u->ship) == u)) { @@ -2072,7 +2073,7 @@ static void count_cb(const region *r, unit *u, void *cbdata) { } } -int count_travelthru(const struct region *r, const struct faction *f) { +int count_travelthru(struct region *r, const struct faction *f) { count_data data = { 0 }; data.f = f; travelthru_map(r, count_cb, &data); diff --git a/src/reports.h b/src/reports.h index 3c4a86707..fd0efb591 100644 --- a/src/reports.h +++ b/src/reports.h @@ -125,7 +125,7 @@ extern "C" { int stream_printf(struct stream * out, const char *format, ...); - int count_travelthru(const struct region *r, const struct faction *f); + int count_travelthru(struct region *r, const struct faction *f); #define GR_PLURAL 0x01 /* grammar: plural */ #define MAX_INVENTORY 128 /* maimum number of different items in an inventory */ diff --git a/src/travelthru.c b/src/travelthru.c index deaa05f27..32607ae5c 100644 --- a/src/travelthru.c +++ b/src/travelthru.c @@ -95,7 +95,7 @@ bool travelthru_cansee(const struct region *r, const struct faction *f, const st return false; } -void travelthru_map(const region * r, void(*cb)(const region *, struct unit *, void *), void *cbdata) +void travelthru_map(region * r, void(*cb)(region *, struct unit *, void *), void *cbdata) { attrib *a; assert(r); diff --git a/src/travelthru.h b/src/travelthru.h index 44c6e3978..4e43dd25a 100644 --- a/src/travelthru.h +++ b/src/travelthru.h @@ -11,7 +11,7 @@ extern "C" { struct region; struct faction; struct unit; - void travelthru_map(const struct region * r, void(*cb)(const struct region *r, struct unit *, void *), void *cbdata); + void travelthru_map(struct region * r, void(*cb)(struct region *r, struct unit *, void *), void *cbdata); bool travelthru_cansee(const struct region *r, const struct faction *f, const struct unit *u); void travelthru_add(struct region * r, struct unit * u); diff --git a/src/travelthru.test.c b/src/travelthru.test.c index 06a3633ab..74ab29b7e 100644 --- a/src/travelthru.test.c +++ b/src/travelthru.test.c @@ -13,7 +13,7 @@ struct attrib; -static void count_travelers(const region *r, unit *u, void *cbdata) { +static void count_travelers(region *r, unit *u, void *cbdata) { int *n = (int *)cbdata; unused_arg(r); *n += u->number;