-rw-r--r-- | libopie/pim/opimaccessbackend.h | 19 | ||||
-rw-r--r-- | libopie/pim/opimaccesstemplate.h | 106 | ||||
-rw-r--r-- | libopie/pim/opimrecord.cpp | 6 | ||||
-rw-r--r-- | libopie/pim/opimrecord.h | 2 | ||||
-rw-r--r-- | libopie/pim/orecordlist.h | 100 | ||||
-rw-r--r-- | libopie/pim/otemplatebase.h | 18 | ||||
-rw-r--r-- | libopie2/opiepim/backend/opimaccessbackend.h | 19 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimaccesstemplate.h | 106 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimrecord.cpp | 6 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimrecord.h | 2 | ||||
-rw-r--r-- | libopie2/opiepim/core/otemplatebase.h | 18 | ||||
-rw-r--r-- | libopie2/opiepim/orecordlist.h | 100 |
12 files changed, 326 insertions, 176 deletions
diff --git a/libopie/pim/opimaccessbackend.h b/libopie/pim/opimaccessbackend.h index d9af589..8e744e7 100644 --- a/libopie/pim/opimaccessbackend.h +++ b/libopie/pim/opimaccessbackend.h @@ -1,29 +1,36 @@ #ifndef OPIE_PIM_ACCESS_BACKEND #define OPIE_PIM_ACCESS_BACKEND #include <qarray.h> #include <opie/opimrecord.h> template <class T = OPimRecord> class OPimAccessBackend { public: - OPimAccessBackend() { - } - ~OPimAccessBackend() { - } + OPimAccessBackend(); + virtual ~OPimAccessBackend(); virtual void load() = 0; virtual void reload() = 0; virtual void save() = 0; - virtual QArray<int> allRecords() = 0; + virtual QArray<int> allRecords()const = 0; virtual QArray<int> queryByExample( const T& t, int sort ) = 0; virtual T find(int uid ) = 0; virtual void clear() = 0; virtual bool add( const T& t ) = 0; virtual bool remove( int uid ) = 0; - virtual void replace( const T& t ) = 0; + virtual bool replace( const T& t ) = 0; }; +template <class T> +OPimAccessBackend<T>::OPimAccessBackend() { + +} +template <class T> +OPimAccessBackend<T>::~OPimAccessBackend() { + +} + #endif diff --git a/libopie/pim/opimaccesstemplate.h b/libopie/pim/opimaccesstemplate.h index f2a241d..e0708e1 100644 --- a/libopie/pim/opimaccesstemplate.h +++ b/libopie/pim/opimaccesstemplate.h @@ -1,82 +1,118 @@ #ifndef OPIE_PIM_ACCESS_TEMPLATE_H #define OPIE_PIM_ACCESS_TEMPLATE_H #include <qarray.h> #include <opie/opimrecord.h> #include <opie/opimaccessbackend.h> #include <opie/orecordlist.h> +#include "otemplatebase.h" + template <class T = OPimRecord > -class OPimAccessTemplate { +class OPimAccessTemplate : public OTemplateBase<T> { public: typedef ORecordList<T> List; typedef OPimAccessBackend<T> BackEnd; - OPimAccessTemplate( BackEnd* end) - : m_backEnd( end ) { + OPimAccessTemplate( BackEnd* end); + virtual ~OPimAccessTemplate(); + virtual void load(); + virtual void reload(); + virtual void save(); + + /* + *do array to Records conversion + * QArray<int> ids + */ + virtual List allRecords()const; + virtual List queryByExample( const T& t, int sortOrder ); + virtual T find( int uid ); + + /* invalidate cache here */ + virtual void clear() ; + virtual bool add( const T& t ) ; + + /* only the uid matters */ + virtual bool remove( const T& t ); + virtual bool remove( int uid ); + virtual bool replace( const T& t) ; +protected: + void invalidateCache(); + BackEnd* backEnd(); + BackEnd* m_backEnd; + +}; + +template <class T> +OPimAccessTemplate<T>::OPimAccessTemplate( BackEnd* end ) + : OTemplateBase<T>(), m_backEnd( end ) +{ + } - ~OPimAccessTemplate() { +template <class T> +OPimAccessTemplate<T>::~OPimAccessTemplate() { + qWarning("~OPimAccessTemplate<T>"); delete m_backEnd; } - virtual void load() { +template <class T> +void OPimAccessTemplate<T>::load() { m_backEnd->load(); } - virtual void reload() { +template <class T> +void OPimAccessTemplate<T>::reload() { m_backEnd->reload(); } - virtual void save() { +template <class T> +void OPimAccessTemplate<T>::save() { m_backEnd->save(); } - - /* - *do array to Records conversion - * QArray<int> ids - */ - virtual List allRecords()const { +template <class T> +OPimAccessTemplate<T>::List OPimAccessTemplate<T>::allRecords()const { QArray<int> ints = m_backEnd->allRecords(); - List lis( ints, this ); return lis; } - virtual List queryByExample( const T& t, int sortOrder ) { - QArray<int> ints = m_backEnd->query( t, sortOrder ); - List lis( ints, this ); +template <class T> +OPimAccessTemplate<T>::List +OPimAccessTemplate<T>::queryByExample( const T& t, int sortOrder ) { + QArray<int> ints = m_backEnd->queryByExample( t, sortOrder ); + List lis(ints, this ); return lis; } - /* implement QCache here */ - virtual T find( int uid ) { +template <class T> +T OPimAccessTemplate<T>::find( int uid ) { T t = m_backEnd->find( uid ); return t; } - - /* invalidate cache here */ - virtual void clear() { +template <class T> +void OPimAccessTemplate<T>::clear() { invalidateCache(); m_backEnd->clear(); } - virtual bool add( const T& t ) { +template <class T> +bool OPimAccessTemplate<T>::add( const T& t ) { return m_backEnd->add( t ); } - - /* only the uid matters */ - virtual bool remove( const T& t ) { - /* remove from cache */ +template <class T> +bool OPimAccessTemplate<T>::remove( const T& t ) { return m_backEnd->remove( t.uid() ); } - virtual bool remove( int uid ) { - /* remove from cache */ +template <class T> +bool OPimAccessTemplate<T>::remove( int uid ) { return m_backEnd->remove(uid); } - virtual bool replace( const T& t) { +template <class T> +bool OPimAccessTemplate<T>::replace( const T& t ) { return m_backEnd->replace( t ); } -protected: - void invalidateCache() { +template <class T> +void OPimAccessTemplate<T>::invalidateCache() { } - BackEnd* m_backEnd; - -}; +template <class T> +OPimAccessTemplate<T>::BackEnd* OPimAccessTemplate<T>::backEnd() { + return m_backEnd; +} #endif diff --git a/libopie/pim/opimrecord.cpp b/libopie/pim/opimrecord.cpp index 88b6fde..60cdbf3 100644 --- a/libopie/pim/opimrecord.cpp +++ b/libopie/pim/opimrecord.cpp @@ -1,29 +1,32 @@ #include <qpe/categories.h> #include <qpe/categoryselect.h> #include "opimrecord.h" +Qtopia::UidGen OPimRecord::m_uidGen( Qtopia::UidGen::Qtopia ); + + OPimRecord::OPimRecord( int uid ) : Qtopia::Record() { setUid( uid ); } OPimRecord::~OPimRecord() { } OPimRecord::OPimRecord( const OPimRecord& rec ) : Qtopia::Record( rec ) { (*this) = rec; } OPimRecord &OPimRecord::operator=( const OPimRecord& rec) { Qtopia::Record::operator=( rec ); m_relations = rec.m_relations; return *this; } /* * category names */ QStringList OPimRecord::categoryNames()const { QStringList list; @@ -104,24 +107,27 @@ void OPimRecord::setRelations( const QString& app, QArray<int> ids ) { m_relations.replace( app, tmp ); } QString OPimRecord::crossToString()const { QString str; QMap<QString, QArray<int> >::ConstIterator it; for (it = m_relations.begin(); it != m_relations.end(); ++it ) { QArray<int> id = it.data(); for ( uint i = 0; i < id.size(); ++i ) { str += it.key() + "," + QString::number( i ) + ";"; } } str = str.remove( str.length()-1, 1); // strip the ; //qWarning("IDS " + str ); return str; } /* if uid = 1 assign a new one */ void OPimRecord::setUid( int uid ) { if ( uid == 1) uid = uidGen().generate(); Qtopia::Record::setUid( uid ); }; +Qtopia::UidGen &OPimRecord::uidGen() { + return m_uidGen; +} diff --git a/libopie/pim/opimrecord.h b/libopie/pim/opimrecord.h index 297ff12..e4d33d6 100644 --- a/libopie/pim/opimrecord.h +++ b/libopie/pim/opimrecord.h @@ -83,36 +83,38 @@ public: QStringList relatedApps()const; /** * the realtions between an app */ QArray<int> relations( const QString& app )const; /** * */ void clearRelation( const QString& app ); /** * */ void addRelation( const QString& app, int id ); /** * */ void setRelations( const QString&, QArray<int> ids ); virtual void setUid( int uid ); protected: + Qtopia::UidGen &uidGen(); QString crossToString()const; private: class OPimRecordPrivate; OPimRecordPrivate *d; QMap<QString, QArray<int> > m_relations; + static Qtopia::UidGen m_uidGen; }; #endif diff --git a/libopie/pim/orecordlist.h b/libopie/pim/orecordlist.h index 65c2169..a3955b0 100644 --- a/libopie/pim/orecordlist.h +++ b/libopie/pim/orecordlist.h @@ -1,159 +1,165 @@ #ifndef OPIE_RECORD_LIST_H #define OPIE_RECORD_LIST_H -#include <opie/opimaccesstemplate.h> -#include <opie/opimrecord.h> +#include <qarray.h> + +#include "otemplatebase.h" +#include "opimrecord.h" + template <class T = OPimRecord > -class ORecordList { +class ORecordListIterator { public: - class Iterator { - friend class ORecordList; - public: - Iterator(); - ~Iterator(); - Iterator(const Iterator& ); - Iterator &operator=(const Iterator& ); + typedef OTemplateBase<T> Base; + ORecordListIterator( const QArray<int>, const Base* ); + ORecordListIterator(); + ~ORecordListIterator(); + ORecordListIterator( const ORecordListIterator& ); + ORecordListIterator &operator=(const ORecordListIterator& ); T &operator*(); - Iterator &operator++(); - Iterator &operator--(); + ORecordListIterator &operator++(); + ORecordListIterator &operator--(); - bool operator==( const Iterator& it ); - bool operator!=( const Iterator& it ); + bool operator==( const ORecordListIterator& it ); + bool operator!=( const ORecordListIterator& it ); private: - Iterator( const QArray<int>, - OPimAccessTemplate<T>* ); - QArray<int> m_uids; int m_current; - OPimAccessTemplate* m_temp; + const Base* m_temp; bool m_end : 1; T m_record; /* d pointer for future versions */ class IteratorPrivate; IteratorPrivate *d; }; + +template <class T = OPimRecord > +class ORecordList { +public: + typedef OTemplateBase<T> Base; + typedef ORecordListIterator<T> Iterator; ORecordList( const QArray<int>& ids, - OPimAccessTemplate<T>* acc ); + const Base* ); ~ORecordList(); Iterator begin(); Iterator end(); /* ConstIterator begin()const; ConstIterator end()const; */ private: QArray<int> m_ids; - OPimAccessTemplate<T>* m_acc; + const Base* m_acc; }; /* ok now implement it */ -template <class T= OPimRecord> -ORecordList<T>::Iterator::Iterator() { +template <class T> +ORecordListIterator<T>::ORecordListIterator() { m_current = 0; m_temp = 0l; m_end = true; } -template <class T= OPimRecord> -ORecordList<T>::Iterator::~Iterator() { +template <class T> +ORecordListIterator<T>::~ORecordListIterator() { /* nothing to delete */ } -template <class T = OPimRecord> -ORecordList<T>::Iterator::Iterator( const ORecordList<T>::Iterator& it) { +template <class T> +ORecordListIterator<T>::ORecordListIterator( const ORecordListIterator<T>& it) { m_uids = it.m_uids; m_current = it.m_current; m_temp = it.m_temp; m_end = it.m_end; m_record = it.m_record; } -template <class T = OPimRecord> -ORecordList<T>::Iterator &ORecordList::Iterator::operator=( const ORecordList<T>::Iterator& it) { +template <class T> +ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIterator<T>& it) { m_uids = it.m_uids; m_current = it.m_current; m_temp = it.m_temp; m_end = it.m_end; m_record = it.m_record; return *this; } -template <class T = OPimRecord> -T &ORecordList<T>::Iterator::operator*() { +template <class T> +T &ORecordListIterator<T>::operator*() { if (!m_end ) m_record = m_temp->find( m_uids[m_current] ); else - m_record = T; + m_record = T(); return m_record; } -template <class T = OPimRecord> -ORecordList<T>::Iterator &ORecordList<T>::Iterator::operator++() { +template <class T> +ORecordListIterator<T> &ORecordListIterator<T>::operator++() { if (m_current < m_uids.count() ) { m_end = false; ++m_current; }else m_end = true; return *this; } -template <class T = OPimRecord> -ORecordList<T>::Iterator &ORecordList<T>::Iterator::operator--() { +template <class T> +ORecordListIterator<T> &ORecordListIterator<T>::operator--() { if ( m_current > 0 ) { --m_current; m_end = false; } else m_end = true; return *this; } -template <class T = OPimRecord> -bool ORecordList<T>::Iterator::operator==( const ORecordList<T>::Iterator& it ) { +template <class T> +bool ORecordListIterator<T>::operator==( const ORecordListIterator<T>& it ) { /* if both are at we're the same.... */ if ( m_end == it.m_end ) return true; if ( m_uids != it.m_uids ) return false; if ( m_current != it.m_current ) return false; if ( m_temp != it.m_temp ) return false; return true; } -template <class T = ORecordList> -bool ORecordList<T>::Iterator::operator!=( const ORecordList<T>::Iterator it ) { +template <class T> +bool ORecordListIterator<T>::operator!=( const ORecordListIterator<T>& it ) { return !(*this == it ); } -template <class T = ORecordList> -ORecordList<T>::Iterator::Iterator( const QArray<int> uids, - OPimAccessTemplate<T>* t ) +template <class T> +ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids, + const Base* t ) : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false ) { } -template <class T = ORecordList> + +template <class T> ORecordList<T>::ORecordList( const QArray<int>& ids, - OPimAccessTemplate<T>* acc ) + const Base* acc ) : m_ids( ids ), m_acc( acc ) { } -template <class T = ORecordList> +template <class T> ORecordList<T>::~ORecordList() { /* nothing to do here */ } -template <class T = ORecordList> +template <class T> ORecordList<T>::Iterator ORecordList<T>::begin() { Iterator it( m_ids, m_acc ); return it; } -template <class T = ORecordList> +template <class T> ORecordList<T>::Iterator ORecordList<T>::end() { Iterator it( m_ids, m_acc ); it.m_end = true; it.m_current = m_ids.count(); } #endif diff --git a/libopie/pim/otemplatebase.h b/libopie/pim/otemplatebase.h new file mode 100644 index 0000000..41cc934 --- a/dev/null +++ b/libopie/pim/otemplatebase.h @@ -0,0 +1,18 @@ +#ifndef OPIE_TEMPLATE_BASE_H +#define OPIE_TEMPLATE_BASE_H + +#include "opimrecord.h" + +template <class T = OPimRecord> +class OTemplateBase { +public: + OTemplateBase() { + }; + virtual ~OTemplateBase() { + } + virtual T find( int uid ) = 0; + +}; + + +#endif diff --git a/libopie2/opiepim/backend/opimaccessbackend.h b/libopie2/opiepim/backend/opimaccessbackend.h index d9af589..8e744e7 100644 --- a/libopie2/opiepim/backend/opimaccessbackend.h +++ b/libopie2/opiepim/backend/opimaccessbackend.h @@ -1,29 +1,36 @@ #ifndef OPIE_PIM_ACCESS_BACKEND #define OPIE_PIM_ACCESS_BACKEND #include <qarray.h> #include <opie/opimrecord.h> template <class T = OPimRecord> class OPimAccessBackend { public: - OPimAccessBackend() { - } - ~OPimAccessBackend() { - } + OPimAccessBackend(); + virtual ~OPimAccessBackend(); virtual void load() = 0; virtual void reload() = 0; virtual void save() = 0; - virtual QArray<int> allRecords() = 0; + virtual QArray<int> allRecords()const = 0; virtual QArray<int> queryByExample( const T& t, int sort ) = 0; virtual T find(int uid ) = 0; virtual void clear() = 0; virtual bool add( const T& t ) = 0; virtual bool remove( int uid ) = 0; - virtual void replace( const T& t ) = 0; + virtual bool replace( const T& t ) = 0; }; +template <class T> +OPimAccessBackend<T>::OPimAccessBackend() { + +} +template <class T> +OPimAccessBackend<T>::~OPimAccessBackend() { + +} + #endif diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h index f2a241d..e0708e1 100644 --- a/libopie2/opiepim/core/opimaccesstemplate.h +++ b/libopie2/opiepim/core/opimaccesstemplate.h @@ -1,82 +1,118 @@ #ifndef OPIE_PIM_ACCESS_TEMPLATE_H #define OPIE_PIM_ACCESS_TEMPLATE_H #include <qarray.h> #include <opie/opimrecord.h> #include <opie/opimaccessbackend.h> #include <opie/orecordlist.h> +#include "otemplatebase.h" + template <class T = OPimRecord > -class OPimAccessTemplate { +class OPimAccessTemplate : public OTemplateBase<T> { public: typedef ORecordList<T> List; typedef OPimAccessBackend<T> BackEnd; - OPimAccessTemplate( BackEnd* end) - : m_backEnd( end ) { + OPimAccessTemplate( BackEnd* end); + virtual ~OPimAccessTemplate(); + virtual void load(); + virtual void reload(); + virtual void save(); + + /* + *do array to Records conversion + * QArray<int> ids + */ + virtual List allRecords()const; + virtual List queryByExample( const T& t, int sortOrder ); + virtual T find( int uid ); + + /* invalidate cache here */ + virtual void clear() ; + virtual bool add( const T& t ) ; + + /* only the uid matters */ + virtual bool remove( const T& t ); + virtual bool remove( int uid ); + virtual bool replace( const T& t) ; +protected: + void invalidateCache(); + BackEnd* backEnd(); + BackEnd* m_backEnd; + +}; + +template <class T> +OPimAccessTemplate<T>::OPimAccessTemplate( BackEnd* end ) + : OTemplateBase<T>(), m_backEnd( end ) +{ + } - ~OPimAccessTemplate() { +template <class T> +OPimAccessTemplate<T>::~OPimAccessTemplate() { + qWarning("~OPimAccessTemplate<T>"); delete m_backEnd; } - virtual void load() { +template <class T> +void OPimAccessTemplate<T>::load() { m_backEnd->load(); } - virtual void reload() { +template <class T> +void OPimAccessTemplate<T>::reload() { m_backEnd->reload(); } - virtual void save() { +template <class T> +void OPimAccessTemplate<T>::save() { m_backEnd->save(); } - - /* - *do array to Records conversion - * QArray<int> ids - */ - virtual List allRecords()const { +template <class T> +OPimAccessTemplate<T>::List OPimAccessTemplate<T>::allRecords()const { QArray<int> ints = m_backEnd->allRecords(); - List lis( ints, this ); return lis; } - virtual List queryByExample( const T& t, int sortOrder ) { - QArray<int> ints = m_backEnd->query( t, sortOrder ); - List lis( ints, this ); +template <class T> +OPimAccessTemplate<T>::List +OPimAccessTemplate<T>::queryByExample( const T& t, int sortOrder ) { + QArray<int> ints = m_backEnd->queryByExample( t, sortOrder ); + List lis(ints, this ); return lis; } - /* implement QCache here */ - virtual T find( int uid ) { +template <class T> +T OPimAccessTemplate<T>::find( int uid ) { T t = m_backEnd->find( uid ); return t; } - - /* invalidate cache here */ - virtual void clear() { +template <class T> +void OPimAccessTemplate<T>::clear() { invalidateCache(); m_backEnd->clear(); } - virtual bool add( const T& t ) { +template <class T> +bool OPimAccessTemplate<T>::add( const T& t ) { return m_backEnd->add( t ); } - - /* only the uid matters */ - virtual bool remove( const T& t ) { - /* remove from cache */ +template <class T> +bool OPimAccessTemplate<T>::remove( const T& t ) { return m_backEnd->remove( t.uid() ); } - virtual bool remove( int uid ) { - /* remove from cache */ +template <class T> +bool OPimAccessTemplate<T>::remove( int uid ) { return m_backEnd->remove(uid); } - virtual bool replace( const T& t) { +template <class T> +bool OPimAccessTemplate<T>::replace( const T& t ) { return m_backEnd->replace( t ); } -protected: - void invalidateCache() { +template <class T> +void OPimAccessTemplate<T>::invalidateCache() { } - BackEnd* m_backEnd; - -}; +template <class T> +OPimAccessTemplate<T>::BackEnd* OPimAccessTemplate<T>::backEnd() { + return m_backEnd; +} #endif diff --git a/libopie2/opiepim/core/opimrecord.cpp b/libopie2/opiepim/core/opimrecord.cpp index 88b6fde..60cdbf3 100644 --- a/libopie2/opiepim/core/opimrecord.cpp +++ b/libopie2/opiepim/core/opimrecord.cpp @@ -1,29 +1,32 @@ #include <qpe/categories.h> #include <qpe/categoryselect.h> #include "opimrecord.h" +Qtopia::UidGen OPimRecord::m_uidGen( Qtopia::UidGen::Qtopia ); + + OPimRecord::OPimRecord( int uid ) : Qtopia::Record() { setUid( uid ); } OPimRecord::~OPimRecord() { } OPimRecord::OPimRecord( const OPimRecord& rec ) : Qtopia::Record( rec ) { (*this) = rec; } OPimRecord &OPimRecord::operator=( const OPimRecord& rec) { Qtopia::Record::operator=( rec ); m_relations = rec.m_relations; return *this; } /* * category names */ QStringList OPimRecord::categoryNames()const { QStringList list; @@ -104,24 +107,27 @@ void OPimRecord::setRelations( const QString& app, QArray<int> ids ) { m_relations.replace( app, tmp ); } QString OPimRecord::crossToString()const { QString str; QMap<QString, QArray<int> >::ConstIterator it; for (it = m_relations.begin(); it != m_relations.end(); ++it ) { QArray<int> id = it.data(); for ( uint i = 0; i < id.size(); ++i ) { str += it.key() + "," + QString::number( i ) + ";"; } } str = str.remove( str.length()-1, 1); // strip the ; //qWarning("IDS " + str ); return str; } /* if uid = 1 assign a new one */ void OPimRecord::setUid( int uid ) { if ( uid == 1) uid = uidGen().generate(); Qtopia::Record::setUid( uid ); }; +Qtopia::UidGen &OPimRecord::uidGen() { + return m_uidGen; +} diff --git a/libopie2/opiepim/core/opimrecord.h b/libopie2/opiepim/core/opimrecord.h index 297ff12..e4d33d6 100644 --- a/libopie2/opiepim/core/opimrecord.h +++ b/libopie2/opiepim/core/opimrecord.h @@ -83,36 +83,38 @@ public: QStringList relatedApps()const; /** * the realtions between an app */ QArray<int> relations( const QString& app )const; /** * */ void clearRelation( const QString& app ); /** * */ void addRelation( const QString& app, int id ); /** * */ void setRelations( const QString&, QArray<int> ids ); virtual void setUid( int uid ); protected: + Qtopia::UidGen &uidGen(); QString crossToString()const; private: class OPimRecordPrivate; OPimRecordPrivate *d; QMap<QString, QArray<int> > m_relations; + static Qtopia::UidGen m_uidGen; }; #endif diff --git a/libopie2/opiepim/core/otemplatebase.h b/libopie2/opiepim/core/otemplatebase.h new file mode 100644 index 0000000..41cc934 --- a/dev/null +++ b/libopie2/opiepim/core/otemplatebase.h @@ -0,0 +1,18 @@ +#ifndef OPIE_TEMPLATE_BASE_H +#define OPIE_TEMPLATE_BASE_H + +#include "opimrecord.h" + +template <class T = OPimRecord> +class OTemplateBase { +public: + OTemplateBase() { + }; + virtual ~OTemplateBase() { + } + virtual T find( int uid ) = 0; + +}; + + +#endif diff --git a/libopie2/opiepim/orecordlist.h b/libopie2/opiepim/orecordlist.h index 65c2169..a3955b0 100644 --- a/libopie2/opiepim/orecordlist.h +++ b/libopie2/opiepim/orecordlist.h @@ -1,159 +1,165 @@ #ifndef OPIE_RECORD_LIST_H #define OPIE_RECORD_LIST_H -#include <opie/opimaccesstemplate.h> -#include <opie/opimrecord.h> +#include <qarray.h> + +#include "otemplatebase.h" +#include "opimrecord.h" + template <class T = OPimRecord > -class ORecordList { +class ORecordListIterator { public: - class Iterator { - friend class ORecordList; - public: - Iterator(); - ~Iterator(); - Iterator(const Iterator& ); - Iterator &operator=(const Iterator& ); + typedef OTemplateBase<T> Base; + ORecordListIterator( const QArray<int>, const Base* ); + ORecordListIterator(); + ~ORecordListIterator(); + ORecordListIterator( const ORecordListIterator& ); + ORecordListIterator &operator=(const ORecordListIterator& ); T &operator*(); - Iterator &operator++(); - Iterator &operator--(); + ORecordListIterator &operator++(); + ORecordListIterator &operator--(); - bool operator==( const Iterator& it ); - bool operator!=( const Iterator& it ); + bool operator==( const ORecordListIterator& it ); + bool operator!=( const ORecordListIterator& it ); private: - Iterator( const QArray<int>, - OPimAccessTemplate<T>* ); - QArray<int> m_uids; int m_current; - OPimAccessTemplate* m_temp; + const Base* m_temp; bool m_end : 1; T m_record; /* d pointer for future versions */ class IteratorPrivate; IteratorPrivate *d; }; + +template <class T = OPimRecord > +class ORecordList { +public: + typedef OTemplateBase<T> Base; + typedef ORecordListIterator<T> Iterator; ORecordList( const QArray<int>& ids, - OPimAccessTemplate<T>* acc ); + const Base* ); ~ORecordList(); Iterator begin(); Iterator end(); /* ConstIterator begin()const; ConstIterator end()const; */ private: QArray<int> m_ids; - OPimAccessTemplate<T>* m_acc; + const Base* m_acc; }; /* ok now implement it */ -template <class T= OPimRecord> -ORecordList<T>::Iterator::Iterator() { +template <class T> +ORecordListIterator<T>::ORecordListIterator() { m_current = 0; m_temp = 0l; m_end = true; } -template <class T= OPimRecord> -ORecordList<T>::Iterator::~Iterator() { +template <class T> +ORecordListIterator<T>::~ORecordListIterator() { /* nothing to delete */ } -template <class T = OPimRecord> -ORecordList<T>::Iterator::Iterator( const ORecordList<T>::Iterator& it) { +template <class T> +ORecordListIterator<T>::ORecordListIterator( const ORecordListIterator<T>& it) { m_uids = it.m_uids; m_current = it.m_current; m_temp = it.m_temp; m_end = it.m_end; m_record = it.m_record; } -template <class T = OPimRecord> -ORecordList<T>::Iterator &ORecordList::Iterator::operator=( const ORecordList<T>::Iterator& it) { +template <class T> +ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIterator<T>& it) { m_uids = it.m_uids; m_current = it.m_current; m_temp = it.m_temp; m_end = it.m_end; m_record = it.m_record; return *this; } -template <class T = OPimRecord> -T &ORecordList<T>::Iterator::operator*() { +template <class T> +T &ORecordListIterator<T>::operator*() { if (!m_end ) m_record = m_temp->find( m_uids[m_current] ); else - m_record = T; + m_record = T(); return m_record; } -template <class T = OPimRecord> -ORecordList<T>::Iterator &ORecordList<T>::Iterator::operator++() { +template <class T> +ORecordListIterator<T> &ORecordListIterator<T>::operator++() { if (m_current < m_uids.count() ) { m_end = false; ++m_current; }else m_end = true; return *this; } -template <class T = OPimRecord> -ORecordList<T>::Iterator &ORecordList<T>::Iterator::operator--() { +template <class T> +ORecordListIterator<T> &ORecordListIterator<T>::operator--() { if ( m_current > 0 ) { --m_current; m_end = false; } else m_end = true; return *this; } -template <class T = OPimRecord> -bool ORecordList<T>::Iterator::operator==( const ORecordList<T>::Iterator& it ) { +template <class T> +bool ORecordListIterator<T>::operator==( const ORecordListIterator<T>& it ) { /* if both are at we're the same.... */ if ( m_end == it.m_end ) return true; if ( m_uids != it.m_uids ) return false; if ( m_current != it.m_current ) return false; if ( m_temp != it.m_temp ) return false; return true; } -template <class T = ORecordList> -bool ORecordList<T>::Iterator::operator!=( const ORecordList<T>::Iterator it ) { +template <class T> +bool ORecordListIterator<T>::operator!=( const ORecordListIterator<T>& it ) { return !(*this == it ); } -template <class T = ORecordList> -ORecordList<T>::Iterator::Iterator( const QArray<int> uids, - OPimAccessTemplate<T>* t ) +template <class T> +ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids, + const Base* t ) : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false ) { } -template <class T = ORecordList> + +template <class T> ORecordList<T>::ORecordList( const QArray<int>& ids, - OPimAccessTemplate<T>* acc ) + const Base* acc ) : m_ids( ids ), m_acc( acc ) { } -template <class T = ORecordList> +template <class T> ORecordList<T>::~ORecordList() { /* nothing to do here */ } -template <class T = ORecordList> +template <class T> ORecordList<T>::Iterator ORecordList<T>::begin() { Iterator it( m_ids, m_acc ); return it; } -template <class T = ORecordList> +template <class T> ORecordList<T>::Iterator ORecordList<T>::end() { Iterator it( m_ids, m_acc ); it.m_end = true; it.m_current = m_ids.count(); } #endif |