/* dtkAbstractDataComposite.h --- * * Author: Thibaud Kloczko * Copyright (C) 2011 - Thibaud Kloczko, Inria. * Created: Wed Sep 21 13:46:31 2011 (+0200) * Version: $Id: 3f663a68ecd27cc195e3458d6024fdcf39587321 $ * Last-Updated: lun. févr. 3 15:58:28 2014 (+0100) * By: Thibaud Kloczko * Update #: 267 */ /* Commentary: * */ /* Change log: * */ #ifndef DTKABSTRACTDATACOMPOSITE_H #define DTKABSTRACTDATACOMPOSITE_H #include "dtkAbstractData.h" #include #include "dtkGlobal.h" #include class dtkAbstractDataCompositePrivate; class DTKCORESUPPORT_EXPORT dtkAbstractDataComposite : public dtkAbstractData { Q_OBJECT public: enum Type { None = 0, ConstVector = 1, Vector = 2, ConstList = 3, List = 4 }; public: dtkAbstractDataComposite( QVector& vector, dtkAbstractData *parent = 0); dtkAbstractDataComposite(const QVector& vector, dtkAbstractData *parent = 0); dtkAbstractDataComposite( QList& list, dtkAbstractData *parent = 0); dtkAbstractDataComposite(const QList& list, dtkAbstractData *parent = 0); virtual ~dtkAbstractDataComposite(void); public: void append(dtkAbstractData *data); void remove(dtkAbstractData *data); bool has(dtkAbstractData *data) const; qlonglong count(void); qlonglong indexOf(dtkAbstractData *data, qlonglong from = 0); Type type(void); const dtkAbstractData *at(qlonglong index) const; dtkAbstractData *at(qlonglong index); const QVector& vector(void) const; QVector& vector(void); const QList& list(void) const; QList& list(void); private: dtkAbstractDataCompositePrivate *d; private: dtkAbstractDataComposite(QVector *vector); dtkAbstractDataComposite( QList *list); public: static dtkAbstractDataComposite *createFromVectorCopy(const QVector& vector); static dtkAbstractDataComposite *createFromVectorCopy( QVector& vector); static dtkAbstractDataComposite *createFromListCopy(const QList& list); static dtkAbstractDataComposite *createFromListCopy( QList& list); }; // ///////////////////////////////////////////////////////////////// // Related non-member templated functions // ///////////////////////////////////////////////////////////////// template const QVector& dtkUpCastIntoDataVector(const QVector& vector); template QVector& dtkUpCastIntoDataVector( QVector& vector); template const QList& dtkUpCastIntoDataList(const QList& list); template QList& dtkUpCastIntoDataList( QList& list); template const QVector& dtkDownCastFromDataVector(const QVector& vector); template QVector& dtkDownCastFromDataVector( QVector& vector); template const QList& dtkDownCastFromDataList(const QList& list); template QList& dtkDownCastFromDataList( QList& list); template dtkAbstractDataComposite *dtkAbstractDataCompositeFromVectorCopy(const QVector& vector); template dtkAbstractDataComposite *dtkAbstractDataCompositeFromVectorCopy( QVector& vector); template dtkAbstractDataComposite *dtkAbstractDataCompositeFromListCopy(const QList& list); template dtkAbstractDataComposite *dtkAbstractDataCompositeFromListCopy( QList& list); // ///////////////////////////////////////////////////////////////// #include #endif