use wxSwap()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55650 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2008-09-15 16:13:06 +00:00
parent dac8712fcf
commit 1372f8ccd0
3 changed files with 31 additions and 66 deletions

View File

@ -303,22 +303,10 @@ public:
size_type size() const { return GetCount(); }
void swap(wxArrayString& other)
{
// not sure if we can rely on having std::swap() everywhere so do it
// manually
const size_t savedSize = m_nSize;
const size_t savedCount = m_nCount;
wxString * const savedItems = m_pItems;
const bool savedAutoSort = m_autoSort;
m_nSize = other.m_nSize;
m_nCount = other.m_nCount;
m_pItems = other.m_pItems;
m_autoSort = other.m_autoSort;
other.m_nSize = savedSize;
other.m_nCount = savedCount;
other.m_pItems = savedItems;
other.m_autoSort = savedAutoSort;
wxSwap(m_nSize, other.m_nSize);
wxSwap(m_nCount, other.m_nCount);
wxSwap(m_pItems, other.m_pItems);
wxSwap(m_autoSort, other.m_autoSort);
}
protected:

View File

@ -284,17 +284,9 @@ protected: \
\
void swap(name& other) \
{ \
const size_t savedSize = m_nSize; \
const size_t savedCount = m_nCount; \
T * const savedItems = m_pItems; \
\
m_nSize = other.m_nSize; \
m_nCount = other.m_nCount; \
m_pItems = other.m_pItems; \
\
other.m_nSize = savedSize; \
other.m_nCount = savedCount; \
other.m_pItems = savedItems; \
wxSwap(m_nSize, other.m_nSize); \
wxSwap(m_nCount, other.m_nCount); \
wxSwap(m_pItems, other.m_pItems); \
} \
\
/* the following functions may be made directly public because */ \

View File

@ -439,6 +439,23 @@ static const size_t GRID_SCROLL_LINE_Y = GRID_SCROLL_LINE_X;
// in these hash tables is the number of rows/columns)
static const int GRID_HASH_SIZE = 100;
// ----------------------------------------------------------------------------
// private helpers
// ----------------------------------------------------------------------------
namespace
{
// ensure that first is less or equal to second, swapping the values if
// necessary
void EnsureFirstLessThanSecond(int& first, int& second)
{
if ( first > second )
wxSwap(first, second);
}
} // anonymous namespace
// ============================================================================
// implementation
// ============================================================================
@ -7179,9 +7196,8 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords )
attr->DecRef();
}
void wxGrid::HighlightBlock( int topRow, int leftCol, int bottomRow, int rightCol )
void wxGrid::HighlightBlock(int topRow, int leftCol, int bottomRow, int rightCol)
{
int temp;
wxGridCellCoords updateTopLeft, updateBottomRight;
if ( m_selection )
@ -7198,19 +7214,8 @@ void wxGrid::HighlightBlock( int topRow, int leftCol, int bottomRow, int rightCo
}
}
if ( topRow > bottomRow )
{
temp = topRow;
topRow = bottomRow;
bottomRow = temp;
}
if ( leftCol > rightCol )
{
temp = leftCol;
leftCol = rightCol;
rightCol = temp;
}
EnsureFirstLessThanSecond(topRow, bottomRow);
EnsureFirstLessThanSecond(leftCol, rightCol);
updateTopLeft = wxGridCellCoords( topRow, leftCol );
updateBottomRight = wxGridCellCoords( bottomRow, rightCol );
@ -7247,30 +7252,10 @@ void wxGrid::HighlightBlock( int topRow, int leftCol, int bottomRow, int rightCo
wxCoord oldBottom = m_selectingBottomRight.GetRow();
// Determine the outer/inner coordinates.
if (oldLeft > leftCol)
{
temp = oldLeft;
oldLeft = leftCol;
leftCol = temp;
}
if (oldTop > topRow )
{
temp = oldTop;
oldTop = topRow;
topRow = temp;
}
if (oldRight < rightCol )
{
temp = oldRight;
oldRight = rightCol;
rightCol = temp;
}
if (oldBottom < bottomRow)
{
temp = oldBottom;
oldBottom = bottomRow;
bottomRow = temp;
}
EnsureFirstLessThanSecond(oldLeft, leftCol);
EnsureFirstLessThanSecond(oldTop, topRow);
EnsureFirstLessThanSecond(rightCol, oldRight);
EnsureFirstLessThanSecond(bottomRow, oldBottom);
// Now, either the stuff marked old is the outer
// rectangle or we don't have a situation where one