Add List::swap() and Map::swap().

This commit is contained in:
Tsuda Kageyu
2016-11-04 16:43:14 +09:00
parent eb6d058ab9
commit 70334edd19
4 changed files with 32 additions and 18 deletions

View File

@ -229,6 +229,11 @@ namespace TagLib {
*/
List<T> &operator=(const List<T> &l);
/*!
* Exchanges the content of this list by the content of \a l.
*/
void swap(List<T> &l);
/*!
* Compares this list with \a l and returns true if all of the elements are
* the same.

View File

@ -89,9 +89,9 @@ public:
////////////////////////////////////////////////////////////////////////////////
template <class T>
List<T>::List()
List<T>::List() :
d(new ListPrivate<T>())
{
d = new ListPrivate<T>;
}
template <class T>
@ -283,16 +283,18 @@ const T &List<T>::operator[](unsigned int i) const
template <class T>
List<T> &List<T>::operator=(const List<T> &l)
{
if(&l == this)
return *this;
if(d->deref())
delete d;
d = l.d;
d->ref();
List<T>(l).swap(*this);
return *this;
}
template <class T>
void List<T>::swap(List<T> &l)
{
using std::swap;
swap(d, l.d);
}
template <class T>
bool List<T>::operator==(const List<T> &l) const
{

View File

@ -174,6 +174,11 @@ namespace TagLib {
*/
Map<Key, T> &operator=(const Map<Key, T> &m);
/*!
* Exchanges the content of this map by the content of \a m.
*/
void swap(Map<Key, T> &m);
protected:
/*
* If this List is being shared via implicit sharing, do a deep copy of the

View File

@ -48,9 +48,9 @@ public:
};
template <class Key, class T>
Map<Key, T>::Map()
Map<Key, T>::Map() :
d(new MapPrivate<Key, T>())
{
d = new MapPrivate<Key, T>;
}
template <class Key, class T>
@ -171,16 +171,18 @@ T &Map<Key, T>::operator[](const Key &key)
template <class Key, class T>
Map<Key, T> &Map<Key, T>::operator=(const Map<Key, T> &m)
{
if(&m == this)
return *this;
if(d->deref())
delete(d);
d = m.d;
d->ref();
Map<Key, T>(m).swap(*this);
return *this;
}
template <class Key, class T>
void Map<Key, T>::swap(Map<Key, T> &m)
{
using std::swap;
swap(d, m.d);
}
////////////////////////////////////////////////////////////////////////////////
// protected members
////////////////////////////////////////////////////////////////////////////////