diff --git a/TTKModule/TTKText/TTKChardet/checker.cpp b/TTKModule/TTKText/TTKChardet/checker.cpp index 1354fd6..006589a 100644 --- a/TTKModule/TTKText/TTKChardet/checker.cpp +++ b/TTKModule/TTKText/TTKChardet/checker.cpp @@ -6,3 +6,7 @@ CheckerBase::CheckerBase(const string &name) } +CheckerBase::~CheckerBase() +{ + +} \ No newline at end of file diff --git a/TTKModule/TTKText/TTKChardet/checker.h b/TTKModule/TTKText/TTKChardet/checker.h index 565609a..75d7c43 100644 --- a/TTKModule/TTKText/TTKChardet/checker.h +++ b/TTKModule/TTKText/TTKChardet/checker.h @@ -29,6 +29,8 @@ class TTK_CORE_EXPORT CheckerBase { public: CheckerBase(const string &name); + virtual ~CheckerBase(); + virtual bool detect(const string &str) const = 0; private: diff --git a/ttkglobal.h b/ttkglobal.h index bbfb12f..3df8329 100644 --- a/ttkglobal.h +++ b/ttkglobal.h @@ -40,6 +40,29 @@ # define TTK_NO_WINEXTRAS #endif +#ifndef qPrintable +#define qPrintable(s) QString(s).toLocal8Bit().constData() +#endif + +#ifndef qUtf8Printable +#define qUtf8Printable(s) QString(s).toUtf8().constData() +#endif + +#if !TTK_QT_VERSION_CHECK(5,7,0) +#define TTK_AS_CONST +// this adds const to non-const objects (like std::as_const) +#ifndef Q_CC_MSVC +template +Q_DECL_CONSTEXPR typename std::add_const::type &qAsConst(T &t) noexcept { return t; } +// prevent rvalue arguments: +template +void qAsConst(const T &&) = delete; +#else +template +Q_DECL_CONSTEXPR typename std::add_const::type &qAsConst(T &t) { return t; } +#endif +#endif + // #ifdef QT_DEBUG # define TTK_DEBUG diff --git a/ttkprivate.h b/ttkprivate.h index e2054e3..a9cc766 100644 --- a/ttkprivate.h +++ b/ttkprivate.h @@ -20,6 +20,8 @@ ================================================= */ +#define TTK_CREATE_PRIVATE(Class) (*new Class##Private) + #define TTK_DECLARE_PRIVATE(Class) \ friend class Class##Private; \ TTKPrivateInterface ttk_d; @@ -27,11 +29,13 @@ #define TTK_DECLARE_PUBLIC(Class) \ friend class Class; -#define TTK_INIT_PRIVATE \ +#define TTK_INIT_PRIVATE(Class) \ + ttk_d.setPrivate(new Class##Private); \ ttk_d.setPublic(this); -#define TTK_INIT_PUBLIC(Class) \ - ttk_d.setPrivate(new Class##Private); +#define TTK_INIT_PRIVATE_D(PVT) \ + ttk_d.setPrivate(&PVT); \ + ttk_d.setPublic(this); #define TTK_D(Class) Class##Private *const d = static_cast(ttk_d()) #define TTK_Q(Class) Class *const q = static_cast(ttk_q()) @@ -45,6 +49,7 @@ class TTKPrivate public: TTKPrivate() { ttk_q_ptr = nullptr; } virtual ~TTKPrivate() { } + inline void setPublic(PUB* pub) { ttk_q_ptr = pub; } protected: @@ -63,7 +68,8 @@ class TTKPrivateInterface { friend class TTKPrivate; public: - TTKPrivateInterface() { pvt_ptr = new PVT; } + TTKPrivateInterface(PVT* pvt) : pvt_ptr(pvt) { } + TTKPrivateInterface() : pvt_ptr(nullptr) { } ~TTKPrivateInterface() { delete pvt_ptr; } inline void setPrivate(PVT* pvt) { delete pvt_ptr; pvt_ptr = pvt; }