diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2023-07-04 20:35:24 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2023-07-04 20:36:03 +0200 |
commit | d9910058a394330a404239ca38d95d909f15c68e (patch) | |
tree | 22437614d76a7dfe8aabcf7bdfe4c8c46f48fee9 /src/libs | |
parent | ae7e72cca51e309b50056fa095f3e913906f367c (diff) | |
parent | 7fada70e8f77fdccf7efc931421cf456561e097a (diff) |
Merge remote-tracking branch 'origin/qds/dev'
Change-Id: I91d9877ef6637d21e1106d6d363275295e6b55a3
Diffstat (limited to 'src/libs')
m--------- | src/libs/3rdparty/googletest | 0 | ||||
-rw-r--r-- | src/libs/3rdparty/sqlite/config.h | 4 | ||||
-rw-r--r-- | src/libs/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/libs/googletest/CMakeLists.txt | 27 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsreformatter.cpp | 25 | ||||
-rw-r--r-- | src/libs/sqlite/CMakeLists.txt | 30 | ||||
-rw-r--r-- | src/libs/sqlite/sqlitebasestatement.cpp | 3 | ||||
-rw-r--r-- | src/libs/sqlite/sqlitebasestatement.h | 20 | ||||
-rw-r--r-- | src/libs/utils/set_algorithm.h | 59 | ||||
-rw-r--r-- | src/libs/utils/smallstringview.h | 40 |
10 files changed, 162 insertions, 50 deletions
diff --git a/src/libs/3rdparty/googletest b/src/libs/3rdparty/googletest new file mode 160000 +Subproject b796f7d44681514f58a683a3a71ff17c94edb0c diff --git a/src/libs/3rdparty/sqlite/config.h b/src/libs/3rdparty/sqlite/config.h index 3672f4c5dd..f0e73be300 100644 --- a/src/libs/3rdparty/sqlite/config.h +++ b/src/libs/3rdparty/sqlite/config.h @@ -27,10 +27,6 @@ #include <string.h> -#if defined(SQLITE_STATIC_LIBRARY) || defined(SQLITEC_STATIC_LIBRARY) -#include "sqlite_static_config.h" -#endif - #if __has_include(<unistd.h>) #include <unistd.h> #endif diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt index de2d2b01ef..73a554bae8 100644 --- a/src/libs/CMakeLists.txt +++ b/src/libs/CMakeLists.txt @@ -22,6 +22,10 @@ if (WITH_QMLDESIGNER) add_subdirectory(qmlpuppetcommunication) endif() +if (WITH_TESTS) + add_subdirectory(googletest) +endif() + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/qlitehtml/src/CMakeLists.txt) option(BUILD_LIBRARY_QLITEHTML "Build library qlitehtml." ${BUILD_LIBRARIES_BY_DEFAULT}) set(QLITEHTML_VERSION_COMPAT ${IDE_VERSION_COMPAT} CACHE STRING "") diff --git a/src/libs/googletest/CMakeLists.txt b/src/libs/googletest/CMakeLists.txt new file mode 100644 index 0000000000..50e82e1edf --- /dev/null +++ b/src/libs/googletest/CMakeLists.txt @@ -0,0 +1,27 @@ +set(GOOGLETEST_DIR ${CMAKE_CURRENT_LIST_DIR}/../3rdparty/googletest) + +if(EXISTS "${GOOGLETEST_DIR}/googletest") + set(GOOGLETEST_SUBMODULE_IS_CHECKED_OUT YES) +else() + set(GOOGLETEST_SUBMODULE_IS_CHECKED_OUT NO) +endif() + +add_qtc_library(Googletest STATIC + CONDITION GOOGLETEST_SUBMODULE_IS_CHECKED_OUT + DEPENDS + Threads::Threads + PUBLIC_INCLUDES + "${GOOGLETEST_DIR}/googletest/include" + "${GOOGLETEST_DIR}/googlemock/include" + INCLUDES + "${GOOGLETEST_DIR}/googletest" + "${GOOGLETEST_DIR}/googlemock" + PROPERTIES + AUTOMOC OFF AUTOUIC OFF QT_COMPILE_OPTIONS_DISABLE_WARNINGS ON + POSITION_INDEPENDENT_CODE ON + URL "https://github.com/google/googletest" + DESCRIPTION "Google Testing and Mocking Framework" + SOURCES + "${GOOGLETEST_DIR}/googletest/src/gtest-all.cc" + "${GOOGLETEST_DIR}/googlemock/src/gmock-all.cc" +) diff --git a/src/libs/qmljs/qmljsreformatter.cpp b/src/libs/qmljs/qmljsreformatter.cpp index 232c0361a1..d2891451e9 100644 --- a/src/libs/qmljs/qmljsreformatter.cpp +++ b/src/libs/qmljs/qmljsreformatter.cpp @@ -590,11 +590,32 @@ protected: return true; } + bool visit(UiAnnotation *ast) override + { + out("@"); + accept(ast->qualifiedTypeNameId); + out(" "); + accept(ast->initializer); + return false; + } + + bool visit(UiAnnotationList *ast) override + { + for (UiAnnotationList *it = ast; it; it = it->next) { + accept(it->annotation); + newLine(); + } + return false; + } + bool visit(UiObjectDefinition *ast) override { + accept(ast->annotations); + accept(ast->qualifiedTypeNameId); out(" "); accept(ast->initializer); + return false; } @@ -687,9 +708,12 @@ protected: bool visit(UiScriptBinding *ast) override { + accept(ast->annotations); + accept(ast->qualifiedId); out(": ", ast->colonToken); accept(ast->statement); + return false; } @@ -1290,6 +1314,7 @@ protected: { for (UiObjectMemberList *it = ast; it; it = it->next) { accept(it->member); + if (it->next) newLine(); } diff --git a/src/libs/sqlite/CMakeLists.txt b/src/libs/sqlite/CMakeLists.txt index 4c7cd774c6..aa33171bab 100644 --- a/src/libs/sqlite/CMakeLists.txt +++ b/src/libs/sqlite/CMakeLists.txt @@ -1,8 +1,7 @@ -add_qtc_library(SqliteC OBJECT +add_qtc_library(SqliteInternal OBJECT PROPERTIES AUTOMOC OFF AUTOUIC OFF QT_COMPILE_OPTIONS_DISABLE_WARNINGS ON DEFINES SQLITE_CORE SQLITE_CUSTOM_INCLUDE=config.h $<$<CONFIG:Debug>:SQLITE_DEBUG> - PROPERTIES COMPILE_OPTIONS $<IF:$<CXX_COMPILER_ID:MSVC>,/FIconfig.h,-includeconfig.h> - PUBLIC_INCLUDES + INCLUDES ../3rdparty/sqlite SOURCES ../3rdparty/sqlite @@ -11,12 +10,26 @@ add_qtc_library(SqliteC OBJECT ../3rdparty/sqlite/sqlite3ext.h ../3rdparty/sqlite/carray.c ../3rdparty/sqlite/config.h + ../3rdparty/sqlite/sqlite_static_config.h ../3rdparty/sqlite/sqlite.h ) +extend_qtc_library(SqliteInternal + CONDITION QTC_STATIC_BUILD + PROPERTIES COMPILE_OPTIONS $<IF:$<CXX_COMPILER_ID:MSVC>,/FIsqlite_static_config.h,-includesqlite_static_config.h> +) + +if (APPLE) + extend_qtc_library(SqliteInternal DEFINES _BSD_SOURCE) +elseif (UNIX) + extend_qtc_library(SqliteInternal DEFINES _POSIX_C_SOURCE=200809L _GNU_SOURCE _DEFAULT_SOURCE) +endif() + add_qtc_library(Sqlite PROPERTIES AUTOMOC OFF AUTOUIC OFF - DEPENDS Qt::Core Threads::Threads ${CMAKE_DL_LIBS} SqliteC + DEPENDS Qt::Core Threads::Threads ${CMAKE_DL_LIBS} SqliteInternal + INCLUDES + ../3rdparty/sqlite PUBLIC_INCLUDES "${CMAKE_CURRENT_LIST_DIR}" DEFINES SQLITE_CUSTOM_INCLUDE=config.h $<$<CONFIG:Debug>:SQLITE_REVERSE> @@ -53,8 +66,7 @@ add_qtc_library(Sqlite sqliteids.h ) -if (APPLE) - extend_qtc_library(SqliteC DEFINES _BSD_SOURCE) -elseif (UNIX) - extend_qtc_library(SqliteC DEFINES _POSIX_C_SOURCE=200809L _GNU_SOURCE _DEFAULT_SOURCE) -endif() +extend_qtc_library(Sqlite + CONDITION QTC_STATIC_BUILD + PROPERTIES COMPILE_OPTIONS $<IF:$<CXX_COMPILER_ID:MSVC>,/FIsqlite_static_config.h,-includesqlite_static_config.h> +) diff --git a/src/libs/sqlite/sqlitebasestatement.cpp b/src/libs/sqlite/sqlitebasestatement.cpp index 91b417bea1..d9d677c395 100644 --- a/src/libs/sqlite/sqlitebasestatement.cpp +++ b/src/libs/sqlite/sqlitebasestatement.cpp @@ -274,6 +274,9 @@ void BaseStatement::bind(int index, ValueView value) void BaseStatement::prepare(Utils::SmallStringView sqlStatement) { + if (!m_database.isLocked()) + throw DatabaseIsNotLocked{}; + int resultCode; do { diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h index 1178b97f3a..54d08260b7 100644 --- a/src/libs/sqlite/sqlitebasestatement.h +++ b/src/libs/sqlite/sqlitebasestatement.h @@ -49,6 +49,7 @@ public: BaseStatement(const BaseStatement &) = delete; BaseStatement &operator=(const BaseStatement &) = delete; + BaseStatement(BaseStatement &&) = default; bool next() const; void step() const; @@ -146,6 +147,7 @@ class StatementImplementation : public BaseStatement public: using BaseStatement::BaseStatement; + StatementImplementation(StatementImplementation &&) = default; void execute() { @@ -496,16 +498,30 @@ private: return createValue<ResultType>(std::make_integer_sequence<int, ResultCount>{}); } + template<typename Callable, typename... Arguments> + CallbackControl invokeCallable(Callable &&callable, Arguments &&...arguments) + { + if constexpr (std::is_void_v<std::invoke_result_t<Callable, Arguments...>>) { + std::invoke(std::forward<Callable>(callable), std::forward<Arguments>(arguments)...); + return CallbackControl::Continue; + } else { + return std::invoke(std::forward<Callable>(callable), + std::forward<Arguments>(arguments)...); + } + } + template<typename Callable, int... ColumnIndices> CallbackControl callCallable(Callable &&callable, std::integer_sequence<int, ColumnIndices...>) { - return std::invoke(callable, ValueGetter(*this, ColumnIndices)...); + return invokeCallable(std::forward<Callable>(callable), + ValueGetter(*this, ColumnIndices)...); } template<typename Callable> CallbackControl callCallable(Callable &&callable) { - return callCallable(callable, std::make_integer_sequence<int, ResultCount>{}); + return callCallable(std::forward<Callable>(callable), + std::make_integer_sequence<int, ResultCount>{}); } void setMaximumResultCount(std::size_t count) diff --git a/src/libs/utils/set_algorithm.h b/src/libs/utils/set_algorithm.h index a3e442f736..f6d3f73fed 100644 --- a/src/libs/utils/set_algorithm.h +++ b/src/libs/utils/set_algorithm.h @@ -60,8 +60,17 @@ bool set_intersection_compare( ++first1; } else { if (!comp(*first2, *first1)) { - if (call(*first1++, *first2)) - return true; + if constexpr (std::is_void_v<std::invoke_result_t<Callable, + decltype(*first1), + decltype(*first2)>>) { + call(*first1, *first2); + ++first1; + } else { + auto success = call(*first1, *first2); + ++first1; + if (success) + return true; + } } ++first2; } @@ -71,6 +80,52 @@ bool set_intersection_compare( } template<class InputIt1, class InputIt2, class Callable, class Compare> +bool set_greedy_intersection_compare( + InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Callable call, Compare comp) +{ + while (first1 != last1 && first2 != last2) { + if (comp(*first1, *first2)) { + ++first1; + } else { + if (!comp(*first2, *first1)) { + if constexpr (std::is_void_v<std::invoke_result_t<Callable, + decltype(*first1), + decltype(*first2)>>) { + call(*first1, *first2); + ++first1; + } else { + auto success = call(*first1, *first2); + ++first1; + if (success) + return true; + } + } else { + ++first2; + } + } + } + + return false; +} + +template<typename InputIt1, typename InputIt2, typename OutputIt> +constexpr OutputIt set_greedy_intersection( + InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt result) +{ + while (first1 != last1 && first2 != last2) + if (*first1 < *first2) + ++first1; + else if (*first2 < *first1) + ++first2; + else { + *result = *first1; + ++first1; + ++result; + } + return result; +} + +template<class InputIt1, class InputIt2, class Callable, class Compare> void set_greedy_difference( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Callable call, Compare comp) { diff --git a/src/libs/utils/smallstringview.h b/src/libs/utils/smallstringview.h index 82a8c50305..982192c7a4 100644 --- a/src/libs/utils/smallstringview.h +++ b/src/libs/utils/smallstringview.h @@ -12,6 +12,12 @@ #include <string> #include <string_view> +#if __cpp_lib_constexpr_string >= 201907L +#define constexpr_string constexpr +#else +#define constexpr_string +#endif + namespace Utils { template <typename String> @@ -63,7 +69,7 @@ public: return SmallStringView(data() + position, length); } - constexpr20 operator std::string() const { return std::string(data(), size()); } + constexpr_string operator std::string() const { return std::string(data(), size()); } explicit operator QString() const { @@ -131,38 +137,6 @@ constexpr int compare(SmallStringView first, SmallStringView second) noexcept return first.compare(second); } -namespace Internal { -constexpr int reverse_memcmp(const char *first, const char *second, size_t n) -{ - const char *currentFirst = first + n - 1; - const char *currentSecond = second + n - 1; - - while (n > 0) { - // If the current characters differ, return an appropriately signed - // value; otherwise, keep searching backwards - int difference = *currentFirst - *currentSecond; - if (difference != 0) - return difference; - - --currentFirst; - --currentSecond; - --n; - } - - return 0; -} -} // namespace Internal - -constexpr int reverseCompare(SmallStringView first, SmallStringView second) noexcept -{ - int difference = Internal::reverse_memcmp(first.data(), second.data(), first.size()); - - if (difference == 0) - return int(first.size()) - int(second.size()); - - return difference; -} - } // namespace Utils constexpr Utils::SmallStringView operator""_sv(const char *const string, size_t size) |