comparison DataController.cpp @ 3:7a44ba08673d

Using LUTs for all filters.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Tue, 21 Aug 2012 15:09:22 +0200
parents 2833b7f8884a
children f489b0c9bf99
comparison
equal deleted inserted replaced
2:2833b7f8884a 3:7a44ba08673d
134 134
135 int n = 0; 135 int n = 0;
136 136
137 tw->setUpdatesEnabled(false); 137 tw->setUpdatesEnabled(false);
138 138
139
140 QMultiMap<QString, QSharedPointer<FileDBLink::DBInfo> > nameLUP;
141 QMultiMap<quint64, QSharedPointer<FileDBLink::DBInfo> > sizeLUP;
142 QMultiMap<QDateTime, QSharedPointer<FileDBLink::DBInfo> > mtimeLUP;
143 QMultiMap<QByteArray, QSharedPointer<FileDBLink::DBInfo> > checksumLUP;
144
145 foreach(QSharedPointer<FileDBLink::DBInfo> line, elems) {
146 if (showNameDups) {
147 nameLUP.insertMulti(line->name(), line);
148 }
149 if (showSizeDups) {
150 sizeLUP.insertMulti(line->size(), line);
151 }
152 if (showMTimeDups) {
153 mtimeLUP.insertMulti(line->mtime(), line);
154 }
155 if (showCheckSumDups) {
156 checksumLUP.insertMulti(line->checksum(), line);
157 }
158 }
159
139 foreach(QSharedPointer<FileDBLink::DBInfo> line, elems) { 160 foreach(QSharedPointer<FileDBLink::DBInfo> line, elems) {
140 QTreeWidgetItem* item = 0; 161 QTreeWidgetItem* item = 0;
141 bool anyAdded = false; 162 bool anyAdded = false;
142 163
143 if (showNameDups) { 164 if (showNameDups) {
144 QTreeWidgetItem* topLevelItem = 0; 165 QTreeWidgetItem* topLevelItem = 0;
145 foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { 166 foreach(QSharedPointer<FileDBLink::DBInfo> dup, nameLUP.values(line->name())) {
146 if(dup != line && line->name() == dup->name() ) { 167 if(dup != line) {
147 if (!topLevelItem) { 168 if (!topLevelItem) {
148 topLevelItem = new QTreeWidgetItem(); 169 topLevelItem = new QTreeWidgetItem();
149 topLevelItem->setData(0, Qt::DisplayRole, "Name"); 170 topLevelItem->setData(0, Qt::DisplayRole, "Name");
150 if(!item) 171 if(!item)
151 item = createItem(*line); 172 item = createItem(*line);
157 } 178 }
158 } 179 }
159 180
160 if (showSizeDups) { 181 if (showSizeDups) {
161 QTreeWidgetItem* topLevelItem = 0; 182 QTreeWidgetItem* topLevelItem = 0;
162 foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { 183 foreach(QSharedPointer<FileDBLink::DBInfo> dup, sizeLUP.values(line->size())) {
163 if(dup != line && line->size() == dup->size() ) { 184 if(dup != line ) {
164 if (!topLevelItem) { 185 if (!topLevelItem) {
165 topLevelItem = new QTreeWidgetItem(); 186 topLevelItem = new QTreeWidgetItem();
166 topLevelItem->setData(0, Qt::DisplayRole, "Size"); 187 topLevelItem->setData(0, Qt::DisplayRole, "Size");
167 if(!item) 188 if(!item)
168 item = createItem(*line); 189 item = createItem(*line);
174 } 195 }
175 } 196 }
176 197
177 if (showMTimeDups) { 198 if (showMTimeDups) {
178 QTreeWidgetItem* topLevelItem = 0; 199 QTreeWidgetItem* topLevelItem = 0;
179 foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { 200 foreach(QSharedPointer<FileDBLink::DBInfo> dup, mtimeLUP.values(line->mtime())) {
180 if(dup != line && line->mtime() == dup->mtime() ) { 201 if(dup != line ) {
181 if (!topLevelItem) { 202 if (!topLevelItem) {
182 topLevelItem = new QTreeWidgetItem(); 203 topLevelItem = new QTreeWidgetItem();
183 topLevelItem->setData(0, Qt::DisplayRole, "MTime"); 204 topLevelItem->setData(0, Qt::DisplayRole, "MTime");
184 if(!item) 205 if(!item)
185 item = createItem(*line); 206 item = createItem(*line);
191 } 212 }
192 } 213 }
193 214
194 if (showCheckSumDups) { 215 if (showCheckSumDups) {
195 QTreeWidgetItem* topLevelItem = 0; 216 QTreeWidgetItem* topLevelItem = 0;
196 foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { 217 foreach(QSharedPointer<FileDBLink::DBInfo> dup, checksumLUP.values(line->checksum())) {
197 if(dup != line && line->checksum() == dup->checksum() ) { 218 if(dup != line) {
198 if (!topLevelItem) { 219 if (!topLevelItem) {
199 topLevelItem = new QTreeWidgetItem(); 220 topLevelItem = new QTreeWidgetItem();
200 topLevelItem->setData(0, Qt::DisplayRole, "Checksum"); 221 topLevelItem->setData(0, Qt::DisplayRole, "Checksum");
201 if(!item) 222 if(!item)
202 item = createItem(*line); 223 item = createItem(*line);