#ifndef EXTRAS_H #define EXTRAS_H #include #include #include #include #include #include #include #include #include #include #include #if __GLIBCXX__ <= 20150623 namespace std { template unique_ptr make_unique(Args &&... args) { return std::unique_ptr(new T(std::forward(args)...)); } } #endif /*! * @brief convert a QRect to a QString with format `(, ) x` */ inline QString qRectToStr(const QRect &r) { return "(" % QString::number(r.x()) % ", " % QString::number(r.y()) % ") " % QString::number(r.width()) % "x" % QString::number(r.height()); } /*! * @brief convert a `Q_ENUM` to c-string */ template inline const char *qEnumToStr(EnumType value) { return QMetaEnum::fromType().valueToKey(value); } /*! * @brief convert a `Q_ENUMS` of `Plasma::Types::Location` to c-string */ inline const char *qEnumToStr(Plasma::Types::Location Enum) { static const int Index = Plasma::Types::staticMetaObject.indexOfEnumerator("Location"); return Plasma::Types::staticMetaObject.enumerator(Index).valueToKey(Enum); } /*! * @brief convert a `Q_ENUMS` of `Plasma::Types::FormFactor` to c-string */ inline const char *qEnumToStr(Plasma::Types::FormFactor Enum) { static const int Index = Plasma::Types::staticMetaObject.indexOfEnumerator("FormFactor"); return Plasma::Types::staticMetaObject.enumerator(Index).valueToKey(Enum); } /*! * @brief machine epsilon */ template typename std::enable_if < !std::is_integral(), bool >::type almost_equal(T x, T y, int ulp) { return std::abs(x - y) < std::numeric_limits::epsilon() * std::abs(x + y) * ulp || std::abs(x - y) < std::numeric_limits::min(); } #endif // EXTRAS_H