diff -r ca23936b455b -r 5d201ee4a9c3 src/utility.h --- a/src/utility.h Mon Jun 06 22:01:22 2022 +0300 +++ b/src/utility.h Tue Jun 07 01:37:26 2022 +0300 @@ -19,84 +19,79 @@ #pragma once #include "basics.h" -namespace utility +// http://stackoverflow.com/a/18204188/3629665 +template +inline T rotl10(T x) { - // http://stackoverflow.com/a/18204188/3629665 - template - inline T rotl10(T x) - { - return (x << 10) | ((x >> 22) & 0x000000ff); - } + return (x << 10) | ((x >> 22) & 0x000000ff); +} + +template +inline T rotl20(T x) +{ + return (x << 20) | ((x >> 12) & 0x000000ff); +} - template - inline T rotl20(T x) - { - return (x << 20) | ((x >> 12) & 0x000000ff); - } +inline QString format(const QString& format_string) +{ + return format_string; +} - inline QString format(const QString& format_string) - { - return format_string; - } +template +QString format(const QString& format_string, T&& arg, Rest&&... rest) +{ + return format(format_string.arg(arg), std::forward(rest)...); +} - template - QString format(const QString& format_string, T&& arg, Rest&&... rest) - { - return format(format_string.arg(arg), std::forward(rest)...); - } - - inline QString quoted(QString string) +inline QString quoted(QString string) +{ + if (string.contains("'")) { - if (string.contains("'")) - { - string.replace("\"", "\\\""); - string = "\"" + string + "\""; - } - else - { - string = "'" + string + "'"; - } - return string; - } - - /** - * @brief Converts the specified vertex to a simple string - * @param vertex vertex to convert - * @return "x y z"-formatted string - */ - inline QString vertexToString(const glm::vec3& vertex) - { - return utility::format("%1 %2 %3", vertex.x, vertex.y, vertex.z); + string.replace("\"", "\\\""); + string = "\"" + string + "\""; } - - inline QString vertexToStringParens(const glm::vec3& vertex) - { - return utility::format("(%1, %2, %3)", vertex.x, vertex.y, vertex.z); - } - - inline QString transformToString(const glm::mat4& matrix) + else { - return utility::format( - "%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12", - matrix[3][0], - matrix[3][1], - matrix[3][2], - matrix[0][0], - matrix[1][0], - matrix[2][0], - matrix[0][1], - matrix[1][1], - matrix[2][1], - matrix[0][2], - matrix[1][2], - matrix[2][2]); + string = "'" + string + "'"; } + return string; } -using namespace utility; +/** + * @brief Converts the specified vertex to a simple string + * @param vertex vertex to convert + * @return "x y z"-formatted string + */ +inline QString vertexToString(const glm::vec3& vertex) +{ + return format("%1 %2 %3", vertex.x, vertex.y, vertex.z); +} + +inline QString vertexToStringParens(const glm::vec3& vertex) +{ + return format("(%1, %2, %3)", vertex.x, vertex.y, vertex.z); +} + +inline QString transformToString(const glm::mat4& matrix) +{ + return format( + "%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12", + matrix[3][0], + matrix[3][1], + matrix[3][2], + matrix[0][0], + matrix[1][0], + matrix[2][0], + matrix[0][1], + matrix[1][1], + matrix[2][1], + matrix[0][2], + matrix[1][2], + matrix[2][2]); +} template -inline unsigned int qHash(const glm::vec<3, T, Q>& key) +constexpr unsigned int qHash(const glm::vec<3, T, Q>& key) { - return qHash(key.x) ^ utility::rotl10(qHash(key.y)) ^ utility::rotl20(qHash(key.z)); + return qHash(key.x) ^ rotl10(qHash(key.y)) ^ rotl20(qHash(key.z)); }