From 45fb06af3fca16d47bbd78b2e3236e478312b38a Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Fri, 18 Aug 2023 20:51:36 +0100 Subject: [PATCH] Changes require for non-virtual messages --- .gitignore | 2 + .../etl/generators/message_packet_generator.h | 7 + .../etl/generators/message_router_generator.h | 10 +- include/etl/message.h | 111 ++- include/etl/message_packet.h | 7 + include/etl/message_router.h | 38 +- include/etl/platform.h | 11 +- test/CMakeLists.txt | 5 + test/run-tests.sh | 37 +- test/test_etl_traits.cpp | 5 +- test/test_fsm.cpp | 12 +- test/test_message_packet.cpp | 6 + test/test_message_router.cpp | 19 +- test/vs2022/etl.sln | 6 + test/vs2022/etl.vcxproj | 742 ++++++++++++++++++ 15 files changed, 979 insertions(+), 39 deletions(-) diff --git a/.gitignore b/.gitignore index b96d6aca..6800e824 100644 --- a/.gitignore +++ b/.gitignore @@ -382,3 +382,5 @@ test/vs2022/Release MSVC C++20 - No STL - Optimised -O2 test/vs2022/Release MSVC C++20 - Optimised O2 test/vs2022/Debug MSVC C++ 20 - No Tests test/vs2022/enc_temp_folder +test/vs2022/Debug MSVC C++20 - No virtual messages +examples/MutexMessageRouter/.vs diff --git a/include/etl/generators/message_packet_generator.h b/include/etl/generators/message_packet_generator.h index 65b00ca0..49c73a70 100644 --- a/include/etl/generators/message_packet_generator.h +++ b/include/etl/generators/message_packet_generator.h @@ -63,6 +63,10 @@ cog.outl("//******************************************************************** #ifndef ETL_MESSAGE_PACKET_INCLUDED #define ETL_MESSAGE_PACKET_INCLUDED +#include "platform.h" + +#if ETL_HAS_VIRTUAL_MESSAGES + #include "message.h" #include "error_handler.h" #include "static_assert.h" @@ -977,5 +981,8 @@ namespace etl /*[[[end]]]*/ #endif } +#else + #error "etl::message_packet is not compatible with non-virtual etl::imessage" +#endif #endif diff --git a/include/etl/generators/message_router_generator.h b/include/etl/generators/message_router_generator.h index 50c7f5a9..32903acf 100644 --- a/include/etl/generators/message_router_generator.h +++ b/include/etl/generators/message_router_generator.h @@ -66,7 +66,9 @@ cog.outl("//******************************************************************** #include "platform.h" #include "message.h" #include "shared_message.h" -#include "message_packet.h" +#if ETL_HAS_VIRTUAL_MESSAGES + #include "message_packet.h" +#endif #include "message_types.h" #include "alignment.h" #include "error_handler.h" @@ -402,7 +404,9 @@ namespace etl { public: +#if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; +#endif //********************************************** message_router() @@ -560,10 +564,12 @@ namespace etl cog.outl("{") cog.outl("public:") cog.outl("") + cog.outl("#if ETL_HAS_VIRTUAL_MESSAGES") cog.out(" typedef etl::message_packet<") for n in range(1, int(Handlers)): cog.out("T%s, " % n) cog.outl(" T%s> message_packet;" % int(Handlers)) + cog.outl("#endif") cog.outl("") cog.outl(" //**********************************************") cog.outl(" message_router(etl::message_router_id_t id_)") @@ -728,10 +734,12 @@ namespace etl cog.outl("{") cog.outl("public:") cog.outl("") + cog.outl("#if ETL_HAS_VIRTUAL_MESSAGES") cog.out(" typedef etl::message_packet<") for t in range(1, n): cog.out("T%s, " % t) cog.outl(" T%s> message_packet;" % n) + cog.outl("#endif") cog.outl("") cog.outl(" //**********************************************") cog.outl(" message_router(etl::message_router_id_t id_)") diff --git a/include/etl/message.h b/include/etl/message.h index 93e2ddad..22a802e6 100644 --- a/include/etl/message.h +++ b/include/etl/message.h @@ -62,40 +62,127 @@ namespace etl } }; +#if ETL_HAS_VIRTUAL_MESSAGES //*************************************************************************** - // Message interface. + /// Message interface. + /// Virtual. //*************************************************************************** class imessage { public: - virtual ~imessage() + //*********************************** + virtual ~imessage() ETL_NOEXCEPT { } + //*********************************** ETL_NODISCARD virtual etl::message_id_t get_message_id() const ETL_NOEXCEPT = 0; }; //*************************************************************************** - // Message type. + /// Message type. + /// Virtual. //*************************************************************************** - template - class message : public TParent + template + class message : public TBase { - ETL_STATIC_ASSERT((etl::is_base_of::value), "TParent is not derived from etl::imessage"); - public: - static ETL_CONSTANT etl::message_id_t ID = ID_; - - ETL_NODISCARD etl::message_id_t get_message_id() const ETL_NOEXCEPT ETL_OVERRIDE + //*********************************** + ETL_NODISCARD virtual etl::message_id_t get_message_id() const ETL_NOEXCEPT ETL_OVERRIDE { return ID; } + + //*********************************** + static ETL_CONSTANT etl::message_id_t ID = ID_; }; - template - ETL_CONSTANT etl::message_id_t message::ID; +#else + + //*************************************************************************** + /// Message interface. + /// Non-virtual. + //*************************************************************************** + class imessage + { + public: + + //*********************************** + ETL_NODISCARD etl::message_id_t get_message_id() const ETL_NOEXCEPT + { + return id; + } + + protected: + + //*********************************** + imessage(etl::message_id_t id_) ETL_NOEXCEPT + : id(id_) + { + } + + //*********************************** + imessage(const imessage& other) ETL_NOEXCEPT + : id(other.id) + { + } + + //*********************************** + imessage& operator =(const imessage& rhs) ETL_NOEXCEPT + { + id = rhs.id; + return *this; + } + + //*********************************** + etl::message_id_t id; + + private: + + imessage() ETL_DELETE; + }; + + //*************************************************************************** + /// Message type. + /// Non-virtual. + //*************************************************************************** + template + class message : public TBase + { + public: + + ETL_STATIC_ASSERT((etl::is_base_of::value), "TBase is not derived from etl::imessage"); + + //*********************************** + message() ETL_NOEXCEPT + : TBase(ID) + { + } + + //*********************************** + message(const message&) ETL_NOEXCEPT + : TBase(ID) + { + } + + //*********************************** + message& operator =(const message&) ETL_NOEXCEPT + { + return *this; + } + + //*********************************** + static ETL_CONSTANT etl::message_id_t ID = ID_; + }; +#endif + + //*************************************************************************** + /// The message's static ID. + //*************************************************************************** + template + ETL_CONSTANT etl::message_id_t etl::message::ID; } #endif diff --git a/include/etl/message_packet.h b/include/etl/message_packet.h index 59597ed6..bc61247d 100644 --- a/include/etl/message_packet.h +++ b/include/etl/message_packet.h @@ -51,6 +51,10 @@ SOFTWARE. #ifndef ETL_MESSAGE_PACKET_INCLUDED #define ETL_MESSAGE_PACKET_INCLUDED +#include "platform.h" + +#if ETL_HAS_VIRTUAL_MESSAGES + #include "message.h" #include "error_handler.h" #include "static_assert.h" @@ -4717,5 +4721,8 @@ namespace etl }; #endif } +#else + #error "etl::message_packet is not compatible with non-virtual etl::imessage" +#endif #endif diff --git a/include/etl/message_router.h b/include/etl/message_router.h index 75172e72..b7807a77 100644 --- a/include/etl/message_router.h +++ b/include/etl/message_router.h @@ -54,7 +54,9 @@ SOFTWARE. #include "platform.h" #include "message.h" #include "shared_message.h" -#include "message_packet.h" +#if ETL_HAS_VIRTUAL_MESSAGES + #include "message_packet.h" +#endif #include "message_types.h" #include "alignment.h" #include "error_handler.h" @@ -390,7 +392,9 @@ namespace etl { public: +#if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; +#endif //********************************************** message_router() @@ -538,7 +542,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -683,7 +689,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -828,7 +836,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -972,7 +982,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1114,7 +1126,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1255,7 +1269,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1395,7 +1411,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1534,7 +1552,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1671,7 +1691,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1807,7 +1829,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1941,7 +1965,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2074,7 +2100,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2205,7 +2233,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2335,7 +2365,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2464,7 +2496,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2592,7 +2626,9 @@ namespace etl { public: + #if ETL_HAS_VIRTUAL_MESSAGES typedef etl::message_packet< T1> message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) diff --git a/include/etl/platform.h b/include/etl/platform.h index 6561d2b9..7c80dfe7 100644 --- a/include/etl/platform.h +++ b/include/etl/platform.h @@ -231,6 +231,14 @@ SOFTWARE. #define ETL_HAS_MUTABLE_ARRAY_VIEW 0 #endif +//************************************* +// Indicate if etl::imassage is to be non-virtual. +#if defined(ETL_MESSAGES_ARE_NOT_VIRTUAL) + #define ETL_HAS_VIRTUAL_MESSAGES 0 +#else + #define ETL_HAS_VIRTUAL_MESSAGES 1 +#endif + //************************************* // The macros below are dependent on the profile. // C++11 @@ -449,7 +457,7 @@ namespace etl static ETL_CONSTANT bool using_generic_compiler = (ETL_USING_GENERIC_COMPILER == 1); static ETL_CONSTANT bool using_legacy_bitset = (ETL_USING_LEGACY_BITSET == 1); static ETL_CONSTANT bool using_exceptions = (ETL_USING_EXCEPTIONS == 1); - + // Has... static ETL_CONSTANT bool has_initializer_list = (ETL_HAS_INITIALIZER_LIST == 1); static ETL_CONSTANT bool has_8bit_types = (ETL_USING_8BIT_TYPES == 1); @@ -467,6 +475,7 @@ namespace etl static ETL_CONSTANT bool has_ivector_repair = (ETL_HAS_IVECTOR_REPAIR == 1); static ETL_CONSTANT bool has_mutable_array_view = (ETL_HAS_MUTABLE_ARRAY_VIEW == 1); static ETL_CONSTANT bool has_ideque_repair = (ETL_HAS_IDEQUE_REPAIR == 1); + static ETL_CONSTANT bool has_virtual_messages = (ETL_HAS_VIRTUAL_MESSAGES == 1); // Is... static ETL_CONSTANT bool is_debug_build = (ETL_IS_DEBUG_BUILD == 1); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6fb1de1d..af3359bd 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -321,6 +321,11 @@ if (ETL_USER_DEFINED_TYPE_TRAITS) target_compile_definitions(etl_tests PRIVATE -DETL_USER_DEFINED_TYPE_TRAITS) endif() +if (ETL_MESSAGES_ARE_NOT_VIRTUAL) + message(STATUS "Compiling for non-virtual messages") + target_compile_definitions(etl_tests PRIVATE -DETL_MESSAGES_ARE_NOT_VIRTUAL) +endif() + if (ETL_FORCE_TEST_CPP03_IMPLEMENTATION) message(STATUS "Compiling for C++03 tests") target_compile_definitions(etl_tests PRIVATE -DETL_FORCE_TEST_CPP03_IMPLEMENTATION) diff --git a/test/run-tests.sh b/test/run-tests.sh index 1e0d4f61..6a6c8bd0 100644 --- a/test/run-tests.sh +++ b/test/run-tests.sh @@ -155,7 +155,28 @@ SetTestName "GCC - STL" PrintHeader rm * -rf gcc --version | grep gcc | tee -a log.txt -cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize .. +cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF .. +cmake --build . +if [ $? -eq 0 ]; then + PassedCompilation +else + FailedCompilation + exit $? +fi +./etl_tests +if [ $? -eq 0 ]; then + PassedTests +else + FailedTests + exit $? +fi + +#****************************************************************************** +SetTestName "GCC - STL - Non-virtual messages" +PrintHeader +rm * -rf +gcc --version | grep gcc | tee -a log.txt +cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=ON .. cmake --build . if [ $? -eq 0 ]; then PassedCompilation @@ -176,7 +197,7 @@ SetTestName "GCC - STL - Force C++03" PrintHeader rm * -rf gcc --version | grep gcc | tee -a log.txt -cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize .. +cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF .. cmake --build . if [ $? -eq 0 ]; then PassedCompilation @@ -197,7 +218,7 @@ SetTestName "GCC - No STL" PrintHeader rm * -rf gcc --version | grep gcc | tee -a log.txt -cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize .. +cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF .. cmake --build . if [ $? -eq 0 ]; then PassedCompilation @@ -218,7 +239,7 @@ SetTestName "GCC - No STL - Force C++03" PrintHeader rm * -rf gcc --version | grep gcc | tee -a log.txt -cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize .. +cmake -DCMAKE_CXX_COMPILER="g++" -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF .. cmake --build . if [ $? -eq 0 ]; then PassedCompilation @@ -241,7 +262,7 @@ SetTestName "Clang - STL" PrintHeader rm * -rf clang --version | grep clang | tee -a log.txt -cmake -DCMAKE_CXX_COMPILER="clang++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize .. +cmake -DCMAKE_CXX_COMPILER="clang++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF .. cmake --build . if [ $? -eq 0 ]; then PassedCompilation @@ -262,7 +283,7 @@ SetTestName "Clang - STL - Force C++03" PrintHeader rm * -rf clang --version | grep clang | tee -a log.txt -cmake -DCMAKE_CXX_COMPILER="clang++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize .. +cmake -DCMAKE_CXX_COMPILER="clang++" -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF .. cmake --build . if [ $? -eq 0 ]; then PassedCompilation @@ -283,7 +304,7 @@ SetTestName "Clang - No STL" PrintHeader rm * -rf clang --version | grep clang | tee -a log.txt -cmake -DCMAKE_CXX_COMPILER="clang++" -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize .. +cmake -DCMAKE_CXX_COMPILER="clang++" -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF .. cmake --build . if [ $? -eq 0 ]; then PassedCompilation @@ -304,7 +325,7 @@ SetTestName "Clang - No STL - Force C++03" PrintHeader rm * -rf clang --version | grep clang | tee -a log.txt -cmake -DCMAKE_CXX_COMPILER="clang++" -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize .. +cmake -DCMAKE_CXX_COMPILER="clang++" -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_OPTIMISATION=$opt -DETL_CXX_STANDARD=$cxx_standard -DETL_ENABLE_SANITIZER=$sanitize -DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF .. cmake --build . if [ $? -eq 0 ]; then PassedCompilation diff --git a/test/test_etl_traits.cpp b/test/test_etl_traits.cpp index b8bfc248..a071960e 100644 --- a/test/test_etl_traits.cpp +++ b/test/test_etl_traits.cpp @@ -59,6 +59,7 @@ namespace CHECK_EQUAL((ETL_USING_INTEL_COMPILER == 1), etl::traits::using_intel_compiler); CHECK_EQUAL((ETL_USING_TEXAS_INSTRUMENTS_COMPILER == 1), etl::traits::using_texas_instruments_compiler); CHECK_EQUAL((ETL_USING_GENERIC_COMPILER == 1), etl::traits::using_generic_compiler); + CHECK_EQUAL((ETL_USING_8BIT_TYPES == 1), etl::traits::has_8bit_types); CHECK_EQUAL((ETL_USING_64BIT_TYPES == 1), etl::traits::has_64bit_types); CHECK_EQUAL((ETL_HAS_ATOMIC == 1), etl::traits::has_atomic); @@ -74,7 +75,9 @@ namespace CHECK_EQUAL((ETL_HAS_ISTRING_REPAIR == 1), etl::traits::has_istring_repair); CHECK_EQUAL((ETL_HAS_IVECTOR_REPAIR == 1), etl::traits::has_ivector_repair); CHECK_EQUAL((ETL_HAS_IDEQUE_REPAIR == 1), etl::traits::has_ideque_repair); - CHECK_EQUAL((ETL_HAS_MUTABLE_ARRAY_VIEW == 1), etl::traits::has_mutable_array_view); + CHECK_EQUAL((ETL_HAS_MUTABLE_ARRAY_VIEW == 1), etl::traits::has_mutable_array_view); + CHECK_EQUAL((ETL_HAS_VIRTUAL_MESSAGES == 1), etl::traits::has_virtual_messages); + CHECK_EQUAL((ETL_IS_DEBUG_BUILD == 1), etl::traits::is_debug_build); CHECK_EQUAL(__cplusplus, etl::traits::cplusplus); CHECK_EQUAL(ETL_VERSION_MAJOR, etl::traits::version_major); diff --git a/test/test_fsm.cpp b/test/test_fsm.cpp index 39a8e873..e092f1d2 100644 --- a/test/test_fsm.cpp +++ b/test/test_fsm.cpp @@ -35,7 +35,7 @@ SOFTWARE. #include "etl/queue.h" #include - +#include namespace { @@ -166,6 +166,9 @@ namespace entered_state = false; isLampOn = false; speed = 0; + + last_event_id = std::numeric_limits::max(); + last_returned_state_id = std::numeric_limits::max(); } //*********************************** @@ -208,6 +211,8 @@ namespace bool entered_state; bool isLampOn; int speed; + etl::message_id_t last_event_id; + etl::fsm_state_id_t last_returned_state_id; }; //*********************************** @@ -234,6 +239,8 @@ namespace //*********************************** etl::fsm_state_id_t on_event(const SelfTransition&) { + get_fsm_context().last_event_id = SelfTransition::ID; + get_fsm_context().last_returned_state_id = etl::ifsm_state::Self_Transition; return etl::ifsm_state::Self_Transition; } @@ -659,6 +666,9 @@ namespace // Execute self transition. motorControl.receive(SelfTransition()); + CHECK_EQUAL(size_t(SelfTransition::ID), size_t(motorControl.last_event_id)); + CHECK_EQUAL(size_t(etl::ifsm_state::Self_Transition), size_t(motorControl.last_returned_state_id)); + CHECK_TRUE(motorControl.exited_state); CHECK_TRUE(motorControl.entered_state); } diff --git a/test/test_message_packet.cpp b/test/test_message_packet.cpp index 7925e8bc..6c7bda23 100644 --- a/test/test_message_packet.cpp +++ b/test/test_message_packet.cpp @@ -28,6 +28,10 @@ SOFTWARE. #include "unit_test_framework.h" +#include "etl/platform.h" + +#if ETL_HAS_VIRTUAL_MESSAGES + #include "etl/message_packet.h" #include @@ -450,3 +454,5 @@ namespace } }; } + +#endif diff --git a/test/test_message_router.cpp b/test/test_message_router.cpp index d63cc97d..b5936d62 100644 --- a/test/test_message_router.cpp +++ b/test/test_message_router.cpp @@ -68,24 +68,13 @@ namespace //}; //*********************************** - struct Interface : public etl::imessage - { - virtual int VirtualFunction() const = 0; - }; - - //*********************************** - struct Message1 : public etl::message + struct Message1 : public etl::message { Message1(etl::imessage_router& callback_) : callback(callback_) { } - int VirtualFunction() const override - { - return 1; - } - etl::imessage_router& callback; }; @@ -153,7 +142,7 @@ namespace { ++message1_count; etl::send_message(msg.callback, message5); - CHECK_EQUAL(1, msg.VirtualFunction()); + //CHECK_EQUAL(1, msg.VirtualFunction()); } void on_receive(const Message2& msg) @@ -228,7 +217,7 @@ namespace ++message1_count; sender_id = msg.callback.get_message_router_id(); etl::send_message(msg.callback, message5); - CHECK_EQUAL(1, msg.VirtualFunction()); + //CHECK_EQUAL(1, msg.VirtualFunction()); } void on_receive(const Message2& msg) @@ -516,6 +505,7 @@ namespace CHECK(r2.accepts(message5.get_message_id())); } +#if ETL_HAS_VIRTUAL_MESSAGES //************************************************************************* TEST(message_router_queue) { @@ -588,6 +578,7 @@ namespace CHECK_EQUAL(4, r1.callback_count); queue.pop(); } +#endif //************************************************************************* TEST(message_router_successor) diff --git a/test/vs2022/etl.sln b/test/vs2022/etl.sln index cc4ecaab..4e35f01f 100644 --- a/test/vs2022/etl.sln +++ b/test/vs2022/etl.sln @@ -19,6 +19,8 @@ Global Debug MSVC C++17|x64 = Debug MSVC C++17|x64 Debug MSVC C++20 - No STL|Win32 = Debug MSVC C++20 - No STL|Win32 Debug MSVC C++20 - No STL|x64 = Debug MSVC C++20 - No STL|x64 + Debug MSVC C++20 - No virtual messages|Win32 = Debug MSVC C++20 - No virtual messages|Win32 + Debug MSVC C++20 - No virtual messages|x64 = Debug MSVC C++20 - No virtual messages|x64 Debug MSVC C++20|Win32 = Debug MSVC C++20|Win32 Debug MSVC C++20|x64 = Debug MSVC C++20|x64 Release MSVC C++20 - No STL - Optimised -O2|Win32 = Release MSVC C++20 - No STL - Optimised -O2|Win32 @@ -51,6 +53,10 @@ Global {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20 - No STL|Win32.Build.0 = Debug MSVC C++20 - No STL|Win32 {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20 - No STL|x64.ActiveCfg = Debug MSVC C++20 - No STL|x64 {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20 - No STL|x64.Build.0 = Debug MSVC C++20 - No STL|x64 + {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20 - No virtual messages|Win32.ActiveCfg = Debug MSVC C++20 - No virtual messages|Win32 + {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20 - No virtual messages|Win32.Build.0 = Debug MSVC C++20 - No virtual messages|Win32 + {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20 - No virtual messages|x64.ActiveCfg = Debug MSVC C++20 - No virtual messages|x64 + {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20 - No virtual messages|x64.Build.0 = Debug MSVC C++20 - No virtual messages|x64 {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20|Win32.ActiveCfg = Debug MSVC C++20|Win32 {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20|Win32.Build.0 = Debug MSVC C++20|Win32 {C21DF78C-D8E0-46AB-9D6F-D38A3C1CB0FB}.Debug MSVC C++20|x64.ActiveCfg = Debug MSVC C++20|x64 diff --git a/test/vs2022/etl.vcxproj b/test/vs2022/etl.vcxproj index e5d07b00..8b29a55d 100644 --- a/test/vs2022/etl.vcxproj +++ b/test/vs2022/etl.vcxproj @@ -49,6 +49,22 @@ Debug MSVC C++20 - No STL x64 + + Debug MSVC C++20 - No virtual imessage + Win32 + + + Debug MSVC C++20 - No virtual imessage + x64 + + + Debug MSVC C++20 - No virtual messages + Win32 + + + Debug MSVC C++20 - No virtual messages + x64 + Debug MSVC C++20 Win32 @@ -103,6 +119,20 @@ Unicode false + + Application + true + v143 + Unicode + false + + + Application + true + v143 + Unicode + false + Application true @@ -315,6 +345,18 @@ v143 Unicode + + Application + true + v143 + Unicode + + + Application + true + v143 + Unicode + Application true @@ -545,6 +587,12 @@ + + + + + + @@ -641,6 +689,12 @@ + + + + + + @@ -762,6 +816,16 @@ true $(Configuration)\ + + false + true + $(Configuration)\ + + + true + true + $(Configuration)\ + false true @@ -925,6 +989,14 @@ true true + + true + true + + + true + true + true true @@ -1145,6 +1217,58 @@ "$(OutDir)\etl.exe" + + + + + Level2 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;ETL_MESSAGES_ARE_NOT_VIRTUAL;%(PreprocessorDefinitions) + ../../../unittest-cpp/;../../include;../../test + + + true + stdcpp20 + EditAndContinue + /Zc:__cplusplus %(AdditionalOptions) + true + EnableFastChecks + false + + + Console + true + + + "$(OutDir)\etl.exe" + + + + + + + Level2 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;ETL_IMESSAGE_IS_NON_VIRTUAL;%(PreprocessorDefinitions) + ../../../unittest-cpp/;../../include;../../test + + + true + stdcpp20 + EditAndContinue + /Zc:__cplusplus %(AdditionalOptions) + true + EnableFastChecks + true + + + Console + true + + + "$(OutDir)\etl.exe" + + @@ -1928,6 +2052,48 @@ $(OutDir)\etl.exe + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ../../unittest-cpp/UnitTest++/;../../include/etl;../../test + + + false + stdcpp14 + + + Console + true + + + $(OutDir)\etl.exe + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ../../unittest-cpp/UnitTest++/;../../include/etl;../../test + + + false + stdcpp14 + + + Console + true + + + $(OutDir)\etl.exe + + @@ -3007,6 +3173,8 @@ true true true + true + true true true true @@ -3041,6 +3209,8 @@ true true true + true + true true true true @@ -3075,6 +3245,8 @@ true true true + true + true true true true @@ -3109,6 +3281,8 @@ true true true + true + true true true true @@ -3187,6 +3361,8 @@ true true true + true + true true true true @@ -3221,6 +3397,8 @@ true true true + true + true true true true @@ -3255,6 +3433,8 @@ true true true + true + true true true true @@ -3289,6 +3469,8 @@ true true true + true + true true true true @@ -3326,6 +3508,8 @@ true true true + true + true true true true @@ -3376,6 +3560,8 @@ true true true + true + true true true true @@ -3415,6 +3601,8 @@ true true true + true + true true true true @@ -3454,6 +3642,8 @@ true true true + true + true true true true @@ -3493,6 +3683,8 @@ true true true + true + true true true true @@ -3532,6 +3724,8 @@ true true true + true + true true true true @@ -3571,6 +3765,8 @@ true true true + true + true true true true @@ -3610,6 +3806,8 @@ true true true + true + true true true true @@ -3649,6 +3847,8 @@ true true true + true + true true true true @@ -3688,6 +3888,8 @@ true true true + true + true true true true @@ -3727,6 +3929,8 @@ true true true + true + true true true true @@ -3750,6 +3954,8 @@ true true true + true + true true true true @@ -3789,6 +3995,8 @@ true true true + true + true true true true @@ -3839,6 +4047,8 @@ true true true + true + true true true true @@ -3865,6 +4075,8 @@ true true true + true + true true true true @@ -3912,6 +4124,8 @@ true true true + true + true true true true @@ -3951,6 +4165,8 @@ true true true + true + true true true true @@ -3990,6 +4206,8 @@ true true true + true + true true true true @@ -4029,6 +4247,8 @@ true true true + true + true true true true @@ -4052,6 +4272,8 @@ true true true + true + true true true true @@ -4087,6 +4309,8 @@ true true true + true + true true true true @@ -4138,6 +4362,8 @@ true true true + true + true true true true @@ -4177,6 +4403,8 @@ true true true + true + true true true true @@ -4216,6 +4444,8 @@ true true true + true + true true true true @@ -4239,6 +4469,8 @@ true true true + true + true true true true @@ -4274,6 +4506,8 @@ true true true + true + true true true true @@ -4309,6 +4543,8 @@ true true true + true + true true true true @@ -4360,6 +4596,8 @@ true true true + true + true true true true @@ -4399,6 +4637,8 @@ true true true + true + true true true true @@ -4438,6 +4678,8 @@ true true true + true + true true true true @@ -4461,6 +4703,8 @@ true true true + true + true true true true @@ -4511,6 +4755,8 @@ true true true + true + true true true true @@ -4550,6 +4796,8 @@ true true true + true + true true true true @@ -4589,6 +4837,8 @@ true true true + true + true true true true @@ -4628,6 +4878,8 @@ true true true + true + true true true true @@ -4667,6 +4919,8 @@ true true true + true + true true true true @@ -4706,6 +4960,8 @@ true true true + true + true true true true @@ -4745,6 +5001,8 @@ true true true + true + true true true true @@ -4784,6 +5042,8 @@ true true true + true + true true true true @@ -4823,6 +5083,8 @@ true true true + true + true true true true @@ -4862,6 +5124,8 @@ true true true + true + true true true true @@ -4901,6 +5165,8 @@ true true true + true + true true true true @@ -4940,6 +5206,8 @@ true true true + true + true true true true @@ -4979,6 +5247,8 @@ true true true + true + true true true true @@ -5018,6 +5288,8 @@ true true true + true + true true true true @@ -5057,6 +5329,8 @@ true true true + true + true true true true @@ -5096,6 +5370,8 @@ true true true + true + true true true true @@ -5135,6 +5411,8 @@ true true true + true + true true true true @@ -5174,6 +5452,8 @@ true true true + true + true true true true @@ -5213,6 +5493,8 @@ true true true + true + true true true true @@ -5252,6 +5534,8 @@ true true true + true + true true true true @@ -5275,6 +5559,8 @@ true true true + true + true true true true @@ -5324,6 +5610,8 @@ true true true + true + true true true true @@ -5363,6 +5651,8 @@ true true true + true + true true true true @@ -5402,6 +5692,8 @@ true true true + true + true true true true @@ -5441,6 +5733,8 @@ true true true + true + true true true true @@ -5480,6 +5774,8 @@ true true true + true + true true true true @@ -5519,6 +5815,8 @@ true true true + true + true true true true @@ -5558,6 +5856,8 @@ true true true + true + true true true true @@ -5597,6 +5897,8 @@ true true true + true + true true true true @@ -5636,6 +5938,8 @@ true true true + true + true true true true @@ -5675,6 +5979,8 @@ true true true + true + true true true true @@ -5714,6 +6020,8 @@ true true true + true + true true true true @@ -5753,6 +6061,8 @@ true true true + true + true true true true @@ -5792,6 +6102,8 @@ true true true + true + true true true true @@ -5831,6 +6143,8 @@ true true true + true + true true true true @@ -5870,6 +6184,8 @@ true true true + true + true true true true @@ -5909,6 +6225,8 @@ true true true + true + true true true true @@ -5948,6 +6266,8 @@ true true true + true + true true true true @@ -5987,6 +6307,8 @@ true true true + true + true true true true @@ -6026,6 +6348,8 @@ true true true + true + true true true true @@ -6065,6 +6389,8 @@ true true true + true + true true true true @@ -6104,6 +6430,8 @@ true true true + true + true true true true @@ -6143,6 +6471,8 @@ true true true + true + true true true true @@ -6182,6 +6512,8 @@ true true true + true + true true true true @@ -6221,6 +6553,8 @@ true true true + true + true true true true @@ -6260,6 +6594,8 @@ true true true + true + true true true true @@ -6299,6 +6635,8 @@ true true true + true + true true true true @@ -6338,6 +6676,8 @@ true true true + true + true true true true @@ -6377,6 +6717,8 @@ true true true + true + true true true true @@ -6416,6 +6758,8 @@ true true true + true + true true true true @@ -6455,6 +6799,8 @@ true true true + true + true true true true @@ -6494,6 +6840,8 @@ true true true + true + true true true true @@ -6517,6 +6865,8 @@ true true true + true + true true true true @@ -6550,6 +6900,8 @@ true true true + true + true true true true @@ -6584,6 +6936,8 @@ true true true + true + true true true true @@ -6634,6 +6988,8 @@ true true true + true + true true true true @@ -6673,6 +7029,8 @@ true true true + true + true true true true @@ -6712,6 +7070,8 @@ true true true + true + true true true true @@ -6751,6 +7111,8 @@ true true true + true + true true true true @@ -6790,6 +7152,8 @@ true true true + true + true true true true @@ -6813,6 +7177,8 @@ true true true + true + true true true true @@ -6845,6 +7211,8 @@ true true true + true + true true true true @@ -6895,6 +7263,8 @@ true true true + true + true true true true @@ -6934,6 +7304,8 @@ true true true + true + true true true true @@ -6973,6 +7345,8 @@ true true true + true + true true true true @@ -7012,6 +7386,8 @@ true true true + true + true true true true @@ -7051,6 +7427,8 @@ true true true + true + true true true true @@ -7090,6 +7468,8 @@ true true true + true + true true true true @@ -7129,6 +7509,8 @@ true true true + true + true true true true @@ -7168,6 +7550,8 @@ true true true + true + true true true true @@ -7207,6 +7591,8 @@ true true true + true + true true true true @@ -7246,6 +7632,8 @@ true true true + true + true true true true @@ -7285,6 +7673,8 @@ true true true + true + true true true true @@ -7324,6 +7714,8 @@ true true true + true + true true true true @@ -7363,6 +7755,8 @@ true true true + true + true true true true @@ -7402,6 +7796,8 @@ true true true + true + true true true true @@ -7441,6 +7837,8 @@ true true true + true + true true true true @@ -7480,6 +7878,8 @@ true true true + true + true true true true @@ -7519,6 +7919,8 @@ true true true + true + true true true true @@ -7558,6 +7960,8 @@ true true true + true + true true true true @@ -7597,6 +8001,8 @@ true true true + true + true true true true @@ -7636,6 +8042,8 @@ true true true + true + true true true true @@ -7675,6 +8083,8 @@ true true true + true + true true true true @@ -7714,6 +8124,8 @@ true true true + true + true true true true @@ -7753,6 +8165,8 @@ true true true + true + true true true true @@ -7792,6 +8206,8 @@ true true true + true + true true true true @@ -7831,6 +8247,8 @@ true true true + true + true true true true @@ -7870,6 +8288,8 @@ true true true + true + true true true true @@ -7909,6 +8329,8 @@ true true true + true + true true true true @@ -7948,6 +8370,8 @@ true true true + true + true true true true @@ -7987,6 +8411,8 @@ true true true + true + true true true true @@ -8026,6 +8452,8 @@ true true true + true + true true true true @@ -8049,6 +8477,8 @@ true true true + true + true true true true @@ -8100,6 +8530,8 @@ true true true + true + true true true true @@ -8139,6 +8571,8 @@ true true true + true + true true true true @@ -8178,6 +8612,8 @@ true true true + true + true true true true @@ -8217,6 +8653,8 @@ true true true + true + true true true true @@ -8256,6 +8694,8 @@ true true true + true + true true true true @@ -8295,6 +8735,8 @@ true true true + true + true true true true @@ -8334,6 +8776,8 @@ true true true + true + true true true true @@ -8373,6 +8817,8 @@ true true true + true + true true true true @@ -8412,6 +8858,8 @@ true true true + true + true true true true @@ -8451,6 +8899,8 @@ true true true + true + true true true true @@ -8490,6 +8940,8 @@ true true true + true + true true true true @@ -8529,6 +8981,8 @@ true true true + true + true true true true @@ -8568,6 +9022,8 @@ true true true + true + true true true true @@ -8607,6 +9063,8 @@ true true true + true + true true true true @@ -8646,6 +9104,8 @@ true true true + true + true true true true @@ -8685,6 +9145,8 @@ true true true + true + true true true true @@ -8724,6 +9186,8 @@ true true true + true + true true true true @@ -8763,6 +9227,8 @@ true true true + true + true true true true @@ -8802,6 +9268,8 @@ true true true + true + true true true true @@ -8841,6 +9309,8 @@ true true true + true + true true true true @@ -8880,6 +9350,8 @@ true true true + true + true true true true @@ -8919,6 +9391,8 @@ true true true + true + true true true true @@ -8958,6 +9432,8 @@ true true true + true + true true true true @@ -8997,6 +9473,8 @@ true true true + true + true true true true @@ -9036,6 +9514,8 @@ true true true + true + true true true true @@ -9075,6 +9555,8 @@ true true true + true + true true true true @@ -9114,6 +9596,8 @@ true true true + true + true true true true @@ -9153,6 +9637,8 @@ true true true + true + true true true true @@ -9192,6 +9678,8 @@ true true true + true + true true true true @@ -9231,6 +9719,8 @@ true true true + true + true true true true @@ -9270,6 +9760,8 @@ true true true + true + true true true true @@ -9293,6 +9785,8 @@ true true true + true + true true true true @@ -9328,6 +9822,8 @@ true true true + true + true true true true @@ -9363,6 +9859,8 @@ true true true + true + true true true true @@ -9414,6 +9912,8 @@ true true true + true + true true true true @@ -9453,6 +9953,8 @@ true true true + true + true true true true @@ -9492,6 +9994,8 @@ true true true + true + true true true true @@ -9531,6 +10035,8 @@ true true true + true + true true true true @@ -9570,6 +10076,8 @@ true true true + true + true true true true @@ -9593,6 +10101,8 @@ true true true + true + true true true true @@ -9628,6 +10138,8 @@ true true true + true + true true true true @@ -9679,6 +10191,8 @@ true true true + true + true true true true @@ -9718,6 +10232,8 @@ true true true + true + true true true true @@ -9757,6 +10273,8 @@ true true true + true + true true true true @@ -9780,6 +10298,8 @@ true true true + true + true true true true @@ -9831,6 +10351,8 @@ true true true + true + true true true true @@ -9870,6 +10392,8 @@ true true true + true + true true true true @@ -9909,6 +10433,8 @@ true true true + true + true true true true @@ -9948,6 +10474,8 @@ true true true + true + true true true true @@ -9987,6 +10515,8 @@ true true true + true + true true true true @@ -10026,6 +10556,8 @@ true true true + true + true true true true @@ -10065,6 +10597,8 @@ true true true + true + true true true true @@ -10104,6 +10638,8 @@ true true true + true + true true true true @@ -10143,6 +10679,8 @@ true true true + true + true true true true @@ -10182,6 +10720,8 @@ true true true + true + true true true true @@ -10221,6 +10761,8 @@ true true true + true + true true true true @@ -10260,6 +10802,8 @@ true true true + true + true true true true @@ -10299,6 +10843,8 @@ true true true + true + true true true true @@ -10338,6 +10884,8 @@ true true true + true + true true true true @@ -10377,6 +10925,8 @@ true true true + true + true true true true @@ -10416,6 +10966,8 @@ true true true + true + true true true true @@ -10455,6 +11007,8 @@ true true true + true + true true true true @@ -10494,6 +11048,8 @@ true true true + true + true true true true @@ -10533,6 +11089,8 @@ true true true + true + true true true true @@ -10572,6 +11130,8 @@ true true true + true + true true true true @@ -10611,6 +11171,8 @@ true true true + true + true true true true @@ -10650,6 +11212,8 @@ true true true + true + true true true true @@ -10689,6 +11253,8 @@ true true true + true + true true true true @@ -10728,6 +11294,8 @@ true true true + true + true true true true @@ -10767,6 +11335,8 @@ true true true + true + true true true true @@ -10806,6 +11376,8 @@ true true true + true + true true true true @@ -10845,6 +11417,8 @@ true true true + true + true true true true @@ -10884,6 +11458,8 @@ true true true + true + true true true true @@ -10923,6 +11499,8 @@ true true true + true + true true true true @@ -10962,6 +11540,8 @@ true true true + true + true true true true @@ -11001,6 +11581,8 @@ true true true + true + true true true true @@ -11040,6 +11622,8 @@ true true true + true + true true true true @@ -11079,6 +11663,8 @@ true true true + true + true true true true @@ -11118,6 +11704,8 @@ true true true + true + true true true true @@ -11157,6 +11745,8 @@ true true true + true + true true true true @@ -11196,6 +11786,8 @@ true true true + true + true true true true @@ -11235,6 +11827,8 @@ true true true + true + true true true true @@ -11274,6 +11868,8 @@ true true true + true + true true true true @@ -11313,6 +11909,8 @@ true true true + true + true true true true @@ -11336,6 +11934,8 @@ true true true + true + true true true true @@ -11387,6 +11987,8 @@ true true true + true + true true true true @@ -11426,6 +12028,8 @@ true true true + true + true true true true @@ -11465,6 +12069,8 @@ true true true + true + true true true true @@ -11504,6 +12110,8 @@ true true true + true + true true true true @@ -11543,6 +12151,8 @@ true true true + true + true true true true @@ -11582,6 +12192,8 @@ true true true + true + true true true true @@ -11621,6 +12233,8 @@ true true true + true + true true true true @@ -11660,6 +12274,8 @@ true true true + true + true true true true @@ -11699,6 +12315,8 @@ true true true + true + true true true true @@ -11738,6 +12356,8 @@ true true true + true + true true true true @@ -11777,6 +12397,8 @@ true true true + true + true true true true @@ -11816,6 +12438,8 @@ true true true + true + true true true true @@ -11855,6 +12479,8 @@ true true true + true + true true true true @@ -11894,6 +12520,8 @@ true true true + true + true true true true @@ -11933,6 +12561,8 @@ true true true + true + true true true true @@ -11956,6 +12586,8 @@ true true true + true + true true true true @@ -12006,6 +12638,8 @@ true true true + true + true true true true @@ -12045,6 +12679,8 @@ true true true + true + true true true true @@ -12084,6 +12720,8 @@ true true true + true + true true true true @@ -12123,6 +12761,8 @@ true true true + true + true true true true @@ -12162,6 +12802,8 @@ true true true + true + true true true true @@ -12201,6 +12843,8 @@ true true true + true + true true true true @@ -12240,6 +12884,8 @@ true true true + true + true true true true @@ -12279,6 +12925,8 @@ true true true + true + true true true true @@ -12318,6 +12966,8 @@ true true true + true + true true true true @@ -12357,6 +13007,8 @@ true true true + true + true true true true @@ -12396,6 +13048,8 @@ true true true + true + true true true true @@ -12435,6 +13089,8 @@ true true true + true + true true true true @@ -12474,6 +13130,8 @@ true true true + true + true true true true @@ -12513,6 +13171,8 @@ true true true + true + true true true true @@ -12537,6 +13197,8 @@ true true true + true + true true true true @@ -12587,6 +13249,8 @@ true true true + true + true true true true @@ -12626,6 +13290,8 @@ true true true + true + true true true true @@ -12665,6 +13331,8 @@ true true true + true + true true true true @@ -12704,6 +13372,8 @@ true true true + true + true true true true @@ -12743,6 +13413,8 @@ true true true + true + true true true true @@ -12782,6 +13454,8 @@ true true true + true + true true true true @@ -12821,6 +13495,8 @@ true true true + true + true true true true @@ -12860,6 +13536,8 @@ true true true + true + true true true true @@ -12899,6 +13577,8 @@ true true true + true + true true true true @@ -12938,6 +13618,8 @@ true true true + true + true true true true @@ -12977,6 +13659,8 @@ true true true + true + true true true true @@ -13016,6 +13700,8 @@ true true true + true + true true true true @@ -13055,6 +13741,8 @@ true true true + true + true true true true @@ -13094,6 +13782,8 @@ true true true + true + true true true true @@ -13133,6 +13823,8 @@ true true true + true + true true true true @@ -13172,6 +13864,8 @@ true true true + true + true true true true @@ -13211,6 +13905,8 @@ true true true + true + true true true true @@ -13250,6 +13946,8 @@ true true true + true + true true true true @@ -13408,6 +14106,8 @@ false false false + false + false false false false @@ -13444,6 +14144,8 @@ false false false + false + false false false false @@ -13499,6 +14201,8 @@ false false false + false + false false false false @@ -13535,6 +14239,8 @@ false false false + false + false false false false @@ -13585,6 +14291,8 @@ false false false + false + false false false false @@ -13621,6 +14329,8 @@ false false false + false + false false false false @@ -13661,6 +14371,8 @@ false false false + false + false false false false @@ -13697,6 +14409,8 @@ false false false + false + false false false false @@ -13737,6 +14451,8 @@ false false false + false + false false false false @@ -13773,6 +14489,8 @@ false false false + false + false false false false @@ -13813,6 +14531,8 @@ false false false + false + false false false false @@ -13849,6 +14569,8 @@ false false false + false + false false false false @@ -13894,6 +14616,8 @@ false false false + false + false false false false @@ -13930,6 +14654,8 @@ false false false + false + false false false false @@ -13974,6 +14700,8 @@ false false false + false + false false false false @@ -14010,6 +14738,8 @@ false false false + false + false false false false @@ -14063,6 +14793,8 @@ false false false + false + false false false false @@ -14099,6 +14831,8 @@ false false false + false + false false false false @@ -14317,6 +15051,8 @@ true true true + true + true true true true @@ -14351,6 +15087,8 @@ true true true + true + true true true true @@ -14385,6 +15123,8 @@ true true true + true + true true true true @@ -14419,6 +15159,8 @@ true true true + true + true true true true