266 if (r == 0) return EngineNumberSorter(a, b); |
266 if (r == 0) return EngineNumberSorter(a, b); |
267 |
267 |
268 return _internal_sort_order ? -r : r; |
268 return _internal_sort_order ? -r : r; |
269 } |
269 } |
270 |
270 |
|
271 /* Road vehicle sorting functions */ |
|
272 static int CDECL RoadVehEngineCostSorter(const void *a, const void *b) |
|
273 { |
|
274 int va = RoadVehInfo(*(const EngineID*)a)->base_cost; |
|
275 int vb = RoadVehInfo(*(const EngineID*)b)->base_cost; |
|
276 int r = va - vb; |
|
277 |
|
278 return _internal_sort_order ? -r : r; |
|
279 } |
|
280 |
|
281 static int CDECL RoadVehEngineSpeedSorter(const void *a, const void *b) |
|
282 { |
|
283 int va = RoadVehInfo(*(const EngineID*)a)->max_speed; |
|
284 int vb = RoadVehInfo(*(const EngineID*)b)->max_speed; |
|
285 int r = va - vb; |
|
286 |
|
287 return _internal_sort_order ? -r : r; |
|
288 } |
|
289 |
|
290 static int CDECL RoadVehEngineRunningCostSorter(const void *a, const void *b) |
|
291 { |
|
292 const int va = RoadVehInfo(*(const EngineID*)a)->running_cost; |
|
293 const int vb = RoadVehInfo(*(const EngineID*)b)->running_cost; |
|
294 const int r = va - vb; |
|
295 |
|
296 if (r == 0) { |
|
297 /* Use EngineID to sort instead since we want consistent sorting */ |
|
298 return EngineNumberSorter(a, b); |
|
299 } |
|
300 return _internal_sort_order ? -r : r; |
|
301 } |
|
302 |
271 static int CDECL RoadVehEngineCapacitySorter(const void *a, const void *b) |
303 static int CDECL RoadVehEngineCapacitySorter(const void *a, const void *b) |
272 { |
304 { |
273 int va = RoadVehInfo(*(const EngineID*)a)->capacity; |
305 int va = RoadVehInfo(*(const EngineID*)a)->capacity; |
274 int vb = RoadVehInfo(*(const EngineID*)b)->capacity; |
306 int vb = RoadVehInfo(*(const EngineID*)b)->capacity; |
275 int r = va - vb; |
307 int r = va - vb; |
|
308 |
|
309 if (r == 0) { |
|
310 /* Use EngineID to sort instead since we want consistent sorting */ |
|
311 return EngineNumberSorter(a, b); |
|
312 } |
|
313 return _internal_sort_order ? -r : r; |
|
314 } |
|
315 |
|
316 /* Road vehicle sorting functions */ |
|
317 static int CDECL ShipEngineCostSorter(const void *a, const void *b) |
|
318 { |
|
319 int va = ShipVehInfo(*(const EngineID*)a)->base_cost; |
|
320 int vb = ShipVehInfo(*(const EngineID*)b)->base_cost; |
|
321 int r = va - vb; |
|
322 |
|
323 return _internal_sort_order ? -r : r; |
|
324 } |
|
325 |
|
326 static int CDECL ShipEngineSpeedSorter(const void *a, const void *b) |
|
327 { |
|
328 int va = ShipVehInfo(*(const EngineID*)a)->max_speed; |
|
329 int vb = ShipVehInfo(*(const EngineID*)b)->max_speed; |
|
330 int r = va - vb; |
|
331 |
|
332 return _internal_sort_order ? -r : r; |
|
333 } |
|
334 |
|
335 static int CDECL ShipEngineRunningCostSorter(const void *a, const void *b) |
|
336 { |
|
337 const int va = ShipVehInfo(*(const EngineID*)a)->running_cost; |
|
338 const int vb = ShipVehInfo(*(const EngineID*)b)->running_cost; |
|
339 const int r = va - vb; |
276 |
340 |
277 if (r == 0) { |
341 if (r == 0) { |
278 /* Use EngineID to sort instead since we want consistent sorting */ |
342 /* Use EngineID to sort instead since we want consistent sorting */ |
279 return EngineNumberSorter(a, b); |
343 return EngineNumberSorter(a, b); |
280 } |
344 } |
364 &EngineReliabilitySorter, |
428 &EngineReliabilitySorter, |
365 &TrainEngineCapacitySorter, |
429 &TrainEngineCapacitySorter, |
366 }, { |
430 }, { |
367 /* Road vehicles */ |
431 /* Road vehicles */ |
368 &EngineNumberSorter, |
432 &EngineNumberSorter, |
|
433 &RoadVehEngineCostSorter, |
|
434 &RoadVehEngineSpeedSorter, |
369 &EngineIntroDateSorter, |
435 &EngineIntroDateSorter, |
370 &EngineNameSorter, |
436 &EngineNameSorter, |
|
437 &RoadVehEngineRunningCostSorter, |
371 &EngineReliabilitySorter, |
438 &EngineReliabilitySorter, |
372 &RoadVehEngineCapacitySorter, |
439 &RoadVehEngineCapacitySorter, |
373 }, { |
440 }, { |
374 /* Ships */ |
441 /* Ships */ |
375 &EngineNumberSorter, |
442 &EngineNumberSorter, |
|
443 &ShipEngineCostSorter, |
|
444 &ShipEngineSpeedSorter, |
376 &EngineIntroDateSorter, |
445 &EngineIntroDateSorter, |
377 &EngineNameSorter, |
446 &EngineNameSorter, |
|
447 &ShipEngineRunningCostSorter, |
378 &EngineReliabilitySorter, |
448 &EngineReliabilitySorter, |
379 &ShipEngineCapacitySorter, |
449 &ShipEngineCapacitySorter, |
380 }, { |
450 }, { |
381 /* Aircraft */ |
451 /* Aircraft */ |
382 &EngineNumberSorter, |
452 &EngineNumberSorter, |
403 STR_ENGINE_SORT_CARGO_CAPACITY, |
473 STR_ENGINE_SORT_CARGO_CAPACITY, |
404 INVALID_STRING_ID |
474 INVALID_STRING_ID |
405 }, { |
475 }, { |
406 /* Road vehicles */ |
476 /* Road vehicles */ |
407 STR_ENGINE_SORT_ENGINE_ID, |
477 STR_ENGINE_SORT_ENGINE_ID, |
|
478 STR_ENGINE_SORT_COST, |
|
479 STR_SORT_BY_MAX_SPEED, |
408 STR_ENGINE_SORT_INTRO_DATE, |
480 STR_ENGINE_SORT_INTRO_DATE, |
409 STR_SORT_BY_DROPDOWN_NAME, |
481 STR_SORT_BY_DROPDOWN_NAME, |
|
482 STR_ENGINE_SORT_RUNNING_COST, |
410 STR_SORT_BY_RELIABILITY, |
483 STR_SORT_BY_RELIABILITY, |
411 STR_ENGINE_SORT_CARGO_CAPACITY, |
484 STR_ENGINE_SORT_CARGO_CAPACITY, |
412 INVALID_STRING_ID |
485 INVALID_STRING_ID |
413 }, { |
486 }, { |
414 /* Ships */ |
487 /* Ships */ |
415 STR_ENGINE_SORT_ENGINE_ID, |
488 STR_ENGINE_SORT_ENGINE_ID, |
|
489 STR_ENGINE_SORT_COST, |
|
490 STR_SORT_BY_MAX_SPEED, |
416 STR_ENGINE_SORT_INTRO_DATE, |
491 STR_ENGINE_SORT_INTRO_DATE, |
417 STR_SORT_BY_DROPDOWN_NAME, |
492 STR_SORT_BY_DROPDOWN_NAME, |
|
493 STR_ENGINE_SORT_RUNNING_COST, |
418 STR_SORT_BY_RELIABILITY, |
494 STR_SORT_BY_RELIABILITY, |
419 STR_ENGINE_SORT_CARGO_CAPACITY, |
495 STR_ENGINE_SORT_CARGO_CAPACITY, |
420 INVALID_STRING_ID |
496 INVALID_STRING_ID |
421 }, { |
497 }, { |
422 /* Aircraft */ |
498 /* Aircraft */ |