attrib.read gets a gamedata object

stop using global.data_version
for github issue #479
This commit is contained in:
Enno Rehling 2016-02-13 14:09:36 +01:00
parent 7f6ced99b9
commit 3e584245c0
9 changed files with 20 additions and 21 deletions

View file

@ -152,7 +152,7 @@ static int dict_read(attrib * a, void *owner, gamedata *data)
case TREGION: case TREGION:
result = result =
read_reference(&dd->data.r, store, read_region_reference, read_reference(&dd->data.r, store, read_region_reference,
RESOLVE_REGION(global.data_version)); RESOLVE_REGION(data->version));
if (result == 0 && !dd->data.r) { if (result == 0 && !dd->data.r) {
return AT_READ_FAIL; return AT_READ_FAIL;
} }

View file

@ -40,7 +40,7 @@ static int read_targetregion(attrib * a, void *owner, gamedata *data)
{ {
int result = int result =
read_reference(&a->data.v, data->store, read_region_reference, read_reference(&a->data.v, data->store, read_region_reference,
RESOLVE_REGION(global.data_version)); RESOLVE_REGION(data->version));
if (result == 0 && !a->data.v) if (result == 0 && !a->data.v)
return AT_READ_FAIL; return AT_READ_FAIL;
return AT_READ_OK; return AT_READ_OK;

View file

@ -106,7 +106,7 @@ static int lc_read(struct attrib *a, void *owner, gamedata *data)
building_action *bd = (building_action *)a->data.v; building_action *bd = (building_action *)a->data.v;
building *b = (building *)owner; building *b = (building *)owner;
int result = 0; int result = 0;
if (global.data_version < ATTRIBOWNER_VERSION) { if (data->version < ATTRIBOWNER_VERSION) {
result = read_reference(&b, store, read_building_reference, resolve_building); result = read_reference(&b, store, read_building_reference, resolve_building);
assert(b == owner); assert(b == owner);
} }

View file

@ -659,7 +659,7 @@ int read_borders(gamedata *data)
assert(bid <= nextborder); assert(bid <= nextborder);
if (type->read) if (type->read)
type->read(b, store); type->read(b, store);
if (global.data_version < NOBORDERATTRIBS_VERSION) { if (data->version < NOBORDERATTRIBS_VERSION) {
attrib *a = NULL; attrib *a = NULL;
int result = read_attribs(data, &a, b); int result = read_attribs(data, &a, b);
if (border_convert_cb) { if (border_convert_cb) {

View file

@ -238,7 +238,7 @@ int curse_read(attrib * a, void *owner, gamedata *data)
if (c->type->typ == CURSETYP_REGION) { if (c->type->typ == CURSETYP_REGION) {
int rr = int rr =
read_reference(&c->data.v, store, read_region_reference, read_reference(&c->data.v, store, read_region_reference,
RESOLVE_REGION(global.data_version)); RESOLVE_REGION(data->version));
if (ur == 0 && rr == 0 && !c->data.v) { if (ur == 0 && rr == 0 && !c->data.v) {
return AT_READ_FAIL; return AT_READ_FAIL;
} }
@ -255,12 +255,11 @@ void curse_write(const attrib * a, const void *owner, struct storage *store)
unit *mage = (c->magician && c->magician->number) ? c->magician : NULL; unit *mage = (c->magician && c->magician->number) ? c->magician : NULL;
/* copied from c_clearflag */ /* copied from c_clearflag */
if (global.data_version < EXPLICIT_CURSE_ISNEW_VERSION) { #if RELEASE_VERSION < EXPLICIT_CURSE_ISNEW_VERSION
flags = (c->flags & ~CURSE_ISNEW) | (c->type->flags & CURSE_ISNEW); flags = (c->flags & ~CURSE_ISNEW) | (c->type->flags & CURSE_ISNEW);
} #else
else {
flags = c->flags | c->type->flags; flags = c->flags | c->type->flags;
} #endif
WRITE_INT(store, c->no); WRITE_INT(store, c->no);
WRITE_TOK(store, ct->cname); WRITE_TOK(store, ct->cname);

View file

@ -135,7 +135,7 @@ static void test_write_flag(CuTest *tc) {
data.strm.api->rewind(data.strm.handle); data.strm.api->rewind(data.strm.handle);
curse_read(fix.r->attribs, fix.r, &data); curse_read(fix.r->attribs, fix.r, &data);
CuAssertIntEquals(tc, 42 | CURSE_ISNEW, ((curse *) fix.r->attribs->data.v)->flags); CuAssertIntEquals(tc, 42 | CURSE_ISNEW, ((curse *) fix.r->attribs->data.v)->flags);
global.data_version = RELEASE_VERSION; global.data_version = RELEASE_VERSION; // FIXME: should not need this!
CuAssertIntEquals(tc, RELEASE_VERSION, global.data_version); CuAssertIntEquals(tc, RELEASE_VERSION, global.data_version);
mstream_done(&data.strm); mstream_done(&data.strm);

View file

@ -1759,7 +1759,7 @@ int readgame(const char *filename, bool backup)
} }
else { else {
for (u = f->units; u; u = u->nextF) { for (u = f->units; u; u = u->nextF) {
if (global.data_version < SPELL_LEVEL_VERSION) { if (gdata.version < SPELL_LEVEL_VERSION) {
sc_mage *mage = get_mage(u); sc_mage *mage = get_mage(u);
if (mage) { if (mage) {
faction *f = u->faction; faction *f = u->faction;
@ -1778,12 +1778,12 @@ int readgame(const char *filename, bool backup)
} }
if (u->number > 0) { if (u->number > 0) {
f->_alive = true; f->_alive = true;
if (global.data_version >= SPELL_LEVEL_VERSION) { if (gdata.version >= SPELL_LEVEL_VERSION) {
break; break;
} }
} }
} }
if (global.data_version < SPELL_LEVEL_VERSION && f->spellbook) { if (gdata.version < SPELL_LEVEL_VERSION && f->spellbook) {
spellbook_foreach(f->spellbook, cb_sb_maxlevel, f); spellbook_foreach(f->spellbook, cb_sb_maxlevel, f);
} }
} }
@ -1836,7 +1836,7 @@ int writegame(const char *filename)
gdata.store = &store; gdata.store = &store;
gdata.encoding = enc_gamedata; gdata.encoding = enc_gamedata;
gdata.version = RELEASE_VERSION; gdata.version = RELEASE_VERSION;
global.data_version = RELEASE_VERSION; global.data_version = RELEASE_VERSION; // FIXME: no code that is writing should need this
n = STREAM_VERSION; n = STREAM_VERSION;
fwrite(&gdata.version, sizeof(int), 1, F); fwrite(&gdata.version, sizeof(int), 1, F);
fwrite(&n, sizeof(int), 1, F); fwrite(&n, sizeof(int), 1, F);

View file

@ -135,7 +135,7 @@ static int a_readicastle(attrib * a, void *owner, struct gamedata *data)
icastle_data *idata = (icastle_data *)a->data.v; icastle_data *idata = (icastle_data *)a->data.v;
char token[32]; char token[32];
READ_TOK(store, token, sizeof(token)); READ_TOK(store, token, sizeof(token));
if (global.data_version < ATTRIBOWNER_VERSION) { if (data->version < ATTRIBOWNER_VERSION) {
READ_INT(store, NULL); READ_INT(store, NULL);
} }
READ_INT(store, &idata->time); READ_INT(store, &idata->time);
@ -378,7 +378,7 @@ static int read_seenspell(attrib * a, void *owner, struct gamedata *data)
sp = find_spellbyid((unsigned int)i); sp = find_spellbyid((unsigned int)i);
} }
else { else {
if (global.data_version < UNIQUE_SPELLS_VERSION) { if (data->version < UNIQUE_SPELLS_VERSION) {
READ_INT(store, 0); /* ignore mtype */ READ_INT(store, 0); /* ignore mtype */
} }
sp = find_spell(token); sp = find_spell(token);

View file

@ -113,12 +113,12 @@ static int resolve_exit(variant id, void *address)
static int wormhole_read(struct attrib *a, void *owner, struct gamedata *data) static int wormhole_read(struct attrib *a, void *owner, struct gamedata *data)
{ {
storage *store = data->store; storage *store = data->store;
resolve_fun resolver = (global.data_version < UIDHASH_VERSION) resolve_fun resolver = (data->version < UIDHASH_VERSION)
? resolve_exit : resolve_region_id; ? resolve_exit : resolve_region_id;
read_fun reader = (global.data_version < UIDHASH_VERSION) read_fun reader = (data->version < UIDHASH_VERSION)
? read_building_reference : read_region_reference; ? read_building_reference : read_region_reference;
if (global.data_version < ATTRIBOWNER_VERSION) { if (data->version < ATTRIBOWNER_VERSION) {
READ_INT(store, NULL); READ_INT(store, NULL);
} }
if (read_reference(&a->data.v, store, reader, resolver) == 0) { if (read_reference(&a->data.v, store, reader, resolver) == 0) {