logic: improved fulltext search performance (issue #680)

* move to multithreaded implementation
* omit unnecessary work
This commit is contained in:
mlangkabel
2019-03-12 11:16:49 +01:00
parent b6031fdb3a
commit db569ee551
4 changed files with 84 additions and 57 deletions
+8 -11
View File
@@ -5,6 +5,9 @@
TextCodec::TextCodec(const std::string& name)
: m_name(name)
{
m_codec = QTextCodec::codecForName(m_name.c_str());
m_decoder = std::make_shared<QTextDecoder>(m_codec);
m_encoder = std::make_shared<QTextEncoder>(m_codec);
}
std::string TextCodec::getName() const
@@ -14,8 +17,7 @@ std::string TextCodec::getName() const
bool TextCodec::isValid() const
{
QTextCodec* codec = QTextCodec::codecForName(m_name.c_str());
if (codec)
if (m_codec)
{
return true;
}
@@ -24,23 +26,18 @@ bool TextCodec::isValid() const
std::wstring TextCodec::decode(const std::string& unicodeString) const
{
QTextCodec* codec = QTextCodec::codecForName(m_name.c_str());
if (codec)
if (m_decoder)
{
QTextDecoder decoder(codec);
return decoder.toUnicode(unicodeString.c_str()).toStdWString();
return m_decoder->toUnicode(unicodeString.c_str()).toStdWString();
}
return QString::fromStdString(unicodeString).toStdWString();
}
std::string TextCodec::encode(const std::wstring& string) const
{
QTextCodec* codec = QTextCodec::codecForName(m_name.c_str());
if (codec)
if (m_encoder)
{
QTextEncoder encoder(codec);
return encoder.fromUnicode(QString::fromStdWString(string)).toStdString();
return m_encoder->fromUnicode(QString::fromStdWString(string)).toStdString();
}
return QString::fromStdWString(string).toStdString();
}
+8
View File
@@ -2,6 +2,11 @@
#define TEXT_CODEC_H
#include <string>
#include <memory>
class QTextCodec;
class QTextDecoder;
class QTextEncoder;
class TextCodec
{
@@ -17,6 +22,9 @@ public:
private:
const std::string m_name;
QTextCodec* m_codec;
std::shared_ptr<QTextDecoder> m_decoder;
std::shared_ptr<QTextEncoder> m_encoder;
};
#endif // TEXT_CODEC_H