From c2842fcefa4bcfddf9e9ee2ea73ddb412f27c6ad Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Fri, 16 Feb 2024 15:37:03 +0100 Subject: [PATCH] OwningVector: sort fcts; VectorWC ... --- Base/Types/OwningVector.h | 69 ++++++++++++++++++--------------------- Base/Types/VectorWC.h | 10 ++++++ 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/Base/Types/OwningVector.h b/Base/Types/OwningVector.h index 476799ffb72..57169b42496 100644 --- a/Base/Types/OwningVector.h +++ b/Base/Types/OwningVector.h @@ -46,33 +46,14 @@ public: OwningVector& operator=(OwningVector&& other) = default; void reserve(size_t n) { m_v.reserve(n); } - void clear() - { - for (T* e : *this) - delete e; - m_v.clear(); - } - - size_t size() const { return m_v.size(); } - bool empty() const { return m_v.empty(); } - - const T* operator[](int i) const { return m_v.operator[](i); } - T* operator[](int i) { return m_v.operator[](i); } - const T* at(int i) const { return m_v.at(i); } - T* at(int i) { return m_v.at(i); } - const T* front() const { return m_v.front(); } - T* front() { return m_v.front(); } - const T* back() const { return m_v.back(); } - T* back() { return m_v.back(); } - - int index_of(const T* t) const + void push_back(T* e) { m_v.push_back(e); } + void insert_at(size_t i, T* e) { m_v.insert(m_v.begin() + i, e); } + void replace_at(size_t i, T* e) { - for (size_t i = 0; i < m_v.size(); i++) - if (m_v[i] == t) - return int(i); - return -1; + ASSERT(i < m_v.size()); + delete m_v[i]; + m_v[i] = e; } - void delete_element(T* e) { if (!e) @@ -92,7 +73,7 @@ public: m_v.erase(m_v.begin() + i); return; } - T* release_at(size_t i) // TODO rm + T* release_at(size_t i) { if (i >= m_v.size()) return nullptr; @@ -100,15 +81,6 @@ public: m_v.erase(m_v.begin() + i); return result; } - void push_back(T* e) { m_v.push_back(e); } - void insert_at(size_t i, T* e) { m_v.insert(m_v.begin() + i, e); } - void replace_at(size_t i, T* e) - { - ASSERT(i < m_v.size()); - delete m_v[i]; - m_v[i] = e; - } - T* release_back() { if (m_v.empty()) @@ -117,7 +89,6 @@ public: m_v.pop_back(); return result; } - T* release_front() { if (m_v.empty()) @@ -126,7 +97,6 @@ public: m_v.erase(m_v.begin()); return result; } - void swap(size_t fromIndex, size_t toIndex) { if (fromIndex > toIndex) @@ -135,6 +105,31 @@ public: std::rotate(m_v.begin() + fromIndex, m_v.begin() + fromIndex + 1, m_v.begin() + toIndex + 1); } + void clear() + { + for (T* e : *this) + delete e; + m_v.clear(); + } + + const T* operator[](int i) const { return m_v.operator[](i); } + T* operator[](int i) { return m_v.operator[](i); } + const T* at(int i) const { return m_v.at(i); } + T* at(int i) { return m_v.at(i); } + const T* front() const { return m_v.front(); } + T* front() { return m_v.front(); } + const T* back() const { return m_v.back(); } + T* back() { return m_v.back(); } + + size_t size() const { return m_v.size(); } + bool empty() const { return m_v.empty(); } + int index_of(const T* t) const + { + for (size_t i = 0; i < m_v.size(); i++) + if (m_v[i] == t) + return int(i); + return -1; + } const std::vector<T*>& shared() const { return m_v; } std::vector<T*> cloned_vector() const diff --git a/Base/Types/VectorWC.h b/Base/Types/VectorWC.h index 3da7f43d121..4370df25da9 100644 --- a/Base/Types/VectorWC.h +++ b/Base/Types/VectorWC.h @@ -24,6 +24,16 @@ template <class T> class VectorWC : public OwningVector<T> { public: + + void setCurrentIndex(size_t i) + { + ASSERT(i < OwningVector<T>::size() || i == -1); + m_current_index = i; + } + size_t currentIndex() const { return m_current_index; } + +private: + size_t m_current_index = -1; }; #endif // BORNAGAIN_BASE_TYPES_VECTORWC_H -- GitLab