From 470a054c061bbe8d3ec9160a52f79f6314bfa86a Mon Sep 17 00:00:00 2001 From: tron Date: Sat, 28 Oct 2006 11:43:56 +0000 Subject: (svn r6982) Use the pool macros for the Sign pool --- oldloader.c | 2 +- openttd.c | 2 +- signs.c | 20 +++++++------------- signs.h | 20 ++------------------ 4 files changed, 11 insertions(+), 33 deletions(-) diff --git a/oldloader.c b/oldloader.c index 65a03767a..d9faba895 100644 --- a/oldloader.c +++ b/oldloader.c @@ -1245,7 +1245,7 @@ static const OldChunks sign_chunk[] = { static bool LoadOldSign(LoadgameState *ls, int num) { - if (!AddBlockIfNeeded(&_sign_pool, num)) + if (!AddBlockIfNeeded(&_Sign_pool, num)) error("Signs: failed loading savegame: too many signs"); return LoadChunk(ls, GetSign(num), sign_chunk); diff --git a/openttd.c b/openttd.c index ba19bbf3e..ca41e23e5 100644 --- a/openttd.c +++ b/openttd.c @@ -258,7 +258,7 @@ static void UnInitializeDynamicVariables(void) CleanPool(&_Industry_pool); CleanPool(&_station_pool); CleanPool(&_Vehicle_pool); - CleanPool(&_sign_pool); + CleanPool(&_Sign_pool); CleanPool(&_Order_pool); free((void*)_town_sort); diff --git a/signs.c b/signs.c index f6d796d52..7c7c85f32 100644 --- a/signs.c +++ b/signs.c @@ -12,12 +12,6 @@ static Sign *_new_sign; -enum { - /* Max signs: 64000 (4 * 16000) */ - SIGN_POOL_BLOCK_SIZE_BITS = 2, /* In bits, so (1 << 2) == 4 */ - SIGN_POOL_MAX_BLOCKS = 16000, -}; - /** * Called if a new block is added to the sign-pool */ @@ -27,11 +21,11 @@ static void SignPoolNewBlock(uint start_item) /* We don't use FOR_ALL here, because FOR_ALL skips invalid items. * TODO - This is just a temporary stage, this will be removed. */ - for (si = GetSign(start_item); si != NULL; si = (si->index + 1 < GetSignPoolSize()) ? GetSign(si->index + 1) : NULL) si->index = start_item++; + for (si = GetSign(start_item); si != NULL; si = (si->index + 1U < GetSignPoolSize()) ? GetSign(si->index + 1U) : NULL) si->index = start_item++; } /* Initialize the sign-pool */ -MemoryPool _sign_pool = { "Signs", SIGN_POOL_MAX_BLOCKS, SIGN_POOL_BLOCK_SIZE_BITS, sizeof(Sign), &SignPoolNewBlock, NULL, 0, 0, NULL }; +DEFINE_POOL(Sign, Sign, SignPoolNewBlock, NULL) /** * @@ -85,7 +79,7 @@ static Sign *AllocateSign(void) /* We don't use FOR_ALL here, because FOR_ALL skips invalid items. * TODO - This is just a temporary stage, this will be removed. */ - for (si = GetSign(0); si != NULL; si = (si->index + 1 < GetSignPoolSize()) ? GetSign(si->index + 1) : NULL) { + for (si = GetSign(0); si != NULL; si = (si->index + 1U < GetSignPoolSize()) ? GetSign(si->index + 1U) : NULL) { if (!IsValidSign(si)) { uint index = si->index; @@ -97,7 +91,7 @@ static Sign *AllocateSign(void) } /* Check if we can add a block to the pool */ - if (AddBlockToPool(&_sign_pool)) + if (AddBlockToPool(&_Sign_pool)) return AllocateSign(); return NULL; @@ -227,8 +221,8 @@ void PlaceProc_Sign(TileIndex tile) */ void InitializeSigns(void) { - CleanPool(&_sign_pool); - AddBlockToPool(&_sign_pool); + CleanPool(&_Sign_pool); + AddBlockToPool(&_Sign_pool); } static const SaveLoad _sign_desc[] = { @@ -268,7 +262,7 @@ static void Load_SIGN(void) while ((index = SlIterateArray()) != -1) { Sign *si; - if (!AddBlockIfNeeded(&_sign_pool, index)) + if (!AddBlockIfNeeded(&_Sign_pool, index)) error("Signs: failed loading savegame: too many signs"); si = GetSign(index); diff --git a/signs.h b/signs.h index 8ae34f52e..bfcf9d95a 100644 --- a/signs.h +++ b/signs.h @@ -16,23 +16,7 @@ typedef struct Sign { SignID index; } Sign; -extern MemoryPool _sign_pool; - -/** - * Get the pointer to the sign with index 'index' - */ -static inline Sign *GetSign(SignID index) -{ - return (Sign *)GetItemFromPool(&_sign_pool, index); -} - -/** - * Get the current size of the SignPool - */ -static inline uint16 GetSignPoolSize(void) -{ - return _sign_pool.total_items; -} +DECLARE_POOL(Sign, Sign, 2, 16000) static inline SignID GetSignArraySize(void) { @@ -65,7 +49,7 @@ static inline void DeleteSign(Sign *si) si->str = STR_NULL; } -#define FOR_ALL_SIGNS_FROM(ss, start) for (ss = GetSign(start); ss != NULL; ss = (ss->index + 1 < GetSignPoolSize()) ? GetSign(ss->index + 1) : NULL) if (IsValidSign(ss)) +#define FOR_ALL_SIGNS_FROM(ss, start) for (ss = GetSign(start); ss != NULL; ss = (ss->index + 1U < GetSignPoolSize()) ? GetSign(ss->index + 1U) : NULL) if (IsValidSign(ss)) #define FOR_ALL_SIGNS(ss) FOR_ALL_SIGNS_FROM(ss, 0) VARDEF bool _sign_sort_dirty; -- cgit v1.2.3-70-g09d2