From 12fec99a910a7fd8f66d209572b5de73143ca10e Mon Sep 17 00:00:00 2001
From: AAAlvesJr <aalvesju@gmail.com>
Date: Wed, 2 Dec 2020 00:44:46 +0100
Subject: [PATCH] [refactory-2020] stack implementations: cleanup tests
 passing. ready for review.

---
 corsika/detail/media/VolumeTreeNode.inl |  4 +-
 corsika/framework/stack/Stack.hpp       | 59 +++++++++++++++++++++++++
 corsika/media/VolumeTreeNode.hpp        |  2 +-
 3 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/corsika/detail/media/VolumeTreeNode.inl b/corsika/detail/media/VolumeTreeNode.inl
index 14eaef6b5..79e8b4100 100644
--- a/corsika/detail/media/VolumeTreeNode.inl
+++ b/corsika/detail/media/VolumeTreeNode.inl
@@ -10,7 +10,7 @@
 
 #pragma once
 
-#include <corsika/framework/geometry/Volume.hpp>
+#include <corsika/framework/geometry/IVolume.hpp>
 #include <corsika/media/IMediumModel.hpp>
 
 namespace corsika {
@@ -89,4 +89,4 @@ namespace corsika {
     return std::make_shared<MediumType>(std::forward<Args>(args)...);
   }
 
-} // namespace corsika
\ No newline at end of file
+} // namespace corsika
diff --git a/corsika/framework/stack/Stack.hpp b/corsika/framework/stack/Stack.hpp
index e30e4e7c5..a7ed1cdb0 100644
--- a/corsika/framework/stack/Stack.hpp
+++ b/corsika/framework/stack/Stack.hpp
@@ -335,6 +335,65 @@ namespace corsika {
     }
 
   protected:
+
+    /**
+     * increase stack size, create new particle at end of stack, related to parent
+     * particle/projectile
+     *
+     * This should only get internally called from a
+     * StackIterator::AddSecondary via ParticleBase
+     */
+    /*
+    template <typename... TArgs>
+    stack_iterator_type addSecondary(stack_iterator_type& parent, const TArgs... v) {
+      CORSIKA_LOG_TRACE("Stack::AddSecondary");
+      data_.incrementSize();
+      deleted_.push_back(false);
+      return stack_iterator_type(*this, getSize() - 1, parent, v...);
+    }
+
+    void swap(unsigned int a, unsigned int b) {
+      CORSIKA_LOG_TRACE("Stack::Swap(unsigned int)");
+      data_.swap(a, b);
+      std::swap(deleted_[a], deleted_[b]);
+    }
+    void copy(unsigned int a, unsigned int b) {
+      CORSIKA_LOG_TRACE("Stack::Copy");
+      data_.copy(a, b);
+      if (deleted_[b] && !deleted_[a]) nDeleted_--;
+      if (!deleted_[b] && deleted_[a]) nDeleted_++;
+      deleted_[b] = deleted_[a];
+    }
+
+    bool isDeleted(unsigned int i) const {
+      if (i >= deleted_.size()) return false;
+      return deleted_.at(i);
+    }
+
+    void erase(unsigned int i) {
+      deleted_[i] = true;
+      nDeleted_++;
+    }
+    */
+
+    /*
+     * will remove from storage the element i. This is a helper
+     * function for SecondaryView.
+     */
+
+    /*
+    void purge(unsigned int i) {
+      unsigned int iStackBack = getSize() - 1;
+      // search for last non-deleted particle on stack
+      while (deleted_[iStackBack]) { iStackBack--; }
+      // copy entry from iStackBack to iStackFront
+      data_.copy(iStackBack, i);
+      if (deleted_[i]) nDeleted_--;
+      deleted_[i] = deleted_[iStackBack];
+      data_.decrementSize();
+      deleted_.pop_back();
+    }
+    */
     /**
      * increase stack size, create new particle at end of stack, related to parent
      * particle/projectile
diff --git a/corsika/media/VolumeTreeNode.hpp b/corsika/media/VolumeTreeNode.hpp
index 6d1aff615..051f8c96c 100644
--- a/corsika/media/VolumeTreeNode.hpp
+++ b/corsika/media/VolumeTreeNode.hpp
@@ -8,7 +8,7 @@
 
 #pragma once
 
-#include <corsika/framework/geometry/Volume.hpp>
+#include <corsika/framework/geometry/IVolume.hpp>
 #include <corsika/media/IMediumModel.hpp>
 #include <memory>
 #include <vector>
-- 
GitLab