From f18c27ec29449840157ece7a9a57f5f817623933 Mon Sep 17 00:00:00 2001 From: mutouyun Date: Sun, 27 Feb 2022 17:13:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=A7=8B=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 72 ++- include/libipc/buffer.h | 68 -- include/libipc/condition.h | 39 -- include/libipc/def.h | 69 +- include/libipc/detect_plat.h | 155 +++++ include/libipc/export.h | 70 +- include/libipc/ipc.h | 173 ----- include/libipc/mutex.h | 39 -- include/libipc/pool_alloc.h | 103 --- include/libipc/rw_lock.h | 171 ----- include/libipc/semaphore.h | 37 -- include/libipc/shm.h | 59 -- include/libipc/spin_lock.h | 179 ++++++ performance.xlsx | Bin 75641 -> 0 bytes src/CMakeLists.txt | 19 +- src/libipc/buffer.cpp | 87 --- src/libipc/circ/elem_array.h | 136 ---- src/libipc/circ/elem_def.h | 77 --- src/libipc/ipc.cpp | 669 +------------------- src/libipc/memory/alloc.h | 424 ------------- src/libipc/memory/allocator_wrapper.h | 121 ---- src/libipc/memory/resource.h | 90 --- src/libipc/memory/wrapper.h | 327 ---------- src/libipc/platform/detail.h | 136 ---- src/libipc/platform/linux/a0/LICENSE | 24 - src/libipc/platform/linux/a0/README.md | 213 ------- src/libipc/platform/linux/a0/atomic.h | 36 -- src/libipc/platform/linux/a0/clock.h | 60 -- src/libipc/platform/linux/a0/empty.h | 13 - src/libipc/platform/linux/a0/err.c | 50 -- src/libipc/platform/linux/a0/err.h | 33 - src/libipc/platform/linux/a0/err_macro.h | 52 -- src/libipc/platform/linux/a0/ftx.h | 111 ---- src/libipc/platform/linux/a0/inline.h | 8 - src/libipc/platform/linux/a0/mtx.c | 420 ------------ src/libipc/platform/linux/a0/mtx.h | 57 -- src/libipc/platform/linux/a0/strconv.c | 64 -- src/libipc/platform/linux/a0/strconv.h | 31 - src/libipc/platform/linux/a0/thread_local.h | 10 - src/libipc/platform/linux/a0/tid.c | 30 - src/libipc/platform/linux/a0/tid.h | 16 - src/libipc/platform/linux/a0/time.c | 124 ---- src/libipc/platform/linux/a0/time.h | 97 --- src/libipc/platform/linux/a0/unused.h | 7 - src/libipc/platform/linux/condition.h | 66 -- src/libipc/platform/linux/get_wait_time.h | 46 -- src/libipc/platform/linux/mutex.h | 204 ------ src/libipc/platform/linux/sync_obj_impl.h | 69 -- src/libipc/platform/platform.c | 13 - src/libipc/platform/platform.cpp | 9 - src/libipc/platform/posix/condition.h | 141 ----- src/libipc/platform/posix/get_error.h | 14 - src/libipc/platform/posix/get_wait_time.h | 39 -- src/libipc/platform/posix/mutex.h | 237 ------- src/libipc/platform/posix/semaphore_impl.h | 100 --- src/libipc/platform/posix/shm_posix.cpp | 197 ------ src/libipc/platform/win/condition.h | 119 ---- src/libipc/platform/win/get_sa.h | 35 - src/libipc/platform/win/mutex.h | 96 --- src/libipc/platform/win/semaphore.h | 74 --- src/libipc/platform/win/shm_win.cpp | 135 ---- src/libipc/platform/win/to_tchar.h | 74 --- src/libipc/policy.h | 25 - src/libipc/pool_alloc.cpp | 17 - src/libipc/prod_cons.h | 315 --------- src/libipc/queue.h | 198 ------ src/libipc/shm.cpp | 103 --- src/libipc/sync/condition.cpp | 72 --- src/libipc/sync/mutex.cpp | 72 --- src/libipc/sync/semaphore.cpp | 66 -- src/libipc/utility/concept.h | 29 - src/libipc/utility/id_pool.h | 103 --- src/libipc/utility/log.h | 39 -- src/libipc/utility/pimpl.h | 64 -- src/libipc/utility/scope_guard.h | 64 -- src/libipc/utility/utility.h | 64 -- src/libipc/waiter.h | 81 --- test/CMakeLists.txt | 15 +- test/test.h | 86 --- test/test_detect_plat.cpp | 79 +++ test/test_ipc.cpp | 183 ------ test/test_mem.cpp | 218 ------- test/test_platform.cpp | 31 - test/test_queue.cpp | 299 --------- test/test_shm.cpp | 102 --- test/test_sync.cpp | 208 ------ test/test_thread_utility.cpp | 203 ------ test/test_waiter.cpp | 68 -- test/thread_pool.h | 123 ---- 89 files changed, 503 insertions(+), 8868 deletions(-) delete mode 100755 include/libipc/buffer.h delete mode 100644 include/libipc/condition.h create mode 100644 include/libipc/detect_plat.h delete mode 100755 include/libipc/ipc.h delete mode 100644 include/libipc/mutex.h delete mode 100755 include/libipc/pool_alloc.h delete mode 100755 include/libipc/rw_lock.h delete mode 100644 include/libipc/semaphore.h delete mode 100755 include/libipc/shm.h create mode 100644 include/libipc/spin_lock.h delete mode 100644 performance.xlsx delete mode 100755 src/libipc/buffer.cpp delete mode 100755 src/libipc/circ/elem_array.h delete mode 100755 src/libipc/circ/elem_def.h delete mode 100755 src/libipc/memory/alloc.h delete mode 100755 src/libipc/memory/allocator_wrapper.h delete mode 100755 src/libipc/memory/resource.h delete mode 100755 src/libipc/memory/wrapper.h delete mode 100755 src/libipc/platform/detail.h delete mode 100644 src/libipc/platform/linux/a0/LICENSE delete mode 100644 src/libipc/platform/linux/a0/README.md delete mode 100644 src/libipc/platform/linux/a0/atomic.h delete mode 100644 src/libipc/platform/linux/a0/clock.h delete mode 100644 src/libipc/platform/linux/a0/empty.h delete mode 100644 src/libipc/platform/linux/a0/err.c delete mode 100644 src/libipc/platform/linux/a0/err.h delete mode 100644 src/libipc/platform/linux/a0/err_macro.h delete mode 100644 src/libipc/platform/linux/a0/ftx.h delete mode 100644 src/libipc/platform/linux/a0/inline.h delete mode 100644 src/libipc/platform/linux/a0/mtx.c delete mode 100644 src/libipc/platform/linux/a0/mtx.h delete mode 100644 src/libipc/platform/linux/a0/strconv.c delete mode 100644 src/libipc/platform/linux/a0/strconv.h delete mode 100644 src/libipc/platform/linux/a0/thread_local.h delete mode 100644 src/libipc/platform/linux/a0/tid.c delete mode 100644 src/libipc/platform/linux/a0/tid.h delete mode 100644 src/libipc/platform/linux/a0/time.c delete mode 100644 src/libipc/platform/linux/a0/time.h delete mode 100644 src/libipc/platform/linux/a0/unused.h delete mode 100644 src/libipc/platform/linux/condition.h delete mode 100644 src/libipc/platform/linux/get_wait_time.h delete mode 100644 src/libipc/platform/linux/mutex.h delete mode 100644 src/libipc/platform/linux/sync_obj_impl.h delete mode 100644 src/libipc/platform/platform.c delete mode 100644 src/libipc/platform/platform.cpp delete mode 100644 src/libipc/platform/posix/condition.h delete mode 100644 src/libipc/platform/posix/get_error.h delete mode 100644 src/libipc/platform/posix/get_wait_time.h delete mode 100644 src/libipc/platform/posix/mutex.h delete mode 100644 src/libipc/platform/posix/semaphore_impl.h delete mode 100644 src/libipc/platform/posix/shm_posix.cpp delete mode 100644 src/libipc/platform/win/condition.h delete mode 100644 src/libipc/platform/win/get_sa.h delete mode 100644 src/libipc/platform/win/mutex.h delete mode 100644 src/libipc/platform/win/semaphore.h delete mode 100755 src/libipc/platform/win/shm_win.cpp delete mode 100755 src/libipc/platform/win/to_tchar.h delete mode 100755 src/libipc/policy.h delete mode 100755 src/libipc/pool_alloc.cpp delete mode 100755 src/libipc/prod_cons.h delete mode 100755 src/libipc/queue.h delete mode 100755 src/libipc/shm.cpp delete mode 100644 src/libipc/sync/condition.cpp delete mode 100644 src/libipc/sync/mutex.cpp delete mode 100644 src/libipc/sync/semaphore.cpp delete mode 100755 src/libipc/utility/concept.h delete mode 100755 src/libipc/utility/id_pool.h delete mode 100755 src/libipc/utility/log.h delete mode 100755 src/libipc/utility/pimpl.h delete mode 100644 src/libipc/utility/scope_guard.h delete mode 100755 src/libipc/utility/utility.h delete mode 100644 src/libipc/waiter.h delete mode 100755 test/test.h create mode 100644 test/test_detect_plat.cpp delete mode 100755 test/test_ipc.cpp delete mode 100755 test/test_mem.cpp delete mode 100644 test/test_platform.cpp delete mode 100755 test/test_queue.cpp delete mode 100755 test/test_shm.cpp delete mode 100644 test/test_sync.cpp delete mode 100755 test/test_thread_utility.cpp delete mode 100755 test/test_waiter.cpp delete mode 100755 test/thread_pool.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d9b2a5..1eb24a0 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,29 +10,31 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG") if(NOT MSVC) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() +add_definitions(-DLIBIPC_CPP_14 -DLIBIPC_CPP_17) + if (MSVC) - set(CompilerFlags - CMAKE_CXX_FLAGS - CMAKE_CXX_FLAGS_DEBUG - CMAKE_CXX_FLAGS_RELEASE - CMAKE_C_FLAGS - CMAKE_C_FLAGS_DEBUG - CMAKE_C_FLAGS_RELEASE - ) - if (LIBIPC_USE_STATIC_CRT) - foreach(CompilerFlag ${CompilerFlags}) - string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") - string(REPLACE "/MDd" "/MTd" ${CompilerFlag} "${${CompilerFlag}}") - endforeach() - else() - foreach(CompilerFlag ${CompilerFlags}) - string(REPLACE "/MT" "/MD" ${CompilerFlag} "${${CompilerFlag}}") - string(REPLACE "/MTd" "/MDd" ${CompilerFlag} "${${CompilerFlag}}") - endforeach() - endif() + set(CompilerFlags + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + ) + if (LIBIPC_USE_STATIC_CRT) + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") + string(REPLACE "/MDd" "/MTd" ${CompilerFlag} "${${CompilerFlag}}") + endforeach() + else() + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "/MT" "/MD" ${CompilerFlag} "${${CompilerFlag}}") + string(REPLACE "/MTd" "/MDd" ${CompilerFlag} "${${CompilerFlag}}") + endforeach() + endif() endif() set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) @@ -45,23 +47,23 @@ add_definitions(-DUNICODE -D_UNICODE) add_subdirectory(src) if (LIBIPC_BUILD_TESTS) - set(GOOGLETEST_VERSION 1.10.0) - if (LIBIPC_USE_STATIC_CRT) - set(gtest_force_shared_crt OFF) - else() - set(gtest_force_shared_crt ON) - endif() - add_subdirectory(3rdparty/gtest) - add_subdirectory(test) + set(GOOGLETEST_VERSION 1.10.0) + if (LIBIPC_USE_STATIC_CRT) + set(gtest_force_shared_crt OFF) + else() + set(gtest_force_shared_crt ON) + endif() + add_subdirectory(3rdparty/gtest) + add_subdirectory(test) endif() -if (LIBIPC_BUILD_DEMOS) - add_subdirectory(demo/chat) - add_subdirectory(demo/msg_que) - add_subdirectory(demo/send_recv) -endif() +# if (LIBIPC_BUILD_DEMOS) +# add_subdirectory(demo/chat) +# add_subdirectory(demo/msg_que) +# add_subdirectory(demo/send_recv) +# endif() install( - DIRECTORY "include/" - DESTINATION "include" + DIRECTORY "include/" + DESTINATION "include" ) diff --git a/include/libipc/buffer.h b/include/libipc/buffer.h deleted file mode 100755 index 3f8c229..0000000 --- a/include/libipc/buffer.h +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#include "libipc/export.h" -#include "libipc/def.h" - -namespace ipc { - -class IPC_EXPORT buffer { -public: - using destructor_t = void (*)(void*, std::size_t); - - buffer(); - - buffer(void* p, std::size_t s, destructor_t d); - buffer(void* p, std::size_t s, destructor_t d, void* additional); - buffer(void* p, std::size_t s); - - template - explicit buffer(byte_t const (& data)[N]) - : buffer(data, sizeof(data)) { - } - explicit buffer(char const & c); - - buffer(buffer&& rhs); - ~buffer(); - - void swap(buffer& rhs); - buffer& operator=(buffer rhs); - - bool empty() const noexcept; - - void * data() noexcept; - void const * data() const noexcept; - - template - T get() const { return T(data()); } - - std::size_t size() const noexcept; - - std::tuple to_tuple() { - return std::make_tuple(data(), size()); - } - - std::tuple to_tuple() const { - return std::make_tuple(data(), size()); - } - - std::vector to_vector() const { - return { - get(), - get() + size() - }; - } - - friend IPC_EXPORT bool operator==(buffer const & b1, buffer const & b2); - friend IPC_EXPORT bool operator!=(buffer const & b1, buffer const & b2); - -private: - class buffer_; - buffer_* p_; -}; - -} // namespace ipc diff --git a/include/libipc/condition.h b/include/libipc/condition.h deleted file mode 100644 index a4e2ac3..0000000 --- a/include/libipc/condition.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#include // std::uint64_t - -#include "libipc/export.h" -#include "libipc/def.h" -#include "libipc/mutex.h" - -namespace ipc { -namespace sync { - -class IPC_EXPORT condition { - condition(condition const &) = delete; - condition &operator=(condition const &) = delete; - -public: - condition(); - explicit condition(char const *name); - ~condition(); - - void const *native() const noexcept; - void *native() noexcept; - - bool valid() const noexcept; - - bool open(char const *name) noexcept; - void close() noexcept; - - bool wait(ipc::sync::mutex &mtx, std::uint64_t tm = ipc::invalid_value) noexcept; - bool notify(ipc::sync::mutex &mtx) noexcept; - bool broadcast(ipc::sync::mutex &mtx) noexcept; - -private: - class condition_; - condition_* p_; -}; - -} // namespace sync -} // namespace ipc diff --git a/include/libipc/def.h b/include/libipc/def.h index 8c1a72b..b3ebd6f 100755 --- a/include/libipc/def.h +++ b/include/libipc/def.h @@ -1,68 +1,19 @@ +/** + * @file def.h + * @author mutouyun (orz@orzz.org) + * @brief Define the trivial configuration information + * @date 2022-02-27 + */ #pragma once #include #include -#include // std::numeric_limits -#include -#include -namespace ipc { +#define LIBIPC_NAMESPACE_BEG_ namespace ipc { +#define LIBIPC_NAMESPACE_END_ } -// types - -using byte_t = std::uint8_t; - -template -struct uint; - -template <> struct uint<8 > { using type = std::uint8_t ; }; -template <> struct uint<16> { using type = std::uint16_t; }; -template <> struct uint<32> { using type = std::uint32_t; }; -template <> struct uint<64> { using type = std::uint64_t; }; - -template -using uint_t = typename uint::type; +LIBIPC_NAMESPACE_BEG_ // constants -enum : std::uint32_t { - invalid_value = (std::numeric_limits::max)(), - default_timeout = 100, // ms -}; - -enum : std::size_t { - data_length = 64, - large_msg_limit = data_length, - large_msg_align = 1024, - large_msg_cache = 32, -}; - -enum class relat { // multiplicity of the relationship - single, - multi -}; - -enum class trans { // transmission - unicast, - broadcast -}; - -// producer-consumer policy flag - -template -struct wr {}; - -template -struct relat_trait; - -template -struct relat_trait> { - constexpr static bool is_multi_producer = (Rp == relat::multi); - constexpr static bool is_multi_consumer = (Rc == relat::multi); - constexpr static bool is_broadcast = (Ts == trans::broadcast); -}; - -template