/* dtkAbstractContainer.h --- * * Author: tkloczko * Copyright (C) 2011 - Thibaud Kloczko, Inria. * Created: Tue May 22 13:07:11 2012 (+0200) * Version: $Id: cd49dd568374c1092fa607e5ee50abb3c31b9528 $ * Last-Updated: Mon Sep 30 16:44:37 2013 (+0200) * By: Julien Wintz * Update #: 80 */ /* Commentary: * */ /* Change log: * */ #ifndef DTKABSTRACTCONTAINER_H #define DTKABSTRACTCONTAINER_H #include #include #include enum dtkContainerType { dtkContainerTypeNone, dtkContainerTypeOrdered, dtkContainerTypeUnordered, dtkContainerTypeAssociated }; // ///////////////////////////////////////////////////////////////// // dtkAbstractContainer interface // ///////////////////////////////////////////////////////////////// template class dtkAbstractContainer { public: dtkAbstractContainer(void); dtkAbstractContainer(const dtkAbstractContainer& other); ~dtkAbstractContainer(void); public: virtual QString identifier(void) const = 0; virtual QString description(void) const = 0; virtual dtkContainerType type(void) const = 0; public: virtual void clear(void) = 0; virtual void add(const T& value) = 0; virtual void add(const dtkAbstractContainer& values) = 0; virtual void remove(const T& value) = 0; virtual void remove(const dtkAbstractContainer& values) = 0; public: virtual bool isEmpty(void) const = 0; virtual bool contains(const T& value) const = 0; virtual bool contains(const dtkAbstractContainer& values) const = 0; virtual qlonglong count(void) const = 0; virtual T *toArray(qlonglong& count) = 0; virtual const T *toArray(qlonglong& count) const = 0; public: dtkAbstractContainer& operator = (const dtkAbstractContainer& other); // TO RE-IMPLEMENT !!!! SOURCE OF MEMORY LEAK !!! virtual dtkAbstractContainer *clone(void) const = 0; public: dtkAbstractContainer& operator << (const T& value); dtkAbstractContainer& operator << (const dtkAbstractContainer& values); public: bool operator == (const dtkAbstractContainer& other) const; bool operator != (const dtkAbstractContainer& other) const; virtual bool isEqual(const dtkAbstractContainer& other) const = 0; public: dtkAbstractContainer& operator + (const dtkAbstractContainer& other) const; dtkAbstractContainer& operator += (const dtkAbstractContainer& other); dtkAbstractContainer& operator += (const T& value); }; // ///////////////////////////////////////////////////////////////// // Debug operators // ///////////////////////////////////////////////////////////////// template QDebug operator << (QDebug& dbg, const dtkAbstractContainer& container); template QDebug operator << (QDebug& dbg, dtkAbstractContainer *container); // ///////////////////////////////////////////////////////////////// // dtkAbstractContainer implementation // ///////////////////////////////////////////////////////////////// #include "dtkAbstractContainer.tpp" #endif