diff --git a/modules/c++/mem/include/mem/AutoPtr.h b/modules/c++/mem/include/mem/AutoPtr.h index e19a7e1c0..0061b4726 100644 --- a/modules/c++/mem/include/mem/AutoPtr.h +++ b/modules/c++/mem/include/mem/AutoPtr.h @@ -25,7 +25,7 @@ #define CODA_OSS_mem_AutoPtr_h_INCLUDED_ #pragma once -#include +#include #include "coda_oss/memory.h" #include "mem/SharedPtr.h" diff --git a/modules/c++/mem/include/mem/ComplexView.h b/modules/c++/mem/include/mem/ComplexView.h index 4d4540bb4..f43ae8c5a 100644 --- a/modules/c++/mem/include/mem/ComplexView.h +++ b/modules/c++/mem/include/mem/ComplexView.h @@ -244,7 +244,7 @@ struct ComplexSpanView final span_t_ data_; // i.e., std::span> }; template -inline auto make_ComplexSpanView(coda_oss::span> s) +inline ComplexSpanView make_ComplexSpanView(coda_oss::span> s) { return ComplexSpanView(s); } @@ -252,9 +252,9 @@ template inline auto make_ComplexSpanView(const TVectorLike& v) { using cxvalue_t = typename TVectorLike::value_type; // i.e., std::complex - const coda_oss::span s(v.data(), v.size()); - using axis_t = typename cxvalue_t::value_type; // i.e., float - return ComplexSpanView(s); + using span_t = coda_oss::span; + + return make_ComplexSpanView(span_t(v.data(), v.size())); } template @@ -343,86 +343,22 @@ struct ComplexSpansView final // "Span_s_,", i.e., two spans. Avoiding "parallel span_t_ imags_; }; template -inline auto make_ComplexSpansView(coda_oss::span reals, coda_oss::span imags) +inline ComplexSpansView make_ComplexSpansView( + coda_oss::span reals, coda_oss::span imags) { return ComplexSpansView(reals, imags); } - -template // e.g., std::vector -struct ComplexArraysView final // "Array_s_,", i.e., two arrays. Avoiding "parallel" because that can conjure up multi-threading thoughts. +template +inline auto make_ComplexSpansView(const TVectorLike& reals_, const TVectorLike& imags_) { - using size_type = size_t; using value_type = typename TVectorLike::value_type; // i.e., float - using cxvalue_t_ = std::complex; - using axis_t_ = typename cxvalue_t_::value_type; // i.e., float - using span_t_ = coda_oss::span; - using view_t_ = ComplexSpansView; - using const_iterator = typename view_t_::const_iterator; - using iterator = const_iterator; - - ComplexArraysView() = delete; - ~ComplexArraysView() = default; - ComplexArraysView(const TVectorLike& reals, const TVectorLike& imags) : - view(span_t_(reals.data(), reals.size()), span_t_(imags.data(), imags.size())) - { - } - ComplexArraysView(const ComplexArraysView&) = default; - ComplexArraysView& operator=(const ComplexArraysView&) = default; - ComplexArraysView(ComplexArraysView&&) = default; - ComplexArraysView& operator=(ComplexArraysView&&) = default; - - constexpr auto real(size_type idx) const noexcept - { - return view.real(idx); - } - constexpr auto imag(size_type idx) const noexcept - { - return view.imag(idx); - } - - constexpr cxvalue_t_ index(size_type idx) const noexcept // i.e., std::complex - { - return view[idx]; - } - constexpr auto operator[](size_type idx) const noexcept - { - return index(idx); - } - - constexpr size_type size() const noexcept - { - return view.size(); - } - - auto begin() const - { - return view.begin(); - } - auto end() const - { - return view.end(); - } - - auto reals() const - { - return view.reals(); - } - auto imags() const - { - return view.imags(); - } - auto values() const - { - return view.values(); - } + using cxvalue_t = std::complex; // i.e., std::complex + using axis_t = typename cxvalue_t::value_type; // i.e., float + using span_t = coda_oss::span; -private: - view_t_ view; // i.e., ComplexSpansView -}; -template -inline auto make_ComplexArraysView(const TVectorLike& reals, const TVectorLike& imags) -{ - return ComplexArraysView(reals, imags); + const span_t reals(reals_.data(), reals_.size()); + const span_t imags(imags_.data(), imags_.size()); + return make_ComplexSpansView(reals, imags); } } diff --git a/modules/c++/mem/unittests/test_vector_pointers.cpp b/modules/c++/mem/unittests/test_vector_pointers.cpp index 359e2a779..bc975e6a4 100644 --- a/modules/c++/mem/unittests/test_vector_pointers.cpp +++ b/modules/c++/mem/unittests/test_vector_pointers.cpp @@ -205,7 +205,7 @@ TEST_CASE(testComplexViewFloat) test_cx_view(testName, view.values()); } { - const auto view = mem::make_ComplexArraysView(reals, imags); + const auto view = mem::make_ComplexSpansView(reals, imags); TEST_ASSERT_EQ(reals.size(), view.size()); test_mem_ComplexView(testName, view); test_cx_view(testName, view.values()); @@ -274,7 +274,7 @@ TEST_CASE(testComplexViewFloatIterator) test_mem_ComplexViewConstIterator(testName, view); } { - const auto view = mem::make_ComplexArraysView(reals, imags); + const auto view = mem::make_ComplexSpansView(reals, imags); test_mem_ComplexViewConstIterator(testName, view); } }