6 Commits

Author SHA1 Message Date
e12f58a789 Merge pull request #2 from rubienr/fix-ring-buffer-iterator-esp-idf
fixes ring-buffer-iterator swap()
2025-05-12 14:19:21 +02:00
15919a4385 fixes ring-buffer-iterator swap() 2025-05-12 14:17:50 +02:00
5804af334c C++23 enable in CMakeLists.txt 2023-04-27 14:25:15 +02:00
c9f273b51a Fixes for esp32c3 2022-05-06 18:49:53 +02:00
c204c20888 Added qmake helper file 2021-03-07 12:18:26 +01:00
6d43e2bcc4 Some changes required to get this compiling with esp-idf cmake 2021-02-09 16:59:47 +01:00
4 changed files with 38 additions and 13 deletions

View File

@ -1,7 +1,9 @@
cmake_minimum_required(VERSION 3.14)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(NOT DEFINED IDF_TARGET)
project(test-project CXX)
endif()
option(RING_BUFFER_DEFAULT_CXXFLAGS "enable default CXXFLAGS" OFF)
option(RING_BUFFER_BUILD_TESTS "build test cases for the ring buffer library" OFF)
@ -13,26 +15,38 @@ option(RING_BUFFER_CONSTEXPR_DESTRUCTORS "enable constexpr destructor for ring_b
if(RING_BUFFER_DEFAULT_CXXFLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
include(detect/standard.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/detect/standard.cmake)
endif()
if(RING_BUFFER_FEATURE_DETECT)
include(detect/features.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/detect/features.cmake)
endif()
add_library(ring-buffer INTERFACE)
target_include_directories(ring-buffer INTERFACE include/)
if(DEFINED IDF_TARGET)
idf_component_register(INCLUDE_DIRS include)
set_property(TARGET ${COMPONENT_LIB} PROPERTY CXX_STANDARD 23)
set(RING_BUFFER_TARGET_NAME ${COMPONENT_TARGET})
else()
set(RING_BUFFER_TARGET_NAME ${COMPONENT_TARGET})
add_library(${RING_BUFFER_TARGET_NAME} INTERFACE)
target_include_directories(${RING_BUFFER_TARGET_NAME} INTERFACE include/)
endif()
if(RING_BUFFER_CONSTEXPR)
target_compile_definitions(ring-buffer INTERFACE RING_BUFFER_CONSTEXPR)
target_compile_definitions(${RING_BUFFER_TARGET_NAME} INTERFACE RING_BUFFER_CONSTEXPR)
endif()
if(RING_BUFFER_NOEXCEPT)
target_compile_definitions(ring-buffer INTERFACE RING_BUFFER_NOEXCEPT)
target_compile_definitions(${RING_BUFFER_TARGET_NAME} INTERFACE RING_BUFFER_NOEXCEPT)
endif()
if(RING_BUFFER_CONSTEXPR_DESTRUCTORS)
target_compile_definitions(ring-buffer INTERFACE RING_BUFFER_CONSTEXPR_DESTRUCTORS)
target_compile_definitions(${RING_BUFFER_TARGET_NAME} INTERFACE RING_BUFFER_CONSTEXPR_DESTRUCTORS)
endif()
if(RING_BUFFER_BUILD_TESTS)
add_subdirectory(test)
if(NOT DEFINED IDF_TARGET)
if(RING_BUFFER_BUILD_TESTS)
add_subdirectory(test)
endif()
endif()

1
cxx-ring-buffer.pri Normal file
View File

@ -0,0 +1 @@
QMAKE_CXXFLAGS += -isystem $$PWD/include

View File

@ -1,3 +1,11 @@
if(DEFINED IDF_TARGET)
set(RING_BUFFER_NOEXCEPT ON)
set(RING_BUFFER_CONSTEXPR ON)
set(RING_BUFFER_CONSTEXPR_DESTRUCTORS ON)
else()
try_compile(cxx-least-11 ${CMAKE_BINARY_DIR}/detect ${CMAKE_SOURCE_DIR}/detect/cxxstd.cpp
COMPILE_DEFINITIONS -DCXX_STANDARD=201103
CXX_STANDARD ${CMAKE_CXX_STANDARD}
@ -34,3 +42,5 @@ if(constexpr-destructors-compile)
set(RING_BUFFER_CONSTEXPR_DESTRUCTORS ON)
message(STATUS "Enabling RING_BUFFER_CONSTEXPR_DESTRUCTORS (C++20 and up)")
endif()
endif()

View File

@ -93,9 +93,9 @@ public:
CONSTEXPR friend ring_buffer_iterator operator+( difference_type n, const ring_buffer_iterator& it) NOEXCEPT {
return it + n;
}
CONSTEXPR friend void swap(ring_buffer_iterator& a, ring_buffer_iterator& b) COND_NOEXCEPT(noexcept(std::swap(a.container, b.container))) {
CONSTEXPR friend void swap(ring_buffer_iterator& a, ring_buffer_iterator& b) COND_NOEXCEPT(noexcept(std::swap(a.container_ptr, b.container_ptr))) {
using std::swap;
swap(a.container, b.container);
swap(a.container_ptr, b.container_ptr);
swap(a.front, b.front);
swap(a.index, b.index);
}
@ -189,9 +189,9 @@ public:
CONSTEXPR friend ring_buffer_const_iterator operator+( difference_type n, const ring_buffer_const_iterator& it) NOEXCEPT {
return it + n;
}
CONSTEXPR friend void swap(ring_buffer_const_iterator& a, ring_buffer_const_iterator& b) COND_NOEXCEPT(noexcept(std::swap(a.container, b.container))) {
CONSTEXPR friend void swap(ring_buffer_const_iterator& a, ring_buffer_const_iterator& b) COND_NOEXCEPT(noexcept(std::swap(a.container_ptr, b.container_ptr))) {
using std::swap;
swap(a.container, b.container);
swap(a.container_ptr, b.container_ptr);
swap(a.front, b.front);
swap(a.index, b.index);
}