From 107ef8f1025fd5ce02d8888b63f7ad81b048b070 Mon Sep 17 00:00:00 2001 From: Dick Hollenbeck Date: Sun, 19 Feb 2012 22:33:54 -0600 Subject: [PATCH] see CHANGELOG.txt --- CHANGELOG.txt | 15 +++++++++++++++ gerbview/class_gerber_draw_item.h | 11 ++--------- include/base_struct.h | 13 ++++++++----- include/class_board_item.h | 6 ++++++ pcbnew/class_board.h | 6 ------ pcbnew/class_dimension.h | 2 +- pcbnew/class_drawsegment.h | 2 +- pcbnew/class_marker_pcb.h | 8 ++------ pcbnew/class_mire.h | 2 +- pcbnew/class_module.h | 4 ++-- pcbnew/class_pad.h | 4 ++-- pcbnew/class_pcb_text.h | 4 ++-- pcbnew/class_text_mod.h | 4 ++-- pcbnew/class_track.h | 12 ++++-------- pcbnew/class_zone.cpp | 6 ++++-- pcbnew/class_zone.h | 8 ++++---- pcbnew/drc_marker_functions.cpp | 12 +++++++----- pcbnew/move-drag_pads.cpp | 3 +++ polygon/PolyLine.cpp | 12 ------------ polygon/PolyLine.h | 17 ++++++++++++----- 20 files changed, 78 insertions(+), 73 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 3ae4afc15e..b1f5a72a6b 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,21 @@ KiCad ChangeLog 2012 Please add newer entries at the top, list the date and your name with email address. +2012-Feb-19 UPDATE Dick Hollenbeck +================================================================================ +++pcbnew + * Remove virtual BOARD_ITEM::{Get,Set}Position() which in turn means all + derived classes' implementations of these functions become non virtual and + can be truly _inlined_ for speed. GetPosition() in derived classes were also + all changed to return const wxPoint&, that is, a reference rather than a + full copy of the position wxPoint. There was no need for polymorphism in + {Get,Set}Position() since we never call these functions via generic pointer. + * Remove BOARD::{Get,Set}Position() since they were only there to satisfy + the pure virtuals established BOARD_ITEM, which are now gone. + * Added const wxPoint& CPolyLine::GetPos(), made CPolyLine::Get{X,Y}() inline. + * Derive CPolyPt from wxPoint so we can return const wxPoint& fromt GetPos(). + + 2012-Feb-19 UPDATE Dick Hollenbeck ================================================================================ ++pcbnew diff --git a/gerbview/class_gerber_draw_item.h b/gerbview/class_gerber_draw_item.h index 08239c0684..cdb919b673 100644 --- a/gerbview/class_gerber_draw_item.h +++ b/gerbview/class_gerber_draw_item.h @@ -167,15 +167,8 @@ public: * @return const wxPoint& - The position of this object. * This function exists mainly to satisfy the virtual GetPosition() in parent class */ - const wxPoint GetPosition() const - { - return m_Start; // it had to be start or end. - } - - void SetPosition( const wxPoint& aPos ) - { - m_Start = aPos; - } + const wxPoint& GetPosition() const { return m_Start; } + void SetPosition( const wxPoint& aPos ) { m_Start = aPos; } /** * Function GetABPosition diff --git a/include/base_struct.h b/include/base_struct.h index 75498c9369..368da50827 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -65,7 +65,7 @@ enum KICAD_T { PCB_MODULE_TEXT_T, ///< class TEXTE_MODULE, text in a footprint PCB_MODULE_EDGE_T, ///< class EDGE_MODULE, a footprint edge PCB_TRACE_T, ///< class TRACKE, a track segment (segment on a copper layer) - PCB_VIA_T, ///< class VIA, a via (like a track segment on a copper layer) + PCB_VIA_T, ///< class SEGVIA, a via (like a track segment on a copper layer) PCB_ZONE_T, ///< class SEGZONE, a segment used to fill a zone area (segment on a ///< copper layer) PCB_MARKER_T, ///< class MARKER_PCB, a marker used to show something @@ -239,16 +239,19 @@ public: */ bool Contains( const EDA_RECT& aRect ) const; - wxSize GetSize() const { return m_Size; } + const wxSize& GetSize() const { return m_Size; } int GetX() const { return m_Pos.x; } int GetY() const { return m_Pos.y; } - wxPoint GetOrigin() const { return m_Pos; } - wxPoint GetPosition() const { return m_Pos; } - wxPoint GetEnd() const { return wxPoint( GetRight(), GetBottom() ); } + + const wxPoint& GetOrigin() const { return m_Pos; } + const wxPoint& GetPosition() const { return m_Pos; } + const wxPoint GetEnd() const { return wxPoint( GetRight(), GetBottom() ); } + int GetWidth() const { return m_Size.x; } int GetHeight() const { return m_Size.y; } int GetRight() const { return m_Pos.x + m_Size.x; } int GetBottom() const { return m_Pos.y + m_Size.y; } + void SetOrigin( const wxPoint& pos ) { m_Pos = pos; } void SetOrigin( int x, int y ) { m_Pos.x = x; m_Pos.y = y; } void SetSize( const wxSize& size ) { m_Size = size; } diff --git a/include/class_board_item.h b/include/class_board_item.h index d1dd6d133c..718206be7c 100644 --- a/include/class_board_item.h +++ b/include/class_board_item.h @@ -94,6 +94,11 @@ public: BOARD_ITEM* Back() const { return (BOARD_ITEM*) Pback; } BOARD_ITEM* GetParent() const { return (BOARD_ITEM*) m_Parent; } +#if 0 + // DICK: there is no value in having a polymorphic {Get,Set}Position(). We never + // call GetPosition() using a generic pointer, and the virtual is slower and + // can never be inlined. + /** * Function GetPosition * returns the position of this object. @@ -107,6 +112,7 @@ public: * @param aPos is the new position of this object */ virtual void SetPosition( const wxPoint& aPos ) = 0; +#endif /** * Function GetLayer diff --git a/pcbnew/class_board.h b/pcbnew/class_board.h index 07558423e0..e3b8769654 100644 --- a/pcbnew/class_board.h +++ b/pcbnew/class_board.h @@ -268,12 +268,6 @@ public: */ static wxString GetDefaultLayerName( int aLayerNumber ); - const wxPoint GetPosition() const // overload - { - return wxPoint( 0, 0 ); // dummy for pure virtual - } - void SetPosition( const wxPoint& aPos ) {} // overload - /** * Function Add * adds the given item to this BOARD and takes ownership of its memory. diff --git a/pcbnew/class_dimension.h b/pcbnew/class_dimension.h index 11e2c63dd3..c5c7cb39bc 100644 --- a/pcbnew/class_dimension.h +++ b/pcbnew/class_dimension.h @@ -65,7 +65,7 @@ public: ~DIMENSION(); - const wxPoint GetPosition() const { return m_Pos; } + const wxPoint& GetPosition() const { return m_Pos; } void SetPosition( const wxPoint& aPos ); // override, sets m_Text's position too diff --git a/pcbnew/class_drawsegment.h b/pcbnew/class_drawsegment.h index 3a2ed0ce63..0eb613be6f 100644 --- a/pcbnew/class_drawsegment.h +++ b/pcbnew/class_drawsegment.h @@ -94,7 +94,7 @@ public: const wxPoint& GetBezControl2() const { return m_BezierC2; } void SetPosition( const wxPoint& aPos ) { m_Start = aPos; } // override - const wxPoint GetPosition() const { return m_Start; } // override + const wxPoint& GetPosition() const { return m_Start; } // override /** * Function GetStart diff --git a/pcbnew/class_marker_pcb.h b/pcbnew/class_marker_pcb.h index d445f062b5..364c712ce1 100644 --- a/pcbnew/class_marker_pcb.h +++ b/pcbnew/class_marker_pcb.h @@ -77,12 +77,8 @@ public: DrawMarker( aPanel, aDC, aDrawMode, aOffset ); } - const wxPoint GetPosition() const - { - return m_Pos; - } - - void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; } + const wxPoint& GetPosition() const { return m_Pos; } + void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; } /** * Function HitTest diff --git a/pcbnew/class_mire.h b/pcbnew/class_mire.h index 77f1d06d52..4a3189ca7a 100644 --- a/pcbnew/class_mire.h +++ b/pcbnew/class_mire.h @@ -61,7 +61,7 @@ public: PCB_TARGET* Back() const { return (PCB_TARGET*) Pnext; } void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; } // override - const wxPoint GetPosition() const { return m_Pos; } // override + const wxPoint& GetPosition() const { return m_Pos; } // override void SetShape( int aShape ) { m_Shape = aShape; } int GetShape() const { return m_Shape; } diff --git a/pcbnew/class_module.h b/pcbnew/class_module.h index e47e1281a6..293bb43f0b 100644 --- a/pcbnew/class_module.h +++ b/pcbnew/class_module.h @@ -163,8 +163,8 @@ public: */ EDA_RECT GetBoundingBox() const; - void SetPosition( const wxPoint& aPos ); // overload - const wxPoint GetPosition() const { return m_Pos; } // overload + void SetPosition( const wxPoint& aPos ); // was overload + const wxPoint& GetPosition() const { return m_Pos; } // was overload void SetOrientation( double newangle ); double GetOrientation() const { return m_Orient; } diff --git a/pcbnew/class_pad.h b/pcbnew/class_pad.h index 5fe951021a..7ca1c71d18 100644 --- a/pcbnew/class_pad.h +++ b/pcbnew/class_pad.h @@ -140,8 +140,8 @@ public: PAD_SHAPE_T GetShape() const { return m_PadShape; } void SetShape( PAD_SHAPE_T aShape ) { m_PadShape = aShape; m_boundingRadius = -1; } - void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; } // overload - const wxPoint GetPosition() const { return m_Pos; } // overload + void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; } // was overload + const wxPoint& GetPosition() const { return m_Pos; } // was overload void SetY( int y ) { m_Pos.y = y; } void SetX( int x ) { m_Pos.x = x; } diff --git a/pcbnew/class_pcb_text.h b/pcbnew/class_pcb_text.h index b85d78534e..10329dff8a 100644 --- a/pcbnew/class_pcb_text.h +++ b/pcbnew/class_pcb_text.h @@ -47,12 +47,12 @@ public: ~TEXTE_PCB(); - const wxPoint GetPosition() const // is an overload + const wxPoint& GetPosition() const // was overload { return m_Pos; // within EDA_TEXT } - void SetPosition( const wxPoint& aPos ) // is an overload + void SetPosition( const wxPoint& aPos ) // was overload { m_Pos = aPos; // within EDA_TEXT } diff --git a/pcbnew/class_text_mod.h b/pcbnew/class_text_mod.h index ecafe079c0..93d30c8a68 100644 --- a/pcbnew/class_text_mod.h +++ b/pcbnew/class_text_mod.h @@ -76,12 +76,12 @@ public: TEXTE_MODULE* Back() const { return (TEXTE_MODULE*) Pback; } - void SetPosition( const wxPoint& aPos ) // overload a base + void SetPosition( const wxPoint& aPos ) // was overload { m_Pos = aPos; // in EDA_TEXT } - const wxPoint GetPosition() const // overload a base + const wxPoint& GetPosition() const // was overload { return m_Pos; // from EDA_TEXT } diff --git a/pcbnew/class_track.h b/pcbnew/class_track.h index 78526604e2..ecdc9bb08e 100644 --- a/pcbnew/class_track.h +++ b/pcbnew/class_track.h @@ -125,8 +125,8 @@ public: */ virtual void Flip( const wxPoint& aCentre ); - void SetPosition( const wxPoint& aPos ) { m_Start = aPos; } // overload - const wxPoint GetPosition() const { return m_Start; } // overload + void SetPosition( const wxPoint& aPos ) { m_Start = aPos; } // was overload + const wxPoint& GetPosition() const { return m_Start; } // was overload void SetWidth( int aWidth ) { m_Width = aWidth; } int GetWidth() const { return m_Width; } @@ -479,12 +479,8 @@ public: */ void ReturnLayerPair( int* top_layer, int* bottom_layer ) const; - const wxPoint GetPosition() const // overload - { - return m_Start; - } - - void SetPosition( const wxPoint& aPoint ) { m_Start = aPoint; m_End = aPoint; } // overload + const wxPoint& GetPosition() const { return m_Start; } // was overload + void SetPosition( const wxPoint& aPoint ) { m_Start = aPoint; m_End = aPoint; } // was overload /** * Function GetClass diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp index 3db2535d83..7938b9b217 100644 --- a/pcbnew/class_zone.cpp +++ b/pcbnew/class_zone.cpp @@ -113,9 +113,11 @@ bool ZONE_CONTAINER::UnFill() } -const wxPoint ZONE_CONTAINER::GetPosition() const +const wxPoint& ZONE_CONTAINER::GetPosition() const { - return m_Poly? GetCornerPosition( 0 ) : wxPoint( 0, 0 ); + static const wxPoint dummy; + + return m_Poly ? GetCornerPosition( 0 ) : dummy; } diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h index 1a61ea81d9..9f7997cc00 100644 --- a/pcbnew/class_zone.h +++ b/pcbnew/class_zone.h @@ -150,8 +150,8 @@ public: * Function GetPosition * @return a wxPoint, position of the first point of the outline */ - const wxPoint GetPosition() const; // overload - void SetPosition( const wxPoint& aPos ); // overload + const wxPoint& GetPosition() const; // was overload + void SetPosition( const wxPoint& aPos ); // was overload /** * Function SetPriority @@ -481,9 +481,9 @@ public: m_Poly->RemoveAllContours(); } - wxPoint GetCornerPosition( int aCornerIndex ) const + const wxPoint& GetCornerPosition( int aCornerIndex ) const { - return wxPoint( m_Poly->GetX( aCornerIndex ), m_Poly->GetY( aCornerIndex ) ); + return m_Poly->GetPos( aCornerIndex ); } void SetCornerPosition( int aCornerIndex, wxPoint new_pos ) diff --git a/pcbnew/drc_marker_functions.cpp b/pcbnew/drc_marker_functions.cpp index ecaeb78419..c80899502e 100644 --- a/pcbnew/drc_marker_functions.cpp +++ b/pcbnew/drc_marker_functions.cpp @@ -55,19 +55,21 @@ MARKER_PCB* DRC::fillMarker( TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, M if( aItem ) // aItem might be NULL { textB = aItem->GetSelectMenuText(); - posB = aItem->GetPosition(); if( aItem->Type() == PCB_PAD_T ) { - position = aItem->GetPosition(); + posB = position = ((D_PAD*)aItem)->GetPosition(); } else if( aItem->Type() == PCB_VIA_T ) { - position = aItem->GetPosition(); + posB = position = ((SEGVIA*)aItem)->GetPosition(); } else if( aItem->Type() == PCB_TRACE_T ) { TRACK* track = (TRACK*) aItem; + + posB = track->GetPosition(); + wxPoint endPos = track->m_End; // either of aItem's start or end will be used for the marker position @@ -95,7 +97,7 @@ MARKER_PCB* DRC::fillMarker( TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, M textB, posB ); else fillMe->SetData( aErrorCode, position, - textA, aTrack->GetPosition() ); + textA, aTrack->GetPosition() ); } else { @@ -105,7 +107,7 @@ MARKER_PCB* DRC::fillMarker( TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, M textB, posB ); else fillMe = new MARKER_PCB( aErrorCode, position, - textA, aTrack->GetPosition() ); + textA, aTrack->GetPosition() ); } return fillMe; diff --git a/pcbnew/move-drag_pads.cpp b/pcbnew/move-drag_pads.cpp index 361297fdb6..0663bca443 100644 --- a/pcbnew/move-drag_pads.cpp +++ b/pcbnew/move-drag_pads.cpp @@ -179,6 +179,9 @@ void PCB_BASE_FRAME::Import_Pad_Settings( D_PAD* aPad, bool aDraw ) case PAD_CONN: aPad->SetDrillSize( wxSize( 0, 0 ) ); aPad->SetOffset( wxPoint( 0, 0 ) ); + break; + default: + ; } if( aDraw ) diff --git a/polygon/PolyLine.cpp b/polygon/PolyLine.cpp index 7efd6cddd5..7fdfe9a094 100644 --- a/polygon/PolyLine.cpp +++ b/polygon/PolyLine.cpp @@ -1172,18 +1172,6 @@ void CPolyLine::UnHatch() } -int CPolyLine::GetX( int ic ) -{ - return corner[ic].x; -} - - -int CPolyLine::GetY( int ic ) -{ - return corner[ic].y; -} - - int CPolyLine::GetEndContour( int ic ) { return corner[ic].end_contour; diff --git a/polygon/PolyLine.h b/polygon/PolyLine.h index ebaa369ff4..827ff0ae85 100644 --- a/polygon/PolyLine.h +++ b/polygon/PolyLine.h @@ -19,6 +19,7 @@ #include #include +#include // inflection modes for DS_LINE and DS_LINE_VERTEX, used in math_for_graphics.cpp enum @@ -48,6 +49,7 @@ public: int left, right, top, bottom; }; + class CPoint { public: @@ -57,6 +59,7 @@ public: CPoint( int i, int j ) { x = i; y = j; }; }; + class CSegment { public: @@ -82,14 +85,13 @@ public: bool bFound; }; -class CPolyPt + +class CPolyPt : public wxPoint { public: CPolyPt( int qx = 0, int qy = 0, bool qf = false, int aUtility = 0 ) { x = qx; y = qy; end_contour = qf; utility = aUtility; }; - int x; - int y; bool end_contour; int utility; @@ -100,6 +102,7 @@ public: { return (x != cpt2.x) || (y != cpt2.y) || (end_contour != cpt2.end_contour); } }; + #include class CPolyLine @@ -166,8 +169,12 @@ public: int GetContourStart( int icont ); int GetContourEnd( int icont ); int GetContourSize( int icont ); - int GetX( int ic ); - int GetY( int ic ); + + int GetX( int ic ) const { return corner[ic].x; } + int GetY( int ic ) const { return corner[ic].y; } + + const wxPoint& GetPos( int ic ) const { return corner[ic]; } + int GetEndContour( int ic ); int GetUtility( int ic ) { return corner[ic].utility; };