changeset 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
files DataController.cpp
diffstat 1 files changed, 29 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/DataController.cpp	Tue Aug 21 14:25:33 2012 +0200
+++ b/DataController.cpp	Tue Aug 21 15:09:22 2012 +0200
@@ -136,14 +136,35 @@
 
   tw->setUpdatesEnabled(false);
 
+  
+  QMultiMap<QString, QSharedPointer<FileDBLink::DBInfo> > nameLUP;
+  QMultiMap<quint64, QSharedPointer<FileDBLink::DBInfo> > sizeLUP;
+  QMultiMap<QDateTime, QSharedPointer<FileDBLink::DBInfo> > mtimeLUP;
+  QMultiMap<QByteArray, QSharedPointer<FileDBLink::DBInfo> > checksumLUP;
+
+  foreach(QSharedPointer<FileDBLink::DBInfo> line, elems) {
+    if (showNameDups) {
+      nameLUP.insertMulti(line->name(), line);
+    }
+    if (showSizeDups) {
+      sizeLUP.insertMulti(line->size(), line);
+    }
+    if (showMTimeDups) {
+      mtimeLUP.insertMulti(line->mtime(), line);
+    }
+    if (showCheckSumDups) {
+      checksumLUP.insertMulti(line->checksum(), line);
+    }
+  }
+
   foreach(QSharedPointer<FileDBLink::DBInfo> line, elems) {
     QTreeWidgetItem* item = 0;
     bool anyAdded = false;
 
     if (showNameDups) {
       QTreeWidgetItem* topLevelItem = 0;
-      foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) {
-	if(dup != line && line->name() == dup->name() ) {
+      foreach(QSharedPointer<FileDBLink::DBInfo> dup, nameLUP.values(line->name())) {
+	if(dup != line) {
 	  if (!topLevelItem) {
 	    topLevelItem =  new QTreeWidgetItem();
 	    topLevelItem->setData(0, Qt::DisplayRole, "Name");
@@ -159,8 +180,8 @@
 
     if (showSizeDups) {
       QTreeWidgetItem* topLevelItem = 0;
-      foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) {
-	if(dup != line && line->size() == dup->size() ) {
+      foreach(QSharedPointer<FileDBLink::DBInfo> dup, sizeLUP.values(line->size())) {
+	if(dup != line ) {
 	  if (!topLevelItem) {
 	    topLevelItem =  new QTreeWidgetItem();
 	    topLevelItem->setData(0, Qt::DisplayRole, "Size");
@@ -176,8 +197,8 @@
 
     if (showMTimeDups) {
       QTreeWidgetItem* topLevelItem = 0;
-      foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) {
-	if(dup != line && line->mtime() == dup->mtime() ) {
+      foreach(QSharedPointer<FileDBLink::DBInfo> dup, mtimeLUP.values(line->mtime())) {
+	if(dup != line ) {
 	  if (!topLevelItem) {
 	    topLevelItem =  new QTreeWidgetItem();
 	    topLevelItem->setData(0, Qt::DisplayRole, "MTime");
@@ -193,8 +214,8 @@
 
     if (showCheckSumDups) {
       QTreeWidgetItem* topLevelItem = 0;
-      foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) {
-	if(dup != line && line->checksum() == dup->checksum() ) {
+      foreach(QSharedPointer<FileDBLink::DBInfo> dup, checksumLUP.values(line->checksum())) {
+	if(dup != line) {
 	  if (!topLevelItem) {
 	    topLevelItem =  new QTreeWidgetItem();
 	    topLevelItem->setData(0, Qt::DisplayRole, "Checksum");