Skip to content

Commit afcb487

Browse files
committed
upgrade stuff_int_list with enum class types
For type safety, use enum class rather than int. Also make a few miscellaneous tweaks such as adding a new casting macro and making detail level settings a bit cleaner.
1 parent 2589d8c commit afcb487

19 files changed

Lines changed: 140 additions & 127 deletions

File tree

code/asteroid/asteroid.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2324,7 +2324,7 @@ static void asteroid_parse_section()
23242324
}
23252325

23262326
if (optional_string("$Detail distance:")) {
2327-
asteroid_p->num_detail_levels = (int)stuff_int_list(asteroid_p->detail_distance, MAX_ASTEROID_DETAIL_LEVELS, RAW_INTEGER_TYPE);
2327+
asteroid_p->num_detail_levels = sz2i(stuff_int_list(asteroid_p->detail_distance, MAX_ASTEROID_DETAIL_LEVELS, ParseLookupType::RAW_INTEGER_TYPE));
23282328
}
23292329

23302330
if (optional_string("$Max Speed:")) {

code/fireball/fireballs.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1296,7 +1296,7 @@ int fireball_get_count()
12961296

12971297
void stuff_fireball_index_list(SCP_vector<int> &list, const char *name)
12981298
{
1299-
stuff_int_list(list, RAW_INTEGER_TYPE);
1299+
stuff_int_list(list, ParseLookupType::RAW_INTEGER_TYPE);
13001300

13011301
list.erase(std::remove_if(list.begin(), list.end(), [&](int index) {
13021302
if (!SCP_vector_inbounds(Fireball_info, index)) {

code/globalincs/alphacolors.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ void parse_colors(const char *filename)
324324
// if so, get its rgba values and initialise it using them
325325
mprintf(("'%s' has been redefined.\n", color_names[i]));
326326
//if (check_for_string("(")) {
327-
stuff_int_list(rgba, 4, RAW_INTEGER_TYPE);
327+
stuff_int_list(rgba, 4, ParseLookupType::RAW_INTEGER_TYPE);
328328
for (j = 0; j < 4; j++) {
329329
if (rgba[j] < 0) {
330330
Warning(LOCATION, "RGBA value for '%s' in %s too low (%d), capping to 0.\n", color_names[i], filename, rgba[j]);
@@ -390,7 +390,7 @@ void parse_everything_else(const char *filename)
390390

391391
if (required_string_either("$Team Stripe Color:", "$Team Stripe Colour:") >= 0) {
392392
int rgb[3];
393-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
393+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
394394
for (i = 0; i < 3; i++) {
395395
CLAMP(rgb[i], 0, 255);
396396
}
@@ -402,7 +402,7 @@ void parse_everything_else(const char *filename)
402402

403403
if (required_string_either("$Team Base Color:", "$Team Base Colour:") >= 0) {
404404
int rgb[3];
405-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
405+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
406406
for (i = 0; i < 3; i++) {
407407
CLAMP(rgb[i], 0, 255);
408408
}
@@ -445,7 +445,7 @@ void parse_everything_else(const char *filename)
445445
mprintf(("'%s' has been redefined.\n", color_names[i]));
446446
if (check_for_string("(")) {
447447
// If we have a list of integers, use them.
448-
stuff_int_list(rgba, 4, RAW_INTEGER_TYPE);
448+
stuff_int_list(rgba, 4, ParseLookupType::RAW_INTEGER_TYPE);
449449
for (j = 0; j < 4; j++) {
450450
if (rgba[j] < 0)
451451
{
@@ -523,7 +523,7 @@ void parse_everything_else(const char *filename)
523523
rgba[3] = 255; // Odds are pretty high you want it to have full alpha...
524524

525525
if (check_for_string("(")) {
526-
stuff_int_list(rgba, 4, RAW_INTEGER_TYPE);
526+
stuff_int_list(rgba, 4, ParseLookupType::RAW_INTEGER_TYPE);
527527
for (j = 0; j < 4; j++) {
528528
if (rgba[j] < 0)
529529
{

code/globalincs/systemvars.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -242,10 +242,11 @@ const SCP_vector<std::pair<int, std::pair<const char*, int>>> DetailLevelValues
242242

243243
static void parse_model_detail_func()
244244
{
245-
int value[static_cast<int>(DefaultDetailPreset::Num_detail_presets)];
246-
stuff_int_list(value, static_cast<int>(DefaultDetailPreset::Num_detail_presets), RAW_INTEGER_TYPE);
245+
constexpr int num_detail_presets = static_cast<int>(DefaultDetailPreset::Num_detail_presets);
246+
int value[num_detail_presets];
247+
stuff_int_list(value, num_detail_presets, ParseLookupType::RAW_INTEGER_TYPE);
247248

248-
for (int i = 0; i < static_cast<int>(DefaultDetailPreset::Num_detail_presets); i++) {
249+
for (int i = 0; i < num_detail_presets; i++) {
249250

250251
if (value[i] < 0 || value[i] > MAX_DETAIL_VALUE) {
251252
error_display(0, "%i is an invalid detail level value!", value[i]);
@@ -272,10 +273,11 @@ const auto ModelDetailOption __UNUSED = options::OptionBuilder<int>("Graphics.De
272273

273274
static void parse_texture_detail_func()
274275
{
275-
int value[static_cast<int>(DefaultDetailPreset::Num_detail_presets)];
276-
stuff_int_list(value, static_cast<int>(DefaultDetailPreset::Num_detail_presets), RAW_INTEGER_TYPE);
276+
constexpr int num_detail_presets = static_cast<int>(DefaultDetailPreset::Num_detail_presets);
277+
int value[num_detail_presets];
278+
stuff_int_list(value, num_detail_presets, ParseLookupType::RAW_INTEGER_TYPE);
277279

278-
for (int i = 0; i < static_cast<int>(DefaultDetailPreset::Num_detail_presets); i++) {
280+
for (int i = 0; i < num_detail_presets; i++) {
279281

280282
if (value[i] < 0 || value[i] > MAX_DETAIL_VALUE) {
281283
error_display(0, "%i is an invalid detail level value!", value[i]);
@@ -302,10 +304,11 @@ const auto TexturesOption __UNUSED = options::OptionBuilder<int>("Graphics.Textu
302304

303305
static void parse_particles_detail_func()
304306
{
305-
int value[static_cast<int>(DefaultDetailPreset::Num_detail_presets)];
306-
stuff_int_list(value, static_cast<int>(DefaultDetailPreset::Num_detail_presets), RAW_INTEGER_TYPE);
307+
constexpr int num_detail_presets = static_cast<int>(DefaultDetailPreset::Num_detail_presets);
308+
int value[num_detail_presets];
309+
stuff_int_list(value, num_detail_presets, ParseLookupType::RAW_INTEGER_TYPE);
307310

308-
for (int i = 0; i < static_cast<int>(DefaultDetailPreset::Num_detail_presets); i++) {
311+
for (int i = 0; i < num_detail_presets; i++) {
309312

310313
if (value[i] < 0 || value[i] > MAX_DETAIL_VALUE) {
311314
error_display(0, "%i is an invalid detail level value!", value[i]);
@@ -332,10 +335,11 @@ const auto ParticlesOption __UNUSED = options::OptionBuilder<int>("Graphics.Part
332335

333336
static void parse_debris_detail_func()
334337
{
335-
int value[static_cast<int>(DefaultDetailPreset::Num_detail_presets)];
336-
stuff_int_list(value, static_cast<int>(DefaultDetailPreset::Num_detail_presets), RAW_INTEGER_TYPE);
338+
constexpr int num_detail_presets = static_cast<int>(DefaultDetailPreset::Num_detail_presets);
339+
int value[num_detail_presets];
340+
stuff_int_list(value, num_detail_presets, ParseLookupType::RAW_INTEGER_TYPE);
337341

338-
for (int i = 0; i < static_cast<int>(DefaultDetailPreset::Num_detail_presets); i++) {
342+
for (int i = 0; i < num_detail_presets; i++) {
339343

340344
if (value[i] < 0 || value[i] > MAX_DETAIL_VALUE) {
341345
error_display(0, "%i is an invalid detail level value!", value[i]);
@@ -362,10 +366,11 @@ const auto SmallDebrisOption __UNUSED = options::OptionBuilder<int>("Graphics.Sm
362366

363367
static void parse_shield_detail_func()
364368
{
365-
int value[static_cast<int>(DefaultDetailPreset::Num_detail_presets)];
366-
stuff_int_list(value, static_cast<int>(DefaultDetailPreset::Num_detail_presets), RAW_INTEGER_TYPE);
369+
constexpr int num_detail_presets = static_cast<int>(DefaultDetailPreset::Num_detail_presets);
370+
int value[num_detail_presets];
371+
stuff_int_list(value, num_detail_presets, ParseLookupType::RAW_INTEGER_TYPE);
367372

368-
for (int i = 0; i < static_cast<int>(DefaultDetailPreset::Num_detail_presets); i++) {
373+
for (int i = 0; i < num_detail_presets; i++) {
369374

370375
if (value[i] < 0 || value[i] > MAX_DETAIL_VALUE) {
371376
error_display(0, "%i is an invalid detail level value!", value[i]);
@@ -392,10 +397,11 @@ const auto ShieldEffectsOption __UNUSED = options::OptionBuilder<int>("Graphics.
392397

393398
static void parse_stars_detail_func()
394399
{
395-
int value[static_cast<int>(DefaultDetailPreset::Num_detail_presets)];
396-
stuff_int_list(value, static_cast<int>(DefaultDetailPreset::Num_detail_presets), RAW_INTEGER_TYPE);
400+
constexpr int num_detail_presets = static_cast<int>(DefaultDetailPreset::Num_detail_presets);
401+
int value[num_detail_presets];
402+
stuff_int_list(value, num_detail_presets, ParseLookupType::RAW_INTEGER_TYPE);
397403

398-
for (int i = 0; i < static_cast<int>(DefaultDetailPreset::Num_detail_presets); i++) {
404+
for (int i = 0; i < num_detail_presets; i++) {
399405

400406
if (value[i] < 0 || value[i] > MAX_DETAIL_VALUE) {
401407
error_display(0, "%i is an invalid detail level value!", value[i]);

code/graphics/2d.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,11 @@ static auto GammaOption __UNUSED = options::OptionBuilder<float>("Graphics.Gamma
178178

179179
static void parse_lighting_func()
180180
{
181-
int value[static_cast<int>(DefaultDetailPreset::Num_detail_presets)];
182-
stuff_int_list(value, static_cast<int>(DefaultDetailPreset::Num_detail_presets), RAW_INTEGER_TYPE);
181+
constexpr int num_detail_presets = static_cast<int>(DefaultDetailPreset::Num_detail_presets);
182+
int value[num_detail_presets];
183+
stuff_int_list(value, num_detail_presets, ParseLookupType::RAW_INTEGER_TYPE);
183184

184-
for (int i = 0; i < static_cast<int>(DefaultDetailPreset::Num_detail_presets); i++) {
185+
for (int i = 0; i < num_detail_presets; i++) {
185186

186187
if (value[i] < 0 || value[i] > MAX_DETAIL_VALUE) {
187188
error_display(0, "%i is an invalid detail level value!", value[i]);

code/hud/hudparse.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ void parse_hud_gauges_tbl(const char *filename)
390390

391391
if (optional_string_either("$Wireframe Color Override:", "$Wireframe Colour Override:") >= 0) {
392392
int rgb[3];
393-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
393+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
394394
gr_init_color(&Targetbox_color, rgb[0], rgb[1], rgb[2]);
395395
Targetbox_color_override = true;
396396
}
@@ -492,7 +492,7 @@ void parse_hud_gauges_tbl(const char *filename)
492492

493493
int shiparray[256];
494494

495-
n_ships = (int)stuff_int_list(shiparray, 256, SHIP_INFO_TYPE);
495+
n_ships = sz2i(stuff_int_list(shiparray, 256, ParseLookupType::SHIP_INFO_TYPE));
496496

497497
if (optional_string("$Load Retail Configuration:")) {
498498
stuff_boolean(&retail_config);
@@ -632,7 +632,7 @@ void parse_hud_gauges_tbl(const char *filename)
632632
required_string("$Base:");
633633

634634
// get the base width and height describing this HUD
635-
stuff_int_list(base_res, 2, RAW_INTEGER_TYPE);
635+
stuff_int_list(base_res, 2, ParseLookupType::RAW_INTEGER_TYPE);
636636

637637
// gauge scaling for this base res?
638638
if (optional_string("$Scale Gauges:")) {
@@ -665,7 +665,7 @@ void parse_hud_gauges_tbl(const char *filename)
665665
// check minimum resolution
666666
if (optional_string("$Min:")) {
667667
int min_res[2];
668-
stuff_int_list(min_res, 2, RAW_INTEGER_TYPE);
668+
stuff_int_list(min_res, 2, ParseLookupType::RAW_INTEGER_TYPE);
669669

670670
if (min_res[0] > gr_screen.max_w) {
671671
prune_config = true;
@@ -680,7 +680,7 @@ void parse_hud_gauges_tbl(const char *filename)
680680
// check maximum resolution
681681
if (optional_string("$Max:")) {
682682
int max_res[2];
683-
stuff_int_list(max_res, 2, RAW_INTEGER_TYPE);
683+
stuff_int_list(max_res, 2, ParseLookupType::RAW_INTEGER_TYPE);
684684

685685
if (max_res[0] < gr_screen.max_w) {
686686
prune_config = true;
@@ -3550,7 +3550,7 @@ void load_gauge_target_monitor(gauge_settings* settings)
35503550
}
35513551
if (optional_string_either("Wireframe Color:", "Wireframe Colour:") >= 0) {
35523552
int rgb[3];
3553-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
3553+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
35543554
gr_init_color(&wirecolor, rgb[0], rgb[1], rgb[2]);
35553555
wirecoloroverride = true;
35563556
}

code/iff_defs/iff_defs.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ void parse_iff_table(const char* filename)
291291
// Marks various stuff... like asteroids
292292
if ((optional_string("$Selection Color:")) || (optional_string("$Selection Colour:")))
293293
{
294-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
294+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
295295
IFF_COLOR_SELECTION = iff_init_color(rgb[0], rgb[1], rgb[2]);
296296
}
297297
else if (!Parsing_modular_table)
@@ -300,7 +300,7 @@ void parse_iff_table(const char* filename)
300300
// Marks the ship currently saying something
301301
if ((optional_string("$Message Color:")) || (optional_string("$Message Colour:")))
302302
{
303-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
303+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
304304
IFF_COLOR_MESSAGE = iff_init_color(rgb[0], rgb[1], rgb[2]);
305305
}
306306
else if (!Parsing_modular_table)
@@ -309,7 +309,7 @@ void parse_iff_table(const char* filename)
309309
// Marks the tagged ships
310310
if ((optional_string("$Tagged Color:")) || (optional_string("$Tagged Colour:")))
311311
{
312-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
312+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
313313
IFF_COLOR_TAGGED = iff_init_color(rgb[0], rgb[1], rgb[2]);
314314
}
315315
else if (!Parsing_modular_table)
@@ -350,7 +350,7 @@ void parse_iff_table(const char* filename)
350350
// Parse blip colours, their order is hardcoded.
351351
if ((optional_string("$Missile Blip Color:")) || (optional_string("$Missile Blip Colour:")))
352352
{
353-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
353+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
354354
for (i = 0; i < 3; i++)
355355
{
356356
Assert(rgb[i] >= 0 && rgb[i] <= 255);
@@ -361,7 +361,7 @@ void parse_iff_table(const char* filename)
361361

362362
if ((optional_string("$Navbuoy Blip Color:")) || (optional_string("$Navbuoy Blip Colour:")))
363363
{
364-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
364+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
365365
for (i = 0; i < 3; i++)
366366
{
367367
Assert(rgb[i] >= 0 && rgb[i] <= 255);
@@ -372,7 +372,7 @@ void parse_iff_table(const char* filename)
372372

373373
if ((optional_string("$Warping Blip Color:")) || (optional_string("$Warping Blip Colour:")))
374374
{
375-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
375+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
376376
for (i = 0; i < 3; i++)
377377
{
378378
Assert(rgb[i] >= 0 && rgb[i] <= 255);
@@ -383,7 +383,7 @@ void parse_iff_table(const char* filename)
383383

384384
if ((optional_string("$Node Blip Color:")) || (optional_string("$Node Blip Colour:")))
385385
{
386-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
386+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
387387
for (i = 0; i < 3; i++)
388388
{
389389
Assert(rgb[i] >= 0 && rgb[i] <= 255);
@@ -394,7 +394,7 @@ void parse_iff_table(const char* filename)
394394

395395
if ((optional_string("$Tagged Blip Color:")) || (optional_string("$Tagged Blip Colour:")))
396396
{
397-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
397+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
398398
for (i = 0; i < 3; i++)
399399
{
400400
Assert(rgb[i] >= 0 && rgb[i] <= 255);
@@ -488,13 +488,13 @@ void parse_iff_table(const char* filename)
488488

489489
// get the iff color
490490
if (optional_string_either("$Colour:", "$Color:") != -1) {
491-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
491+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
492492
iffp->color_index = iff_init_color(rgb[0], rgb[1], rgb[2]);
493493
}
494494

495495
// get the accessiblity iff color
496496
if (optional_string_either("$Accessibility Colour:", "$Accessibility Color:") != -1) {
497-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
497+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
498498
iffp->accessibility_color_index = iff_init_color(rgb[0], rgb[1], rgb[2]);
499499
}
500500

@@ -514,7 +514,7 @@ void parse_iff_table(const char* filename)
514514
required_string("As:");
515515

516516
// get color observed
517-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
517+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
518518
observed_color_table[cur_iff].back().color_index = iff_init_color(rgb[0], rgb[1], rgb[2]);
519519
}
520520

@@ -526,7 +526,7 @@ void parse_iff_table(const char* filename)
526526
required_string("As:");
527527

528528
// get color observed
529-
stuff_int_list(rgb, 3, RAW_INTEGER_TYPE);
529+
stuff_int_list(rgb, 3, ParseLookupType::RAW_INTEGER_TYPE);
530530
accessibility_observed_color_table[cur_iff].back().color_index = iff_init_color(rgb[0], rgb[1], rgb[2]);
531531
}
532532

code/lab/renderer/lab_renderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ void LabRenderer::useBackground(const SCP_string& mission_name) {
437437
if (optional_string("+Neb2Color:")) {
438438
nebula = true;
439439
int neb_colors[3];
440-
stuff_int_list(neb_colors, 3, RAW_INTEGER_TYPE);
440+
stuff_int_list(neb_colors, 3, ParseLookupType::RAW_INTEGER_TYPE);
441441
Neb2_fog_color[0] = (ubyte)neb_colors[0];
442442
Neb2_fog_color[1] = (ubyte)neb_colors[1];
443443
Neb2_fog_color[2] = (ubyte)neb_colors[2];

code/math/floating.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ inline bool fl_is_nan(float fl) {
3232
#define fl_abs(fl) fabsf(fl)
3333
#define i2fl(i) (static_cast<float>(i)) // int to float
3434
#define i2ch(i) (static_cast<char>(i)) // int to char
35+
#define i2sz(i) (static_cast<size_t>(i)) // int to size_t
3536
#define l2d(l) (static_cast<double>(l)) // long to double
3637
#define fl2i(fl) (static_cast<int>(fl)) // float to int
3738
#define ch2i(ch) (static_cast<int>(ch)) // char to int
39+
#define sz2i(sz) (static_cast<int>(sz)) // size_t to int
3840
#define d2l(d) (static_cast<long>(d)) // double to long
3941
#define fl2ir(fl) (static_cast<int>(fl + (((fl) < 0.0f) ? -0.5f : 0.5f))) // float to int, rounding
4042
#define d2lr(d) (static_cast<long>(d + (((d) < 0.0) ? -0.5 : 0.5))) // double to long, rounding

code/mission/missioncampaign.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ void mission_campaign_get_sw_info()
395395
int i, count, ship_list[MAX_SHIP_CLASSES], weapon_list[MAX_WEAPON_TYPES];
396396

397397
if (optional_string("+Starting Ships:")) {
398-
count = (int)stuff_int_list(ship_list, MAX_SHIP_CLASSES, SHIP_INFO_TYPE);
398+
count = sz2i(stuff_int_list(ship_list, MAX_SHIP_CLASSES, ParseLookupType::SHIP_INFO_TYPE));
399399

400400
// now set the array elements stating which ships we are allowed
401401
for (i = 0; i < count; i++) {
@@ -412,7 +412,7 @@ void mission_campaign_get_sw_info()
412412
}
413413

414414
if (optional_string("+Starting Weapons:")) {
415-
count = (int)stuff_int_list(weapon_list, MAX_WEAPON_TYPES, WEAPON_POOL_TYPE);
415+
count = sz2i(stuff_int_list(weapon_list, MAX_WEAPON_TYPES, ParseLookupType::WEAPON_POOL_TYPE));
416416

417417
// now set the array elements stating which ships we are allowed
418418
for (i = 0; i < count; i++) {

0 commit comments

Comments
 (0)