refactoring: use add_ally instead of manually crating the structure all over the code.

This commit is contained in:
Enno Rehling 2014-10-31 15:13:05 +01:00
parent c8d5d52412
commit f27a77d288
6 changed files with 143 additions and 151 deletions

View file

@ -430,10 +430,8 @@ void set_alliance(faction * a, faction * b, int status)
sfp = &sf->next;
}
if (*sfp == NULL) {
ally *sf = *sfp = malloc(sizeof(ally));
sf->next = NULL;
ally *sf = ally_add(sfp, b);
sf->status = status;
sf->faction = b;
return;
}
(*sfp)->status |= status;

View file

@ -73,9 +73,8 @@ static void init_group(faction * f, group * g)
an = &g->allies;
for (a = f->allies; a; a = a->next)
if (a->faction) {
ally *ga = calloc(sizeof(ally), 1);
*ga = *a;
*an = ga;
ally *ga = ally_add(an, a->faction);
ga->status = a->status;
an = &ga->next;
}
}
@ -173,7 +172,8 @@ void set_group(struct unit *u, struct group *g)
}
a->data.v = g;
g->members++;
} else if (a) {
}
else if (a) {
a_remove(&u->attribs, a);
freset(u, UFL_GROUP);
}
@ -232,17 +232,14 @@ void read_groups(struct storage *store, faction * f)
for (;;) {
ally *a;
variant fid;
READ_INT(store, &fid.i);
if (fid.i <= 0)
break;
if (global.data_version < STORAGE_VERSION && fid.i == 0)
break;
a = malloc(sizeof(ally));
*pa = a;
pa = &a->next;
a = ally_add(pa, findfaction(fid.i));
READ_INT(store, &a->status);
a->faction = findfaction(fid.i);
if (!a->faction)
ur_add(fid, &a->faction, resolve_faction);
}

View file

@ -19,6 +19,7 @@ void test_pool(CuTest *tc) {
faction *f;
region *r;
struct resource_type *rtype;
ally *al;
test_cleanup();
test_create_world();
@ -45,11 +46,10 @@ void test_pool(CuTest *tc) {
CuAssertIntEquals(tc, 100, get_pooled(u1, rtype, GET_POOLED_SLACK, INT_MAX));
CuAssertIntEquals(tc, 200, get_pooled(u1, rtype, GET_POOLED_SLACK | GET_POOLED_RESERVE, INT_MAX));
u3->faction->allies = calloc(1, sizeof(ally));
u3->faction->allies->faction = f;
u3->faction->allies->status = HELP_GUARD;
al = ally_add(&u3->faction->allies, f);
al->status = HELP_GUARD;
CuAssertIntEquals(tc, 0, get_pooled(u1, rtype, GET_ALLIED_SLACK | GET_ALLIED_RESERVE, INT_MAX));
u3->faction->allies->status = HELP_MONEY;
al->status = HELP_MONEY;
CuAssertIntEquals(tc, 200, get_pooled(u1, rtype, GET_ALLIED_SLACK, INT_MAX));
CuAssertIntEquals(tc, 200, get_pooled(u1, rtype, GET_ALLIED_RESERVE, INT_MAX));
CuAssertIntEquals(tc, 400, get_pooled(u1, rtype, GET_ALLIED_SLACK | GET_ALLIED_RESERVE, INT_MAX));

View file

@ -1119,8 +1119,7 @@ static ally **addally(const faction * f, ally ** sfp, int aid, int state)
if (state == 0)
return sfp;
sf = calloc(1, sizeof(ally));
sf->faction = af;
sf = ally_add(sfp, af);
if (!sf->faction) {
variant id;
id.i = aid;

View file

@ -1348,10 +1348,8 @@ int ally_cmd(unit * u, struct order *ord)
return 0;
}
else {
sf = calloc(1, sizeof(ally));
sf->faction = f;
sf = ally_add(sfp, f);
sf->status = 0;
addlist(sfp, sf);
}
}
switch (keyword) {

View file

@ -93,6 +93,7 @@ static void test_contact(CuTest * tc)
unit *u1, *u2, *u3;
building *b;
building_type *btype;
ally *al;
test_cleanup();
test_create_world();
@ -110,9 +111,8 @@ static void test_contact(CuTest * tc)
u_set_building(u1, b);
CuAssertIntEquals(tc, 0, can_contact(r, u1, u2));
u1->faction->allies = calloc(1, sizeof(ally));
u1->faction->allies->faction = u2->faction;
u1->faction->allies->status = HELP_ALL;
al = ally_add(&u1->faction->allies, u2->faction);
al->status = HELP_ALL;
CuAssertIntEquals(tc, HELP_GIVE, can_contact(r, u1, u2));
u_set_building(u2, b);
CuAssertIntEquals(tc, 1, can_contact(r, u1, u2));