From 3d5292cadda7cba699fe08d55cf11f784244d783 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 20 Feb 2020 14:51:19 +0100 Subject: [PATCH] closes https://github.com/kimkulling/cppcore/issues/7: fix initialization of std::string in TStaticArray. --- include/cppcore/Container/TStaticArray.h | 32 ++++++++++++++++-------- test/container/TArrayTest.cpp | 5 ++++ test/container/TStaticArrayTest.cpp | 6 ++--- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/include/cppcore/Container/TStaticArray.h b/include/cppcore/Container/TStaticArray.h index aa4bd6c..3d69b13 100644 --- a/include/cppcore/Container/TStaticArray.h +++ b/include/cppcore/Container/TStaticArray.h @@ -39,11 +39,12 @@ template class TStaticArray { public: TStaticArray(); + TStaticArray(T initValue); TStaticArray(const TStaticArray &rhs); ~TStaticArray(); - void clear(); size_t size() const; void set(size_t index, T value); + void memset(T value); T operator[](size_t index) const; T &operator[](size_t index); bool operator == (const TStaticArray &rhs) const; @@ -51,21 +52,28 @@ class TStaticArray { private: T m_array[len]; - size_t m_len; + size_t m_len; }; -template +template inline TStaticArray::TStaticArray() : m_len(len) { - clear(); + // empty +} + +template +inline +TStaticArray::TStaticArray( T initValue ) : + m_len(len) { + memset(initValue); } template inline TStaticArray::TStaticArray(const TStaticArray &rhs) : m_len(rhs.m_len) { - for (size_t i = 0; i < m_len; ++i) { + for (size_t i = 0; i < m_len; ++i) { m_array[i] = rhs.m_array[i]; } } @@ -76,12 +84,6 @@ TStaticArray::~TStaticArray() { // empty } -template -inline -void TStaticArray::clear() { - ::memset(m_array, 0, sizeof(T) * m_len); -} - template inline void TStaticArray::set(size_t index, T value) { @@ -90,6 +92,14 @@ void TStaticArray::set(size_t index, T value) { m_array[index] = value; } +template +inline +void TStaticArray::memset( T value ) { + for ( size_t i=0; i inline size_t TStaticArray::size() const { diff --git a/test/container/TArrayTest.cpp b/test/container/TArrayTest.cpp index 124ae47..44b44b4 100644 --- a/test/container/TArrayTest.cpp +++ b/test/container/TArrayTest.cpp @@ -67,9 +67,14 @@ TEST_F( TArrayTest, constructTest ) { // Just checks how to initialize the array TEST_F( TArrayTest, constructWithSizeTest) { TArray arrayInstance( 4 ); + arrayInstance[0] = 0.0f; + arrayInstance[1] = 1.0f; + arrayInstance[2] = 2.0f; + arrayInstance[3] = 3.0f; EXPECT_EQ( 4u, arrayInstance.size() ); for ( size_t i=0; i<4; ++i ) { const float f = arrayInstance[i]; + EXPECT_EQ( (float) i, f ); } } diff --git a/test/container/TStaticArrayTest.cpp b/test/container/TStaticArrayTest.cpp index 20889fd..1c2b213 100644 --- a/test/container/TStaticArrayTest.cpp +++ b/test/container/TStaticArrayTest.cpp @@ -41,7 +41,7 @@ class TStaticArrayTest : public testing::Test { }; TEST_F(TStaticArrayTest, constructTest) { - TStaticArray arr; + TStaticArray arr(0); EXPECT_EQ(4u, arr.size()); EXPECT_EQ(0, arr[0]); EXPECT_EQ(0, arr[3]); @@ -62,14 +62,14 @@ TEST_F(TStaticArrayTest, clear_Test) { for (size_t i = 0; i < 4; ++i) { arr[i] = i; } - arr.clear(); + arr.memset( 0 ); for (size_t i = 0; i < 4; ++i) { EXPECT_EQ(0, arr[i]); } } TEST_F(TStaticArrayTest, access_string_Test) { - TStaticArray < std::string, 4> arr; + TStaticArray arr; arr[0] = std::string("bla"); arr[1] = std::string("bla"); arr[2] = std::string("bla");