From 2e119b5683574d7243d30a9ba33c05b06bcdb8a4 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Fri, 8 May 2026 22:36:42 -0500 Subject: [PATCH] Squashed 'deps/oxlib/' changes from 170d6e35a..a787fef61 a787fef61 Uncomment code that from Pico fix 298184d58 Fix build warning 51999199c [ox] Fix build problems on Raspberry Pi Pico 682fc5b85 Merge commit 'c286e3794d9d4cc571671548ad765ce370bcfcb4' 94209fd74 [ox/std] Make is_integral use raw types git-subtree-dir: deps/oxlib git-subtree-split: a787fef6147dcd11519c24f992289349f0ec355d --- src/fs/test/tests.cpp | 11 --- src/logconn/src/logconn.cpp | 4 +- src/mc/include/ox/mc/write.hpp | 47 +------------ src/mc/test/tests.cpp | 12 ++-- src/model/include/ox/model/descwrite.hpp | 83 ++++++---------------- src/oc/include/ox/oc/write.hpp | 8 +-- src/std/CMakeLists.txt | 4 +- src/std/include/ox/std/def.hpp | 1 + src/std/include/ox/std/typetraits.hpp | 90 ++++++++++++------------ src/std/test/tests.cpp | 4 +- 10 files changed, 85 insertions(+), 179 deletions(-) diff --git a/src/fs/test/tests.cpp b/src/fs/test/tests.cpp index a8bae421..e83e8831 100644 --- a/src/fs/test/tests.cpp +++ b/src/fs/test/tests.cpp @@ -38,17 +38,6 @@ const std::map> tests = auto a1 = buffer->malloc(sizeof(String)).value; auto a2 = buffer->malloc(sizeof(String)).value; oxAssert(a1.valid(), "Allocation 1 failed."); - oxAssert(a2.valid(), "Allocation 2 failed."); - auto s1Buff = buffer->dataOf(a1); - auto s2Buff = buffer->dataOf(a2); - oxAssert(s1Buff.valid(), "s1 allocation 1 failed."); - oxAssert(s2Buff.valid(), "s2 allocation 2 failed."); - auto &s1 = *new (s1Buff) String("asdf"); - auto &s2 = *new (s2Buff) String("aoeu"); - oxTrace("test") << "s1: " << s1.c_str(); - oxTrace("test") << "s2: " << s2.c_str(); - oxAssert(s1 == "asdf", "Allocation 1 not as expected."); - oxAssert(s2 == "aoeu", "Allocation 2 not as expected."); oxAssert(buffer->free(a1), "Free failed."); oxAssert(buffer->free(a2), "Free failed."); oxAssert(buffer->setSize(buffer->size() - buffer->available()), "Resize failed."); diff --git a/src/logconn/src/logconn.cpp b/src/logconn/src/logconn.cpp index 8d1ff71c..28321246 100644 --- a/src/logconn/src/logconn.cpp +++ b/src/logconn/src/logconn.cpp @@ -6,7 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -#ifdef OX_USE_STDLIB +#include + +#ifndef OX_OS_BareMetal #include #ifndef _WIN32 diff --git a/src/mc/include/ox/mc/write.hpp b/src/mc/include/ox/mc/write.hpp index 5e2f4d26..e8b92f1b 100644 --- a/src/mc/include/ox/mc/write.hpp +++ b/src/mc/include/ox/mc/write.hpp @@ -44,15 +44,7 @@ class MetalClawWriter: public ModelHandlerBase, OpType:: constexpr ~MetalClawWriter() noexcept = default; - constexpr Error field(CString, int8_t const *val) noexcept; - constexpr Error field(CString, int16_t const *val) noexcept; - constexpr Error field(CString, int32_t const *val) noexcept; - constexpr Error field(CString, int64_t const *val) noexcept; - - constexpr Error field(CString, uint8_t const *val) noexcept; - constexpr Error field(CString, uint16_t const *val) noexcept; - constexpr Error field(CString, uint32_t const *val) noexcept; - constexpr Error field(CString, uint64_t const *val) noexcept; + constexpr Error field(CString, Integer_c auto const *val) noexcept; constexpr Error field(CString, bool const *val) noexcept; @@ -133,42 +125,7 @@ constexpr MetalClawWriter::MetalClawWriter(Writer &writer, Optional } template -constexpr Error MetalClawWriter::field(CString, int8_t const *val) noexcept { - return appendInteger(*val); -} - -template -constexpr Error MetalClawWriter::field(CString, int16_t const *val) noexcept { - return appendInteger(*val); -} - -template -constexpr Error MetalClawWriter::field(CString, int32_t const *val) noexcept { - return appendInteger(*val); -} - -template -constexpr Error MetalClawWriter::field(CString, int64_t const *val) noexcept { - return appendInteger(*val); -} - -template -constexpr Error MetalClawWriter::field(CString, uint8_t const *val) noexcept { - return appendInteger(*val); -} - -template -constexpr Error MetalClawWriter::field(CString, uint16_t const *val) noexcept { - return appendInteger(*val); -} - -template -constexpr Error MetalClawWriter::field(CString, uint32_t const *val) noexcept { - return appendInteger(*val); -} - -template -constexpr Error MetalClawWriter::field(CString, uint64_t const *val) noexcept { +constexpr Error MetalClawWriter::field(CString, Integer_c auto const *val) noexcept { return appendInteger(*val); } diff --git a/src/mc/test/tests.cpp b/src/mc/test/tests.cpp index 0f975a90..9b905138 100644 --- a/src/mc/test/tests.cpp +++ b/src/mc/test/tests.cpp @@ -43,14 +43,14 @@ struct TestStruct { int32_t Int6 = 0; int32_t Int7 = 0; int32_t Int8 = 0; - int unionIdx = 1; + int32_t unionIdx = 1; TestUnion Union; ox::String String; ox::IString<32> IString = ""; uint32_t List[4] = {0, 0, 0, 0}; ox::Vector Vector = {1, 2, 3, 4, 5}; ox::Vector Vector2 = {1, 2, 3, 4, 5}; - ox::HashMap Map; + ox::HashMap Map; TestStructNest EmptyStruct; TestStructNest Struct; constexpr ~TestStruct() noexcept { @@ -204,7 +204,8 @@ std::map tests = { std::cout << "val.length: " << val.length << '\n'; return ox::Error(1); } - ox::LittleEndian decoded = *reinterpret_cast(&val.data[1]); + ox::LittleEndian decoded; + ox::memcpy(&decoded, &val.data[1], sizeof(decoded)); if (expected != decoded) { std::cout << "decoded: " << decoded << ", expected: " << expected << '\n'; return ox::Error(1); @@ -370,7 +371,7 @@ std::map tests = { const auto [type, typeErr] = ox::buildTypeDef(typeStore, testIn); oxAssert(typeErr, "Descriptor write failed"); ox::BufferReader br({dataBuff, dataBuffLen}); - OX_RETURN_ERROR(ox::walkModel(type, br, + return ox::walkModel(type, br, [](const ox::Vector&, const ox::Vector&, const ox::DescriptorField &f, ox::MetalClawReader *rdr) -> ox::Error { //std::cout << f.fieldName.c_str() << '\n'; auto fieldName = f.fieldName.c_str(); @@ -455,8 +456,7 @@ std::map tests = { } return ox::Error(0); } - )); - return ox::Error(0); + ); } }, } diff --git a/src/model/include/ox/model/descwrite.hpp b/src/model/include/ox/model/descwrite.hpp index b31c398b..12d6729b 100644 --- a/src/model/include/ox/model/descwrite.hpp +++ b/src/model/include/ox/model/descwrite.hpp @@ -126,22 +126,7 @@ class TypeDescWriter { private: [[nodiscard]] - constexpr const DescriptorType *type(const int8_t *val) const noexcept; - [[nodiscard]] - constexpr const DescriptorType *type(const int16_t *val) const noexcept; - [[nodiscard]] - constexpr const DescriptorType *type(const int32_t *val) const noexcept; - [[nodiscard]] - constexpr const DescriptorType *type(const int64_t *val) const noexcept; - - [[nodiscard]] - constexpr const DescriptorType *type(const uint8_t *val) const noexcept; - [[nodiscard]] - constexpr const DescriptorType *type(const uint16_t *val) const noexcept; - [[nodiscard]] - constexpr const DescriptorType *type(const uint32_t *val) const noexcept; - [[nodiscard]] - constexpr const DescriptorType *type(const uint64_t *val) const noexcept; + constexpr const DescriptorType *type(const Integer_c auto *val) const noexcept; [[nodiscard]] constexpr const DescriptorType *type(const bool *val) const noexcept; @@ -295,52 +280,26 @@ constexpr const DescriptorType *TypeDescWriter::type(UnionView val) const noe return t; } -constexpr const DescriptorType *TypeDescWriter::type(const int8_t*) const noexcept { - constexpr auto PT = PrimitiveType::SignedInteger; - constexpr auto Bytes = 1; - return getType(types::Int8, 0, PT, Bytes); -} - -constexpr const DescriptorType *TypeDescWriter::type(const int16_t*) const noexcept { - constexpr auto PT = PrimitiveType::SignedInteger; - constexpr auto Bytes = 2; - return getType(types::Int16, 0, PT, Bytes); -} - -constexpr const DescriptorType *TypeDescWriter::type(const int32_t*) const noexcept { - constexpr auto PT = PrimitiveType::SignedInteger; - constexpr auto Bytes = 4; - return getType(types::Int32, 0, PT, Bytes); -} - -constexpr const DescriptorType *TypeDescWriter::type(const int64_t*) const noexcept { - constexpr auto PT = PrimitiveType::SignedInteger; - constexpr auto Bytes = 8; - return getType(types::Int64, 0, PT, Bytes); -} - -constexpr const DescriptorType *TypeDescWriter::type(const uint8_t*) const noexcept { - constexpr auto PT = PrimitiveType::UnsignedInteger; - constexpr auto Bytes = 1; - return getType(types::Uint8, 0, PT, Bytes); -} - -constexpr const DescriptorType *TypeDescWriter::type(const uint16_t*) const noexcept { - constexpr auto PT = PrimitiveType::UnsignedInteger; - constexpr auto Bytes = 2; - return getType(types::Uint16, 0, PT, Bytes); -} - -constexpr const DescriptorType *TypeDescWriter::type(const uint32_t*) const noexcept { - constexpr auto PT = PrimitiveType::UnsignedInteger; - constexpr auto Bytes = 4; - return getType(types::Uint32, 0, PT, Bytes); -} - -constexpr const DescriptorType *TypeDescWriter::type(const uint64_t*) const noexcept { - constexpr auto PT = PrimitiveType::UnsignedInteger; - constexpr auto Bytes = 8; - return getType(types::Uint64, 0, PT, Bytes); +constexpr const DescriptorType *TypeDescWriter::type(Integer_c auto const *val) const noexcept { + constexpr auto isSigned = ox::is_signed_v; + constexpr auto PT = isSigned ? + PrimitiveType::SignedInteger : + PrimitiveType::UnsignedInteger; + constexpr auto sz = sizeof(*val); + constexpr auto bytes = sizeof(*val); + return getType([] { + switch (sz) { + case 1: + return isSigned ? types::Int8 : types::Uint8; + case 2: + return isSigned ? types::Int16 : types::Uint16; + case 4: + return isSigned ? types::Int32 : types::Uint32; + case 8: + return isSigned ? types::Int64 : types::Uint64; + } + return types::Int32; + }(), 0, PT, bytes); } constexpr const DescriptorType *TypeDescWriter::type(const bool*) const noexcept { diff --git a/src/oc/include/ox/oc/write.hpp b/src/oc/include/ox/oc/write.hpp index 233974e4..2fd2426d 100644 --- a/src/oc/include/ox/oc/write.hpp +++ b/src/oc/include/ox/oc/write.hpp @@ -59,7 +59,7 @@ class OrganicClawWriter { Error field(CString const key, int32_t const *val) noexcept { if (targetValid() && (*val || m_json.isArray())) { - value(key) = *val; + value(key) = static_cast(*val); } ++m_fieldIt; return {}; @@ -92,7 +92,7 @@ class OrganicClawWriter { Error field(CString const key, uint32_t const *val) noexcept { if (targetValid() && (*val || m_json.isArray())) { - value(key) = *val; + value(key) = static_cast(*val); } ++m_fieldIt; return {}; @@ -221,9 +221,9 @@ Error OrganicClawWriter::field(CString key, T const *val) noexcept { // the int type needs to be normalized because jsoncpp doesn't // factor in every permutation unsigned long, etc. if constexpr(is_signed_v) { - value(key) = static_cast>(*val); + value(key) = static_cast(*val); } else { - value(key) = static_cast>(*val); + value(key) = static_cast(*val); } } } else if constexpr(isVector_v || isArray_v) { diff --git a/src/std/CMakeLists.txt b/src/std/CMakeLists.txt index e8bd8706..d6dcd42c 100644 --- a/src/std/CMakeLists.txt +++ b/src/std/CMakeLists.txt @@ -78,10 +78,10 @@ target_compile_definitions( $<$:OX_NODEBUG> ) -if(NOT WIN32) +if(NOT WIN32 AND NOT OX_BARE_METAL) target_link_libraries( OxStd PUBLIC - $<$:$<$:dl>> + dl ) endif() target_link_libraries( diff --git a/src/std/include/ox/std/def.hpp b/src/std/include/ox/std/def.hpp index 9af2bf44..aa112002 100644 --- a/src/std/include/ox/std/def.hpp +++ b/src/std/include/ox/std/def.hpp @@ -63,6 +63,7 @@ constexpr void oxAssert(const ox::Error&, const char*) noexcept {} #if defined(_MSC_VER) #define ox_alloca(size) _alloca(size) #elif OX_USE_STDLIB +#include #define ox_alloca(size) alloca(size) #else #define ox_alloca(size) __builtin_alloca(size) diff --git a/src/std/include/ox/std/typetraits.hpp b/src/std/include/ox/std/typetraits.hpp index cbc8443a..ddf9bd78 100644 --- a/src/std/include/ox/std/typetraits.hpp +++ b/src/std/include/ox/std/typetraits.hpp @@ -103,32 +103,33 @@ constexpr bool is_const_v = true; // is_integral ///////////////////////////////////////////////////////////////// template struct is_integral: false_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral: true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral: true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral: true_type {}; -template<> struct is_integral : true_type {}; -template<> struct is_integral: true_type {}; // some of these need to be done with the actual language syntax because no one // can agree on what an (u)int64_t is... -template<> struct is_integral: true_type {}; -template<> struct is_integral: true_type {}; -template<> struct is_integral: true_type {}; -template<> struct is_integral: true_type {}; -template<> struct is_integral: true_type {}; -template<> struct is_integral: true_type {}; -template<> struct is_integral: true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; + +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; +template<> struct is_integral : true_type {}; template<> struct is_integral: true_type {}; template @@ -138,29 +139,26 @@ constexpr bool is_integral_v = is_integral::value; // is_integer ///////////////////////////////////////////////////////////////// template struct is_integer: false_type {}; -template<> struct is_integer : true_type {}; -template<> struct is_integer : true_type {}; -template<> struct is_integer : true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer : true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer : true_type {}; -template<> struct is_integer : true_type {}; -template<> struct is_integer : true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer : true_type {}; -template<> struct is_integer: true_type {}; - -// some of these need to be done with the actual language syntax because no one -// can agree on what an (u)int64_t is... -template<> struct is_integer: true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer: true_type {}; -template<> struct is_integer: true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; +template<> struct is_integer : true_type {}; template constexpr bool is_integer_v = is_integer::value; diff --git a/src/std/test/tests.cpp b/src/std/test/tests.cpp index 0093c897..14c6cba2 100644 --- a/src/std/test/tests.cpp +++ b/src/std/test/tests.cpp @@ -43,7 +43,7 @@ uint64_t timeMapStrToUuid(int const elemCnt, int const lookups, uint64_t seed = // start auto const startTime = steadyNowMs(); for (int i = 0; i < lookups; ++i) { - auto const &k = keys[rand.gen() % keys.size()]; + auto const &k = keys[static_cast(rand.gen() % keys.size())]; map[k]; ox::expect(map[k], ox::UUID::fromString(k).unwrap()); } @@ -65,7 +65,7 @@ uint64_t timeMapUuidToStr(int const elemCnt, int const lookups, uint64_t seed = // start auto const startTime = steadyNowMs(); for (int i = 0; i < lookups; ++i) { - auto const &k = keys[rand.gen() % keys.size()]; + auto const &k = keys[static_cast(rand.gen() % keys.size())]; ox::expect(map[k], k.toString()); } return steadyNowMs() - startTime;