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