/**
* This file is part of TelepathyQt
*
* @copyright Copyright (C) 2008-2009 Collabora Ltd.
* @copyright Copyright (C) 2008-2009 Nokia Corporation
* @license LGPL 2.1
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _TelepathyQt_referenced_handles_h_HEADER_GUARD_
#define _TelepathyQt_referenced_handles_h_HEADER_GUARD_
#ifndef IN_TP_QT_HEADER
#error IN_TP_QT_HEADER
#endif
#include
#include
#ifndef QT_NO_STL
# include
#endif
#include
#include
#include
#include
namespace Tp
{
class Connection;
class TP_QT_EXPORT ReferencedHandles
{
public:
typedef UIntList::const_iterator const_iterator;
typedef UIntList::ConstIterator ConstIterator;
typedef UIntList::const_pointer const_pointer;
typedef UIntList::const_reference const_reference;
typedef UIntList::difference_type difference_type;
typedef UIntList::pointer pointer;
typedef UIntList::reference reference;
typedef UIntList::size_type size_type;
typedef UIntList::value_type value_type;
ReferencedHandles();
ReferencedHandles(const ReferencedHandles &other);
~ReferencedHandles();
ConnectionPtr connection() const;
HandleType handleType() const;
uint at(int i) const;
inline uint back() const
{
return last();
}
inline uint first() const
{
return at(0);
}
inline uint front() const
{
return first();
}
inline uint last() const
{
return at(size() - 1);
}
uint value(int i, uint defaultValue = 0) const;
const_iterator begin() const;
inline const_iterator constBegin() const
{
return begin();
}
inline const_iterator constEnd() const
{
return end();
}
const_iterator end() const;
bool contains(uint handle) const;
int count(uint handle) const;
inline int count() const
{
return size();
}
inline bool empty() const
{
return isEmpty();
}
inline bool endsWith(uint handle) const
{
return !isEmpty() && last() == handle;
}
int indexOf(uint handle, int from = 0) const;
bool isEmpty() const;
int lastIndexOf(uint handle, int from = -1) const;
inline int length() const
{
return count();
}
ReferencedHandles mid(int pos, int length = -1) const;
int size() const;
inline bool startsWith(uint handle) const
{
return !isEmpty() && first() == handle;
}
inline void append(const ReferencedHandles& another)
{
*this = *this + another;
}
void clear();
void move(int from, int to);
inline void pop_back()
{
return removeLast();
}
inline void pop_front()
{
return removeFirst();
}
int removeAll(uint handle);
void removeAt(int i);
inline void removeFirst()
{
return removeAt(0);
}
inline void removeLast()
{
return removeAt(size() - 1);
}
bool removeOne(uint handle);
void swap(int i, int j);
uint takeAt(int i);
inline uint takeFirst()
{
return takeAt(0);
}
inline uint takeLast()
{
return takeAt(size() - 1);
}
bool operator!=(const ReferencedHandles& another) const
{
return !(*this == another);
}
bool operator!=(const UIntList& another) const
{
return !(*this == another);
}
ReferencedHandles operator+(const ReferencedHandles& another) const;
inline ReferencedHandles& operator+=(const ReferencedHandles& another)
{
return *this = (*this + another);
}
ReferencedHandles& operator<<(const ReferencedHandles& another)
{
return *this += another;
}
ReferencedHandles& operator=(const ReferencedHandles& another);
bool operator==(const ReferencedHandles& another) const;
bool operator==(const UIntList& list) const;
inline uint operator[](int i) const
{
return at(i);
}
UIntList toList() const;
inline QSet toSet() const
{
return toList().toSet();
}
#ifndef QT_NO_STL
inline std::list toStdList() const
{
return toList().toStdList();
}
#endif
inline QVector toVector() const
{
return toList().toVector();
}
private:
// For access to the "prime" constructor
friend class ContactManager;
friend class PendingContactAttributes;
friend class PendingContacts;
friend class PendingHandles;
TP_QT_NO_EXPORT ReferencedHandles(const ConnectionPtr &connection,
HandleType handleType, const UIntList& handles);
struct Private;
friend struct Private;
QSharedDataPointer mPriv;
};
typedef QListIterator ReferencedHandlesIterator;
} // Tp
Q_DECLARE_METATYPE(Tp::ReferencedHandles);
#endif