-rw-r--r-- | libopie2/opiepim/core/opimaccesstemplate.h | 40 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimtemplatebase.h | 16 |
2 files changed, 45 insertions, 11 deletions
diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h index 55d600a..6f01b46 100644 --- a/libopie2/opiepim/core/opimaccesstemplate.h +++ b/libopie2/opiepim/core/opimaccesstemplate.h @@ -36,5 +36,4 @@ #include <opie2/opimrecordlist.h> -#include <opie2/opimcache.h> #include <opie2/opimtemplatebase.h> #include <opie2/odebug.h> @@ -129,4 +128,5 @@ public: uint current, typename OTemplateBase<T>::CacheDirection dir = OTemplateBase<T>::Forward )const; + /* invalidate cache here */ /** @@ -140,11 +140,13 @@ public: * @return <i>true</i> if added successfully. */ - virtual bool add( const T& t ) ; + virtual bool add( const T& t ) ; + bool add( const OPimRecord& ); - // Needed for real generic access (eilers) - // Info: Take this if you are working with OPimRecord, which is a generic base class, and - // you need to add it into any database, you cannot generate a reference to - // it and casting may be not approriate, too. - // But take care that the accessing database is compatible to the real type of OPimRecord !! + /** + * Add an Opie PimRecord. + * Info: Take this if you are working with OPimRecords and you need to add it into any database. + * But take care that the accessing database is compatible to the real type of OPimRecord !! + * Otherwise this access will be rejected ! + */ bool add( const OPimRecord* ); @@ -177,4 +179,5 @@ public: * @internal */ + virtual T cacheFind( int uid )const; void cache( const T& )const; void setSaneCacheSize( int ); @@ -193,4 +196,5 @@ protected: BackEnd* backEnd(); BackEnd* m_backEnd; + Cache m_cache; @@ -219,5 +223,5 @@ bool OPimAccessTemplate<T>::load() { template <class T> bool OPimAccessTemplate<T>::reload() { - invalidateCache(); // zecke: I think this should be added (se) + invalidateCache(); return m_backEnd->reload(); } @@ -252,8 +256,20 @@ OPimAccessTemplate<T>::queryByExample( const T& t, int settings, const QDateTime template <class T> T OPimAccessTemplate<T>::find( int uid ) const{ + // First search in cache.. + if ( m_cache.contains( uid ) ) + return m_cache.find( uid ); + T t = m_backEnd->find( uid ); cache( t ); + return t; } + +template <class T> +T OPimAccessTemplate<T>::cacheFind( int uid ) const +{ + return m_cache.find( uid ); +} + template <class T> T OPimAccessTemplate<T>::find( int uid, const QArray<int>& ar, @@ -265,5 +281,5 @@ T OPimAccessTemplate<T>::find( int uid, const QArray<int>& ar, */ // owarn << "find it now " << uid << oendl; - if (m_cache.contains( uid ) ) { + if ( m_cache.contains( uid ) ) { return m_cache.find( uid ); } @@ -285,5 +301,5 @@ bool OPimAccessTemplate<T>::add( const T& t ) { template <class T> -bool OPimAccessTemplate<T>::add( const OPimRecord& rec) { +bool OPimAccessTemplate<T>::add( const OPimRecord& rec ) { /* same type */ T tempInstance; @@ -291,4 +307,6 @@ bool OPimAccessTemplate<T>::add( const OPimRecord& rec) { const T& t = static_cast<const T&>(rec); return add(t); + } else { + owarn << "Adding not possible: Objecttype mismatch" << oendl; } return false; @@ -302,4 +320,6 @@ bool OPimAccessTemplate<T>::add( const OPimRecord* rec) { const T* t = static_cast<const T*>(rec); return add( *t ); + } else { + owarn << "Adding not possible: Objecttype mismatch" << oendl; } return false; diff --git a/libopie2/opiepim/core/opimtemplatebase.h b/libopie2/opiepim/core/opimtemplatebase.h index b48dfed..ec9a94e 100644 --- a/libopie2/opiepim/core/opimtemplatebase.h +++ b/libopie2/opiepim/core/opimtemplatebase.h @@ -32,4 +32,5 @@ /* OPIE */ #include <opie2/opimrecord.h> +#include <opie2/opimcache.h> /* QT */ @@ -71,5 +72,5 @@ private: /** * internal template base - * T needs to implement the copy c'tor!!! + * Attention: T needs to implement the copy c'tor!!! */ class OTemplateBasePrivate; @@ -77,5 +78,7 @@ template <class T = OPimRecord> class OTemplateBase : public OPimBase { public: + /** Look ahead direction of cache */ enum CacheDirection { Forward=0, Reverse }; + OTemplateBase() { }; @@ -89,4 +92,14 @@ public: virtual T find( int uid, const QArray<int>& items, uint current, CacheDirection dir = Forward )const = 0; + + /** + * Find in Cache.. + * Returns empty object if nothing found. + */ + virtual T cacheFind( int uid )const = 0; + + /** + * Put element into Cache + */ virtual void cache( const T& )const = 0; virtual void setSaneCacheSize( int ) = 0; @@ -95,4 +108,5 @@ public: OPimRecord* record(int uid )const; static T* rec(); + private: |