From 25e9bcdbde4592e607693d267e005bc95b46a152 Mon Sep 17 00:00:00 2001
From: Philipp Spilger <philipp.spilger@kip.uni-heidelberg.de>
Date: Thu, 13 Feb 2025 16:26:30 +0100
Subject: [PATCH] feat: Move PropertyHolder out of detail namespace

* to be used in user-facing API

Change-Id: I068ec9a92cde5a11b01b452568dc0d05a76e57c1
---
 include/grenade/common/graph.h                             | 6 +++---
 include/grenade/common/{detail => }/property_holder.h      | 6 +++---
 include/grenade/common/{detail => }/property_holder.tcc    | 6 +++---
 .../vx/network/abstract/multicompartment_compartment.h     | 4 ++--
 .../vx/network/abstract/multicompartment_environment.h     | 6 ++----
 .../abstract/multicompartment_hardware_constraint.h        | 2 +-
 .../network/abstract/multicompartment_hardware_resource.h  | 2 +-
 .../multicompartment_hardware_resource_with_constraint.h   | 6 +++---
 .../network/abstract/multicompartment_resource_manager.h   | 4 ++--
 .../abstract/multicompartment_mechanism/capacitance.cpp    | 2 +-
 .../multicompartment_mechanism/synaptic_conductance.cpp    | 6 +++---
 .../multicompartment_mechanism/synaptic_current.cpp        | 6 +++---
 .../abstract/multicompartment_resource_manager_.cpp        | 7 +++----
 tests/sw/grenade/common/test-property_holder.cpp           | 6 +++---
 .../network/abstract/test-multicompartment_resources.cpp   | 4 ++--
 15 files changed, 35 insertions(+), 38 deletions(-)
 rename include/grenade/common/{detail => }/property_holder.h (95%)
 rename include/grenade/common/{detail => }/property_holder.tcc (95%)

diff --git a/include/grenade/common/graph.h b/include/grenade/common/graph.h
index 1cdd8a32..516bd037 100644
--- a/include/grenade/common/graph.h
+++ b/include/grenade/common/graph.h
@@ -1,10 +1,10 @@
 #pragma once
 #include "grenade/common/detail/constructor_transform.h"
 #include "grenade/common/detail/graph.h"
-#include "grenade/common/detail/property_holder.h"
 #include "grenade/common/edge_on_graph.h"
 #include "grenade/common/genpybind.h"
 #include "grenade/common/property.h"
+#include "grenade/common/property_holder.h"
 #include "grenade/common/vertex_on_graph.h"
 #include "hate/visibility.h"
 #include <memory>
@@ -360,8 +360,8 @@ struct SYMBOL_VISIBLE GENPYBIND(visible) Graph
 
 private:
 	Backend m_graph;
-	std::unordered_map<VertexDescriptor, detail::PropertyHolder<Vertex, Holder>> m_vertices;
-	std::unordered_map<EdgeDescriptor, detail::PropertyHolder<Edge, Holder>> m_edges;
+	std::unordered_map<VertexDescriptor, PropertyHolder<Vertex, Holder>> m_vertices;
+	std::unordered_map<EdgeDescriptor, PropertyHolder<Edge, Holder>> m_edges;
 
 	void check_contains(VertexDescriptor const& descriptor, char const* description) const;
 	void check_contains(EdgeDescriptor const& descriptor, char const* description) const;
diff --git a/include/grenade/common/detail/property_holder.h b/include/grenade/common/property_holder.h
similarity index 95%
rename from include/grenade/common/detail/property_holder.h
rename to include/grenade/common/property_holder.h
index d4c419a3..237128d7 100644
--- a/include/grenade/common/detail/property_holder.h
+++ b/include/grenade/common/property_holder.h
@@ -4,7 +4,7 @@
 #include <memory>
 #include <type_traits>
 
