From 4afa011d9c4b25c59b470a8f5acb0b6b5940ac85 Mon Sep 17 00:00:00 2001
From: Jason Wang <wangr1@ornl.gov>
Date: Thu, 13 Apr 2017 11:15:21 -0400
Subject: [PATCH] fixed a few more problems for PR #56

---
 include/engine/dataman/DataManReader.h        |  2 +-
 include/engine/dataman/DataManWriter.h        |  2 +-
 include/transport/wan/MdtmMan.h               |  4 +-
 .../utilities/realtime/dataman/DataManBase.h  | 28 +-------------
 source/ADIOS.cpp                              |  8 ++--
 source/engine/dataman/DataManReader.cpp       |  4 --
 source/engine/dataman/DataManWriter.cpp       |  2 -
 source/transport/wan/MdtmMan.cpp              |  6 +--
 .../realtime/dataman/DataManBase.cpp          | 38 +++++++++++++++++++
 9 files changed, 50 insertions(+), 44 deletions(-)

diff --git a/include/engine/dataman/DataManReader.h b/include/engine/dataman/DataManReader.h
index dfa3d77f4..f29494f45 100644
--- a/include/engine/dataman/DataManReader.h
+++ b/include/engine/dataman/DataManReader.h
@@ -43,7 +43,7 @@ public:
                   const std::string accessMode, MPI_Comm mpiComm,
                   const Method &method);
 
