Projekt

Allgemein

Profil

Herunterladen als
Herunterladen (2,18 KB) Statistiken
| Zweig: | Revision:
c22391b2 Christian Ehringfeld
/*
* Copyright (C) 2015 Christian Ehringfeld <c.ehringfeld@t-online.de>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
d84c91e7 Christian Ehringfeld
#ifndef CACHE_H
#define CACHE_H
11bbe9a6 Christian Ehringfeld
#include <QHash>
#include <QWeakPointer>
#include <QSharedPointer>
#include "entityinstancefactory.h"
#include "entity.h"
d84c91e7 Christian Ehringfeld
namespace CuteEntityManager {
11bbe9a6 Christian Ehringfeld
class Entity;
d84c91e7 Christian Ehringfeld
class Cache {
public:
Cache();
11bbe9a6 Christian Ehringfeld
QHash<QString, QWeakPointer<Entity> > getCache() const;
bool contains(qint64 id, const QString &classname);
bool contains(const QString &key);
template<class T> bool contains(qint64 id) {
bool ok = false;
Entity *e = EntityInstanceFactory::createInstance<T>();
if (e) {
ok = this->contains(id, QString(e->getClassname()));
delete e;
}
return ok;
}
62427ee0 Christian Ehringfeld
void insert(QSharedPointer<Entity> &entity);
3820ae33 Christian Ehringfeld
void remove(const QSharedPointer<Entity> &entity);
11bbe9a6 Christian Ehringfeld
void remove(const qint64 &id, const QString &classname);
template<class T> void remove(qint64 id) {
Entity *e = EntityInstanceFactory::createInstance<T>();
if (e) {
this->remove(id, QString(e->getClassname()));
delete e;
}
}

QSharedPointer<Entity> get(qint64 id, const QString &classname);
template<class T> QSharedPointer<Entity> get(qint64 id) {
Entity *e = EntityInstanceFactory::createInstance<T>();
if (e) {
return this->get(id, QString(e->getClassname()));
delete e;
}
return QSharedPointer<Entity>();
}

protected:
QString generateKey(qint64 id, const QString &classname);
private:
QHash<QString, QWeakPointer<Entity>> cache;
d84c91e7 Christian Ehringfeld
};
}

#endif // CACHE_H