Mercurial > dedupe
view MemoryDBLink.cpp @ 55:19b2a2d98788
Use define to multiplex between different types of decoders.
Expand the API.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Thu, 13 Sep 2012 23:47:29 +0200 |
| parents | d6fdca3bf24e |
| children | b9515dc35fe4 |
line wrap: on
line source
#include "MemoryDBLink.hpp" #include <QtCore/QStringList> void MemoryDBLink::addFile(const QString& path, qint64 size, const QDateTime& dtime, const QByteArray& hash) { addFile(DBInfo(path, size, dtime, hash)); } bool MemoryDBLink::tryAddFile(const DBInfo& dbinfo) { QMap<QString, QSharedPointer<DBInfo> >::iterator pos; pos = entries.find(dbinfo.path()); if (pos == entries.end()) { entries.insert(dbinfo.path(), QSharedPointer<DBInfo>(new DBInfo(dbinfo))); return true; } return false; } void MemoryDBLink::addFile(const DBInfo& dbinfo) { if (!tryAddFile(dbinfo)) { abort(); //Should throw exception } } QStringList MemoryDBLink::toStringList() { QStringList list; foreach(QSharedPointer<DBInfo> info, entries) { list << info->serialize(); } return list; } const QList<QSharedPointer<FileDBLink::DBInfo> > MemoryDBLink::values(const QString& prefix) const { if (prefix.size() == 0) return entries.values(); QList<QSharedPointer<FileDBLink::DBInfo> > list; foreach (QString key, entries.keys()) { if (key.startsWith(prefix)) list << entries[key]; } return list; } void MemoryDBLink::deleteFileFromDB(const QString& path) { entries.remove(path); } void MemoryDBLink::keepOnlyFromPrefix(const QString& prefix, const QStringList& files) { QStringList list; foreach(QSharedPointer<DBInfo> info, values(prefix)) { if (!files.contains(info->path())) { list << info->path(); } } foreach(QString path, list) { deleteFileFromDB(path); } } FileDBLink::DBStatus MemoryDBLink::existsWithMtime(const QString& path, const QDateTime& mtime) { if (entries.contains(path)) { QSharedPointer<DBInfo> info = entries[path]; if (info->mtime() == mtime) return SAME; return MTIME_DIFFERENT; } return NONE; } void MemoryDBLink::updateFile(const QString& path, qint64 size, const QDateTime& dtime, const QByteArray& hash) { updateFile(DBInfo(path, size, dtime, hash)); } void MemoryDBLink::updateFile(const DBInfo& dbinfo) { *entries[dbinfo.path()] = dbinfo; }
