aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2023-07-04 20:35:24 +0200
committerTim Jenssen <tim.jenssen@qt.io>2023-07-04 20:36:03 +0200
commitd9910058a394330a404239ca38d95d909f15c68e (patch)
tree22437614d76a7dfe8aabcf7bdfe4c8c46f48fee9 /src/libs
parentae7e72cca51e309b50056fa095f3e913906f367c (diff)
parent7fada70e8f77fdccf7efc931421cf456561e097a (diff)
Merge remote-tracking branch 'origin/qds/dev'
Diffstat (limited to 'src/libs')
m---------src/libs/3rdparty/googletest0
-rw-r--r--src/libs/3rdparty/sqlite/config.h4
-rw-r--r--src/libs/CMakeLists.txt4
-rw-r--r--src/libs/googletest/CMakeLists.txt27
-rw-r--r--src/libs/qmljs/qmljsreformatter.cpp25
-rw-r--r--src/libs/sqlite/CMakeLists.txt30
-rw-r--r--src/libs/sqlite/sqlitebasestatement.cpp3
-rw-r--r--src/libs/sqlite/sqlitebasestatement.h20
-rw-r--r--src/libs/utils/set_algorithm.h59
-rw-r--r--src/libs/utils/smallstringview.h40
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)