forked from github/server
resolve a TODO by reducing wormhole data size
This commit is contained in:
parent
74d8b53ba8
commit
9d1b5dccb8
|
@ -56,7 +56,6 @@ static int cmp_age(const void *v1, const void *v2)
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct wormhole_data {
|
typedef struct wormhole_data {
|
||||||
building *entry; // TODO: remove, use attribute-owner
|
|
||||||
region *exit;
|
region *exit;
|
||||||
} wormhole_data;
|
} wormhole_data;
|
||||||
|
|
||||||
|
@ -73,13 +72,14 @@ static void wormhole_done(struct attrib *a)
|
||||||
static int wormhole_age(struct attrib *a, void *owner)
|
static int wormhole_age(struct attrib *a, void *owner)
|
||||||
{
|
{
|
||||||
wormhole_data *data = (wormhole_data *)a->data.v;
|
wormhole_data *data = (wormhole_data *)a->data.v;
|
||||||
int maxtransport = data->entry->size;
|
building *b = (building *)owner;
|
||||||
region *r = data->entry->region;
|
int maxtransport = b->size;
|
||||||
|
region *r = b->region;
|
||||||
unit *u = r->units;
|
unit *u = r->units;
|
||||||
|
|
||||||
unused_arg(owner);
|
unused_arg(owner);
|
||||||
for (; u != NULL && maxtransport != 0; u = u->next) {
|
for (; u != NULL && maxtransport != 0; u = u->next) {
|
||||||
if (u->building == data->entry) {
|
if (u->building == b) {
|
||||||
message *m = NULL;
|
message *m = NULL;
|
||||||
if (u->number > maxtransport || has_limited_skills(u)) {
|
if (u->number > maxtransport || has_limited_skills(u)) {
|
||||||
m = msg_message("wormhole_requirements", "unit region", u, u->region);
|
m = msg_message("wormhole_requirements", "unit region", u, u->region);
|
||||||
|
@ -97,7 +97,7 @@ static int wormhole_age(struct attrib *a, void *owner)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_building(&r->buildings, data->entry);
|
remove_building(&r->buildings, b);
|
||||||
ADDMSG(&r->msgs, msg_message("wormhole_dissolve", "region", r));
|
ADDMSG(&r->msgs, msg_message("wormhole_dissolve", "region", r));
|
||||||
|
|
||||||
/* age returns 0 if the attribute needs to be removed, !=0 otherwise */
|
/* age returns 0 if the attribute needs to be removed, !=0 otherwise */
|
||||||
|
@ -107,7 +107,6 @@ static int wormhole_age(struct attrib *a, void *owner)
|
||||||
static void wormhole_write(const struct attrib *a, const void *owner, struct storage *store)
|
static void wormhole_write(const struct attrib *a, const void *owner, struct storage *store)
|
||||||
{
|
{
|
||||||
wormhole_data *data = (wormhole_data *)a->data.v;
|
wormhole_data *data = (wormhole_data *)a->data.v;
|
||||||
write_building_reference(data->entry, store);
|
|
||||||
write_region_reference(data->exit, store);
|
write_region_reference(data->exit, store);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,12 +131,11 @@ static int wormhole_read(struct attrib *a, void *owner, struct storage *store)
|
||||||
read_fun reader = (global.data_version < UIDHASH_VERSION)
|
read_fun reader = (global.data_version < UIDHASH_VERSION)
|
||||||
? read_building_reference : read_region_reference;
|
? read_building_reference : read_region_reference;
|
||||||
|
|
||||||
int rb =
|
if (global.data_version < ATTRIBOWNER_VERSION) {
|
||||||
read_reference(&data->entry, store, read_building_reference,
|
READ_INT(store, NULL);
|
||||||
resolve_building);
|
}
|
||||||
int rr = read_reference(&data->exit, store, reader, resolver);
|
if (read_reference(&data->exit, store, reader, resolver) == 0) {
|
||||||
if (rb == 0 && rr == 0) {
|
if (!data->exit) {
|
||||||
if (!data->exit || !data->entry) {
|
|
||||||
return AT_READ_FAIL;
|
return AT_READ_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,8 +161,6 @@ make_wormhole(const building_type * bt_wormhole, region * r1, region * r2)
|
||||||
attrib *a2 = a_add(&b2->attribs, a_new(&at_wormhole));
|
attrib *a2 = a_add(&b2->attribs, a_new(&at_wormhole));
|
||||||
wormhole_data *d1 = (wormhole_data *)a1->data.v;
|
wormhole_data *d1 = (wormhole_data *)a1->data.v;
|
||||||
wormhole_data *d2 = (wormhole_data *)a2->data.v;
|
wormhole_data *d2 = (wormhole_data *)a2->data.v;
|
||||||
d1->entry = b1;
|
|
||||||
d2->entry = b2;
|
|
||||||
d1->exit = b2->region;
|
d1->exit = b2->region;
|
||||||
d2->exit = b1->region;
|
d2->exit = b1->region;
|
||||||
b1->size = bt_wormhole->maxsize;
|
b1->size = bt_wormhole->maxsize;
|
||||||
|
|
Loading…
Reference in New Issue