-namespace grenade::common::detail {
+namespace grenade::common {
 
 /**
  * Holder type for polymorphic property.
@@ -108,6 +108,6 @@ private:
 template <typename T, template <typename...> typename Backend>
 std::ostream& operator<<(std::ostream& os, PropertyHolder<T, Backend> const& value);
 
-} // namespace grenade::common::detail
+} // namespace grenade::common
 
-#include "grenade/common/detail/property_holder.tcc"
+#include "grenade/common/property_holder.tcc"
diff --git a/include/grenade/common/detail/property_holder.tcc b/include/grenade/common/property_holder.tcc
similarity index 95%
rename from include/grenade/common/detail/property_holder.tcc
rename to include/grenade/common/property_holder.tcc
index e92d14c4..d527c6ed 100644
--- a/include/grenade/common/detail/property_holder.tcc
+++ b/include/grenade/common/property_holder.tcc
@@ -1,9 +1,9 @@
 #pragma once
-#include "grenade/common/detail/property_holder.h"
+#include "grenade/common/property_holder.h"
 #include <ostream>
 #include <stdexcept>
 
-namespace grenade::common::detail {
+namespace grenade::common {
 
 template <typename T, template <typename...> typename Backend>
 PropertyHolder<T, Backend>::PropertyHolder(T const& value) : m_backend(value.copy())
@@ -86,4 +86,4 @@ std::ostream& operator<<(std::ostream& os, PropertyHolder<T, Backend> const& val
 	return os << *value;
 }
 
-} // namespace grenade::common::detail
+} // namespace grenade::common
diff --git a/include/grenade/vx/network/abstract/multicompartment_compartment.h b/include/grenade/vx/network/abstract/multicompartment_compartment.h
index 68871fd6..1bdcd25e 100644
--- a/include/grenade/vx/network/abstract/multicompartment_compartment.h
+++ b/include/grenade/vx/network/abstract/multicompartment_compartment.h
@@ -1,9 +1,9 @@
 #pragma once
 
 #include "grenade/common/detail/graph.h"
-#include "grenade/common/detail/property_holder.h"
 #include "grenade/common/graph.h"
 #include "grenade/common/property.h"
+#include "grenade/common/property_holder.h"
 #include "grenade/vx/genpybind.h"
 #include "grenade/vx/network/abstract/multicompartment_hardware_resource_with_constraint.h"
 #include "grenade/vx/network/abstract/multicompartment_mechanism.h"
@@ -42,7 +42,7 @@ protected:
 private:
 	size_t m_mechanism_key_counter = 0;
 	// Map over all Mechanisms on a Compartment
-	std::map<MechanismOnCompartment, common::detail::PropertyHolder<Mechanism>> m_mechanisms;
+	std::map<MechanismOnCompartment, common::PropertyHolder<Mechanism>> m_mechanisms;
 };
 
 } // namespace abstract
diff --git a/include/grenade/vx/network/abstract/multicompartment_environment.h b/include/grenade/vx/network/abstract/multicompartment_environment.h
index b9078108..e782408b 100644
--- a/include/grenade/vx/network/abstract/multicompartment_environment.h
+++ b/include/grenade/vx/network/abstract/multicompartment_environment.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "grenade/common/detail/property_holder.h"
+#include "grenade/common/property_holder.h"
 #include "grenade/vx/network/abstract/multicompartment_compartment_on_neuron.h"
 #include "grenade/vx/network/abstract/multicompartment_synaptic_input_environment.h"
 #include <map>
@@ -10,9 +10,7 @@ namespace abstract GENPYBIND_TAG_GRENADE_VX_NETWORK {
 
 struct GENPYBIND(visible) SYMBOL_VISIBLE Environment
 {
-	std::map<
-	    CompartmentOnNeuron,
-	    std::vector<common::detail::PropertyHolder<SynapticInputEnvironment>>>
+	std::map<CompartmentOnNeuron, std::vector<common::PropertyHolder<SynapticInputEnvironment>>>
 	    synaptic_connections;
 };
 
diff --git a/include/grenade/vx/network/abstract/multicompartment_hardware_constraint.h b/include/grenade/vx/network/abstract/multicompartment_hardware_constraint.h
index b74a3bf9..7accb89d 100644
--- a/include/grenade/vx/network/abstract/multicompartment_hardware_constraint.h
+++ b/include/grenade/vx/network/abstract/multicompartment_hardware_constraint.h
@@ -10,7 +10,7 @@ namespace grenade::vx::network::abstract {
 struct SYMBOL_VISIBLE HardwareConstraint : common::Property<HardwareConstraint>
 {
 	NumberTopBottom numbers;
-	common::detail::PropertyHolder<HardwareResource> resource;
+	common::PropertyHolder<HardwareResource> resource;
 
 	// Property Methods
 	std::unique_ptr<HardwareConstraint> copy() const;
diff --git a/include/grenade/vx/network/abstract/multicompartment_hardware_resource.h b/include/grenade/vx/network/abstract/multicompartment_hardware_resource.h
index a98bdd0f..86a2da98 100644
--- a/include/grenade/vx/network/abstract/multicompartment_hardware_resource.h
+++ b/include/grenade/vx/network/abstract/multicompartment_hardware_resource.h
@@ -1,8 +1,8 @@
 #pragma once
 
-#include "grenade/common/detail/property_holder.h"
 #include "grenade/common/empty_property.h"
 #include "grenade/common/property.h"
+#include "grenade/common/property_holder.h"
 
 namespace grenade::vx::network::abstract {
 
diff --git a/include/grenade/vx/network/abstract/multicompartment_hardware_resource_with_constraint.h b/include/grenade/vx/network/abstract/multicompartment_hardware_resource_with_constraint.h
index a477e8b3..9dbfb1b6 100644
--- a/include/grenade/vx/network/abstract/multicompartment_hardware_resource_with_constraint.h
+++ b/include/grenade/vx/network/abstract/multicompartment_hardware_resource_with_constraint.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "grenade/common/detail/property_holder.h"
+#include "grenade/common/property_holder.h"
 #include "grenade/vx/network/abstract/multicompartment_hardware_constraint.h"
 #include "grenade/vx/network/abstract/multicompartment_hardware_resource.h"
 #include <vector>
@@ -9,8 +9,8 @@ namespace grenade::vx::network::abstract {
 
 struct SYMBOL_VISIBLE HardwareResourcesWithConstraints
 {
-	std::vector<common::detail::PropertyHolder<HardwareResource>> resources;
-	std::vector<common::detail::PropertyHolder<HardwareConstraint>> constraints;
+	std::vector<common::PropertyHolder<HardwareResource>> resources;
+	std::vector<common::PropertyHolder<HardwareConstraint>> constraints;
 };
 
 
diff --git a/include/grenade/vx/network/abstract/multicompartment_resource_manager.h b/include/grenade/vx/network/abstract/multicompartment_resource_manager.h
index 19f1d7b7..39403580 100644
--- a/include/grenade/vx/network/abstract/multicompartment_resource_manager.h
+++ b/include/grenade/vx/network/abstract/multicompartment_resource_manager.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "grenade/common/detail/property_holder.h"
+#include "grenade/common/property_holder.h"
 #include "grenade/vx/network/abstract/multicompartment_compartment_on_neuron.h"
 #include "grenade/vx/network/abstract/multicompartment_environment.h"
 #include "grenade/vx/network/abstract/multicompartment_hardware_resource/capacitance.h"
@@ -24,7 +24,7 @@ struct GENPYBIND(visible) SYMBOL_VISIBLE ResourceManager
 	NumberTopBottom const& get_config(CompartmentOnNeuron const& compartment) const;
 
 private:
-	std::map<CompartmentOnNeuron, common::detail::PropertyHolder<NumberTopBottom>> resource_map;
+	std::map<CompartmentOnNeuron, common::PropertyHolder<NumberTopBottom>> resource_map;
 };
 
 
diff --git a/src/grenade/vx/network/abstract/multicompartment_mechanism/capacitance.cpp b/src/grenade/vx/network/abstract/multicompartment_mechanism/capacitance.cpp
index f3bc8ffa..7bad4995 100644
--- a/src/grenade/vx/network/abstract/multicompartment_mechanism/capacitance.cpp
+++ b/src/grenade/vx/network/abstract/multicompartment_mechanism/capacitance.cpp
@@ -25,7 +25,7 @@ HardwareResourcesWithConstraints MechanismCapacitance::get_hardware(
 {
 	double capacity_convert = 5; // TO-DO
 	HardwareResourcesWithConstraints resources_with_constraints;
-	std::vector<common::detail::PropertyHolder<HardwareResource>> resource_list;
+	std::vector<common::PropertyHolder<HardwareResource>> resource_list;
 
 	double capacitance_model = parameter_space.capacitance_interval.get_upper();
 	int num_of_hardware_resources;
diff --git a/src/grenade/vx/network/abstract/multicompartment_mechanism/synaptic_conductance.cpp b/src/grenade/vx/network/abstract/multicompartment_mechanism/synaptic_conductance.cpp
index 06999dc7..69d956e9 100644
--- a/src/grenade/vx/network/abstract/multicompartment_mechanism/synaptic_conductance.cpp
+++ b/src/grenade/vx/network/abstract/multicompartment_mechanism/synaptic_conductance.cpp
@@ -38,13 +38,13 @@ HardwareResourcesWithConstraints MechanismSynapticInputConductance::get_hardware
 {
 	// Return Object and Input
 	HardwareResourcesWithConstraints resources_with_constraints;
-	std::vector<common::detail::PropertyHolder<HardwareResource>> resource_list;
-	std::vector<common::detail::PropertyHolder<HardwareConstraint>> constraint_list;
+	std::vector<common::PropertyHolder<HardwareResource>> resource_list;
+	std::vector<common::PropertyHolder<HardwareConstraint>> constraint_list;
 	if (environment.synaptic_connections.find(compartment) ==
 	    environment.synaptic_connections.end()) {
 		throw std::invalid_argument(" No information about this compartment in environment");
 	}
-	std::vector<common::detail::PropertyHolder<SynapticInputEnvironment>> synaptic_inputs =
+	std::vector<common::PropertyHolder<SynapticInputEnvironment>> synaptic_inputs =
 	    environment.synaptic_connections.at(compartment);
 
 	// Loop over all Synaptic Inputs of Compartment
diff --git a/src/grenade/vx/network/abstract/multicompartment_mechanism/synaptic_current.cpp b/src/grenade/vx/network/abstract/multicompartment_mechanism/synaptic_current.cpp
index 1df1e2b0..e7b9f180 100644
--- a/src/grenade/vx/network/abstract/multicompartment_mechanism/synaptic_current.cpp
+++ b/src/grenade/vx/network/abstract/multicompartment_mechanism/synaptic_current.cpp
@@ -36,13 +36,13 @@ HardwareResourcesWithConstraints MechanismSynapticInputCurrent::get_hardware(
 {
 	// Return Object and Input
 	HardwareResourcesWithConstraints resources_with_constraints;
-	std::vector<common::detail::PropertyHolder<HardwareResource>> resource_list;
-	std::vector<common::detail::PropertyHolder<HardwareConstraint>> constraint_list;
+	std::vector<common::PropertyHolder<HardwareResource>> resource_list;
+	std::vector<common::PropertyHolder<HardwareConstraint>> constraint_list;
 	if (environment.synaptic_connections.find(compartment) ==
 	    environment.synaptic_connections.end()) {
 		throw std::invalid_argument(" No information about this compartment in environment");
 	}
-	std::vector<common::detail::PropertyHolder<SynapticInputEnvironment>> synaptic_inputs =
+	std::vector<common::PropertyHolder<SynapticInputEnvironment>> synaptic_inputs =
 	    environment.synaptic_connections.at(compartment);
 
 	// Loop over all Synaptic Inputs of Compartment
diff --git a/src/grenade/vx/network/abstract/multicompartment_resource_manager_.cpp b/src/grenade/vx/network/abstract/multicompartment_resource_manager_.cpp
index d143acb9..47be7cc8 100644
--- a/src/grenade/vx/network/abstract/multicompartment_resource_manager_.cpp
+++ b/src/grenade/vx/network/abstract/multicompartment_resource_manager_.cpp
@@ -15,10 +15,9 @@ CompartmentOnNeuron ResourceManager::add_config(
 	NumberTopBottom neuron_circuit_config;
 	// Two Vectors to count Requestes Resources to find maximum later (Vectors instead of map since
 	// PropertyHolder is neither comparable nor hashable)
-	std::vector<common::detail::PropertyHolder<HardwareResource>>
-	    resource_request_counter_hardware = {
-	        HardwareResourceCapacity(), HardwareResourceSynapticInputExitatory(),
-	        HardwareResourceSynapticInputInhibitory()};
+	std::vector<common::PropertyHolder<HardwareResource>> resource_request_counter_hardware = {
+	    HardwareResourceCapacity(), HardwareResourceSynapticInputExitatory(),
+	    HardwareResourceSynapticInputInhibitory()};
 	std::vector<NumberTopBottom> resource_request_counter_numbers = {
 	    NumberTopBottom(0, 0, 0), NumberTopBottom(0, 0, 0), NumberTopBottom(0, 0, 0)};
 
diff --git a/tests/sw/grenade/common/test-property_holder.cpp b/tests/sw/grenade/common/test-property_holder.cpp
index 4bd49c16..4412eb14 100644
--- a/tests/sw/grenade/common/test-property_holder.cpp
+++ b/tests/sw/grenade/common/test-property_holder.cpp
@@ -1,4 +1,4 @@
-#include "grenade/common/detail/property_holder.h"
+#include "grenade/common/property_holder.h"
 
 #include "grenade/common/empty_property.h"
 #include "grenade/common/property.h"
@@ -42,7 +42,7 @@ protected:
 TEST(PropertyHolder, General)
 {
 	DerivedDummyProperty derived_dummy_5{5};
-	grenade::common::detail::PropertyHolder<DummyProperty> holder_5(derived_dummy_5);
+	grenade::common::PropertyHolder<DummyProperty> holder_5(derived_dummy_5);
 
 	EXPECT_TRUE(holder_5);
 	EXPECT_NO_THROW(*holder_5);
@@ -63,7 +63,7 @@ TEST(PropertyHolder, General)
 	EXPECT_EQ(holder_5, holder_5);
 
 	DerivedDummyProperty derived_dummy_7{7};
-	grenade::common::detail::PropertyHolder<DummyProperty> holder_7(std::move(derived_dummy_7));
+	grenade::common::PropertyHolder<DummyProperty> holder_7(std::move(derived_dummy_7));
 
 	auto const holder_7_copy = holder_7;
 
diff --git a/tests/sw/grenade/vx/network/abstract/test-multicompartment_resources.cpp b/tests/sw/grenade/vx/network/abstract/test-multicompartment_resources.cpp
index 77e46890..cac585f9 100644
--- a/tests/sw/grenade/vx/network/abstract/test-multicompartment_resources.cpp
+++ b/tests/sw/grenade/vx/network/abstract/test-multicompartment_resources.cpp
@@ -83,7 +83,7 @@ TEST(multicompartment_neuron, Resources)
 	SynapticInputEnvironmentCurrent synaptic_input_current_a(true, 128);
 	SynapticInputEnvironmentCurrent synaptic_input_current_b(false, 512);
 
-	std::vector<grenade::common::detail::PropertyHolder<SynapticInputEnvironment>>
+	std::vector<grenade::common::PropertyHolder<SynapticInputEnvironment>>
 	    synaptic_input_on_compartment_a = {synaptic_input_current_a, synaptic_input_current_b};
 	environment.synaptic_connections.emplace(
 	    compartment_a_on_neuron, synaptic_input_on_compartment_a);
@@ -92,7 +92,7 @@ TEST(multicompartment_neuron, Resources)
 	SynapticInputEnvironmentConductance synaptic_input_conductance_b(
 	    true, NumberTopBottom(200, 100, 0));
 
-	std::vector<grenade::common::detail::PropertyHolder<SynapticInputEnvironment>>
+	std::vector<grenade::common::PropertyHolder<SynapticInputEnvironment>>
 	    synaptic_input_on_compartment_b = {
 	        synaptic_input_conductance_a, synaptic_input_conductance_b};
 	environment.synaptic_connections.emplace(
-- 
GitLab