/* dtkContainerVector.h --- * * Author: tkloczko * Copyright (C) 2011 - Thibaud Kloczko, Inria. * Created: Wed May 23 11:19:32 2012 (+0200) * Version: $Id: 766af74c48e147afce07593112133082768502da $ * Last-Updated: mer. sept. 17 15:06:03 2014 (+0200) * By: Thibaud Kloczko * Update #: 84 */ /* Commentary: * */ /* Change log: * */ #ifndef DTKCONTAINERVECTOR_H #define DTKCONTAINERVECTOR_H #include "dtkAbstractContainerOrdered.h" #include //#include #include #include // ///////////////////////////////////////////////////////////////// // dtkContainerVector interface // ///////////////////////////////////////////////////////////////// template class dtkContainerVector : public dtkAbstractContainerOrdered { public: typedef typename dtkArray::iterator iterator; typedef typename dtkArray::const_iterator const_iterator; public: dtkContainerVector(void); dtkContainerVector(qlonglong size); dtkContainerVector(qlonglong size, const T& value); dtkContainerVector(const dtkContainerVector& other); virtual ~dtkContainerVector(void); public: QString identifier(void) const; QString description(void) const; public: void clear(void); void append(const T& value); void append(const dtkAbstractContainer& values); void append(const dtkContainerVector& values); void prepend(const T& value); void prepend(const dtkAbstractContainer& values); void prepend(const dtkContainerVector& values); void remove(const T& value); void remove(const dtkAbstractContainer& values); void remove(const dtkContainerVector& values); void insert(qlonglong index, const T& value); void insert(qlonglong from, const dtkAbstractContainer& values); void insert(qlonglong from, qlonglong step, const dtkAbstractContainer& values); void insert(qlonglong *indices, const dtkAbstractContainer& values); void insert(qlonglong from, const dtkContainerVector& values); void insert(qlonglong from, qlonglong step, const dtkContainerVector& values); void insert(qlonglong *indices, const dtkContainerVector& values); void replace(qlonglong index, const T& value); void replace(qlonglong from, const dtkAbstractContainer& values); void replace(qlonglong from, qlonglong step, const dtkAbstractContainer& values); void replace(qlonglong *indices, const dtkAbstractContainer& values); void replace(qlonglong from, const dtkContainerVector& values); void replace(qlonglong from, qlonglong step, const dtkContainerVector& values); void replace(qlonglong *indices, const dtkContainerVector& values); void removeAt(qlonglong index); void removeAt(qlonglong from, qlonglong to, qlonglong step = 1); void reserve(qlonglong value); void resize(qlonglong size); void squeeze(void); public: bool isEmpty(void) const; bool contains(const T& value) const; bool contains(const dtkAbstractContainer& values) const; bool contains(const dtkContainerVector& values) const; qlonglong capacity(void) const; qlonglong count(void) const; qlonglong indexOf(const T& value, qlonglong from = 0) const; qlonglong lastIndexOf(const T& value, qlonglong from = -1) const; qlonglong *indicesOf(const T& value, qlonglong from = 0) const; const T& at(qlonglong index) const; const T& first(void) const; const T& last(void) const; dtkContainerVector *subContainer(const dtkAbstractContainerOrdered& indices) const; dtkContainerVector *subContainer(qlonglong from, qlonglong to, qlonglong step = 1) const; T *toArray(qlonglong& count); const T *toArray(qlonglong& count) const; T *array(void); const T *array(void) const; const T *constArray(void) const; public: const T& operator [] (qlonglong index) const; T& operator [] (qlonglong index) ; public: dtkContainerVector& operator = (const dtkContainerVector& other); dtkContainerVector *clone(void) const; public: dtkContainerVector& operator << (const T& value); dtkContainerVector& operator << (const dtkContainerVector& values); public: bool operator == (const dtkContainerVector& other) const; bool operator != (const dtkContainerVector& other) const; bool isEqual(const dtkAbstractContainer& other) const; public: dtkContainerVector operator + (const dtkContainerVector& other); dtkContainerVector& operator += (const dtkContainerVector& other); dtkContainerVector& operator += (const T& value); public: template friend dtkContainerVector dtkContainerVectorFromQVector(const QVector& vector); template friend QVector dtkContainerVectorToQVector(const dtkContainerVector& vector); template friend dtkContainerVector dtkContainerVectorFromDtkArray(const dtkArray& vector); template friend dtkArray dtkContainerVectorToDtkArray(const dtkContainerVector& vector); public: iterator begin(iterator = iterator()) { return m_vector.begin(); } const_iterator begin(const_iterator = const_iterator()) const { return m_vector.constBegin(); } const_iterator cbegin(const_iterator = const_iterator()) const { return m_vector.constBegin(); } iterator end(iterator = iterator()) { return m_vector.end(); } const_iterator end(const_iterator = const_iterator()) const { return m_vector.constEnd(); } const_iterator cend(const_iterator = const_iterator()) const { return m_vector.constEnd(); } private: dtkArray m_vector; }; // // ///////////////////////////////////////////////////////////////// // // Helper functions // // ///////////////////////////////////////////////////////////////// template dtkContainerVector dtkContainerVectorFromQVector(const QVector& vector); template QVector dtkContainerVectorToQVector(const dtkContainerVector& vector); template dtkContainerVector dtkContainerVectorFromDtkArray(const dtkArray& vector); template dtkArray dtkContainerVectorToDtkArray(const dtkContainerVector& vector); // ///////////////////////////////////////////////////////////////// // dtkContainerVector implementation // ///////////////////////////////////////////////////////////////// #include "dtkContainerVector.tpp" // ///////////////////////////////////////////////////////////////// // // ///////////////////////////////////////////////////////////////// typedef dtkContainerVector dtkContainerVectorReal; Q_DECLARE_METATYPE(dtkContainerVectorReal ); Q_DECLARE_METATYPE(dtkContainerVectorReal *); typedef dtkContainerVector dtkContainerVectorInteger; Q_DECLARE_METATYPE(dtkContainerVectorInteger ); Q_DECLARE_METATYPE(dtkContainerVectorInteger *); // ///////////////////////////////////////////////////////////////// // // ///////////////////////////////////////////////////////////////// #include typedef dtkContainerVector dtkContainerVectorVector3DReal; Q_DECLARE_METATYPE(dtkContainerVectorVector3DReal ); Q_DECLARE_METATYPE(dtkContainerVectorVector3DReal *); #endif