cmake库改造前

This commit is contained in:
2026-08-05 14:37:55 +08:00
parent 806d00590b
commit 88d71cdcfe
2 changed files with 13 additions and 19 deletions
+7 -6
View File
@@ -1,10 +1,11 @@
# pfr库虽然是cmake构建但是没有安装脚本 # pfr库虽然是cmake构建但是没有安装脚本
set(Psc_Core_dependencies global::GTest global::spdlog global::magic_enum) set(Psc_Core_dependencies global::GTest global::spdlog global::magic_enum)
rcl_add_dependency_action_targets(Psc_Core_env ${Psc_Core_dependencies}) rcl_add_dependency_action_targets(Psc_Core_env ${Psc_Core_dependencies})
set_target_properties(Psc_Core_env PROPERTIES FOLDER "Psc_Core") set(name "Psc_Core")
set_target_properties(Psc_Core_env PROPERTIES FOLDER ${name})
library_is_installed_with_rely(Psc_Core_dependencies_installed ${Psc_Core_dependencies}) library_is_installed_with_rely(Psc_Core_dependencies_installed ${Psc_Core_dependencies})
if (NOT Psc_Core_dependencies_installed) if (NOT Psc_Core_dependencies_installed)
message(STATUS "CPP_Core 依赖未安装,请先构建 Psc_Core_env 目标") message(STATUS "[FATAL_ERROR] ${name} 依赖未安装,请先构建 ${name}_env 目标")
return() return()
else () else ()
find_package(spdlog CONFIG REQUIRED) find_package(spdlog CONFIG REQUIRED)
@@ -19,7 +20,7 @@ add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/3rd/pfr ${CMAKE_CURRENT_BINARY_DIR}/p
add_library(Psc_Core_Interface INTERFACE) add_library(Psc_Core_Interface INTERFACE)
target_include_directories(Psc_Core_Interface INTERFACE "${base_dir}") target_include_directories(Psc_Core_Interface INTERFACE "${base_dir}")
target_include_directories(Psc_Core_Interface INTERFACE ${3rd_dir}/magic_enum/magic_enum/include) target_include_directories(Psc_Core_Interface INTERFACE ${3rd_dir}/magic_enum/magic_enum/include)
set_target_properties(Psc_Core_Interface PROPERTIES FOLDER "Psc_Core") set_target_properties(Psc_Core_Interface PROPERTIES FOLDER ${name})
append_glob_source(srcs ${core_src_dir}) append_glob_source(srcs ${core_src_dir})
add_library(Psc_Core_Static STATIC ${srcs}) add_library(Psc_Core_Static STATIC ${srcs})
generate_aggregate_sources(${base_dir}/private_psc_global_include ${core_src_dir}/Base "../../private_psc_global_include" "global_include") generate_aggregate_sources(${base_dir}/private_psc_global_include ${core_src_dir}/Base "../../private_psc_global_include" "global_include")
@@ -41,6 +42,7 @@ if (WIN32)
dbghelp dbghelp
iphlpapi iphlpapi
) )
target_compile_definitions(Psc_Core_Static PUBLIC NOMINMAX)
endif () endif ()
if (CMAKE_SYSTEM_NAME STREQUAL "Linux") if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(Psc_Core_Static PUBLIC target_link_libraries(Psc_Core_Static PUBLIC
@@ -62,9 +64,8 @@ set_target_properties(Psc_Core_Static PROPERTIES
AUTORCC OFF AUTORCC OFF
) )
set_property(TARGET Psc_Core_Static PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET Psc_Core_Static PROPERTY POSITION_INDEPENDENT_CODE ON)
set_target_properties(Psc_Core_Static PROPERTIES FOLDER "Psc_Core") set_target_properties(Psc_Core_Static PROPERTIES FOLDER ${name})
add_executable(Psc_Core_exe ${CMAKE_CURRENT_LIST_DIR}/main.cpp) add_executable(Psc_Core_exe ${CMAKE_CURRENT_LIST_DIR}/main.cpp)
target_link_libraries(Psc_Core_exe PRIVATE Psc_Core_Static) target_link_libraries(Psc_Core_exe PRIVATE Psc_Core_Static)
set_target_properties(Psc_Core_exe PROPERTIES FOLDER "Psc_Core") set_target_properties(Psc_Core_exe PROPERTIES FOLDER ${name})
+6 -13
View File
@@ -1,14 +1,10 @@
#pragma once #pragma once
#include <algorithm> #include <algorithm>
#include <cstdint> #include <cstdint>
#include <cstring>
#include <memory_resource> #include <memory_resource>
#include <mutex> #include <mutex>
#include <string> #include <string>
#include <string_view>
#include <vector> #include <vector>
#include "../system/export.h"
#include "Psc_Cpp_Core/Base/global_include.h"
namespace Psc { namespace Psc {
// -------------------- utils -------------------- // -------------------- utils --------------------
template <typename Size_T> template <typename Size_T>
@@ -33,7 +29,8 @@ template <typename MutexT, typename Size_T>
class Base_RingBuffer { class Base_RingBuffer {
static_assert(std::is_unsigned_v<Size_T>, "Size_T must be unsigned"); static_assert(std::is_unsigned_v<Size_T>, "Size_T must be unsigned");
public: public:
explicit Base_RingBuffer(std::pmr::memory_resource* resource = std::pmr::get_default_resource()) : buf_(resource) {} explicit Base_RingBuffer(std::pmr::memory_resource* resource = std::pmr::get_default_resource()) : buf_(resource) {
}
void init(Size_T min_capacity) { void init(Size_T min_capacity) {
// 防御:min_capacity + 1 溢出 // 防御:min_capacity + 1 溢出
if (min_capacity >= std::numeric_limits<Size_T>::max()) { if (min_capacity >= std::numeric_limits<Size_T>::max()) {
@@ -76,8 +73,7 @@ protected:
void write_bytes_unsafe(const void* data, Size_T len) { void write_bytes_unsafe(const void* data, Size_T len) {
const Size_T end = std::min(len, capacity - tail); const Size_T end = std::min(len, capacity - tail);
std::memcpy(buf_.data() + tail, data, end); std::memcpy(buf_.data() + tail, data, end);
std::memcpy(buf_.data(), static_cast<const std::uint8_t*>(data) + end, std::memcpy(buf_.data(), static_cast<const std::uint8_t*>(data) + end, len - end);
len - end);
tail = (tail + len) & mask_; tail = (tail + len) & mask_;
} }
void read_bytes_unsafe(void* out, Size_T len) { void read_bytes_unsafe(void* out, Size_T len) {
@@ -174,8 +170,7 @@ public:
const Size_T cap = this->capacity; const Size_T cap = this->capacity;
const Size_T end = std::min(msg_len, cap - off); const Size_T end = std::min(msg_len, cap - off);
std::memcpy(out, this->buf_.data() + off, end); std::memcpy(out, this->buf_.data() + off, end);
std::memcpy(static_cast<std::uint8_t*>(out) + end, this->buf_.data(), std::memcpy(static_cast<std::uint8_t*>(out) + end, this->buf_.data(), msg_len - end);
msg_len - end);
out_len = msg_len; out_len = msg_len;
return true; return true;
} }
@@ -249,8 +244,7 @@ public:
// 等价于从 head 开始 peek actual 字节 // 等价于从 head 开始 peek actual 字节
const Size_T end = std::min(actual, this->capacity - this->head); const Size_T end = std::min(actual, this->capacity - this->head);
std::memcpy(out, this->buf_.data() + this->head, end); std::memcpy(out, this->buf_.data() + this->head, end);
std::memcpy(static_cast<std::uint8_t*>(out) + end, this->buf_.data(), std::memcpy(static_cast<std::uint8_t*>(out) + end, this->buf_.data(), actual - end);
actual - end);
return actual; return actual;
} }
// peek 指定 out_len 字节(不消费);成功则返回 true 并保持 out_len 不变 // peek 指定 out_len 字节(不消费);成功则返回 true 并保持 out_len 不变
@@ -262,8 +256,7 @@ public:
return false; return false;
const Size_T end = std::min(out_len, this->capacity - this->head); const Size_T end = std::min(out_len, this->capacity - this->head);
std::memcpy(out, this->buf_.data() + this->head, end); std::memcpy(out, this->buf_.data() + this->head, end);
std::memcpy(static_cast<std::uint8_t*>(out) + end, this->buf_.data(), std::memcpy(static_cast<std::uint8_t*>(out) + end, this->buf_.data(), out_len - end);
out_len - end);
return true; return true;
} }
// best effort:尽可能写入,返回实际写入字节数 // best effort:尽可能写入,返回实际写入字节数