Changed threading style - now its map-like type;
[mdictionary] / trunk / src / base / backbone / backbone.cpp
index 9e6ce45..293307f 100644 (file)
 #include "backbone.h"
 #include <QDebug>
 
+QString mappedSearch;
+QList<Translation*> mapSearch(CommonDictInterface *dict) {
+    if(dict)
+        return dict->searchWordList(mappedSearch, 15);
+    return QList<Translation*>();
+}
+
 void Backbone::init() {
    _interval = 250; //msec
    dryRun = false;
@@ -149,21 +156,26 @@ void Backbone::stopSearching() {
 
 
 
+
+
 void Backbone::search(QString word) {
     _timerSearch.stop();
     _result.clear();
-    _innerResult.clear();
+    mappedSearch = word.toLower();
 
+    _innerResult = QtConcurrent::mapped(activeDicts(), mapSearch);
     _timerSearch.start(_interval);
 
-    foreach(CommonDictInterface* dict, _dicts.keys())
-        if(_dicts[dict] == 1) {
-            QFuture<QList<Translation*> > tr =
-                    QtConcurrent::run(dict,
-                                  &CommonDictInterface::searchWordList,word,
-                                                         searchLimit());
-            _innerResult.append(tr);
-        }
+
+
+    //foreach(CommonDictInterface* dict, _dicts.keys())
+    //   if(_dicts[dict] == 1) {
+    //        QFuture<QList<Translation*> > tr =
+    //                QtConcurrent::run(dict,
+    //                              &CommonDictInterface::searchWordList,word,
+    //                                                     searchLimit());
+    //        _innerResult.append(tr);
+    //    }
 
 }
 
@@ -210,25 +222,24 @@ void Backbone::addDictionary(CommonDictInterface *dict, bool active) {
 
 
 int Backbone::activeSearches() const {
-    return _innerResult.size();
+    return -1; //TODO
 }
 
 
 
 void Backbone::translationReady() {
-    foreach(QFuture<QList<Translation*> > trans, _innerResult) {
-        if(!trans.isFinished())
-            continue;
-        QList<Translation*> tList = trans.result();
-        foreach(Translation* t, tList) {
-            _result.insert(t->key().toLower(), t);
-        }
-        _innerResult.removeOne(trans);
-    }
-    if(!_innerResult.size()) {
-        _timerSearch.stop();
-        Q_EMIT ready();
+    if(!_innerResult.isFinished())
+        return;
+    QFutureIterator<QList<Translation*> > it(_innerResult);
+
+    while(it.hasNext()) {
+        QList<Translation* > list = it.next();
+        foreach(Translation* trans, list)
+            _result.insert(trans->key().toLower(), trans);
     }
+
+    _timerSearch.stop();
+    Q_EMIT ready();
 }
 
 QStringList Backbone::getFilesFromDir(QString dir, QStringList nameFilter) {
@@ -435,3 +446,13 @@ void Backbone::htmlTranslationReady() {
     }
 
 }
+
+
+QList<CommonDictInterface*> Backbone::activeDicts() {
+    QList<CommonDictInterface*>res;
+    foreach(CommonDictInterface* dict, _dicts.keys())
+        if(_dicts[dict])
+            res.append(dict);
+    return res;
+
+}