mirror of
https://github.com/pocoproject/poco.git
synced 2025-05-02 15:41:36 +02:00
swap optimization
This commit is contained in:
parent
5eb03ba814
commit
9ea88d25dd
@ -206,9 +206,27 @@ inline void BLOB::compact()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void swap(BLOB& b1, BLOB& b2)
|
||||||
|
{
|
||||||
|
b1.swap(b2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} } // namespace Poco::Data
|
} } // namespace Poco::Data
|
||||||
|
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
template<>
|
||||||
|
inline void swap<Poco::Data::BLOB>(Poco::Data::BLOB& b1,
|
||||||
|
Poco::Data::BLOB& b2)
|
||||||
|
/// Full template specalization of std:::swap for BLOB
|
||||||
|
{
|
||||||
|
b1.swap(b2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// DynamicAnyHolderImpl<BLOB>
|
// DynamicAnyHolderImpl<BLOB>
|
||||||
//
|
//
|
||||||
|
@ -93,8 +93,9 @@ public:
|
|||||||
void swap(Column& other)
|
void swap(Column& other)
|
||||||
/// Swaps the column with another one.
|
/// Swaps the column with another one.
|
||||||
{
|
{
|
||||||
std::swap(_metaColumn, other._metaColumn);
|
using std::swap;
|
||||||
std::swap(_pData, other._pData);
|
swap(_metaColumn, other._metaColumn);
|
||||||
|
swap(_pData, other._pData);
|
||||||
}
|
}
|
||||||
|
|
||||||
Container& data()
|
Container& data()
|
||||||
@ -238,9 +239,10 @@ public:
|
|||||||
void swap(Column& other)
|
void swap(Column& other)
|
||||||
/// Swaps the column with another one.
|
/// Swaps the column with another one.
|
||||||
{
|
{
|
||||||
std::swap(_metaColumn, other._metaColumn);
|
using std::swap;
|
||||||
std::swap(_pData, other._pData);
|
swap(_metaColumn, other._metaColumn);
|
||||||
std::swap(_deque, other._deque);
|
swap(_pData, other._pData);
|
||||||
|
swap(_deque, other._deque);
|
||||||
}
|
}
|
||||||
|
|
||||||
Container& data()
|
Container& data()
|
||||||
@ -373,8 +375,9 @@ public:
|
|||||||
void swap(Column& other)
|
void swap(Column& other)
|
||||||
/// Swaps the column with another one.
|
/// Swaps the column with another one.
|
||||||
{
|
{
|
||||||
std::swap(_metaColumn, other._metaColumn);
|
using std::swap;
|
||||||
std::swap(_pData, other._pData);
|
swap(_metaColumn, other._metaColumn);
|
||||||
|
swap(_pData, other._pData);
|
||||||
}
|
}
|
||||||
|
|
||||||
List& data()
|
List& data()
|
||||||
@ -482,6 +485,13 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, typename C>
|
||||||
|
inline void swap(Column<T,C>& c1, Column<T,C>& c2)
|
||||||
|
{
|
||||||
|
c1.swap(c2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} } // namespace Poco::Data
|
} } // namespace Poco::Data
|
||||||
|
|
||||||
|
|
||||||
|
@ -330,7 +330,25 @@ inline SessionImpl* Session::impl()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void swap(Session& s1, Session& s2)
|
||||||
|
{
|
||||||
|
s1.swap(s2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} } // namespace Poco::Data
|
} } // namespace Poco::Data
|
||||||
|
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
template<>
|
||||||
|
inline void swap<Poco::Data::Session>(Poco::Data::Session& s1,
|
||||||
|
Poco::Data::Session& s2)
|
||||||
|
/// Full template specalization of std:::swap for Session
|
||||||
|
{
|
||||||
|
s1.swap(s2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // Data_Session_INCLUDED
|
#endif // Data_Session_INCLUDED
|
||||||
|
@ -438,7 +438,25 @@ inline bool Statement::isAsync() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void swap(Statement& s1, Statement& s2)
|
||||||
|
{
|
||||||
|
s1.swap(s2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} } // namespace Poco::Data
|
} } // namespace Poco::Data
|
||||||
|
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
template<>
|
||||||
|
inline void swap<Poco::Data::Statement>(Poco::Data::Statement& s1,
|
||||||
|
Poco::Data::Statement& s2)
|
||||||
|
/// Full template specalization of std:::swap for Statement
|
||||||
|
{
|
||||||
|
s1.swap(s2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // Data_Statement_INCLUDED
|
#endif // Data_Statement_INCLUDED
|
||||||
|
@ -87,10 +87,12 @@ Statement& Statement::operator = (const Statement& stmt)
|
|||||||
|
|
||||||
void Statement::swap(Statement& other)
|
void Statement::swap(Statement& other)
|
||||||
{
|
{
|
||||||
std::swap(_ptr, other._ptr);
|
using std::swap;
|
||||||
std::swap(_async, other._async);
|
|
||||||
std::swap(_pAsyncExec, other._pAsyncExec);
|
swap(_ptr, other._ptr);
|
||||||
std::swap(_pResult, other._pResult);
|
swap(_async, other._async);
|
||||||
|
swap(_pAsyncExec, other._pAsyncExec);
|
||||||
|
swap(_pResult, other._pResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -196,6 +196,11 @@ void DataTest::testBLOB()
|
|||||||
assert (blobNumStr.content() != blobChrStr.content());
|
assert (blobNumStr.content() != blobChrStr.content());
|
||||||
assert (&blobNumStr.content() != &blobChrStr.content());
|
assert (&blobNumStr.content() != &blobChrStr.content());
|
||||||
assert (blobNumStr == blobChrVec);
|
assert (blobNumStr == blobChrVec);
|
||||||
|
|
||||||
|
Poco::Data::swap(blobNumStr, blobChrVec);
|
||||||
|
assert (blobNumStr == blobChrVec);
|
||||||
|
std::swap(blobNumStr, blobChrVec);
|
||||||
|
assert (blobNumStr == blobChrVec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -420,6 +425,47 @@ void DataTest::testColumnVector()
|
|||||||
assert (c.rowCount() == 0);
|
assert (c.rowCount() == 0);
|
||||||
assert (c1.rowCount() == 0);
|
assert (c1.rowCount() == 0);
|
||||||
assert (c2.rowCount() == 0);
|
assert (c2.rowCount() == 0);
|
||||||
|
|
||||||
|
std::vector<int>* pV1 = new std::vector<int>;
|
||||||
|
pV1->push_back(1);
|
||||||
|
pV1->push_back(2);
|
||||||
|
pV1->push_back(3);
|
||||||
|
pV1->push_back(4);
|
||||||
|
pV1->push_back(5);
|
||||||
|
std::vector<int>* pV2 = new std::vector<int>;
|
||||||
|
pV2->push_back(5);
|
||||||
|
pV2->push_back(4);
|
||||||
|
pV2->push_back(3);
|
||||||
|
pV2->push_back(2);
|
||||||
|
pV2->push_back(1);
|
||||||
|
Column<int, std::vector<int> > c3(mc, pV1);
|
||||||
|
Column<int, std::vector<int> > c4(mc, pV2);
|
||||||
|
|
||||||
|
Poco::Data::swap(c3, c4);
|
||||||
|
assert (c3[0] == 5);
|
||||||
|
assert (c3[1] == 4);
|
||||||
|
assert (c3[2] == 3);
|
||||||
|
assert (c3[3] == 2);
|
||||||
|
assert (c3[4] == 1);
|
||||||
|
|
||||||
|
assert (c4[0] == 1);
|
||||||
|
assert (c4[1] == 2);
|
||||||
|
assert (c4[2] == 3);
|
||||||
|
assert (c4[3] == 4);
|
||||||
|
assert (c4[4] == 5);
|
||||||
|
|
||||||
|
std::swap(c3, c4);
|
||||||
|
assert (c3[0] == 1);
|
||||||
|
assert (c3[1] == 2);
|
||||||
|
assert (c3[2] == 3);
|
||||||
|
assert (c3[3] == 4);
|
||||||
|
assert (c3[4] == 5);
|
||||||
|
|
||||||
|
assert (c4[0] == 5);
|
||||||
|
assert (c4[1] == 4);
|
||||||
|
assert (c4[2] == 3);
|
||||||
|
assert (c4[3] == 2);
|
||||||
|
assert (c4[4] == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -558,6 +604,47 @@ void DataTest::testColumnDeque()
|
|||||||
assert (c.rowCount() == 0);
|
assert (c.rowCount() == 0);
|
||||||
assert (c1.rowCount() == 0);
|
assert (c1.rowCount() == 0);
|
||||||
assert (c2.rowCount() == 0);
|
assert (c2.rowCount() == 0);
|
||||||
|
|
||||||
|
ContainerType* pV1 = new ContainerType;
|
||||||
|
pV1->push_back(1);
|
||||||
|
pV1->push_back(2);
|
||||||
|
pV1->push_back(3);
|
||||||
|
pV1->push_back(4);
|
||||||
|
pV1->push_back(5);
|
||||||
|
ContainerType* pV2 = new ContainerType;
|
||||||
|
pV2->push_back(5);
|
||||||
|
pV2->push_back(4);
|
||||||
|
pV2->push_back(3);
|
||||||
|
pV2->push_back(2);
|
||||||
|
pV2->push_back(1);
|
||||||
|
Column<int> c3(mc, pV1);
|
||||||
|
Column<int> c4(mc, pV2);
|
||||||
|
|
||||||
|
Poco::Data::swap(c3, c4);
|
||||||
|
assert (c3[0] == 5);
|
||||||
|
assert (c3[1] == 4);
|
||||||
|
assert (c3[2] == 3);
|
||||||
|
assert (c3[3] == 2);
|
||||||
|
assert (c3[4] == 1);
|
||||||
|
|
||||||
|
assert (c4[0] == 1);
|
||||||
|
assert (c4[1] == 2);
|
||||||
|
assert (c4[2] == 3);
|
||||||
|
assert (c4[3] == 4);
|
||||||
|
assert (c4[4] == 5);
|
||||||
|
|
||||||
|
std::swap(c3, c4);
|
||||||
|
assert (c3[0] == 1);
|
||||||
|
assert (c3[1] == 2);
|
||||||
|
assert (c3[2] == 3);
|
||||||
|
assert (c3[3] == 4);
|
||||||
|
assert (c3[4] == 5);
|
||||||
|
|
||||||
|
assert (c4[0] == 5);
|
||||||
|
assert (c4[1] == 4);
|
||||||
|
assert (c4[2] == 3);
|
||||||
|
assert (c4[3] == 2);
|
||||||
|
assert (c4[4] == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -632,6 +719,47 @@ void DataTest::testColumnList()
|
|||||||
assert (c.rowCount() == 0);
|
assert (c.rowCount() == 0);
|
||||||
assert (c1.rowCount() == 0);
|
assert (c1.rowCount() == 0);
|
||||||
assert (c2.rowCount() == 0);
|
assert (c2.rowCount() == 0);
|
||||||
|
|
||||||
|
ContainerType* pV1 = new ContainerType;
|
||||||
|
pV1->push_back(1);
|
||||||
|
pV1->push_back(2);
|
||||||
|
pV1->push_back(3);
|
||||||
|
pV1->push_back(4);
|
||||||
|
pV1->push_back(5);
|
||||||
|
ContainerType* pV2 = new ContainerType;
|
||||||
|
pV2->push_back(5);
|
||||||
|
pV2->push_back(4);
|
||||||
|
pV2->push_back(3);
|
||||||
|
pV2->push_back(2);
|
||||||
|
pV2->push_back(1);
|
||||||
|
Column<int, ContainerType> c3(mc, pV1);
|
||||||
|
Column<int, ContainerType> c4(mc, pV2);
|
||||||
|
|
||||||
|
Poco::Data::swap(c3, c4);
|
||||||
|
assert (c3[0] == 5);
|
||||||
|
assert (c3[1] == 4);
|
||||||
|
assert (c3[2] == 3);
|
||||||
|
assert (c3[3] == 2);
|
||||||
|
assert (c3[4] == 1);
|
||||||
|
|
||||||
|
assert (c4[0] == 1);
|
||||||
|
assert (c4[1] == 2);
|
||||||
|
assert (c4[2] == 3);
|
||||||
|
assert (c4[3] == 4);
|
||||||
|
assert (c4[4] == 5);
|
||||||
|
|
||||||
|
std::swap(c3, c4);
|
||||||
|
assert (c3[0] == 1);
|
||||||
|
assert (c3[1] == 2);
|
||||||
|
assert (c3[2] == 3);
|
||||||
|
assert (c3[3] == 4);
|
||||||
|
assert (c3[4] == 5);
|
||||||
|
|
||||||
|
assert (c4[0] == 5);
|
||||||
|
assert (c4[1] == 4);
|
||||||
|
assert (c4[2] == 3);
|
||||||
|
assert (c4[3] == 2);
|
||||||
|
assert (c4[4] == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user