summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortron <tron@openttd.org>2006-08-15 07:07:17 +0000
committertron <tron@openttd.org>2006-08-15 07:07:17 +0000
commit5cf43b9f3c26ae5e44215cfa8142ed9e440dd3a0 (patch)
tree0aa4cb8becef58d3f427c3d8a47031b3ee8aad86
parent86934247cdbf369217ff78364b47ca7ab57ef4c0 (diff)
downloadopenttd-5cf43b9f3c26ae5e44215cfa8142ed9e440dd3a0.tar.xz
(svn r5907) Remove more indirection by using pointers instead of IDs. Also fix some bogus warnings on MSVC by using (void*) casts
-rw-r--r--industry.h2
-rw-r--r--industry_gui.c25
-rw-r--r--openttd.c4
-rw-r--r--station_gui.c12
-rw-r--r--town.h2
-rw-r--r--town_gui.c45
-rw-r--r--vehicle_gui.c14
7 files changed, 51 insertions, 53 deletions
diff --git a/industry.h b/industry.h
index bb7bb498b..0189a6d84 100644
--- a/industry.h
+++ b/industry.h
@@ -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;
diff --git a/industry_gui.c b/industry_gui.c
index cec302b55..658704bf3 100644
--- a/industry_gui.c
+++ b/industry_gui.c
@@ -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;
}
diff --git a/openttd.c b/openttd.c
index 0433c9c9c..062645677 100644
--- a/openttd.c
+++ b/openttd.c
@@ -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)
diff --git a/station_gui.c b/station_gui.c
index 651eafa76..ab106fbc2 100644
--- a/station_gui.c
+++ b/station_gui.c
@@ -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;
diff --git a/town.h b/town.h
index 4729cccc8..9664ca2ed 100644
--- a/town.h
+++ b/town.h
@@ -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;
diff --git a/town_gui.c b/town_gui.c
index 8fe0dc1ab..bd289b6a7 100644
--- a/town_gui.c
+++ b/town_gui.c
@@ -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;
diff --git a/vehicle_gui.c b/vehicle_gui.c
index 4baf7f834..bfe1adb62 100644
--- a/vehicle_gui.c
+++ b/vehicle_gui.c
@@ -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);