heavy restructuring with smart pointers, not finished
This commit is contained in:
+9
-9
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "connection.h"
|
||||
#include "edge.h"
|
||||
#include "datatypes.h"
|
||||
#include "graph-manager.h"
|
||||
#include "signal-manager.h"
|
||||
@@ -45,8 +45,8 @@ class AppState{
|
||||
void copyNodesAndConnections(Vec2D<float> position){
|
||||
auto copy_nodes_ids = gm.nodes | std::ranges::views::values | std::ranges::views::filter([](Node n){return n.copied;}) | std::views::transform([](Node n){return n.id;}) | std::ranges::to<std::vector<int>>();
|
||||
|
||||
std::vector<Connection> copy_connections;
|
||||
std::ranges::copy_if(gm.connections, std::back_inserter(copy_connections), [copy_nodes_ids](Connection c){return std::ranges::contains(copy_nodes_ids, c.v1) && std::ranges::contains(copy_nodes_ids, c.v2);});
|
||||
std::vector<Edge> copy_connections;
|
||||
std::ranges::copy_if(gm.connections, std::back_inserter(copy_connections), [copy_nodes_ids](Edge c){return std::ranges::contains(copy_nodes_ids, c.node_id_start) && std::ranges::contains(copy_nodes_ids, c.node_id_end);});
|
||||
|
||||
for(auto &n : copy_nodes_ids){
|
||||
int old_id = n;
|
||||
@@ -55,8 +55,8 @@ class AppState{
|
||||
gm.nodes[new_id].selected = true;
|
||||
|
||||
for(auto &c : copy_connections){
|
||||
if(c.v1 == old_id) c.v1 = new_id;
|
||||
if(c.v2 == old_id) c.v2 = new_id;
|
||||
if(c.node_id_start == old_id) c.node_id_start = new_id;
|
||||
if(c.node_id_end == old_id) c.node_id_end = new_id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,13 +76,13 @@ class AppState{
|
||||
erase_nodes_ids.push_back(e.id);
|
||||
}
|
||||
|
||||
auto erase_connections = gm.connections | std::ranges::views::filter([erase_nodes_ids](Connection c){ return std::ranges::contains(erase_nodes_ids, c.v1) || std::ranges::contains(erase_nodes_ids, c.v2);});
|
||||
auto erase_connections = gm.connections | std::ranges::views::filter([erase_nodes_ids](Edge c){ return std::ranges::contains(erase_nodes_ids, c.node_id_start) || std::ranges::contains(erase_nodes_ids, c.node_id_end);});
|
||||
|
||||
std::vector<int> adjacent_nodes_ids;
|
||||
|
||||
for(auto &c : erase_connections){
|
||||
if(!gm.nodes.at(c.v1).selected) adjacent_nodes_ids.push_back(c.v1);
|
||||
if(!gm.nodes.at(c.v2).selected) adjacent_nodes_ids.push_back(c.v2);
|
||||
if(!gm.nodes.at(c.node_id_start).selected) adjacent_nodes_ids.push_back(c.node_id_start);
|
||||
if(!gm.nodes.at(c.node_id_end).selected) adjacent_nodes_ids.push_back(c.node_id_end);
|
||||
}
|
||||
|
||||
auto reroute_signals = sm.signals | std::ranges::views::filter([erase_nodes_ids](Signal s){
|
||||
@@ -111,7 +111,7 @@ class AppState{
|
||||
}
|
||||
|
||||
for(auto &n : erase_nodes){
|
||||
std::erase_if(gm.connections, [n](Connection c){ return c.v1 == n.id || c.v2 == n.id;});
|
||||
std::erase_if(gm.connections, [n](Edge c){ return c.node_id_start == n.id || c.node_id_end == n.id;});
|
||||
}
|
||||
std::erase_if(gm.nodes, [](std::pair<int, Node> n){ return n.second.erase;});
|
||||
gm.keys.clear();
|
||||
|
||||
Reference in New Issue
Block a user