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