-    ~DataManReader();
+    virtual ~DataManReader() = default;
 
     /**
      * Set callback function from user application
diff --git a/include/engine/dataman/DataManWriter.h b/include/engine/dataman/DataManWriter.h
index 667498dbc..9902afb02 100644
--- a/include/engine/dataman/DataManWriter.h
+++ b/include/engine/dataman/DataManWriter.h
@@ -44,7 +44,7 @@ public:
                   const std::string accessMode, MPI_Comm mpiComm,
                   const Method &method);
 
-    ~DataManWriter();
+    virtual ~DataManWriter() = default;
 
     void SetCallBack(std::function<void(const void *, std::string, std::string,
                                         std::string, Dims)>
diff --git a/include/transport/wan/MdtmMan.h b/include/transport/wan/MdtmMan.h
index 7ddd162ac..78f0f92b8 100644
--- a/include/transport/wan/MdtmMan.h
+++ b/include/transport/wan/MdtmMan.h
@@ -14,7 +14,7 @@
 #include "core/Transport.h"
 #include "external/json.hpp"
 
-#include "DataMan.h" //here comes your DataMan header
+#include "utilities/realtime/dataman/DataManBase.h"
 
 namespace adios
 {
@@ -43,7 +43,7 @@ public:
             const std::vector<int> priorities, MPI_Comm mpiComm,
             const bool debugMode);
 
-    ~MdtmMan();
+    virtual ~MdtmMan() = default;
 
     void Open(const std::string name, const std::string accessMode);
 
diff --git a/include/utilities/realtime/dataman/DataManBase.h b/include/utilities/realtime/dataman/DataManBase.h
index 406eb02bf..9d1445742 100644
--- a/include/utilities/realtime/dataman/DataManBase.h
+++ b/include/utilities/realtime/dataman/DataManBase.h
@@ -87,6 +87,8 @@ protected:
 
     virtual int put_next(const void *p_data, json p_jmsg);
 
+    std::shared_ptr<DataManBase> get_man(std::string method);
+
     inline void logging(std::string p_msg, std::string p_man = "",
                         std::ostream &out = std::cout)
     {
@@ -262,32 +264,6 @@ protected:
             product(varshape, dsize(p_jmsg["dtype"].get<std::string>()));
     }
 
-    inline std::shared_ptr<DataManBase> get_man(std::string method)
-    {
-        std::string soname = "lib" + method + "man.so";
-        void *so = NULL;
-        so = dlopen(soname.c_str(), RTLD_NOW);
-        if (so)
-        {
-            std::shared_ptr<DataManBase> (*func)() = NULL;
-            func = (std::shared_ptr<DataManBase>(*)())dlsym(so, "getMan");
-            if (func)
-            {
-                return func();
-            }
-            else
-            {
-                logging("getMan() not found in " + soname);
-            }
-        }
-        else
-        {
-            logging("Dynamic library " + soname +
-                    " not found in LD_LIBRARY_PATH");
-        }
-        return nullptr;
-    }
-
     std::function<void(const void *, std::string, std::string, std::string,
                        std::vector<size_t>)>
         m_callback;
diff --git a/source/ADIOS.cpp b/source/ADIOS.cpp
index b71368718..729e6c8ee 100644
--- a/source/ADIOS.cpp
+++ b/source/ADIOS.cpp
@@ -153,8 +153,8 @@ std::shared_ptr<Engine> ADIOS::Open(const std::string &name,
                                                method);
 #else
         throw std::invalid_argument(
-                "ERROR: this version didn't compile with "
-                "Dataman library, can't Open DataManWriter\n");
+            "ERROR: this version didn't compile with "
+            "Dataman library, can't Open DataManWriter\n");
 #endif
     }
     else if (type == "DataManReader")
@@ -164,8 +164,8 @@ std::shared_ptr<Engine> ADIOS::Open(const std::string &name,
                                                method);
 #else
         throw std::invalid_argument(
-                "ERROR: this version didn't compile with "
-                "Dataman library, can't Open DataManReader\n");
+            "ERROR: this version didn't compile with "
+            "Dataman library, can't Open DataManReader\n");
 #endif
     }
     else if (type == "ADIOS1Writer")
diff --git a/source/engine/dataman/DataManReader.cpp b/source/engine/dataman/DataManReader.cpp
index 4b383491c..4ad22bcb8 100644
--- a/source/engine/dataman/DataManReader.cpp
+++ b/source/engine/dataman/DataManReader.cpp
@@ -20,8 +20,6 @@
 #include "transport/file/FilePointer.h"    // uses C FILE*
 #include "transport/wan/MdtmMan.h"         //uses Mdtm library
 
-#include "DataMan.h" //here comes your DataMan header from external dataman library
-
 namespace adios
 {
 
@@ -35,8 +33,6 @@ DataManReader::DataManReader(ADIOS &adios, const std::string &name,
     Init();
 }
 
-DataManReader::~DataManReader() {}
-
 void DataManReader::SetCallBack(
     std::function<void(const void *, std::string, std::string, std::string,
                        Dims)>
diff --git a/source/engine/dataman/DataManWriter.cpp b/source/engine/dataman/DataManWriter.cpp
index 3810d3f0b..7e438b535 100644
--- a/source/engine/dataman/DataManWriter.cpp
+++ b/source/engine/dataman/DataManWriter.cpp
@@ -32,8 +32,6 @@ DataManWriter::DataManWriter(ADIOS &adios, const std::string name,
     Init();
 }
 
-DataManWriter::~DataManWriter() {}
-
 void DataManWriter::SetCallBack(
     std::function<void(const void *, std::string, std::string, std::string,
                        Dims)>
diff --git a/source/transport/wan/MdtmMan.cpp b/source/transport/wan/MdtmMan.cpp
index cdece2ecb..010a8c574 100644
--- a/source/transport/wan/MdtmMan.cpp
+++ b/source/transport/wan/MdtmMan.cpp
@@ -22,13 +22,11 @@ MdtmMan::MdtmMan(const std::string localIP, const std::string remoteIP,
                  const bool debugMode)
 : Transport("File", mpiComm, debugMode), m_LocalIP{localIP},
   m_RemoteIP{remoteIP}, m_Mode{mode}, m_Prefix{prefix},
-  m_NumberOfPipes{numberOfPipes}, m_Tolerances{tolerances},
-  m_Priorities{priorities}
+  m_NumberOfPipes{numberOfPipes}, m_Tolerances{tolerances}, m_Priorities{
+                                                                priorities}
 {
 }
 
-MdtmMan::~MdtmMan() {}
-
 void MdtmMan::Open(const std::string name, const std::string accessMode) {}
 
 void MdtmMan::SetBuffer(char *buffer, std::size_t size) {}
diff --git a/source/utilities/realtime/dataman/DataManBase.cpp b/source/utilities/realtime/dataman/DataManBase.cpp
index b4d6c3a4b..8fdf8cedd 100644
--- a/source/utilities/realtime/dataman/DataManBase.cpp
+++ b/source/utilities/realtime/dataman/DataManBase.cpp
@@ -221,6 +221,44 @@ int DataManBase::put_next(const void *p_data, json p_jmsg)
     return 0;
 }
 
+std::shared_ptr<DataManBase> DataManBase::get_man(std::string method)
+{
+    void *so = NULL;
+#ifdef __APPLE__
+    std::string dylibname = "lib" + method + "man.dylib";
+    so = dlopen(dylibname.c_str(), RTLD_NOW);
+    if (so)
+    {
+        std::shared_ptr<DataManBase> (*func)() = NULL;
+        func = (std::shared_ptr<DataManBase>(*)())dlsym(so, "getMan");
+        if (func)
+        {
+            return func();
+        }
+    }
+#endif
+    std::string soname = "lib" + method + "man.so";
+    so = dlopen(soname.c_str(), RTLD_NOW);
+    if (so)
+    {
+        std::shared_ptr<DataManBase> (*func)() = NULL;
+        func = (std::shared_ptr<DataManBase>(*)())dlsym(so, "getMan");
+        if (func)
+        {
+            return func();
+        }
+        else
+        {
+            logging("getMan() not found in " + soname);
+        }
+    }
+    else
+    {
+        logging("Dynamic library " + soname + " not found in LD_LIBRARY_PATH");
+    }
+    return nullptr;
+}
+
 // end namespace realtime
 }
 // end namespace adios
-- 
GitLab