Mercurial > dedupe
comparison FileDBLink.cpp @ 64:b9515dc35fe4
Make sure no file has greater linewidth than 80.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Fri, 14 Sep 2012 22:50:45 +0200 |
| parents | 247adcbbaf8b |
| children | 9744ec195be3 |
comparison
equal
deleted
inserted
replaced
| 63:dd086ec3220d | 64:b9515dc35fe4 |
|---|---|
| 26 } | 26 } |
| 27 } | 27 } |
| 28 | 28 |
| 29 void FileDBLink::addFile(const QFileInfo& fileinfo) | 29 void FileDBLink::addFile(const QFileInfo& fileinfo) |
| 30 { | 30 { |
| 31 addFile(fileinfo.absoluteFilePath(), fileinfo.size(), fileinfo.lastModified()); | 31 addFile(fileinfo.absoluteFilePath(), fileinfo.size(), |
| 32 fileinfo.lastModified()); | |
| 32 } | 33 } |
| 33 | 34 |
| 34 QByteArray FileDBLink::computeHash(const QString& path, QCryptographicHash::Algorithm algorithm) | 35 QByteArray FileDBLink::computeHash(const QString& path, |
| 36 QCryptographicHash::Algorithm algorithm) | |
| 35 { | 37 { |
| 36 const static uint buffersize = 32768; | 38 const static uint buffersize = 32768; |
| 37 QCryptographicHash hash(algorithm); | 39 QCryptographicHash hash(algorithm); |
| 38 QFile file(path); | 40 QFile file(path); |
| 39 if ( file.open( QIODevice::ReadOnly ) ) { | 41 if ( file.open( QIODevice::ReadOnly ) ) { |
| 53 } | 55 } |
| 54 return hash.result(); | 56 return hash.result(); |
| 55 } | 57 } |
| 56 | 58 |
| 57 | 59 |
| 58 void FileDBLink::addFile(const QString& path, qint64 size, const QDateTime& lastModified) | 60 void FileDBLink::addFile(const QString& path, qint64 size, |
| 61 const QDateTime& lastModified) | |
| 59 { | 62 { |
| 60 addFile(path, size, lastModified, computeHash(path)); | 63 addFile(path, size, lastModified, computeHash(path)); |
| 61 } | 64 } |
| 62 | 65 |
| 63 void FileDBLink::updateFile(const QFileInfo& fileinfo) | 66 void FileDBLink::updateFile(const QFileInfo& fileinfo) |
| 64 { | 67 { |
| 65 updateFile(fileinfo.absoluteFilePath(), fileinfo.size(), fileinfo.lastModified()); | 68 updateFile(fileinfo.absoluteFilePath(), fileinfo.size(), |
| 69 fileinfo.lastModified()); | |
| 66 } | 70 } |
| 67 | 71 |
| 68 void FileDBLink::updateFile(const QString& path, qint64 size, const QDateTime& lastModified) | 72 void FileDBLink::updateFile(const QString& path, qint64 size, |
| 73 const QDateTime& lastModified) | |
| 69 { | 74 { |
| 70 updateFile(path, size, lastModified, computeHash(path)); | 75 updateFile(path, size, lastModified, computeHash(path)); |
| 71 } | 76 } |
| 72 | 77 |
| 73 const QList<QSharedPointer<FileDBLink::DBInfo> > FileDBLink::sortOn(const QString& prefix, SORTORDER order, bool extended) | 78 const QList<FileDBLink::dbinf_ptr_t > |
| 79 FileDBLink::sortOn(const QString& prefix, SORTORDER order, bool extended) | |
| 74 { | 80 { |
| 75 QList<QSharedPointer<DBInfo> > list = (extended) ? computedValues(prefix) : values(prefix); | 81 QList<dbinf_ptr_t > list = |
| 82 (extended) ? computedValues(prefix) : values(prefix); | |
| 76 | 83 |
| 77 switch (order) { | 84 switch (order) { |
| 78 case PATH: | 85 case PATH: |
| 79 { | 86 { |
| 80 QList<QSharedPointer<FileDBLink::DBInfo> > oList; | 87 QList<FileDBLink::dbinf_ptr_t > oList; |
| 81 foreach(QSharedPointer<DBInfo> info, list) { | 88 foreach(dbinf_ptr_t info, list) { |
| 82 oList.push_back(info); | 89 oList.push_back(info); |
| 83 } | 90 } |
| 84 return oList; | 91 return oList; |
| 85 } | 92 } |
| 86 case SIZE: | 93 case SIZE: |
| 87 { | 94 { |
| 88 QMultiMap<quint64, QSharedPointer<DBInfo> > oList; | 95 QMultiMap<quint64, dbinf_ptr_t > oList; |
| 89 foreach(QSharedPointer<DBInfo> info, list) { | 96 foreach(dbinf_ptr_t info, list) { |
| 90 oList.insert(info->size(), info); | 97 oList.insert(info->size(), info); |
| 91 } | 98 } |
| 92 return oList.values(); | 99 return oList.values(); |
| 93 } | 100 } |
| 94 case MTIME: | 101 case MTIME: |
| 95 { | 102 { |
| 96 QMultiMap<QDateTime, QSharedPointer<DBInfo> > oList; | 103 QMultiMap<QDateTime, dbinf_ptr_t > oList; |
| 97 foreach(QSharedPointer<DBInfo> info, list) { | 104 foreach(dbinf_ptr_t info, list) { |
| 98 oList.insert(info->mtime(), info); | 105 oList.insert(info->mtime(), info); |
| 99 } | 106 } |
| 100 return oList.values(); | 107 return oList.values(); |
| 101 } | 108 } |
| 102 case CHECKSUM: | 109 case CHECKSUM: |
| 103 { | 110 { |
| 104 QMultiMap<QByteArray, QSharedPointer<DBInfo> > oList; | 111 QMultiMap<QByteArray, dbinf_ptr_t > oList; |
| 105 foreach(QSharedPointer<DBInfo> info, list) { | 112 foreach(dbinf_ptr_t info, list) { |
| 106 oList.insert(info->checksum(), info); | 113 oList.insert(info->checksum(), info); |
| 107 } | 114 } |
| 108 return oList.values(); | 115 return oList.values(); |
| 109 } | 116 } |
| 110 case EDIT: | 117 case EDIT: |
| 111 { | 118 { |
| 112 assert(extended); | 119 assert(extended); |
| 113 QMultiMap<int, QSharedPointer<DBInfo> > oList; | 120 QMultiMap<int, dbinf_ptr_t > oList; |
| 114 foreach(QSharedPointer<DBInfo> info, list) { | 121 foreach(dbinf_ptr_t info, list) { |
| 115 QSharedPointer<ExtendedDBInfo> ptr; | 122 QSharedPointer<ExtendedDBInfo> ptr; |
| 116 ptr = info.dynamicCast<ExtendedDBInfo>(); | 123 ptr = info.dynamicCast<ExtendedDBInfo>(); |
| 117 oList.insert(ptr->editDistance(), info); | 124 oList.insert(ptr->editDistance(), info); |
| 118 } | 125 } |
| 119 return oList.values(); | 126 return oList.values(); |
| 121 } | 128 } |
| 122 } | 129 } |
| 123 abort(); | 130 abort(); |
| 124 } | 131 } |
| 125 | 132 |
| 126 QSharedPointer<FileDBLink::DBInfo> FileDBLink::computedValue(const QSharedPointer<DBInfo>& info, | 133 FileDBLink::dbinf_ptr_t |
| 127 const QList<QSharedPointer<DBInfo> >& entries) | 134 FileDBLink::computedValue(const dbinf_ptr_t& info, |
| 135 const QList<dbinf_ptr_t >& entries) | |
| 128 { | 136 { |
| 129 QString p1 = info->name(); | 137 QString p1 = info->name(); |
| 130 int minDist = 100000; | 138 int minDist = 100000; |
| 131 QString other; | 139 QString other; |
| 132 for (QList<QSharedPointer<DBInfo> >::const_iterator it2 = entries.begin(); | 140 for (QList<dbinf_ptr_t >::const_iterator it2 = entries.begin(); |
| 133 it2 != entries.end(); ++it2) { | 141 it2 != entries.end(); ++it2) { |
| 134 if (info == *it2) | 142 if (info == *it2) |
| 135 continue; | 143 continue; |
| 136 QString p2 = (*it2)->name(); | 144 QString p2 = (*it2)->name(); |
| 137 int dist = EditDistance::Compute(p1, p2, false); | 145 int dist = EditDistance::Compute(p1, p2, false); |
| 138 if (dist < minDist) { | 146 if (dist < minDist) { |
| 139 minDist = dist; | 147 minDist = dist; |
| 140 other = (*it2)->path(); | 148 other = (*it2)->path(); |
| 141 } | 149 } |
| 142 } | 150 } |
| 143 return QSharedPointer<DBInfo>(new ExtendedDBInfo(*info, other, minDist)); | 151 return dbinf_ptr_t(new ExtendedDBInfo(*info, other, minDist)); |
| 144 } | 152 } |
| 145 | 153 |
| 146 const QList<QSharedPointer<FileDBLink::DBInfo> > FileDBLink::computedValues(const QString& prefix) const | 154 const QList<FileDBLink::dbinf_ptr_t> |
| 155 FileDBLink::computedValues(const QString& prefix) const | |
| 147 { | 156 { |
| 148 QList<QSharedPointer<DBInfo> > list; | 157 QList<dbinf_ptr_t > list; |
| 149 QList<QSharedPointer<DBInfo> > entries = values(prefix); | 158 QList<dbinf_ptr_t > entries = values(prefix); |
| 150 | 159 |
| 151 #if 1 | 160 #if 1 |
| 152 list = QtConcurrent::blockingMapped(entries, boost::bind( &FileDBLink::computedValue, _1, entries)); | 161 list = |
| 162 QtConcurrent::blockingMapped(entries, | |
| 163 boost::bind( &FileDBLink::computedValue, | |
| 164 _1, | |
| 165 entries)); | |
| 153 #else | 166 #else |
| 154 for (QList<QSharedPointer<DBInfo> >::const_iterator it1 = entries.begin(); | 167 for (QList<dbinf_ptr_t >::const_iterator it1 = entries.begin(); |
| 155 it1 != entries.end(); ++it1) { | 168 it1 != entries.end(); ++it1) { |
| 156 QSharedPointer<DBInfo> ext = computedValue(*it1, entries); | 169 dbinf_ptr_t ext = computedValue(*it1, entries); |
| 157 list.push_back(ext); | 170 list.push_back(ext); |
| 158 } | 171 } |
| 159 #endif | 172 #endif |
| 160 return list; | 173 return list; |
| 161 } | 174 } |
