1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-20 10:54:14 +01:00

LP-513 gcs: remove unused libs/qtconcurrent

This commit is contained in:
Philippe Renon 2017-04-24 09:34:10 +02:00
parent 54a81fdcf1
commit 2d6d0b6974
10 changed files with 0 additions and 988 deletions

View File

@ -4,7 +4,6 @@ CONFIG += ordered
SUBDIRS = \
version_info \
qscispinbox\
qtconcurrent \
aggregation \
extensionsystem \
utils \

View File

@ -1,31 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#include "qtconcurrent/multitask.h"
#include "qtconcurrent/runextensions.h"

View File

@ -1,199 +0,0 @@
/**
******************************************************************************
*
* @file multitask.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef MULTITASK_H
#define MULTITASK_H
#include "qtconcurrent_global.h"
#include "runextensions.h"
#include <QtCore/QObject>
#include <QtCore/QList>
#include <QtCore/QEventLoop>
#include <QtCore/QFutureWatcher>
#include <QtConcurrent/QtConcurrentRun>
#include <QtCore/QThreadPool>
#include <QtDebug>
QT_BEGIN_NAMESPACE
namespace QtConcurrent {
class QTCONCURRENT_EXPORT MultiTaskBase : public QObject, public QRunnable {
Q_OBJECT
protected slots:
virtual void cancelSelf() = 0;
virtual void setFinished() = 0;
virtual void setProgressRange(int min, int max) = 0;
virtual void setProgressValue(int value) = 0;
virtual void setProgressText(QString value) = 0;
};
template <typename Class, typename R>
class MultiTask : public MultiTaskBase {
public:
MultiTask(void(Class::*fn)(QFutureInterface<R> &), const QList<Class *> &objects)
: fn(fn),
objects(objects)
{
maxProgress = 100 * objects.size();
}
QFuture<R> future()
{
futureInterface.reportStarted();
return futureInterface.future();
}
void run()
{
QThreadPool::globalInstance()->releaseThread();
futureInterface.setProgressRange(0, maxProgress);
foreach(Class * object, objects) {
QFutureWatcher<R> *watcher = new QFutureWatcher<R>();
watchers.insert(object, watcher);
finished.insert(watcher, false);
connect(watcher, SIGNAL(finished()), this, SLOT(setFinished()));
connect(watcher, SIGNAL(progressRangeChanged(int, int)), this, SLOT(setProgressRange(int, int)));
connect(watcher, SIGNAL(progressValueChanged(int)), this, SLOT(setProgressValue(int)));
connect(watcher, SIGNAL(progressTextChanged(QString)), this, SLOT(setProgressText(QString)));
watcher->setFuture(QtConcurrent::run(fn, object));
}
selfWatcher = new QFutureWatcher<R>();
connect(selfWatcher, SIGNAL(canceled()), this, SLOT(cancelSelf()));
selfWatcher->setFuture(futureInterface.future());
loop = new QEventLoop;
loop->exec();
futureInterface.reportFinished();
QThreadPool::globalInstance()->reserveThread();
qDeleteAll(watchers.values());
delete selfWatcher;
delete loop;
}
protected:
void cancelSelf()
{
foreach(QFutureWatcher<R> *watcher, watchers)
watcher->future().cancel();
}
void setFinished()
{
updateProgress();
QFutureWatcher<R> *watcher = static_cast<QFutureWatcher<R> *>(sender());
if (finished.contains(watcher)) {
finished[watcher] = true;
}
bool allFinished = true;
const QList<bool> finishedValues = finished.values();
foreach(bool isFinished, finishedValues) {
if (!isFinished) {
allFinished = false;
break;
}
}
if (allFinished) {
loop->quit();
}
}
void setProgressRange(int min, int max)
{
Q_UNUSED(min)
Q_UNUSED(max)
updateProgress();
}
void setProgressValue(int value)
{
Q_UNUSED(value)
updateProgress();
}
void setProgressText(QString value)
{
Q_UNUSED(value)
updateProgressText();
}
private:
void updateProgress()
{
int progressSum = 0;
const QList<QFutureWatcher<R> *> watchersValues = watchers.values();
foreach(QFutureWatcher<R> *watcher, watchersValues) {
if (watcher->progressMinimum() == watcher->progressMaximum()) {
if (watcher->future().isFinished() && !watcher->future().isCanceled()) {
progressSum += 100;
}
} else {
progressSum += 100 * (watcher->progressValue() - watcher->progressMinimum()) / (watcher->progressMaximum() - watcher->progressMinimum());
}
}
futureInterface.setProgressValue(progressSum);
}
void updateProgressText()
{
QString text;
const QList<QFutureWatcher<R> *> watchersValues = watchers.values();
foreach(QFutureWatcher<R> *watcher, watchersValues) {
if (!watcher->progressText().isEmpty()) {
text += watcher->progressText() + "\n";
}
}
text = text.trimmed();
futureInterface.setProgressValueAndText(futureInterface.progressValue(), text);
}
QFutureInterface<R> futureInterface;
void (Class::*fn)(QFutureInterface<R> &);
QList<Class *> objects;
QFutureWatcher<R> *selfWatcher;
QMap<Class *, QFutureWatcher<R> *> watchers;
QMap<QFutureWatcher<R> *, bool> finished;
QEventLoop *loop;
int maxProgress;
};
template <typename Class, typename T>
QFuture<T> run(void (Class::*fn)(QFutureInterface<T> &), const QList<Class *> &objects, int priority = 0)
{
MultiTask<Class, T> *task = new MultiTask<Class, T>(fn, objects);
QFuture<T> future = task->future();
QThreadPool::globalInstance()->start(task, priority);
return future;
}
} // namespace QtConcurrent
QT_END_NAMESPACE
#endif // MULTITASK_H

View File

@ -1 +0,0 @@
LIBS *= -l$$qtLibraryName(QtConcurrent)

View File

@ -1,10 +0,0 @@
TEMPLATE = lib
TARGET = QtConcurrent
DEFINES += BUILD_QTCONCURRENT
include(../../library.pri)
HEADERS += \
qtconcurrent_global.h \
multitask.h \
runextensions.h

View File

@ -1,40 +0,0 @@
/**
******************************************************************************
*
* @file qtconcurrent_global.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef QTCONCURRENT_GLOBAL_H
#define QTCONCURRENT_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(BUILD_QTCONCURRENT)
# define QTCONCURRENT_EXPORT Q_DECL_EXPORT
#else
# define QTCONCURRENT_EXPORT Q_DECL_IMPORT
#endif
#endif // QTCONCURRENT_GLOBAL_H

View File

@ -1,377 +0,0 @@
/**
******************************************************************************
*
* @file runextensions.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef QTCONCURRENT_RUNEX_H
#define QTCONCURRENT_RUNEX_H
#include <qrunnable.h>
#include <qfutureinterface.h>
#include <qthreadpool.h>
QT_BEGIN_NAMESPACE
namespace QtConcurrent {
template <typename T, typename FunctionPointer>
class StoredInterfaceFunctionCall0 : public QRunnable {
public:
StoredInterfaceFunctionCall0(void(fn)(QFutureInterface<T> &))
: fn(fn) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
fn(futureInterface);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
};
template <typename T, typename FunctionPointer, typename Class>
class StoredInterfaceMemberFunctionCall0 : public QRunnable {
public:
StoredInterfaceMemberFunctionCall0(void(Class::*fn)(QFutureInterface<T> &), Class *object)
: fn(fn), object(object) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
(object->*fn)(futureInterface);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Class *object;
};
template <typename T, typename FunctionPointer, typename Arg1>
class StoredInterfaceFunctionCall1 : public QRunnable {
public:
StoredInterfaceFunctionCall1(void(fn)(QFutureInterface<T> &, Arg1), Arg1 arg1)
: fn(fn), arg1(arg1) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
fn(futureInterface, arg1);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Arg1 arg1;
};
template <typename T, typename FunctionPointer, typename Class, typename Arg1>
class StoredInterfaceMemberFunctionCall1 : public QRunnable {
public:
StoredInterfaceMemberFunctionCall1(void(Class::*fn)(QFutureInterface<T> &, Arg1), Class *object, Arg1 arg1)
: fn(fn), object(object), arg1(arg1) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
(object->*fn)(futureInterface, arg1);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Class *object;
Arg1 arg1;
};
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2>
class StoredInterfaceFunctionCall2 : public QRunnable {
public:
StoredInterfaceFunctionCall2(void(fn)(QFutureInterface<T> &, Arg1, Arg2), Arg1 arg1, Arg2 arg2)
: fn(fn), arg1(arg1), arg2(arg2) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
fn(futureInterface, arg1, arg2);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Arg1 arg1; Arg2 arg2;
};
template <typename T, typename FunctionPointer, typename Class, typename Arg1, typename Arg2>
class StoredInterfaceMemberFunctionCall2 : public QRunnable {
public:
StoredInterfaceMemberFunctionCall2(void(Class::*fn)(QFutureInterface<T> &, Arg1, Arg2), Class *object, Arg1 arg1, Arg2 arg2)
: fn(fn), object(object), arg1(arg1), arg2(arg2) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
(object->*fn)(futureInterface, arg1, arg2);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Class *object;
Arg1 arg1; Arg2 arg2;
};
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3>
class StoredInterfaceFunctionCall3 : public QRunnable {
public:
StoredInterfaceFunctionCall3(void(fn)(QFutureInterface<T> &, Arg1, Arg2, Arg3), Arg1 arg1, Arg2 arg2, Arg3 arg3)
: fn(fn), arg1(arg1), arg2(arg2), arg3(arg3) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
fn(futureInterface, arg1, arg2, arg3);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Arg1 arg1; Arg2 arg2; Arg3 arg3;
};
template <typename T, typename FunctionPointer, typename Class, typename Arg1, typename Arg2, typename Arg3>
class StoredInterfaceMemberFunctionCall3 : public QRunnable {
public:
StoredInterfaceMemberFunctionCall3(void(Class::*fn)(QFutureInterface<T> &, Arg1, Arg2, Arg3), Class *object, Arg1 arg1, Arg2 arg2, Arg3 arg3)
: fn(fn), object(object), arg1(arg1), arg2(arg2), arg3(arg3) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
(object->*fn)(futureInterface, arg1, arg2, arg3);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Class *object;
Arg1 arg1; Arg2 arg2; Arg3 arg3;
};
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
class StoredInterfaceFunctionCall4 : public QRunnable {
public:
StoredInterfaceFunctionCall4(void(fn)(QFutureInterface<T> &, Arg1, Arg2, Arg3, Arg4), Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)
: fn(fn), arg1(arg1), arg2(arg2), arg3(arg3), arg4(arg4) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
fn(futureInterface, arg1, arg2, arg3, arg4);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4;
};
template <typename T, typename FunctionPointer, typename Class, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
class StoredInterfaceMemberFunctionCall4 : public QRunnable {
public:
StoredInterfaceMemberFunctionCall4(void(Class::*fn)(QFutureInterface<T> &, Arg1, Arg2, Arg3, Arg4), Class *object, Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)
: fn(fn), object(object), arg1(arg1), arg2(arg2), arg3(arg3), arg4(arg4) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
(object->*fn)(futureInterface, arg1, arg2, arg3, arg4);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Class *object;
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4;
};
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
class StoredInterfaceFunctionCall5 : public QRunnable {
public:
StoredInterfaceFunctionCall5(void(fn)(QFutureInterface<T> &, Arg1, Arg2, Arg3, Arg4, Arg5), Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)
: fn(fn), arg1(arg1), arg2(arg2), arg3(arg3), arg4(arg4), arg5(arg5) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
fn(futureInterface, arg1, arg2, arg3, arg4, arg5);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5;
};
template <typename T, typename FunctionPointer, typename Class, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
class StoredInterfaceMemberFunctionCall5 : public QRunnable {
public:
StoredInterfaceMemberFunctionCall5(void(Class::*fn)(QFutureInterface<T> &, Arg1, Arg2, Arg3, Arg4, Arg5), Class *object, Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)
: fn(fn), object(object), arg1(arg1), arg2(arg2), arg3(arg3), arg4(arg4), arg5(arg5) {}
QFuture<T> start()
{
futureInterface.reportStarted();
QFuture<T> future = futureInterface.future();
QThreadPool::globalInstance()->start(this);
return future;
}
void run()
{
(object->*fn)(futureInterface, arg1, arg2, arg3, arg4, arg5);
futureInterface.reportFinished();
}
private:
QFutureInterface<T> futureInterface;
FunctionPointer fn;
Class *object;
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5;
};
template <typename T>
QFuture<T> run(void (*functionPointer)(QFutureInterface<T> &))
{
return (new StoredInterfaceFunctionCall0<T, void (*)(QFutureInterface<T> &)>(functionPointer))->start();
}
template <typename T, typename Arg1>
QFuture<T> run(void (*functionPointer)(QFutureInterface<T> &, Arg1), Arg1 arg1)
{
return (new StoredInterfaceFunctionCall1<T, void (*)(QFutureInterface<T> &, Arg1), Arg1>(functionPointer, arg1))->start();
}
template <typename T, typename Arg1, typename Arg2>
QFuture<T> run(void (*functionPointer)(QFutureInterface<T> &, Arg1, Arg2), Arg1 arg1, Arg2 arg2)
{
return (new StoredInterfaceFunctionCall2<T, void (*)(QFutureInterface<T> &, Arg1, Arg2), Arg1, Arg2>(functionPointer, arg1, arg2))->start();
}
template <typename T, typename Arg1, typename Arg2, typename Arg3>
QFuture<T> run(void (*functionPointer)(QFutureInterface<T> &, Arg1, Arg2, Arg3), Arg1 arg1, Arg2 arg2, Arg3 arg3)
{
return (new StoredInterfaceFunctionCall3<T, void (*)(QFutureInterface<T> &, Arg1, Arg2, Arg3), Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start();
}
template <typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
QFuture<T> run(void (*functionPointer)(QFutureInterface<T> &, Arg1, Arg2, Arg3, Arg4), Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)
{
return (new StoredInterfaceFunctionCall4<T, void (*)(QFutureInterface<T> &, Arg1, Arg2, Arg3, Arg4), Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start();
}
template <typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
QFuture<T> run(void (*functionPointer)(QFutureInterface<T> &, Arg1, Arg2, Arg3, Arg4, Arg5), Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)
{
return (new StoredInterfaceFunctionCall5<T, void (*)(QFutureInterface<T> &, Arg1, Arg2, Arg3, Arg4, Arg5), Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start();
}
template <typename Class, typename T>
QFuture<T> run(void (Class::*fn)(QFutureInterface<T> &), Class *object)
{
return (new StoredInterfaceMemberFunctionCall0<T, void(Class::*) (QFutureInterface<T> &), Class>(fn, object))->start();
}
} // namespace QtConcurrent
QT_END_NAMESPACE
#endif // QTCONCURRENT_RUNEX_H

View File

@ -1,267 +0,0 @@
/**
******************************************************************************
*
* @file filesearch.cpp
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "filesearch.h"
#include <cctype>
#include <QtCore/QIODevice>
#include <QtCore/QBuffer>
#include <QtCore/QFile>
#include <QtCore/QFutureInterface>
#include <QtConcurrent/QtConcurrentRun>
#include <QtCore/QRegExp>
#include <QtCore/QCoreApplication>
#include <qtconcurrent/runextensions.h>
using namespace Utils;
static inline QString msgCanceled(const QString &searchTerm, int numMatches, int numFilesSearched)
{
return QCoreApplication::translate("Utils::FileSearch",
"%1: canceled. %n occurrences found in %2 files.",
NULL, numMatches).
arg(searchTerm).arg(numFilesSearched);
}
static inline QString msgFound(const QString &searchTerm, int numMatches, int numFilesSearched)
{
return QCoreApplication::translate("Utils::FileSearch",
"%1: %n occurrences found in %2 files.",
NULL, numMatches).
arg(searchTerm).arg(numFilesSearched);
}
static inline QString msgFound(const QString &searchTerm, int numMatches, int numFilesSearched, int filesSize)
{
return QCoreApplication::translate("Utils::FileSearch",
"%1: %n occurrences found in %2 of %3 files.",
NULL, numMatches).
arg(searchTerm).arg(numFilesSearched).arg(filesSize);
}
namespace {
void runFileSearch(QFutureInterface<FileSearchResult> &future,
QString searchTerm,
QStringList files,
QTextDocument::FindFlags flags,
QMap<QString, QString> fileToContentsMap)
{
future.setProgressRange(0, files.size());
int numFilesSearched = 0;
int numMatches = 0;
bool caseInsensitive = !(flags & QTextDocument::FindCaseSensitively);
bool wholeWord = (flags & QTextDocument::FindWholeWords);
QByteArray sa = searchTerm.toUtf8();
int scMaxIndex = sa.length() - 1;
const char *sc = sa.constData();
QByteArray sal = searchTerm.toLower().toUtf8();
const char *scl = sal.constData();
QByteArray sau = searchTerm.toUpper().toUtf8();
const char *scu = sau.constData();
int chunkSize = qMax(100000, sa.length());
QFile file;
QBuffer buffer;
foreach(QString s, files) {
if (future.isPaused()) {
future.waitForResume();
}
if (future.isCanceled()) {
future.setProgressValueAndText(numFilesSearched, msgCanceled(searchTerm, numMatches, numFilesSearched));
break;
}
QIODevice *device;
if (fileToContentsMap.contains(s)) {
buffer.setData(fileToContentsMap.value(s).toLocal8Bit());
device = &buffer;
} else {
file.setFileName(s);
device = &file;
}
if (!device->open(QIODevice::ReadOnly)) {
continue;
}
int lineNr = 1;
const char *startOfLastLine = NULL;
bool firstChunk = true;
while (!device->atEnd()) {
if (!firstChunk) {
device->seek(device->pos() - sa.length() + 1);
}
const QByteArray chunk = device->read(chunkSize);
const char *chunkPtr = chunk.constData();
startOfLastLine = chunkPtr;
for (const char *regionPtr = chunkPtr; regionPtr < chunkPtr + chunk.length() - scMaxIndex; ++regionPtr) {
const char *regionEnd = regionPtr + scMaxIndex;
if (*regionPtr == '\n') {
startOfLastLine = regionPtr + 1;
++lineNr;
} else if (
// case sensitive
(!caseInsensitive && *regionPtr == sc[0] && *regionEnd == sc[scMaxIndex])
||
// case insensitive
(caseInsensitive && (*regionPtr == scl[0] || *regionPtr == scu[0])
&& (*regionEnd == scl[scMaxIndex] || *regionEnd == scu[scMaxIndex]))
) {
const char *afterRegion = regionEnd + 1;
const char *beforeRegion = regionPtr - 1;
bool equal = true;
if (wholeWord &&
(isalnum(*beforeRegion)
|| (*beforeRegion == '_')
|| isalnum(*afterRegion)
|| (*afterRegion == '_'))) {
equal = false;
}
int regionIndex = 1;
for (const char *regionCursor = regionPtr + 1; regionCursor < regionEnd; ++regionCursor, ++regionIndex) {
if ( // case sensitive
(!caseInsensitive && equal && *regionCursor != sc[regionIndex])
||
// case insensitive
(caseInsensitive && equal && *regionCursor != sc[regionIndex] && *regionCursor != scl[regionIndex] && *regionCursor != scu[regionIndex])
) {
equal = false;
}
}
if (equal) {
int textLength = chunk.length() - (startOfLastLine - chunkPtr);
if (textLength > 0) {
QByteArray res;
res.reserve(256);
int i = 0;
int n = 0;
while (startOfLastLine[i] != '\n' && startOfLastLine[i] != '\r' && i < textLength && n++ < 256) {
res.append(startOfLastLine[i++]);
}
future.reportResult(FileSearchResult(s, lineNr, QString(res),
regionPtr - startOfLastLine, sa.length()));
++numMatches;
}
}
}
}
firstChunk = false;
}
++numFilesSearched;
future.setProgressValueAndText(numFilesSearched, msgFound(searchTerm, numMatches, numFilesSearched, files.size()));
device->close();
}
if (!future.isCanceled()) {
future.setProgressValueAndText(numFilesSearched, msgFound(searchTerm, numMatches, numFilesSearched));
}
}
void runFileSearchRegExp(QFutureInterface<FileSearchResult> &future,
QString searchTerm,
QStringList files,
QTextDocument::FindFlags flags,
QMap<QString, QString> fileToContentsMap)
{
future.setProgressRange(0, files.size());
int numFilesSearched = 0;
int numMatches = 0;
if (flags & QTextDocument::FindWholeWords) {
searchTerm = QString::fromLatin1("\\b%1\\b").arg(searchTerm);
}
const Qt::CaseSensitivity caseSensitivity = (flags & QTextDocument::FindCaseSensitively) ? Qt::CaseSensitive : Qt::CaseInsensitive;
const QRegExp expression(searchTerm, caseSensitivity);
QFile file;
QString str;
QTextStream stream;
foreach(const QString &s, files) {
if (future.isPaused()) {
future.waitForResume();
}
if (future.isCanceled()) {
future.setProgressValueAndText(numFilesSearched, msgCanceled(searchTerm, numMatches, numFilesSearched));
break;
}
bool needsToCloseFile = false;
if (fileToContentsMap.contains(s)) {
str = fileToContentsMap.value(s);
stream.setString(&str);
} else {
file.setFileName(s);
if (!file.open(QIODevice::ReadOnly)) {
continue;
}
needsToCloseFile = true;
stream.setDevice(&file);
}
int lineNr = 1;
QString line;
while (!stream.atEnd()) {
line = stream.readLine();
int pos = 0;
while ((pos = expression.indexIn(line, pos)) != -1) {
future.reportResult(FileSearchResult(s, lineNr, line,
pos, expression.matchedLength()));
pos += expression.matchedLength();
}
++lineNr;
}
++numFilesSearched;
future.setProgressValueAndText(numFilesSearched, msgFound(searchTerm, numMatches, numFilesSearched, files.size()));
if (needsToCloseFile) {
file.close();
}
}
if (!future.isCanceled()) {
future.setProgressValueAndText(numFilesSearched, msgFound(searchTerm, numMatches, numFilesSearched));
}
}
} // namespace
QFuture<FileSearchResult> Utils::findInFiles(const QString &searchTerm, const QStringList &files,
QTextDocument::FindFlags flags, QMap<QString, QString> fileToContentsMap)
{
return QtConcurrent::run<FileSearchResult, QString, QStringList, QTextDocument::FindFlags, QMap<QString, QString> >
(runFileSearch, searchTerm, files, flags, fileToContentsMap);
}
QFuture<FileSearchResult> Utils::findInFilesRegExp(const QString &searchTerm, const QStringList &files,
QTextDocument::FindFlags flags, QMap<QString, QString> fileToContentsMap)
{
return QtConcurrent::run<FileSearchResult, QString, QStringList, QTextDocument::FindFlags, QMap<QString, QString> >
(runFileSearchRegExp, searchTerm, files, flags, fileToContentsMap);
}

View File

@ -1,60 +0,0 @@
/**
******************************************************************************
*
* @file filesearch.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef FILESEARCH_H
#define FILESEARCH_H
#include "utils_global.h"
#include <QtCore/QStringList>
#include <QtCore/QFuture>
#include <QtCore/QMap>
#include <QTextDocument>
namespace Utils {
class QTCREATOR_UTILS_EXPORT FileSearchResult {
public:
FileSearchResult() {}
FileSearchResult(QString fileName, int lineNumber, QString matchingLine, int matchStart, int matchLength)
: fileName(fileName), lineNumber(lineNumber), matchingLine(matchingLine), matchStart(matchStart), matchLength(matchLength)
{}
QString fileName;
int lineNumber;
QString matchingLine;
int matchStart;
int matchLength;
};
QTCREATOR_UTILS_EXPORT QFuture<FileSearchResult> findInFiles(const QString &searchTerm, const QStringList &files,
QTextDocument::FindFlags flags, QMap<QString, QString> fileToContentsMap = QMap<QString, QString>());
QTCREATOR_UTILS_EXPORT QFuture<FileSearchResult> findInFilesRegExp(const QString &searchTerm, const QStringList &files,
QTextDocument::FindFlags flags, QMap<QString, QString> fileToContentsMap = QMap<QString, QString>());
} // namespace Utils
#endif // FILESEARCH_H

View File

@ -14,7 +14,6 @@ DEFINES += PLUGIN_REL_PATH=$$shell_quote(\"$$relative_path($$GCS_PLUGIN_PATH, $$
SOURCES += \
reloadpromptutils.cpp \
stringutils.cpp \
filesearch.cpp \
pathchooser.cpp \
pathlisteditor.cpp \
filewizardpage.cpp \
@ -73,7 +72,6 @@ HEADERS += \
utils_global.h \
reloadpromptutils.h \
stringutils.h \
filesearch.h \
listutils.h \
pathchooser.h \
pathlisteditor.h \