From 05a7452e1ec10c48008c483bdcf871a972201833 Mon Sep 17 00:00:00 2001
From: bcumming <bcumming@cscs.ch>
Date: Tue, 28 Jun 2016 15:22:28 +0200
Subject: [PATCH] generalize global policy

- move definition of `global_policy` to header file
  src/communication/global_policy.hpp
- the `#ifdef WITH_MPI` guards go there so that
    - they don't pollute user code
    - they are available throughout the application
- small cleanup of a couple of style points in the mpi code
---
 miniapp/miniapp.cpp                 | 35 +++---------------------
 src/communication/global_policy.hpp | 42 +++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 32 deletions(-)
 create mode 100644 src/communication/global_policy.hpp

diff --git a/miniapp/miniapp.cpp b/miniapp/miniapp.cpp
index 354bdbf7..9fc09cef 100644
--- a/miniapp/miniapp.cpp
+++ b/miniapp/miniapp.cpp
@@ -9,18 +9,7 @@
 #include "threading/threading.hpp"
 #include "profiling/profiler.hpp"
 #include "communication/communicator.hpp"
-#include "communication/serial_global_policy.hpp"
-
-#ifdef WITH_MPI
-
-#include "communication/mpi_global_policy.hpp"
-using global_policy = nest::mc::communication::mpi_global_policy;
-
-#else
-
-using global_policy = nest::mc::communication::serial_global_policy;
-
-#endif
+#include "communication/global_policy.hpp"
 
 using namespace nest;
 
@@ -30,28 +19,10 @@ using id_type = uint32_t;
 using numeric_cell = mc::fvm::fvm_cell<real_type, index_type>;
 using cell_group   = mc::cell_group<numeric_cell>;
 
+using global_policy = nest::mc::communication::global_policy;
 using communicator_type =
     mc::communication::communicator<global_policy>;
 
-template <typename Policy>
-struct policy_guard {
-    policy_guard(int argc, char **&argv) {
-        Policy::setup(argc, argv);
-    }
-
-    policy_guard() = delete;
-    policy_guard(policy_guard &&) = delete;
-    policy_guard(const policy_guard &) = delete;
-    policy_guard &operator=(policy_guard &&) = delete;
-    policy_guard &operator=(const policy_guard &) = delete;
-
-    ~policy_guard() {
-        Policy::teardown();
-    }
-};
-
-using global_policy_guard = policy_guard<global_policy>;
-
 struct model {
     communicator_type communicator;
     std::vector<cell_group> cell_groups;
@@ -161,7 +132,7 @@ void all_to_all_model(nest::mc::io::options& opt, model& m);
 // main
 ///////////////////////////////////////
 int main(int argc, char** argv) {
-    global_policy_guard _(argc, argv);
+    nest::mc::communication::global_policy_guard(argc, argv);
 
     setup();
 
diff --git a/src/communication/global_policy.hpp b/src/communication/global_policy.hpp
new file mode 100644
index 00000000..b771e8ed
--- /dev/null
+++ b/src/communication/global_policy.hpp
@@ -0,0 +1,42 @@
+#pragma once
+
+#ifdef WITH_MPI
+    #include "communication/mpi_global_policy.hpp"
+#else
+    #include "communication/serial_global_policy.hpp"
+#endif
+
+namespace nest {
+namespace mc {
+namespace communication {
+
+#ifdef WITH_MPI
+using global_policy = nest::mc::communication::mpi_global_policy;
+#else
+using global_policy = nest::mc::communication::serial_global_policy;
+#endif
+
+template <typename Policy>
+struct policy_guard {
+    using policy_type = Policy;
+
+    policy_guard(int argc, char**& argv) {
+        policy_type::setup(argc, argv);
+    }
+
+    policy_guard() = delete;
+    policy_guard(policy_guard&&) = delete;
+    policy_guard(const policy_guard&) = delete;
+    policy_guard& operator=(policy_guard&&) = delete;
+    policy_guard& operator=(const policy_guard&) = delete;
+
+    ~policy_guard() {
+        Policy::teardown();
+    }
+};
+
+using global_policy_guard = policy_guard<global_policy>;
+
+} // namespace communication
+} // namespace mc
+} // namespace nest
-- 
GitLab