Skip to content

Commit a521b68

Browse files
committed
Make connection management private to base class
1 parent a54a8fe commit a521b68

File tree

3 files changed

+39
-31
lines changed

3 files changed

+39
-31
lines changed

src/LabSoundInterface.cpp

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ using std::unique_ptr;
1313
using std::string;
1414
using std::vector;
1515

16-
1716
struct NodeReverseLookup
1817
{
1918
map<string, ln_Pin> input_pin_map;
@@ -22,11 +21,8 @@ struct NodeReverseLookup
2221
};
2322

2423
map<ln_Node, NodeReverseLookup, cmp_ln_Node> g_node_reverse_lookups;
25-
2624
unique_ptr<lab::AudioContext> g_audio_context;
2725

28-
29-
3026
// Returns input, output
3127
inline std::pair<lab::AudioStreamConfig, lab::AudioStreamConfig> GetDefaultAudioDeviceConfiguration(const bool with_input = false)
3228
{
@@ -353,14 +349,14 @@ void LabSoundProvider::connect_bus_out_to_param_in(ln_Node output_node_id, ln_Pi
353349
// override
354350
void LabSoundProvider::disconnect(ln_Connection connection_id_)
355351
{
356-
auto conn = _connections.find(connection_id_);
357-
if (conn == _connections.end())
352+
lab::noodle::NoodleConnection const* const conn = find_connection(connection_id_);
353+
if (!conn)
358354
return;
359355

360-
ln_Node input_node_id = copy(conn->second.node_to);
361-
ln_Node output_node_id = copy(conn->second.node_from);
362-
ln_Pin input_pin = copy(conn->second.pin_to);
363-
ln_Pin output_pin = copy(conn->second.pin_from);
356+
ln_Node input_node_id = copy(conn->node_to);
357+
ln_Node output_node_id = copy(conn->node_from);
358+
ln_Pin input_pin = copy(conn->pin_to);
359+
ln_Pin output_pin = copy(conn->pin_from);
364360
if (input_node_id.valid && output_node_id.valid && input_pin.valid && output_pin.valid)
365361
{
366362
auto in_it = _audioNodes.find(input_node_id);
@@ -399,10 +395,6 @@ void LabSoundProvider::disconnect(ln_Connection connection_id_)
399395
}
400396
}
401397
}
402-
403-
//// @TODO this plumbing belongs in lab_noodle as it is audio-agnostic
404-
_connections.erase(conn);
405-
/// @TODO end
406398
return;
407399
}
408400

@@ -660,18 +652,6 @@ void LabSoundProvider::node_delete(ln_Node node_id)
660652
++i;
661653
}
662654
}
663-
664-
//// @TODO this plumbing belongs in lab_noodle as it is audio-agnostic
665-
// remove connections
666-
667-
for (auto i = _connections.begin(), last = _connections.end(); i != last; ) {
668-
if (i->second.node_from.id == node_id.id || i->second.node_to.id == node_id.id) {
669-
i = _connections.erase(i);
670-
}
671-
else {
672-
++i;
673-
}
674-
}
675655
/// @TODO end plumbing
676656

677657
auto reverse_it = g_node_reverse_lookups.find(node_id);

src/lab_noodle.cpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
namespace lab {
2121
namespace noodle {
2222

23-
2423
using namespace ImGui;
2524

2625
static const ImColor node_background_fill = ImColor(10, 20, 30, 128);
@@ -293,6 +292,17 @@ namespace noodle {
293292

294293
}
295294

295+
void delete_connections(ln_Node id) {
296+
for (auto i = provider._connections.begin(), last = provider._connections.end(); i != last; ) {
297+
if (i->second.node_from.id == id.id || i->second.node_to.id == id.id) {
298+
i = provider._connections.erase(i);
299+
}
300+
else {
301+
++i;
302+
}
303+
}
304+
}
305+
296306
void eval(EditState& edit)
297307
{
298308
switch (type)
@@ -540,7 +550,13 @@ namespace noodle {
540550

541551
case WorkType::DisconnectInFromOut:
542552
{
543-
provider.disconnect(ln_Connection{connection_id});
553+
auto id = ln_Connection{ connection_id };
554+
auto conn_it = provider._connections.find(id);
555+
if (conn_it != provider._connections.end())
556+
{
557+
provider.disconnect(id);
558+
provider._connections.erase(conn_it);
559+
}
544560
edit.incr_work_epoch();
545561
break;
546562
}
@@ -556,6 +572,7 @@ namespace noodle {
556572
for (auto en : cn.nodes)
557573
{
558574
provider.node_delete(en);
575+
delete_connections(en);
559576
}
560577
cn.nodes.clear();
561578
}
@@ -569,6 +586,7 @@ namespace noodle {
569586
gnl->second.parent_canvas->nodes.erase(it);
570587
}
571588
provider.node_delete(input_node);
589+
delete_connections(input_node);
572590
}
573591

574592
if (gnl != provider._nodeGraphics.end())
@@ -620,6 +638,7 @@ namespace noodle {
620638
}
621639
}
622640

641+
provider._connections.clear();
623642
provider._noodleNodes.clear();
624643
provider._nodeGraphics.clear();
625644
provider._pinGraphics.clear();

src/lab_noodle.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,19 +198,28 @@ namespace lab { namespace noodle {
198198
{
199199
friend struct Work;
200200
friend struct ProviderHarness;
201+
friend struct EditState;
201202
std::map<std::string, ln_Node> _name_to_entity;
203+
std::map<ln_Connection, NoodleConnection, cmp_ln_Connection> _connections;
202204

203205
public:
204206

207+
virtual ~Provider() = default;
208+
205209
std::map<ln_Node, CanvasGroup, cmp_ln_Node> _canvasNodes;
206210
std::map<ln_Node, NoodleNode, cmp_ln_Node> _noodleNodes;
207211
std::map<ln_Node, NoodleNodeGraphic, cmp_ln_Node> _nodeGraphics;
208-
std::map<ln_Connection, NoodleConnection, cmp_ln_Connection> _connections;
209212
std::map<ln_Pin, NoodlePin, cmp_ln_Pin> _noodlePins;
210213
std::map<ln_Pin, NoodlePinGraphic, cmp_ln_Pin> _pinGraphics;
211214

212-
virtual ~Provider() = default;
213-
215+
NoodleConnection const* const find_connection(ln_Connection c) {
216+
auto it = _connections.find(c);
217+
if (it == _connections.end())
218+
return nullptr;
219+
return &it->second;
220+
}
221+
222+
214223
inline ln_Node copy(ln_Node n)
215224
{
216225
return n;

0 commit comments

Comments
 (0)