Skip to content

Commit 9090da8

Browse files
committed
refactor CJumpNode to use SCP_vector
Jump nodes previously used SCP_list; refactor to use SCP_vector. Follow-up to #7431.
1 parent cf5c3b7 commit 9090da8

11 files changed

Lines changed: 69 additions & 69 deletions

File tree

code/hud/hudtargetbox.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,13 +1322,11 @@ void HudGaugeTargetBox::renderTargetJumpNode(object *target_objp)
13221322
matrix camera_orient = IDENTITY_MATRIX;
13231323
float factor, dist;
13241324
int hx = 0, hy = 0, w, h;
1325-
SCP_list<CJumpNode>::iterator jnp;
1326-
1327-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
1328-
if(jnp->GetSCPObject() != target_objp)
1325+
for (auto &jnp : Jump_nodes) {
1326+
if(jnp.GetSCPObject() != target_objp)
13291327
continue;
1330-
1331-
if ( jnp->IsHidden() ) {
1328+
1329+
if ( jnp.IsHidden() ) {
13321330
set_target_objnum( Player_ai, -1 );
13331331
return;
13341332
}
@@ -1357,7 +1355,7 @@ void HudGaugeTargetBox::renderTargetJumpNode(object *target_objp)
13571355
gr_stencil_set(GR_STENCIL_READ);
13581356
}
13591357

1360-
jnp->Render( &obj_pos );
1358+
jnp.Render( &obj_pos );
13611359

13621360
if ( Monitor_mask >= 0 ) {
13631361
gr_stencil_set(GR_STENCIL_NONE);
@@ -1370,7 +1368,7 @@ void HudGaugeTargetBox::renderTargetJumpNode(object *target_objp)
13701368
renderTargetIntegrity(1);
13711369
setGaugeColor();
13721370

1373-
renderString(position[0] + Name_offsets[0], position[1] + Name_offsets[1], EG_TBOX_NAME, jnp->GetDisplayName());
1371+
renderString(position[0] + Name_offsets[0], position[1] + Name_offsets[1], EG_TBOX_NAME, jnp.GetDisplayName());
13741372

13751373
dist = Player_ai->current_target_distance;
13761374
if ( Hud_unit_multiplier > 0.0f ) { // use a different displayed distance scale

code/jumpnode/jumpnode.cpp

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "model/model.h"
1414
#include "model/modelrender.h"
1515

16-
SCP_list<CJumpNode> Jump_nodes;
16+
SCP_vector<CJumpNode> Jump_nodes;
1717

1818
/**
1919
* Constructor for CJumpNode class, default
@@ -473,16 +473,32 @@ void CJumpNode::Render(model_draw_list *scene, const vec3d *pos, const vec3d *vi
473473
CJumpNode *jumpnode_get_by_name(const char* name)
474474
{
475475
Assert(name != NULL);
476-
SCP_list<CJumpNode>::iterator jnp;
477476

478-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
479-
if(!stricmp(jnp->GetName(), name))
480-
return &(*jnp);
477+
for (auto &jnp : Jump_nodes) {
478+
if(!stricmp(jnp.GetName(), name))
479+
return &jnp;
481480
}
482481

483482
return NULL;
484483
}
485484

485+
/**
486+
* Get jump node index by given name
487+
*
488+
* @param name Name of jump node
489+
* @return Jump node index
490+
*/
491+
int jumpnode_lookup(const char *name)
492+
{
493+
Assert(name != nullptr);
494+
495+
for (size_t i = 0; i < Jump_nodes.size(); i++)
496+
if (!stricmp(Jump_nodes[i].GetName(), name))
497+
return sz2i(i);
498+
499+
return -1;
500+
}
501+
486502
/**
487503
* Get jump node object by the object number
488504
*
@@ -528,17 +544,15 @@ CJumpNode *jumpnode_get_by_objp(const object *objp)
528544
CJumpNode *jumpnode_get_which_in(const object *objp)
529545
{
530546
Assert(objp != NULL);
531-
SCP_list<CJumpNode>::iterator jnp;
532-
float radius, dist;
533547

534-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
535-
if(jnp->GetModelNumber() < 0)
548+
for (auto &jnp : Jump_nodes) {
549+
if(jnp.GetModelNumber() < 0)
536550
continue;
537551

538-
radius = jnp->GetRadius();
539-
dist = vm_vec_dist( &objp->pos, &jnp->GetSCPObject()->pos );
552+
float radius = jnp.GetRadius();
553+
float dist = vm_vec_dist( &objp->pos, &jnp.GetSCPObject()->pos );
540554
if ( dist <= radius ) {
541-
return &(*jnp);
555+
return &jnp;
542556
}
543557
}
544558

@@ -552,10 +566,8 @@ CJumpNode *jumpnode_get_which_in(const object *objp)
552566
*/
553567
void jumpnode_render_all()
554568
{
555-
SCP_list<CJumpNode>::iterator jnp;
556-
557-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
558-
jnp->Render(&jnp->GetSCPObject()->pos);
569+
for (auto &jnp : Jump_nodes) {
570+
jnp.Render(&jnp.GetSCPObject()->pos);
559571
}
560572
}
561573

code/jumpnode/jumpnode.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,11 @@ class CJumpNode
9494
};
9595

9696
//-----Globals------
97-
extern SCP_list<CJumpNode> Jump_nodes;
97+
extern SCP_vector<CJumpNode> Jump_nodes;
9898

9999
//-----Functions-----
100100
CJumpNode *jumpnode_get_by_name(const char *name);
101+
int jumpnode_lookup(const char *name);
101102
CJumpNode *jumpnode_get_by_objnum(int objnum);
102103
CJumpNode *jumpnode_get_by_objp(const object *objp);
103104
CJumpNode *jumpnode_get_which_in(const object *objp);

code/missioneditor/missionsave.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4791,68 +4791,67 @@ int Fred_mission_save::save_waypoints()
47914791
parse_comments(2);
47924792
fout("\t\t;! %d lists total\n", Waypoint_lists.size());
47934793

4794-
SCP_list<CJumpNode>::iterator jnp;
4795-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
4794+
for (auto &jnp : Jump_nodes) {
47964795
required_string_fred("$Jump Node:", "$Jump Node Name:");
47974796
parse_comments(2);
4798-
save_vector(jnp->GetSCPObject()->pos);
4797+
save_vector(jnp.GetSCPObject()->pos);
47994798

48004799
required_string_fred("$Jump Node Name:", "$Jump Node:");
48014800
parse_comments();
4802-
fout(" %s", jnp->GetName());
4801+
fout(" %s", jnp.GetName());
48034802

48044803
if (save_config.save_format != MissionFormat::RETAIL) {
48054804

48064805
// The display name is only written if there was one at the start to avoid introducing inconsistencies
4807-
if (save_config.always_save_display_names || jnp->HasDisplayName()) {
4806+
if (save_config.always_save_display_names || jnp.HasDisplayName()) {
48084807
char truncated_name[NAME_LENGTH];
4809-
strcpy_s(truncated_name, jnp->GetName());
4808+
strcpy_s(truncated_name, jnp.GetName());
48104809
end_string_at_first_hash_symbol(truncated_name);
48114810

48124811
// Also, the display name is not written if it's just the truncation of the name at the hash
4813-
if (save_config.always_save_display_names || strcmp(jnp->GetDisplayName(), truncated_name) != 0) {
4812+
if (save_config.always_save_display_names || strcmp(jnp.GetDisplayName(), truncated_name) != 0) {
48144813
if (optional_string_fred("+Display Name:", "$Jump Node:")) {
48154814
parse_comments();
48164815
} else {
48174816
fout("\n+Display Name:");
48184817
}
48194818

4820-
fout_ext("", "%s", jnp->GetDisplayName());
4819+
fout_ext("", "%s", jnp.GetDisplayName());
48214820
}
48224821
}
48234822

4824-
if (jnp->IsSpecialModel()) {
4823+
if (jnp.IsSpecialModel()) {
48254824
if (optional_string_fred("+Model File:", "$Jump Node:")) {
48264825
parse_comments();
48274826
} else {
48284827
fout("\n+Model File:");
48294828
}
48304829

4831-
int model = jnp->GetModelNumber();
4830+
int model = jnp.GetModelNumber();
48324831
polymodel* pm = model_get(model);
48334832
fout(" %s", pm->filename);
48344833
}
48354834

4836-
if (jnp->IsColored()) {
4835+
if (jnp.IsColored()) {
48374836
if (optional_string_fred("+Alphacolor:", "$Jump Node:")) {
48384837
parse_comments();
48394838
} else {
48404839
fout("\n+Alphacolor:");
48414840
}
48424841

4843-
const auto& jn_color = jnp->GetColor();
4842+
const auto& jn_color = jnp.GetColor();
48444843
fout(" %u %u %u %u", jn_color.red, jn_color.green, jn_color.blue, jn_color.alpha);
48454844
}
48464845

48474846
int hidden_is_there = optional_string_fred("+Hidden:", "$Jump Node:");
48484847
if (hidden_is_there)
48494848
parse_comments();
48504849

4851-
if (hidden_is_there || jnp->IsHidden()) {
4850+
if (hidden_is_there || jnp.IsHidden()) {
48524851
if (!hidden_is_there)
48534852
fout("\n+Hidden:");
48544853

4855-
if (jnp->IsHidden())
4854+
if (jnp.IsHidden())
48564855
fout(" %s", "true");
48574856
else
48584857
fout(" %s", "false");

code/object/object.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1941,12 +1941,12 @@ void obj_queue_render(object* obj, model_draw_list* scene)
19411941
asteroid_render(obj, scene);
19421942
break;
19431943
case OBJ_JUMP_NODE:
1944-
for ( SCP_list<CJumpNode>::iterator jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp ) {
1945-
if ( jnp->GetSCPObject() != obj ) {
1944+
for ( auto &jnp : Jump_nodes ) {
1945+
if ( jnp.GetSCPObject() != obj ) {
19461946
continue;
19471947
}
19481948

1949-
jnp->Render(scene, &obj->pos, &Eye_position);
1949+
jnp.Render(scene, &obj->pos, &Eye_position);
19501950
}
19511951
break;
19521952
case OBJ_WAYPOINT:

fred2/dumpstats.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -395,9 +395,8 @@ void DumpStats::get_object_stats(CString &buffer)
395395
// Jumpnodes
396396
buffer += "\r\nJUMPNODES\r\n";
397397

398-
SCP_list<CJumpNode>::iterator jnp;
399-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
400-
temp.Format("\tJumpnode: %s\r\n", jnp->GetName());
398+
for (auto &jnp : Jump_nodes) {
399+
temp.Format("\tJumpnode: %s\r\n", jnp.GetName());
401400
buffer += temp;
402401
}
403402

fred2/jumpnodedlg.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,20 +86,18 @@ BOOL jumpnode_dlg::Create()
8686
void jumpnode_dlg::OnInitMenu(CMenu* pMenu)
8787
{
8888
int i;
89-
SCP_list<CJumpNode>::iterator jnp;
9089
CMenu *m;
9190

9291
m = pMenu->GetSubMenu(0);
9392
clear_menu(m);
9493

95-
i = 0;
96-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
97-
m->AppendMenu(MF_ENABLED | MF_STRING, ID_JUMP_NODE_MENU + i, jnp->GetName());
98-
if (jnp->GetSCPObjectNumber() == cur_object_index) {
94+
i = 0;
95+
for (auto &jnp : Jump_nodes) {
96+
m->AppendMenu(MF_ENABLED | MF_STRING, ID_JUMP_NODE_MENU + i, jnp.GetName());
97+
if (jnp.GetSCPObjectNumber() == cur_object_index) {
9998
m->CheckMenuItem(ID_JUMP_NODE_MENU + i, MF_BYCOMMAND | MF_CHECKED);
10099
}
101100
i++;
102-
103101
}
104102

105103
m->DeleteMenu(ID_PLACEHOLDER, MF_BYCOMMAND);

fred2/management.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111

1212
#include "stdafx.h"
13+
#include <algorithm>
1314
#include "FRED.h"
1415
#include "MainFrm.h"
1516
#include "FREDDoc.h"
@@ -1229,7 +1230,6 @@ int common_object_delete(int obj)
12291230
const char *name;
12301231
int i, z, r, type;
12311232
object *objp;
1232-
SCP_list<CJumpNode>::iterator jnp;
12331233

12341234
type = Objects[obj].type;
12351235
if (type == OBJ_START) {
@@ -1365,15 +1365,13 @@ int common_object_delete(int obj)
13651365
return 0;
13661366

13671367
} else if (type == OBJ_JUMP_NODE) {
1368-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
1369-
if(jnp->GetSCPObject() == &Objects[obj])
1370-
break;
1371-
}
1368+
auto jnp = std::find_if(Jump_nodes.begin(), Jump_nodes.end(),
1369+
[obj](const CJumpNode &jn) { return jn.GetSCPObject() == &Objects[obj]; });
13721370

13731371
// come on, WMC, we don't want to call obj_delete twice...
13741372
// fool the destructor into not calling obj_delete yet
13751373
Objects[obj].type = OBJ_NONE;
1376-
1374+
13771375
// now call the destructor
13781376
if (jnp != Jump_nodes.end())
13791377
Jump_nodes.erase(jnp);

fred2/sexp_tree.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7396,9 +7396,8 @@ sexp_list_item *sexp_tree::get_listing_opf_jump_nodes()
73967396
{
73977397
sexp_list_item head;
73987398

7399-
SCP_list<CJumpNode>::iterator jnp;
7400-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
7401-
head.add_data( jnp->GetName());
7399+
for (auto &jnp : Jump_nodes) {
7400+
head.add_data( jnp.GetName());
74027401
}
74037402

74047403
return head.next;

qtfred/src/mission/Editor.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "Editor.h"
22

3+
#include <algorithm>
34
#include <array>
45
#include <vector>
56
#include <stdexcept>
@@ -1062,7 +1063,6 @@ int Editor::common_object_delete(int obj) {
10621063
const char *name;
10631064
int i, z, r, type;
10641065
object* objp;
1065-
SCP_list<CJumpNode>::iterator jnp;
10661066

10671067
type = Objects[obj].type;
10681068
if (type == OBJ_START) {
@@ -1209,11 +1209,8 @@ int Editor::common_object_delete(int obj) {
12091209
return 0;
12101210

12111211
} else if (type == OBJ_JUMP_NODE) {
1212-
for (jnp = Jump_nodes.begin(); jnp != Jump_nodes.end(); ++jnp) {
1213-
if (jnp->GetSCPObject() == &Objects[obj]) {
1214-
break;
1215-
}
1216-
}
1212+
auto jnp = std::find_if(Jump_nodes.begin(), Jump_nodes.end(),
1213+
[obj](const CJumpNode &jn) { return jn.GetSCPObject() == &Objects[obj]; });
12171214

12181215
// come on, WMC, we don't want to call obj_delete twice...
12191216
// fool the destructor into not calling obj_delete yet

0 commit comments

Comments
 (0)