further reduce number of bt_find calls.

This commit is contained in:
Enno Rehling 2016-08-30 09:19:19 +01:00
parent 5bb9a10a46
commit d9e541843b
9 changed files with 16 additions and 28 deletions

View File

@ -1795,6 +1795,7 @@ static void expandselling(region * r, request * sellorders, int limit)
unit *hafenowner;
static int counter[MAXLUXURIES];
static int ncounter = 0;
const struct building_type *castle_bt;
if (ncounter == 0) {
const luxury_type *ltype;
@ -1810,15 +1811,15 @@ static void expandselling(region * r, request * sellorders, int limit)
}
/* Stelle Eigentümer der größten Burg fest. Bekommt Steuern aus jedem
* Verkauf. Wenn zwei Burgen gleicher Größe bekommt gar keiner etwas. */
castle_bt = bt_find("castle");
for (b = rbuildings(r); b; b = b->next) {
if (b->size > maxsize && building_owner(b) != NULL
&& b->type == bt_find("castle")) {
&& b->type == castle_bt) {
maxb = b;
maxsize = b->size;
maxowner = building_owner(b);
}
else if (b->size == maxsize && b->type == bt_find("castle")) {
else if (b->size == maxsize && b->type == castle_bt) {
maxb = (building *)NULL;
maxowner = (unit *)NULL;
}
@ -1923,13 +1924,7 @@ static void expandselling(region * r, request * sellorders, int limit)
}
}
if (use > 0) {
#ifdef NDEBUG
use_pooled(oa[j].unit, ltype->itype->rtype, GET_DEFAULT, use);
#else
/* int i = */ use_pooled(oa[j].unit, ltype->itype->rtype, GET_DEFAULT,
use);
/* assert(i==use); */
#endif
}
}
free(oa);

View File

@ -446,6 +446,7 @@ void remove_building(building ** blist, building * b)
/* Falls Karawanserei, Damm oder Tunnel einstürzen, wird die schon
* gebaute Straße zur Hälfte vernichtet */
// TODO: caravan, tunnel, dam modularization ? is_building_type ?
if (b->type == bt_caravan || b->type == bt_dam || b->type == bt_tunnel) {
region *r = b->region;
int d;

View File

@ -486,7 +486,6 @@ static void test_building_type(CuTest *tc) {
btype = test_create_buildingtype("house");
CuAssertIntEquals(tc, true, is_building_type(btype, "house"));
CuAssertIntEquals(tc, false, is_building_type(btype, "castle"));
CuAssertIntEquals(tc, false, is_building_type(NULL, "house"));
test_cleanup();
}

View File

@ -764,8 +764,7 @@ static const int wagetable[7][4] = {
int cmp_wage(const struct building *b, const building * a)
{
const struct building_type *bt_castle = bt_find("castle");
if (b->type == bt_castle) {
if (is_building_type(b->type, "castle")) {
if (!a)
return 1;
if (b->size > a->size)

View File

@ -3082,10 +3082,7 @@ static void age_stonecircle(building *b) {
static building *age_building(building * b)
{
const struct building_type *bt_blessed;
bt_blessed = bt_find("blessedstonecircle");
if (bt_blessed && b->type == bt_blessed) {
if (is_building_type(b->type, "blessedstonecircle")) {
age_stonecircle(b);
}
a_age(&b->attribs, b);

View File

@ -110,7 +110,7 @@ bool check_leuchtturm(region * r, faction * f)
a = a->next) {
building *b = (building *)a->data.v;
assert(b->type == bt_find("lighthouse"));
assert(is_building_type(b->type, "lighthouse"));
if (fval(b, BLD_MAINTAINED) && b->size >= 10) {
int maxd = (int)log10(b->size) + 1;

View File

@ -669,8 +669,7 @@ static bool is_freezing(const unit * u)
int check_ship_allowed(struct ship *sh, const region * r)
{
int c = 0;
const building_type *bt_harbour = NULL;
bt_harbour = bt_find("harbour");
const building_type *bt_harbour = bt_find("harbour");
if (sh->region && r_insectstalled(r)) {
/* insekten dürfen nicht hier rein. haben wir welche? */
@ -923,6 +922,7 @@ static unit *bewegung_blockiert_von(unit * reisender, region * r)
int guard_count = 0;
int stealth = eff_stealth(reisender, r);
const struct resource_type *ramulet = get_resourcetype(R_AMULET_OF_TRUE_SEEING);
const struct building_type *castle_bt = bt_find("castle");
double base_prob = config_get_flt("rules.guard.base_stop_prob", .3);
double skill_prob = config_get_flt("rules.guard.skill_stop_prob", .1);
@ -947,7 +947,7 @@ static unit *bewegung_blockiert_von(unit * reisender, region * r)
double prob_u = (sk - stealth) * skill_prob;
/* amulet counts at most once */
prob_u += _min(1, _min(u->number, i_get(u->items, ramulet->itype))) * amulet_prob;
if (u->building && (u->building->type == bt_find("castle")) && u == building_owner(u->building))
if (u->building && (u->building->type == castle_bt) && u == building_owner(u->building))
prob_u += castle_prob*buildingeffsize(u->building, 0);
if (prob_u >= prob) {
prob = prob_u;

View File

@ -352,16 +352,13 @@ void
report_building(const struct building *b, const char **name,
const char **illusion)
{
const struct building_type *bt_illusion;
if (name) {
*name = buildingtype(b->type, b, b->size);
}
if (illusion) {
*illusion = NULL;
bt_illusion = bt_find("illusioncastle");
if (bt_illusion && b->type == bt_illusion) {
if (is_building_type(b->type, "illusioncastle")) {
const attrib *a = a_find(b->attribs, &at_icastle);
if (a != NULL) {
*illusion = buildingtype(icastle_type(a), b, b->size);

View File

@ -969,7 +969,7 @@ static int sp_blessstonecircle(castorder * co)
b = p->param[0]->data.b;
if (b->type != bt_find("stonecircle")) {
if (!is_building_type(b->type, "stonecircle")) {
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
"error_notstonecircle", "building", b));
return 0;
@ -2052,7 +2052,7 @@ static int sp_homestone(castorder * co)
double force = co->force;
double effect;
message *msg;
if (!mage->building || mage->building->type != bt_find("castle")) {
if (!mage->building || !is_building_type(mage->building->type, "castle")) {
cmistake(mage, co->order, 197, MSG_MAGIC);
return 0;
}
@ -5971,8 +5971,8 @@ int sp_movecastle(castorder * co)
u = unext;
}
if ((b->type == bt_find("caravan") || b->type == bt_find("dam")
|| b->type == bt_find("tunnel"))) {
if ((is_building_type(b->type, "caravan") || is_building_type(b->type, "dam")
|| is_building_type(b->type, "tunnel"))) {
direction_t d;
for (d = 0; d != MAXDIRECTIONS; ++d) {
if (rroad(r, d)) {