From 3f83e37e6b060d3b75be692dd56b9aa8776b55f4 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 3 Apr 2024 12:05:21 +0200 Subject: [PATCH] moved set to Frame.hpp to avoid explicitly having to declare specializations --- core/CMakeLists.txt | 1 + core/include/aare/Frame.hpp | 16 +++++++++++++--- core/src/Frame.cpp | 25 +------------------------ 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 9db8c47..b350a89 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -21,6 +21,7 @@ if(AARE_TESTS) set(TestSources ${CMAKE_CURRENT_SOURCE_DIR}/test/defs.test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test/DType.test.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test/Frame.test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test/ProducerConsumerQueue.test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test/NDArray.test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test/NDView.test.cpp diff --git a/core/include/aare/Frame.hpp b/core/include/aare/Frame.hpp index 73fd59a..c48a4b4 100644 --- a/core/include/aare/Frame.hpp +++ b/core/include/aare/Frame.hpp @@ -26,13 +26,23 @@ class Frame { Frame(ssize_t rows, ssize_t cols, ssize_t m_bitdepth); Frame(std::byte *fp, ssize_t rows, ssize_t cols, ssize_t m_bitdepth); std::byte *get(int row, int col); - template void set(int row, int col, T data); - // std::vector> get_array(); + // template void set(int row, int col, T data); + template + void set(int row, int col, T data) { + assert(sizeof(T) == m_bitdepth/8); + if (row < 0 || row >= m_rows || col < 0 || col >= m_cols) { + std::cerr << "Invalid row or column index" << std::endl; + return; + } + std::memcpy(m_data+(row*m_cols + col)*(m_bitdepth/8), &data, m_bitdepth/8); +} + ssize_t rows() const { return m_rows; } ssize_t cols() const { return m_cols; } ssize_t bitdepth() const { return m_bitdepth; } - inline ssize_t size() const { return m_rows * m_cols * m_bitdepth / 8; } + ssize_t size() const { return m_rows * m_cols * m_bitdepth / 8; } std::byte *_get_data() { return m_data; } + Frame &operator=(Frame &other) { m_rows = other.rows(); m_cols = other.cols(); diff --git a/core/src/Frame.cpp b/core/src/Frame.cpp index ecc7751..cd06e75 100644 --- a/core/src/Frame.cpp +++ b/core/src/Frame.cpp @@ -14,6 +14,7 @@ Frame::Frame(std::byte* bytes, ssize_t rows, ssize_t cols, ssize_t bitdepth): Frame::Frame(ssize_t rows, ssize_t cols, ssize_t bitdepth): m_rows(rows), m_cols(cols), m_bitdepth(bitdepth) { m_data = new std::byte[rows*cols*bitdepth/8]; + std::memset(m_data, 0, rows*cols*bitdepth/8); } @@ -26,29 +27,5 @@ std::byte* Frame::get(int row, int col) { return m_data+(row*m_cols + col)*(m_bitdepth/8); } -template -void Frame::set(int row, int col, T data) { - assert(sizeof(T) == m_bitdepth/8); - if (row < 0 || row >= m_rows || col < 0 || col >= m_cols) { - std::cerr << "Invalid row or column index" << std::endl; - return; - } - std::memcpy(m_data+(row*m_cols + col)*(m_bitdepth/8), &data, m_bitdepth/8); -} - -template void Frame::set(int row, int col, uint16_t data); -template void Frame::set(int row, int col, uint32_t data); - - -// std::vector> Frame::get_array() { -// std::vector> array; -// for (int i = 0; i < m_rows; i++) { -// std::vector row; -// row.assign(m_data + i*m_cols, m_data + (i+1)*m_cols); -// array.push_back(row); -// } - -// return array; -// } } // namespace aare