SELECTION::GetItemsSortedByTypeAndXY - minor tweaks
Simplify a little by keeping the positions of A and B in variables. Also remove const when returning by value - all that does is inhibit a (possible, NRVO) move if you assign the result to a non-const vector.
This commit is contained in:
parent
2f3196c18c
commit
129c61a742
|
@ -219,7 +219,7 @@ bool SELECTION::OnlyContains( std::vector<KICAD_T> aList ) const
|
|||
}
|
||||
|
||||
|
||||
const std::vector<EDA_ITEM*> SELECTION::GetItemsSortedByTypeAndXY( bool leftBeforeRight,
|
||||
std::vector<EDA_ITEM*> SELECTION::GetItemsSortedByTypeAndXY( bool leftBeforeRight,
|
||||
bool topBeforeBottom ) const
|
||||
{
|
||||
std::vector<EDA_ITEM*> sorted_items = std::vector<EDA_ITEM*>( m_items.begin(), m_items.end() );
|
||||
|
@ -229,24 +229,27 @@ const std::vector<EDA_ITEM*> SELECTION::GetItemsSortedByTypeAndXY( bool leftBefo
|
|||
{
|
||||
if( a->Type() == b->Type() )
|
||||
{
|
||||
if( a->GetSortPosition().x == b->GetSortPosition().x )
|
||||
const VECTOR2I aPos = a->GetSortPosition();
|
||||
const VECTOR2I bPos = b->GetSortPosition();
|
||||
|
||||
if( aPos.x == bPos.x )
|
||||
{
|
||||
// Ensure deterministic sort
|
||||
if( a->GetSortPosition().y == b->GetSortPosition().y )
|
||||
if( aPos.y == bPos.y )
|
||||
return a->m_Uuid < b->m_Uuid;
|
||||
|
||||
if( topBeforeBottom )
|
||||
return a->GetSortPosition().y < b->GetSortPosition().y;
|
||||
return aPos.y < bPos.y;
|
||||
else
|
||||
return a->GetSortPosition().y > b->GetSortPosition().y;
|
||||
return aPos.y > bPos.y;
|
||||
}
|
||||
else if( leftBeforeRight )
|
||||
{
|
||||
return a->GetSortPosition().x < b->GetSortPosition().x;
|
||||
return aPos.x < bPos.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
return a->GetSortPosition().x > b->GetSortPosition().x;
|
||||
return aPos.x > bPos.x;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -254,12 +257,11 @@ const std::vector<EDA_ITEM*> SELECTION::GetItemsSortedByTypeAndXY( bool leftBefo
|
|||
return a->Type() < b->Type();
|
||||
}
|
||||
} );
|
||||
|
||||
return sorted_items;
|
||||
}
|
||||
|
||||
|
||||
const std::vector<EDA_ITEM*> SELECTION::GetItemsSortedBySelectionOrder() const
|
||||
std::vector<EDA_ITEM*> SELECTION::GetItemsSortedBySelectionOrder() const
|
||||
{
|
||||
using pairedIterators = std::pair<decltype( m_items.begin() ),
|
||||
decltype( m_itemsOrders.begin() )>;
|
||||
|
|
|
@ -131,12 +131,12 @@ public:
|
|||
/**
|
||||
* Returns a copy of this selection of items sorted by their X then Y position.
|
||||
*
|
||||
* @return Vector of sorted items
|
||||
* @return std::vector of sorted items
|
||||
*/
|
||||
const std::vector<EDA_ITEM*> GetItemsSortedByTypeAndXY( bool leftBeforeRight = true,
|
||||
std::vector<EDA_ITEM*> GetItemsSortedByTypeAndXY( bool leftBeforeRight = true,
|
||||
bool topBeforeBottom = true ) const;
|
||||
|
||||
const std::vector<EDA_ITEM*> GetItemsSortedBySelectionOrder() const;
|
||||
std::vector<EDA_ITEM*> GetItemsSortedBySelectionOrder() const;
|
||||
|
||||
/// Returns the center point of the selection area bounding box.
|
||||
virtual VECTOR2I GetCenter() const;
|
||||
|
|
Loading…
Reference in New Issue