(svn r5907) Remove more indirection by using pointers instead of IDs. Also fix some bogus warnings on MSVC by using (void*) casts

This commit is contained in:
tron 2006-08-15 07:07:17 +00:00
parent d84a1dcf50
commit 4ad8d1c7a2
7 changed files with 51 additions and 53 deletions

View File

@ -96,7 +96,7 @@ static inline uint16 GetIndustryPoolSize(void)
VARDEF int _total_industries; // For the AI: the amount of industries active
VARDEF uint16 *_industry_sort;
VARDEF const Industry** _industry_sort;
VARDEF bool _industry_sort_dirty;

View File

@ -470,16 +470,15 @@ static const Widget _industry_directory_widgets[] = {
static uint _num_industry_sort;
static char _bufcache[96];
static uint16 _last_industry_idx;
static const Industry* _last_industry;
static byte _industry_sort_order;
static int CDECL GeneralIndustrySorter(const void *a, const void *b)
{
const Industry* i = *(const Industry**)a;
const Industry* j = *(const Industry**)b;
char buf1[96];
uint16 val;
Industry *i = GetIndustry(*(const uint16*)a);
Industry *j = GetIndustry(*(const uint16*)b);
int r = 0;
switch (_industry_sort_order >> 1) {
@ -523,8 +522,8 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
SetDParam(0, i->town->index);
GetString(buf1, STR_TOWN);
if ( (val=*(const uint16*)b) != _last_industry_idx) {
_last_industry_idx = val;
if (j != _last_industry) {
_last_industry = j;
SetDParam(0, j->town->index);
GetString(_bufcache, STR_TOWN);
}
@ -537,21 +536,21 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
static void MakeSortedIndustryList(void)
{
Industry *i;
const Industry* i;
int n = 0;
/* Create array for sorting */
_industry_sort = realloc(_industry_sort, GetIndustryPoolSize() * sizeof(_industry_sort[0]));
_industry_sort = realloc((void*)_industry_sort, GetIndustryPoolSize() * sizeof(_industry_sort[0]));
if (_industry_sort == NULL)
error("Could not allocate memory for the industry-sorting-list");
FOR_ALL_INDUSTRIES(i) {
if (i->xy != 0) _industry_sort[n++] = i->index;
if (i->xy != 0) _industry_sort[n++] = i;
}
_num_industry_sort = n;
_last_industry_idx = 0xFFFF; // used for "cache"
_last_industry = NULL; // used for "cache"
qsort(_industry_sort, n, sizeof(_industry_sort[0]), GeneralIndustrySorter);
qsort((void*)_industry_sort, n, sizeof(_industry_sort[0]), GeneralIndustrySorter);
DEBUG(misc, 1) ("Resorting Industries list...");
}
@ -579,7 +578,7 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
n = 0;
while (p < _num_industry_sort) {
const Industry *i = GetIndustry(_industry_sort[p]);
const Industry* i = _industry_sort[p];
SetDParam(0, i->index);
if (i->produced_cargo[0] != CT_INVALID) {
@ -637,7 +636,7 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
if (!IS_INT_INSIDE(y, 0, w->vscroll.cap)) return;
p = y + w->vscroll.pos;
if (p < _num_industry_sort) {
ScrollMainWindowToTile(GetIndustry(_industry_sort[p])->xy);
ScrollMainWindowToTile(_industry_sort[p]->xy);
}
} break;
}

View File

@ -260,8 +260,8 @@ static void UnInitializeDynamicVariables(void)
CleanPool(&_sign_pool);
CleanPool(&_order_pool);
free(_town_sort);
free(_industry_sort);
free((void*)_town_sort);
free((void*)_industry_sort);
}
static void UnInitializeGame(void)

View File

@ -69,7 +69,7 @@ const StringID _station_sort_listing[] = {
};
static char _bufcache[64];
static uint16 _last_station_idx;
static const Station* _last_station;
static int _internal_sort_order;
static int CDECL StationNameSorter(const void *a, const void *b)
@ -83,8 +83,8 @@ static int CDECL StationNameSorter(const void *a, const void *b)
argv[0] = st1->index;
GetStringWithArgs(buf1, STR_STATION, argv);
if (st2->index != _last_station_idx) {
_last_station_idx = st2->index;
if (st2 != _last_station) {
_last_station = st2;
argv[0] = st2->index;
GetStringWithArgs(_bufcache, STR_STATION, argv);
}
@ -207,7 +207,7 @@ static void BuildStationsList(plstations_d* sl, PlayerID owner, byte facilities,
}
}
free(sl->sort_list);
free((void*)sl->sort_list);
sl->sort_list = malloc(n * sizeof(sl->sort_list[0]));
if (n != 0 && sl->sort_list == NULL) error("Could not allocate memory for the station-sorting-list");
sl->list_length = n;
@ -216,7 +216,7 @@ static void BuildStationsList(plstations_d* sl, PlayerID owner, byte facilities,
sl->flags &= ~SL_REBUILD;
sl->flags |= SL_RESORT;
free(station_sort);
free((void*)station_sort);
}
static void SortStationsList(plstations_d *sl)
@ -231,7 +231,7 @@ static void SortStationsList(plstations_d *sl)
if (!(sl->flags & SL_RESORT)) return;
_internal_sort_order = sl->flags & SL_ORDER;
_last_station_idx = 0; // used for "cache" in namesorting
_last_station = NULL; // used for "cache" in namesorting
qsort(sl->sort_list, sl->list_length, sizeof(sl->sort_list[0]), _station_sorter[sl->sort_type]);
sl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;

2
town.h
View File

@ -151,7 +151,7 @@ enum {
bool CheckforTownRating(uint32 flags, Town *t, byte type);
VARDEF TownID *_town_sort;
VARDEF const Town** _town_sort;
extern MemoryPool _town_pool;

View File

@ -368,25 +368,25 @@ static const Widget _town_directory_widgets[] = {
static uint _num_town_sort;
static char _bufcache[64];
static uint16 _last_town_idx;
static const Town* _last_town;
static int CDECL TownNameSorter(const void *a, const void *b)
{
const Town* ta = *(const Town**)a;
const Town* tb = *(const Town**)b;
char buf1[64];
uint16 val;
int r;
int32 argv[1];
argv[0] = *(const uint16*)a;
argv[0] = ta->index;
GetStringWithArgs(buf1, STR_TOWN, argv);
/* If 'b' is the same town as in the last round, use the cached value
* We do this to speed stuff up ('b' is called with the same value a lot of
* times after eachother) */
val = *(const uint16*)b;
if (val != _last_town_idx) {
_last_town_idx = val;
argv[0] = val;
* times after eachother) */
if (tb != _last_town) {
_last_town = tb;
argv[0] = tb->index;
GetStringWithArgs(_bufcache, STR_TOWN, argv);
}
@ -397,8 +397,8 @@ static int CDECL TownNameSorter(const void *a, const void *b)
static int CDECL TownPopSorter(const void *a, const void *b)
{
const Town *ta = GetTown(*(const uint16*)a);
const Town *tb = GetTown(*(const uint16*)b);
const Town* ta = *(const Town**)a;
const Town* tb = *(const Town**)b;
int r = ta->population - tb->population;
if (_town_sort_order & 1) r = -r;
return r;
@ -410,18 +410,18 @@ static void MakeSortedTownList(void)
uint n = 0;
/* Create array for sorting */
_town_sort = realloc(_town_sort, GetTownPoolSize() * sizeof(_town_sort[0]));
_town_sort = realloc((void*)_town_sort, GetTownPoolSize() * sizeof(_town_sort[0]));
if (_town_sort == NULL)
error("Could not allocate memory for the town-sorting-list");
FOR_ALL_TOWNS(t) {
if (t->xy != 0) _town_sort[n++] = t->index;
if (t->xy != 0) _town_sort[n++] = t;
}
_num_town_sort = n;
_last_town_idx = 0; // used for "cache"
qsort(_town_sort, n, sizeof(_town_sort[0]), _town_sort_order & 2 ? TownPopSorter : TownNameSorter);
_last_town = NULL; // used for "cache"
qsort((void*)_town_sort, n, sizeof(_town_sort[0]), _town_sort_order & 2 ? TownPopSorter : TownNameSorter);
DEBUG(misc, 1) ("Resorting Towns list...");
}
@ -442,13 +442,12 @@ static void TownDirectoryWndProc(Window *w, WindowEvent *e)
DoDrawString(_town_sort_order & 1 ? DOWNARROW : UPARROW, (_town_sort_order <= 1) ? 88 : 187, 15, 0x10);
{
const Town *t;
int n = 0;
uint16 i = w->vscroll.pos;
int y = 28;
while (i < _num_town_sort) {
t = GetTown(_town_sort[i]);
const Town* t = _town_sort[i];
assert(t->xy);
@ -480,6 +479,8 @@ static void TownDirectoryWndProc(Window *w, WindowEvent *e)
} break;
case 5: { /* Click on Town Matrix */
const Town* t;
uint16 id_v = (e->click.pt.y - 28) / 10;
if (id_v >= w->vscroll.cap) return; // click out of bounds
@ -488,13 +489,11 @@ static void TownDirectoryWndProc(Window *w, WindowEvent *e)
if (id_v >= _num_town_sort) return; // click out of town bounds
{
const Town *t = GetTown(_town_sort[id_v]);
assert(t->xy);
ScrollMainWindowToTile(t->xy);
}
} break;
t = _town_sort[id_v];
assert(t->xy);
ScrollMainWindowToTile(t->xy);
break;
}
}
break;

View File

@ -27,7 +27,7 @@
Sorting _sorting;
static uint32 _internal_name_sorter_id; // internal StringID for default vehicle-names
static uint32 _last_vehicle_idx; // cached index to hopefully speed up name-sorting
static const Vehicle* _last_vehicle; // cached vehicle to hopefully speed up name-sorting
static bool _internal_sort_order; // descending/ascending
static uint16 _player_num_engines[TOTAL_NUM_ENGINES];
@ -161,7 +161,7 @@ void BuildVehicleList(vehiclelist_d* vl, int type, PlayerID owner, StationID sta
}
}
free(vl->sort_list);
free((void*)vl->sort_list);
vl->sort_list = malloc(n * sizeof(vl->sort_list[0]));
if (n != 0 && vl->sort_list == NULL) {
error("Could not allocate memory for the vehicle-sorting-list");
@ -169,7 +169,7 @@ void BuildVehicleList(vehiclelist_d* vl, int type, PlayerID owner, StationID sta
vl->list_length = n;
for (i = 0; i < n; ++i) vl->sort_list[i] = sort_list[i];
free(sort_list);
free((void*)sort_list);
vl->flags &= ~VL_REBUILD;
vl->flags |= VL_RESORT;
@ -181,7 +181,7 @@ void SortVehicleList(vehiclelist_d *vl)
_internal_sort_order = vl->flags & VL_DESC;
_internal_name_sorter_id = STR_SV_TRAIN_NAME;
_last_vehicle_idx = 0; // used for "cache" in namesorting
_last_vehicle = NULL; // used for "cache" in namesorting
qsort(vl->sort_list, vl->list_length, sizeof(vl->sort_list[0]),
_vehicle_sorter[vl->sort_type]);
@ -289,7 +289,7 @@ static int CDECL VehicleNumberSorter(const void *a, const void *b)
return (_internal_sort_order & 1) ? -r : r;
}
static char _bufcache[64]; // used together with _last_vehicle_idx to hopefully speed up stringsorting
static char _bufcache[64]; // used together with _last_vehicle to hopefully speed up stringsorting
static int CDECL VehicleNameSorter(const void *a, const void *b)
{
const Vehicle* va = *(const Vehicle**)a;
@ -302,8 +302,8 @@ static int CDECL VehicleNameSorter(const void *a, const void *b)
GetString(buf1, STR_JUST_STRING);
}
if (vb->index != _last_vehicle_idx) {
_last_vehicle_idx = vb->index;
if (vb != _last_vehicle) {
_last_vehicle = vb;
_bufcache[0] = '\0';
if (vb->string_id != _internal_name_sorter_id) {
SetDParam(0, vb->string_id);