diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 93f54e3..abaea3c 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -4,7 +4,7 @@ "name": "Linux", "includePath": [ "${workspaceFolder}/**", - "/opt/Libraries/boost_1_84_0/include" + "/opt/Libraries/boost_1_85_0/include" ], "defines": [], "compilerPath": "/usr/bin/gcc", diff --git a/DataStructure/CMakeLists.txt b/DataStructure/CMakeLists.txt index be2a357..c7efdb9 100644 --- a/DataStructure/CMakeLists.txt +++ b/DataStructure/CMakeLists.txt @@ -3,7 +3,6 @@ add_library(DataStructure ArrayList.h BinaryTree.h BinarySearchTree.h - CircularDoublyLinkedList.h CircularLinkedList.h DoublyLinkedList.h DynamicArray.h diff --git a/DataStructure/CircularDoublyLinkedList.h b/DataStructure/CircularDoublyLinkedList.h deleted file mode 100644 index d2b6b4f..0000000 --- a/DataStructure/CircularDoublyLinkedList.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef DUALCIRCULARLIST_H -#define DUALCIRCULARLIST_H - -#include "DoublyLinkedList.h" - -namespace Kylin { -template -class CircularDoublyLinkedList : public DoublyLinkedList { - using Node = typename DoublyLinkedList::Node; - using Iterator = typename DoublyLinkedList::Iterator; - -public: - static constexpr size_t npos = static_cast(-1); - CircularDoublyLinkedList() { - this->m_header.next = reinterpret_cast(&(this->m_header)); - this->m_header.prev = reinterpret_cast(&(this->m_header)); - this->m_last = reinterpret_cast(&this->m_header); - } - - CircularDoublyLinkedList(std::initializer_list init) { - this->m_header.next = reinterpret_cast(&(this->m_header)); - this->m_header.prev = reinterpret_cast(&(this->m_header)); - this->m_last = reinterpret_cast(&this->m_header); - for (auto &value : init) append(value); - } - - CircularDoublyLinkedList(const CircularDoublyLinkedList &other) { - this->m_header.next = reinterpret_cast(&(this->m_header)); - this->m_header.prev = reinterpret_cast(&(this->m_header)); - this->m_last = reinterpret_cast(&this->m_header); - - auto sourceNode = other.m_header.next; - auto targetNode = reinterpret_cast(&this->m_header); - - for (size_t i = 0; i < other.m_size; i++) { - auto newNode = this->create(); - if (newNode == nullptr) THROW_EXCEPTION(NoEnoughMemoryException, "No memory to create node ..."); - newNode->value = sourceNode->value; - newNode->prev = targetNode; - newNode->next = targetNode->next; - - targetNode->next = newNode; - targetNode = newNode; - sourceNode = sourceNode->next; - this->m_size++; - this->m_last = targetNode; - } - } - - CircularDoublyLinkedList(CircularDoublyLinkedList &&other) { - this->m_size = other.m_size; - this->m_header = other.m_header; - this->m_last = other.m_last; - - other.m_size = 0; - other.m_header.next = nullptr; - other.m_last = reinterpret_cast(&other.m_header); - } - - void insert(size_t index, const T &value) override { - index = index % (this->m_size + 1); - if (index == this->m_size) return append(value); - auto node = this->create(); - if (node == nullptr) THROW_EXCEPTION(NoEnoughMemoryException, "No momery to insert new element..."); - - node->value = value; - - auto prev = position(index); - auto next = prev->next; - - node->next = next; - node->prev = prev; - - prev->next = node; - next->prev = node; - - this->m_size++; - } - - inline void append(const T &value) { - auto node = this->create(); - if (node == nullptr) THROW_EXCEPTION(NoEnoughMemoryException, "No memory to create node ..."); - node->value = value; - - node->prev = this->m_last; - node->next = this->m_last->next; - - this->m_last->next->prev = node; - this->m_last->next = node; - - this->m_last = node; - this->m_size++; - } - - void removeAt(size_t index) override { - index = mod(index); - auto prev = position(index); - auto toDel = prev->next; - auto next = toDel->next; - - prev->next = next; - next->prev = prev; - - this->destroy(toDel); - - this->m_size--; - } - - T &last() override { - if (this->m_size <= 0) THROW_EXCEPTION(InvalidOperationException, "There is no element in the container."); - return this->m_header.prev->value; - } - - void clear() override { - while (this->m_size > 0) { - removeAt(0); - } - } - Iterator end() override { return Iterator(reinterpret_cast(&this->m_header)); } - - Iterator end() const override { return Iterator(reinterpret_cast(&this->m_header)); } - - ~CircularDoublyLinkedList() { clear(); } - - T &operator[](size_t index) override { - index = mod(index); - return position(index)->next->value; - } - -protected: - size_t mod(size_t index) const { return (this->m_size == 0) ? 0 : (index % this->m_size); } - Node *position(size_t index) const override { - auto node = reinterpret_cast(&(this->m_header)); - for (size_t i = 0; i < index; i++) { - node = node->next; - } - return node; - } -}; -} // namespace Kylin -#endif // DUALCIRCULARLIST_H diff --git a/UnitTest/CMakeLists.txt b/UnitTest/CMakeLists.txt index dad5ee9..5402167 100644 --- a/UnitTest/CMakeLists.txt +++ b/UnitTest/CMakeLists.txt @@ -7,7 +7,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(UnitTest main.cpp DataStructure/BinarySearchTreeTest.cpp DataStructure/BinaryTreeTest.cpp - DataStructure/CircularDoublyLinkedListTest.cpp DataStructure/CircularLinkedListTest.cpp DataStructure/DoublyLinkedListTest.cpp DataStructure/DynamicArrayListTest.cpp diff --git a/UnitTest/DataStructure/CircularDoublyLinkedListTest.cpp b/UnitTest/DataStructure/CircularDoublyLinkedListTest.cpp deleted file mode 100644 index ce263b3..0000000 --- a/UnitTest/DataStructure/CircularDoublyLinkedListTest.cpp +++ /dev/null @@ -1,108 +0,0 @@ -#include "CircularDoublyLinkedList.h" -#include -#include - -using namespace Kylin; - -class CircularDoublyLinkedListTest { -public: - CircularDoublyLinkedList list{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; -}; - -BOOST_AUTO_TEST_SUITE(CircularDoublyLinkedListTestCase) -BOOST_FIXTURE_TEST_CASE(At, CircularDoublyLinkedListTest) { BOOST_CHECK_EQUAL(list.at(5), 5); } - -BOOST_FIXTURE_TEST_CASE(Size, CircularDoublyLinkedListTest) { BOOST_CHECK_EQUAL(list.size(), 10); } - -BOOST_FIXTURE_TEST_CASE(Last, CircularDoublyLinkedListTest) { BOOST_CHECK_EQUAL(list.last(), 9); } - -BOOST_FIXTURE_TEST_CASE(EmptyListCallLastCauseException, CircularDoublyLinkedListTest) { - CircularDoublyLinkedList emptyList; - BOOST_CHECK_THROW(emptyList.last(), InvalidOperationException); -} - -BOOST_FIXTURE_TEST_CASE(CallLastAfterRemoveLastElement, CircularDoublyLinkedListTest) { - list.removeAt(list.size() - 1); - BOOST_CHECK_EQUAL(list.last(), 8); -} - -BOOST_FIXTURE_TEST_CASE(RemoveIndexLessThenSize, CircularDoublyLinkedListTest) { - list.removeAt(3); - BOOST_CHECK_EQUAL(list[3], 4); - BOOST_CHECK_EQUAL(list.length(), 9); -} - -BOOST_FIXTURE_TEST_CASE(RemoveIndexBigThenSize, CircularDoublyLinkedListTest) { - list.removeAt(15); - BOOST_CHECK_EQUAL(list[5], 6); - BOOST_CHECK_EQUAL(list.length(), 9); -} - -BOOST_FIXTURE_TEST_CASE(Clear, CircularDoublyLinkedListTest) { - list.clear(); - BOOST_CHECK_EQUAL(list.length(), 0); -} - -BOOST_FIXTURE_TEST_CASE(IndexOf, CircularDoublyLinkedListTest) { BOOST_CHECK_EQUAL(list.indexOf(5), 5); } - -BOOST_FIXTURE_TEST_CASE(Append, CircularDoublyLinkedListTest) { - list.append(198); - BOOST_CHECK_EQUAL(list.length(), 11); - BOOST_CHECK_EQUAL(list.at(list.size() - 1), 198); -} - -BOOST_FIXTURE_TEST_CASE(Swap, CircularDoublyLinkedListTest) { - CircularDoublyLinkedList list2; - for (size_t i = 0; i < 5; i++) { - list2.insert(list2.length(), i + 10); - } - - list2.swap(list); - - BOOST_CHECK_EQUAL(list.size(), 5); - BOOST_CHECK_EQUAL(list2.size(), 10); - - for (size_t i = 0; i < 5; i++) { - BOOST_CHECK_EQUAL(list.at(i), i + 10); - } - - for (size_t i = 0; i < 10; i++) { - BOOST_CHECK_EQUAL(list2.at(i), i); - } -} - -BOOST_FIXTURE_TEST_CASE(InsertToIndexLessThenSize, CircularDoublyLinkedListTest) { - list.insert(4, 456); - BOOST_CHECK_EQUAL(list.length(), 11); - BOOST_CHECK_EQUAL(list.at(4), 456); - BOOST_CHECK_EQUAL(list.at(5), 4); -} - -BOOST_FIXTURE_TEST_CASE(InsertToIndexEuqalSize, CircularDoublyLinkedListTest) { - list.insert(list.size(), 456); - BOOST_CHECK_EQUAL(list.length(), 11); - BOOST_CHECK_EQUAL(list.at(list.size() - 1), 456); -} - -BOOST_FIXTURE_TEST_CASE(CopyConstructor, CircularDoublyLinkedListTest) { - auto list2(list); - BOOST_CHECK_EQUAL(list2.size(), 10); - list[9] = 2; //测试是否为浅拷贝 - BOOST_CHECK_EQUAL(list2[9], 9); -} - -BOOST_FIXTURE_TEST_CASE(MoveConstructor, CircularDoublyLinkedListTest) { - auto list2(std::move(list)); - BOOST_CHECK_EQUAL(list.empty(), true); - BOOST_CHECK_EQUAL(list2.size(), 10); - BOOST_CHECK_EQUAL(list2[9], 9); -} - -BOOST_FIXTURE_TEST_CASE(Iterator, CircularDoublyLinkedListTest) { - size_t i = 0; - for (const auto &value : list) { - BOOST_CHECK_EQUAL(value, i++); - } - BOOST_CHECK_EQUAL(list.size(), i); -} -BOOST_AUTO_TEST_SUITE_END() diff --git a/Universal/IoContext.cpp b/Universal/IoContext.cpp index d4b3656..967d46b 100644 --- a/Universal/IoContext.cpp +++ b/Universal/IoContext.cpp @@ -1,6 +1,7 @@ #include "IoContext.h" #include #include +#include IoContext::~IoContext() { m_ioContext->stop(); @@ -23,6 +24,7 @@ void IoContext::runIoContext() { } catch (const boost::exception &e) { LOG(error) << boost::diagnostic_information(e); } catch (const std::exception &e) { - LOG(error) << e.what(); + boost::stacktrace::stacktrace trace = boost::stacktrace::stacktrace::from_current_exception(); + LOG(error) << e.what() << ", trace:\n" << trace; } } diff --git a/resource/deploy.sh b/resource/deploy.sh index f172dc2..d4785f7 100755 --- a/resource/deploy.sh +++ b/resource/deploy.sh @@ -1,9 +1,9 @@ #!/bin/bash base_path=$(pwd) -qt_prefix_path="/opt/Qt/6.6.1/gcc_64" +qt_prefix_path="/opt/Qt/6.6.2/gcc_64" libraries_root="/opt/Libraries" -if [ $base_path==/home/* ]; then +if [ $base_path == /home/* ]; then build_path=${base_path}/build else build_path=/tmp/build @@ -35,7 +35,7 @@ elif [ -d "/opt/Qt/5.15.2/gcc_64" ]; then -DQt5Svg_DIR=${qt_prefix_path}/lib/cmake/Qt5Svg " else cmake_qt_parameters="" - echo "please install qt6.6.1 or qt5.15.2 ..." + echo "please install qt6.6.2 or qt5.15.2 ..." fi function cmake_scan() { @@ -48,7 +48,7 @@ function cmake_scan() { -B ${build_path} \ -DCMAKE_BUILD_TYPE=Debug \ -DUNIT_TEST=ON \ - -DBOOST_ROOT=${libraries_root}/boost_1_84_0 \ + -DBOOST_ROOT=${libraries_root}/boost_1_85_0 \ -DZeroMQ_ROOT=${libraries_root}/zeromq-4.3.4_debug \ ${cmake_qt_parameters} } @@ -66,7 +66,7 @@ function build() { if [ $? -ne 0 ]; then exit 1 fi - build/UnitTest/UnitTest + $build_path/UnitTest/UnitTest } function main() {