pcbnew: Adding copy constructors to PNS items
Adding safe copy constructors to PNS items including assignment check and copy operations
This commit is contained in:
parent
e1fe3c7ed4
commit
41e4bc4d9f
|
@ -84,6 +84,18 @@ public:
|
|||
SHAPE( SH_LINE_CHAIN ), m_points( aShape.m_points ), m_closed( aShape.m_closed )
|
||||
{}
|
||||
|
||||
SHAPE_LINE_CHAIN& operator=( const SHAPE_LINE_CHAIN& aShape )
|
||||
{
|
||||
if( this == &aShape )
|
||||
return *this;
|
||||
|
||||
m_type = SH_LINE_CHAIN;
|
||||
m_points = aShape.m_points;
|
||||
m_closed = aShape.m_closed;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* Initializes a 2-point line chain (a single segment)
|
||||
|
@ -376,14 +388,8 @@ public:
|
|||
*/
|
||||
void Append( const VECTOR2I& aP, bool aAllowDuplication = false )
|
||||
{
|
||||
if( m_points.size() == 0 )
|
||||
m_bbox = BOX2I( aP, VECTOR2I( 0, 0 ) );
|
||||
|
||||
if( m_points.size() == 0 || aAllowDuplication || CPoint( -1 ) != aP )
|
||||
{
|
||||
m_points.push_back( aP );
|
||||
m_bbox.Merge( aP );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -401,14 +407,12 @@ public:
|
|||
{
|
||||
const VECTOR2I p = aOtherLine.CPoint( 0 );
|
||||
m_points.push_back( p );
|
||||
m_bbox.Merge( p );
|
||||
}
|
||||
|
||||
for( int i = 1; i < aOtherLine.PointCount(); i++ )
|
||||
{
|
||||
const VECTOR2I p = aOtherLine.CPoint( i );
|
||||
m_points.push_back( p );
|
||||
m_bbox.Merge( p );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -673,9 +677,6 @@ private:
|
|||
|
||||
/// is the line chain closed?
|
||||
bool m_closed;
|
||||
|
||||
/// cached bounding box
|
||||
BOX2I m_bbox;
|
||||
};
|
||||
|
||||
#endif // __SHAPE_LINE_CHAIN
|
||||
|
|
|
@ -40,6 +40,18 @@ public:
|
|||
SHAPE_SEGMENT( const SEG& aSeg, int aWidth = 0 ):
|
||||
SHAPE( SH_SEGMENT ), m_seg( aSeg ), m_width( aWidth ) {};
|
||||
|
||||
SHAPE_SEGMENT& operator=( const SHAPE_SEGMENT& aOther )
|
||||
{
|
||||
if( this == &aOther )
|
||||
return *this;
|
||||
|
||||
SHAPE::operator=( aOther );
|
||||
m_seg = aOther.m_seg;
|
||||
m_width = aOther.m_width;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
~SHAPE_SEGMENT() {};
|
||||
|
||||
SHAPE* Clone() const override
|
||||
|
|
|
@ -92,6 +92,24 @@ public:
|
|||
m_routable = aOther.m_routable;
|
||||
}
|
||||
|
||||
ITEM& operator=( const ITEM& aOther )
|
||||
{
|
||||
if( this == &aOther )
|
||||
return *this;
|
||||
|
||||
m_layers = aOther.m_layers;
|
||||
m_net = aOther.m_net;
|
||||
m_movable = aOther.m_movable;
|
||||
m_kind = aOther.m_kind;
|
||||
m_parent = aOther.m_parent;
|
||||
m_owner = NULL;
|
||||
m_marker = aOther.m_marker;
|
||||
m_rank = aOther.m_rank;
|
||||
m_routable = aOther.m_routable;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
virtual ~ITEM();
|
||||
|
||||
/**
|
||||
|
|
|
@ -82,14 +82,26 @@ public:
|
|||
JOINT( const JOINT& aB ) :
|
||||
ITEM( JOINT_T )
|
||||
{
|
||||
m_layers = aB.m_layers;
|
||||
m_tag.pos = aB.m_tag.pos;
|
||||
m_tag.net = aB.m_tag.net;
|
||||
m_linkedItems = aB.m_linkedItems;
|
||||
m_layers = aB.m_layers;
|
||||
m_locked = aB.m_locked;
|
||||
}
|
||||
|
||||
JOINT& operator=( const JOINT& aOther )
|
||||
{
|
||||
if( this == &aOther )
|
||||
return *this;
|
||||
|
||||
ITEM::operator =( aOther );
|
||||
m_tag.pos = aOther.m_tag.pos;
|
||||
m_tag.net = aOther.m_tag.net;
|
||||
m_linkedItems = aOther.m_linkedItems;
|
||||
m_locked = aOther.m_locked;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
ITEM* Clone( ) const override
|
||||
{
|
||||
assert( false );
|
||||
|
|
|
@ -57,16 +57,15 @@ LINE::~LINE()
|
|||
|
||||
LINE& LINE::operator=( const LINE& aOther )
|
||||
{
|
||||
if( this == &aOther )
|
||||
return *this;
|
||||
|
||||
ITEM::operator =( aOther );
|
||||
|
||||
m_line = aOther.m_line;
|
||||
m_width = aOther.m_width;
|
||||
m_net = aOther.m_net;
|
||||
m_movable = aOther.m_movable;
|
||||
m_layers = aOther.m_layers;
|
||||
m_via = aOther.m_via;
|
||||
m_hasVia = aOther.m_hasVia;
|
||||
m_marker = aOther.m_marker;
|
||||
m_rank = aOther.m_rank;
|
||||
|
||||
copyLinks( &aOther );
|
||||
|
||||
return *this;
|
||||
|
|
|
@ -58,6 +58,16 @@ public:
|
|||
m_rank = aParentLine.Rank();
|
||||
}
|
||||
|
||||
SEGMENT& operator=( const SEGMENT& aOther )
|
||||
{
|
||||
if( this == &aOther )
|
||||
return *this;
|
||||
|
||||
ITEM::operator =( aOther );
|
||||
m_seg = aOther.m_seg;
|
||||
return *this;
|
||||
}
|
||||
|
||||
static inline bool ClassOf( const ITEM* aItem )
|
||||
{
|
||||
return aItem && SEGMENT_T == aItem->Kind();
|
||||
|
|
|
@ -52,6 +52,18 @@ public:
|
|||
m_pos = aSolid.m_pos;
|
||||
}
|
||||
|
||||
SOLID& operator=( const SOLID& aOther )
|
||||
{
|
||||
if( this == &aOther )
|
||||
return *this;
|
||||
|
||||
ITEM::operator =( aOther );
|
||||
m_shape = aOther.m_shape->Clone();
|
||||
m_pos = aOther.m_pos;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
static inline bool ClassOf( const ITEM* aItem )
|
||||
{
|
||||
return aItem && SOLID_T == aItem->Kind();
|
||||
|
|
|
@ -79,6 +79,21 @@ public:
|
|||
m_viaType = aB.m_viaType;
|
||||
}
|
||||
|
||||
VIA& operator=( const VIA& aOther )
|
||||
{
|
||||
if( this == &aOther )
|
||||
return *this;
|
||||
|
||||
ITEM::operator =( aOther );
|
||||
m_pos = aOther.m_pos;
|
||||
m_diameter = aOther.m_diameter;
|
||||
m_shape = SHAPE_CIRCLE( m_pos, m_diameter / 2 );
|
||||
m_drill = aOther.m_drill;
|
||||
m_viaType = aOther.m_viaType;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
static inline bool ClassOf( const ITEM* aItem )
|
||||
{
|
||||
return aItem && VIA_T == aItem->Kind();
|
||||
|
|
Loading…
Reference in New Issue