aboutsummaryrefslogtreecommitdiff
path: root/lib/util.cpp
diff options
context:
space:
mode:
authorAlexey Andreyev <aa13q@ya.ru>2019-05-15 16:36:02 +0300
committerAlexey Andreyev <aa13q@ya.ru>2019-05-23 02:12:56 +0300
commit48ffee5fa78f44bd00d76772ad79ae4eeb6c8dc4 (patch)
tree7dd9996a3e89f36a942617a740fd33c069871e1e /lib/util.cpp
parentd6f39dcb0de69322479f287514a8c36afcb3fe7b (diff)
downloadlibquotient-48ffee5fa78f44bd00d76772ad79ae4eeb6c8dc4.tar.gz
libquotient-48ffee5fa78f44bd00d76772ad79ae4eeb6c8dc4.zip
Move out the logic of the hue calculation to utils
Diffstat (limited to 'lib/util.cpp')
-rw-r--r--lib/util.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/util.cpp b/lib/util.cpp
index 4e17d2f9..01d4e77b 100644
--- a/lib/util.cpp
+++ b/lib/util.cpp
@@ -23,6 +23,10 @@
#include <QtCore/QDir>
#include <QtCore/QStringBuilder>
+#include <QtCore/QCryptographicHash>
+#include <QtCore/QtEndian>
+#include <QtCore/QDataStream>
+
static const auto RegExpOptions =
QRegularExpression::CaseInsensitiveOption
| QRegularExpression::OptimizeOnFirstUsageOption
@@ -93,6 +97,21 @@ QString QMatrixClient::cacheLocation(const QString& dirName)
return cachePath;
}
+qreal QMatrixClient::stringToHueF(const QString &string)
+{
+ Q_ASSERT(!string.isEmpty());
+ QByteArray hash = QCryptographicHash::hash(string.toUtf8(),
+ QCryptographicHash::Sha1);
+ QDataStream dataStream(qToLittleEndian(hash).left(2));
+ dataStream.setByteOrder(QDataStream::LittleEndian);
+ quint16 hashValue;
+ dataStream >> hashValue;
+ const auto hueF =
+ qreal(hashValue)/std::numeric_limits<quint16>::max();
+ Q_ASSERT((0 <= hueF) && (hueF <= 1));
+ return hueF;
+}
+
// Tests for function_traits<>
#ifdef Q_CC_CLANG