Changed threading style - now its map-like type;
authorBartosz Szatkowski <bulislaw@linux.com>
Thu, 12 Aug 2010 09:00:11 +0000 (11:00 +0200)
committerBartosz Szatkowski <bulislaw@linux.com>
Thu, 12 Aug 2010 09:00:11 +0000 (11:00 +0200)
Mapping word (to translate) on list of dictionaries

trunk/src/base/backbone/backbone.cpp
trunk/src/base/backbone/backbone.h

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;
+
+}
index a7dba3e..68808db 100644 (file)
@@ -35,6 +35,8 @@
 #include <QPluginLoader>
 #include <QFuture>
 #include <QtConcurrentRun>
+#include <QtConcurrentMap>
+#include <QFutureIterator>
 #include <QTimer>
 #include <QTime>
 #include <QDir>
@@ -156,7 +158,7 @@ Q_SIGNALS:
 private:
     QHash<CommonDictInterface*, bool> _dicts;
     QList<CommonDictInterface*> _plugins;
-    QList<QFuture<QList<Translation*> > > _innerResult;
+    QFuture<QList<Translation*> > _innerResult;
     QList<QFuture<QString> > _innerHtmlResult;
     QMultiHash<QString, Translation*> _result;
     QStringList _htmlResult;
@@ -165,12 +167,14 @@ private:
     QString _pluginPath, _defaultPluginPath;
     QString _configPath;
     QString _defaultConfigPath;
+    //QString _mappedSearch;
     int _searchLimit, _defaultSearchLimit;
     int _activeSearchNum;
     int _interval; //Search fetching timer.timeout interval in msec
     int _historyLen, _defaultHistoryLen;
     bool dryRun;
 
+
     void init();
     QStringList getFilesFromDir(QString dir, QStringList nameFilter);
     void loadPlugins(); //< locate and load plugins
@@ -181,6 +185,9 @@ private:
     void savePrefs(QSettings*);
     void saveDefaultPrefs(QSettings*);
     CommonDictInterface* plugin(QString type); //< search for given type plugin
+    QList<CommonDictInterface*> activeDicts();
+
+    //QList<Translation*> mapSearch(CommonDictInterface*) const;
 
     History* _history;