From a4dfbeff7a81dc672d68349cc8502293964101f4 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Thu, 9 Feb 2023 23:49:06 -0600 Subject: [PATCH] feat(datastore): add getter and setter for float --- common/datastore/CDataStore.cpp | 30 ++++++++++++++++++++++++++++++ common/datastore/CDataStore.hpp | 2 ++ test/DataStore.cpp | 12 ++++++++++++ 3 files changed, 44 insertions(+) diff --git a/common/datastore/CDataStore.cpp b/common/datastore/CDataStore.cpp index 7ffeef3..8544ebe 100644 --- a/common/datastore/CDataStore.cpp +++ b/common/datastore/CDataStore.cpp @@ -106,6 +106,22 @@ CDataStore& CDataStore::Get(uint64_t& val) { return *this; } +CDataStore& CDataStore::Get(float& val) { + STORM_ASSERT(this->IsFinal()); + + auto bytes = sizeof(val); + + if (this->FetchRead(this->m_read, bytes)) { + auto ofs = this->m_read - this->m_base; + auto ptr = &this->m_data[ofs]; + val = *reinterpret_cast(ptr); + + this->m_read += bytes; + } + + return *this; +} + void CDataStore::GetBufferParams(const void** data, uint32_t* size, uint32_t* alloc) const { if (data) { *data = this->m_data; @@ -229,6 +245,20 @@ CDataStore& CDataStore::Put(uint64_t val) { return *this; } +CDataStore& CDataStore::Put(float val) { + STORM_ASSERT(!this->IsFinal()); + + this->FetchWrite(this->m_size, sizeof(val), nullptr, 0); + + auto ofs = this->m_size - this->m_base; + auto ptr = &this->m_data[ofs]; + *reinterpret_cast(ptr) = val; + + this->m_size += sizeof(val); + + return *this; +} + CDataStore& CDataStore::PutArray(const uint8_t* val, uint32_t count) { STORM_ASSERT(!this->IsFinal()); STORM_ASSERT(val || !count); diff --git a/common/datastore/CDataStore.hpp b/common/datastore/CDataStore.hpp index 9d511f8..f8db388 100644 --- a/common/datastore/CDataStore.hpp +++ b/common/datastore/CDataStore.hpp @@ -33,12 +33,14 @@ class CDataStore { CDataStore& Get(uint16_t& val); CDataStore& Get(uint32_t& val); CDataStore& Get(uint64_t& val); + CDataStore& Get(float& val); CDataStore& GetDataInSitu(void*& val, uint32_t bytes); int32_t IsFinal(); CDataStore& Put(uint8_t val); CDataStore& Put(uint16_t val); CDataStore& Put(uint32_t val); CDataStore& Put(uint64_t val); + CDataStore& Put(float val); CDataStore& PutArray(const uint8_t* val, uint32_t count); CDataStore& PutData(const void* val, uint32_t bytes); CDataStore& Set(uint32_t pos, uint16_t val); diff --git a/test/DataStore.cpp b/test/DataStore.cpp index d2f82da..8435c38 100644 --- a/test/DataStore.cpp +++ b/test/DataStore.cpp @@ -56,4 +56,16 @@ TEST_CASE("CDataStore::Get", "[datastore]") { REQUIRE(readVal == writeVal); } + + SECTION("gets float") { + float writeVal = 1.5f; + float readVal = -1.0f; + + CDataStore msg; + msg.Put(writeVal); + msg.Finalize(); + msg.Get(readVal); + + REQUIRE(readVal == writeVal); + } }