From 00e5c1df18449992cc974b99c61a44d1385bf4a7 Mon Sep 17 00:00:00 2001 From: terkhen Date: Sun, 12 Jun 2011 20:47:45 +0000 Subject: (svn r22567) -Codechange: Store persistent storages inside a pool. --- src/newgrf_airport.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/newgrf_airport.cpp') diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index 03fa9567d..0b1dd650c 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -149,7 +149,7 @@ uint32 AirportGetVariable(const ResolverObject *object, byte variable, byte para switch (variable) { /* Get a variable from the persistent storage */ - case 0x7C: return st->airport.psa.GetValue(parameter); + case 0x7C: return (st->airport.psa != NULL) ? st->airport.psa->GetValue(parameter) : 0; case 0xF0: return st->facilities; case 0xFA: return Clamp(st->build_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0, 65535); @@ -194,7 +194,17 @@ void AirportStorePSA(ResolverObject *object, uint pos, int32 value) { Station *st = object->u.airport.st; if (object->scope != VSG_SCOPE_SELF || st == NULL) return; - st->airport.psa.StoreValue(pos, value); + + if (st->airport.psa == NULL) { + /* There is no need to create a storage if the value is zero. */ + if (value == 0) return; + + /* Create storage on first modification. */ + uint32 grfid = (object->grffile != NULL) ? object->grffile->grfid : 0; + assert(PersistentStorage::CanAllocateItem()); + st->airport.psa = new PersistentStorage(grfid); + } + st->airport.psa->StoreValue(pos, value); } static void NewAirportResolver(ResolverObject *res, TileIndex tile, Station *st, byte airport_id, byte layout) -- cgit v1.2.3-54-g00ecf