Ratsnest NODE stores its parents in a set instead of a list

It happens that the same parent is assigned multiple times, but then removed once, causing ratsnest artifacts.
This commit is contained in:
Maciej Suminski 2016-08-18 17:17:52 +02:00
parent 5f2099f0d2
commit 630d5e04fe
1 changed files with 10 additions and 4 deletions

View File

@ -46,6 +46,7 @@
#define TTL_USE_NODE_FLAG // Each node gets a flag (can be set to true or false)
#include <list>
#include <unordered_set>
#include <vector>
#include <iostream>
#include <fstream>
@ -106,7 +107,7 @@ protected:
int m_tag;
/// List of board items that share this node
std::list<const BOARD_CONNECTED_ITEM*> m_parents;
std::unordered_set<const BOARD_CONNECTED_ITEM*> m_parents;
/// Layers that are occupied by this node
LSET m_layers;
@ -184,15 +185,20 @@ public:
inline void AddParent( const BOARD_CONNECTED_ITEM* aParent )
{
m_parents.push_back( aParent );
m_parents.insert( aParent );
m_layers.reset(); // mark as needs updating
}
inline void RemoveParent( const BOARD_CONNECTED_ITEM* aParent )
{
m_parents.remove( aParent );
auto it = m_parents.find( aParent );
if( it != m_parents.end() )
{
m_parents.erase( it );
m_layers.reset(); // mark as needs updating
}
}
const LSET& GetLayers()
{