From 48709a3b78427b01090574f3bc97461b20f37b84 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 5 Mar 2021 20:13:43 +0100 Subject: [PATCH 1/2] closes https://github.com/kimkulling/cppcore/issues/16 --- include/cppcore/CPPCoreCommon.h | 2 +- include/cppcore/Memory/MemUtils.h | 23 ++++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/cppcore/CPPCoreCommon.h b/include/cppcore/CPPCoreCommon.h index bf2e46e..d484fdb 100644 --- a/include/cppcore/CPPCoreCommon.h +++ b/include/cppcore/CPPCoreCommon.h @@ -52,7 +52,7 @@ namespace CPPCore { // All disabled warnings for windows # pragma warning( disable : 4251 ) // needs to have dll-interface to be used by clients of class #else -# define DLL_CPPCORE_EXPORT +# define DLL_CPPCORE_EXPORT __attribute__((visibility("default"))) #endif //------------------------------------------------------------------------------------------------- diff --git a/include/cppcore/Memory/MemUtils.h b/include/cppcore/Memory/MemUtils.h index 5237764..2f4b5a2 100644 --- a/include/cppcore/Memory/MemUtils.h +++ b/include/cppcore/Memory/MemUtils.h @@ -29,6 +29,16 @@ namespace CPPCore { #define ALIGN_MASK(value, mask) (((value) + (mask)) & ((~0) & (~(mask)))) +template +inline size_t align(size_t n) { + return (n + sizeof(T) - 1) & ~(sizeof(T) - 1); +} + +union { + const void *mPtr; + uintptr_t mAddr; +} unaligned; + //------------------------------------------------------------------------------------------------- /// @class THashMap /// @ingroup CPPCore @@ -43,28 +53,19 @@ class MemUtils { static bool isAligned(const void *ptr, size_t align); - static void *alignPtr(void *ptr, size_t extra, size_t align); + static const void *alignPtr(void *ptr, size_t extra, size_t align); MemUtils() = delete; ~MemUtils() = delete; }; inline bool MemUtils::isAligned(const void *ptr, size_t align) { - union { - const void *mPtr; - uintptr_t mAddr; - } unaligned; unaligned.mPtr = ptr; return 0 == (unaligned.mAddr & (align - 1)); } -inline void *MemUtils::alignPtr(void *ptr, size_t extra, size_t align) { - union { - void *mPtr; - uintptr_t mAddr; - } unaligned; - +inline const void *MemUtils::alignPtr(void *ptr, size_t extra, size_t align) { unaligned.mPtr = ptr; uintptr_t un = unaligned.mAddr + extra; // space for header const uintptr_t mask = align - 1; From dd31a7437888471bd3f8b2e42fd82189bbf8f84d Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 5 Mar 2021 20:41:42 +0100 Subject: [PATCH 2/2] Fix compiter warning --- test/container/TStaticArrayTest.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/test/container/TStaticArrayTest.cpp b/test/container/TStaticArrayTest.cpp index 1c2b213..94dec03 100644 --- a/test/container/TStaticArrayTest.cpp +++ b/test/container/TStaticArrayTest.cpp @@ -59,8 +59,10 @@ TEST_F(TStaticArrayTest, access_items_Test) { TEST_F(TStaticArrayTest, clear_Test) { TStaticArray arr; + int ii=0; for (size_t i = 0; i < 4; ++i) { - arr[i] = i; + arr[i] = ii; + ii++; } arr.memset( 0 ); for (size_t i = 0; i < 4; ++i) { @@ -70,12 +72,16 @@ TEST_F(TStaticArrayTest, clear_Test) { TEST_F(TStaticArrayTest, access_string_Test) { TStaticArray arr; - arr[0] = std::string("bla"); - arr[1] = std::string("bla"); - arr[2] = std::string("bla"); - arr[3] = std::string("huhu"); + arr[0] = std::string("str_0"); + arr[1] = std::string("str_1"); + arr[2] = std::string("str_2"); + arr[3] = std::string("str_3"); EXPECT_EQ( 4u, arr.size()); + EXPECT_EQ("str_0", arr[0]); + EXPECT_EQ("str_1", arr[1]); + EXPECT_EQ("str_2", arr[2]); + EXPECT_EQ("str_3", arr[3]); } TEST_F(TStaticArrayTest, string_Test) {