Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use our own minimal signal implementation
authorGabriel Corona <gabriel.corona@loria.fr>
Mon, 25 Apr 2016 12:52:17 +0000 (14:52 +0200)
committerGabriel Corona <gabriel.corona@loria.fr>
Mon, 25 Apr 2016 12:55:46 +0000 (14:55 +0200)
CMakeLists.txt
include/simgrid_config.h.in
include/xbt/signal.hpp
src/mc/Process.cpp
tools/cmake/DefinePackages.cmake
tools/cmake/MakeLib.cmake
tools/cmake/Modules/FindLibSigc++.cmake [deleted file]

index 00ebaf2..fa02471 100644 (file)
@@ -211,7 +211,6 @@ include(CheckSymbolExists)
 
 set(HAVE_GRAPHVIZ 0)
 include(FindGraphviz)
-include(FindLibSigc++)
 
 set(HAVE_LUA 0)
 if(enable_lua)
@@ -975,7 +974,6 @@ message("        Documentation................: ${enable_documentation}")
 message("        Model checking ..............: ${HAVE_MC}")
 message("        Jedule  mode ................: ${HAVE_JEDULE}")
 message("        Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
-message("        Sigc++ mode .................: ${SIMGRID_HAVE_LIBSIG}")
 message("        Mallocators .................: ${enable_mallocators}")
 message("")
 message("        Simgrid dependencies ........: ${SIMGRID_DEP}")
index 1ff20fa..d6808fc 100644 (file)
@@ -24,6 +24,4 @@
 #define HAVE_MC         @HAVE_MC@ /* Was the model-checking compiled in? */
 #define HAVE_NS3        @HAVE_NS3@ /* Was the NS3 support compiled in? */
 
-#define SIMGRID_HAVE_LIBSIG @SIMGRID_HAVE_LIBSIG@ /* Used in the public interface xbt/signal.hpp :( */
-
 #endif /* SIMGRID_PUBLIC_CONFIG_H */
index 26bd2df..08fbff6 100644 (file)
@@ -6,53 +6,43 @@
 #ifndef SIMGRID_XBT_SIGNAL_HPP
 #define SIMGRID_XBT_SIGNAL_HPP
 
-#include "simgrid_config.h"
-#if SIMGRID_HAVE_LIBSIG
-#include <sigc++/sigc++.h>
-#else
-#include <boost/signals2.hpp>
-#endif
+#include <functional>
+#include <vector>
 
 namespace simgrid {
 namespace xbt {
 
-#if SIMGRID_HAVE_LIBSIG
+  template<class S> class signal;
 
-  // Wraps sigc++ signals with the interface of boost::signals2:
-  template<class T> class signal;
+  /** A signal/slot mechanism
+  *
+  *  S is expected to be the function signature of the signal.
+  *  I'm not sure we need a return value (it is currently ignored).
+  *  If we don't we might use `signal<P1, P2, ...>` instead.
+  */
   template<class R, class... P>
   class signal<R(P...)> {
   private:
-    sigc::signal<R, P...> sig_;
+    typedef std::function<R(P...)> callback_type;
+    std::vector<callback_type> handlers_;
   public:
     template<class U> XBT_ALWAYS_INLINE
-    void connect(U&& slot)
-    {
-      sig_.connect(std::forward<U>(slot));
-    }
-    template<class Res, class... Args> XBT_ALWAYS_INLINE
-    void connect(Res(*slot)(Args...))
+    void connect(U slot)
     {
-      sig_.connect(sigc::ptr_fun(slot));
+      handlers_.push_back(std::move(slot));
     }
-    template<class... Args> XBT_ALWAYS_INLINE
-    R operator()(Args&&... args) const
+    XBT_ALWAYS_INLINE
+    R operator()(P... args) const
     {
-      return sig_.emit(std::forward<Args>(args)...);
+      for (auto& handler : handlers_)
+        handler(args...);
     }
     void disconnect_all_slots()
     {
-      sig_.clear();
+      handlers_.clear();
     }
   };
 
-#else
-
-  template<class T>
-  using signal = ::boost::signals2::signal<T>;
-
-#endif
-
 }
 }
 
index de390cd..597710f 100644 (file)
@@ -77,7 +77,6 @@ static const char *const filtered_libraries[] = {
   "libm",
   "libpthread",
   "librt",
-  "libsigc",
   "libstdc++",
   "libunwind",
   "libunwind-x86_64",
index c9aa053..683a623 100644 (file)
@@ -986,7 +986,6 @@ set(CMAKE_SOURCE_FILES
   tools/cmake/MakeLibWin.cmake
   tools/cmake/Modules/FindGFortran.cmake
   tools/cmake/Modules/FindGraphviz.cmake
-  tools/cmake/Modules/FindLibSigc++.cmake
   tools/cmake/Modules/FindLibdw.cmake
   tools/cmake/Modules/FindLibunwind.cmake
   tools/cmake/Modules/FindLuaSimgrid.cmake
index 4115a97..6b825b2 100644 (file)
@@ -66,11 +66,6 @@ if(HAVE_GRAPHVIZ)
   endif()
 endif()
 
-if(SIMGRID_HAVE_LIBSIG)
-  SET(SIMGRID_DEP "${SIMGRID_DEP} -lsigc-2.0")
-  add_definitions(-DLIBSIGC)
-endif()
-
 if(HAVE_MC)
   # The availability of libunwind was checked in CompleteInFiles.cmake
   #   (that includes FindLibunwind.cmake), so simply load it now.
diff --git a/tools/cmake/Modules/FindLibSigc++.cmake b/tools/cmake/Modules/FindLibSigc++.cmake
deleted file mode 100644 (file)
index 55de343..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-find_path(PATH_LIBSIGC++_H "sigc++/sigc++.h"
-  HINTS
-  $ENV{LD_LIBRARY_PATH}
-  PATH_SUFFIXES include/sigc++-2.0/ include/
-  PATHS
-  /opt
-  /opt/local
-  /opt/csw
-  /sw
-  /usr)
-
-find_path(PATH_LIBSIGC++CONFIG_H "sigc++config.h"
-  HINTS
-  $ENV{LD_LIBRARY_PATH}
-  PATH_SUFFIXES lib/${CMAKE_LIBRARY_ARCHITECTURE}/sigc++-2.0/include/ include/
-  PATHS
-  /opt
-  /opt/local
-  /opt/csw
-  /sw
-  /usr)
-
-find_library(PATH_LIBSIGC++_LIB
-  NAMES sigc-2.0
-  HINTS
-  $ENV{LD_LIBRARY_PATH}
-  PATH_SUFFIXES lib/${CMAKE_LIBRARY_ARCHITECTURE}/ lib/sigc++/ lib/
-  PATHS
-  /opt
-  /opt/local
-  /opt/csw
-  /sw
-  /usr)
-
-message(STATUS "Looking for sigc++/sigc++.h")
-if(PATH_LIBSIGC++_H)
-  message(STATUS "Looking for sigc++/sigc++.h - found")
-else()
-  message(STATUS "Looking for sigc++/sigc++.h - not found")
-endif()
-
-message(STATUS "Looking for sigc++config.h")
-if(PATH_LIBSIGC++CONFIG_H)
-  message(STATUS "Looking for sigc++config.h - found")
-else()
-  message(STATUS "Looking for sigc++config.h - not found")
-endif()
-
-message(STATUS "Looking for libsigc++")
-if(PATH_LIBSIGC++_LIB)
-  message(STATUS "Looking for libsigc++ - found")
-else()
-  message(STATUS "Looking for libsigc++ - not found")
-endif()
-
-if(PATH_LIBSIGC++_LIB AND PATH_LIBSIGC++_H AND PATH_LIBSIGC++CONFIG_H)
-  string(REGEX REPLACE "/sigc\\+\\+/sigc\\+\\+.h" "" PATH_LIBSIGC++_H   "${PATH_LIBSIGC++_H}")
-  string(REGEX REPLACE "/sigc\\+\\+config.h" "" PATH_LIBSIGC++CONFIG_H   "${PATH_LIBSIGC++CONFIG_H}")
-  string(REGEX REPLACE "/libsig.*" "" PATH_LIBSIGC++_LIB "${PATH_LIBSIGC++_LIB}")
-      
-  include_directories(${PATH_LIBSIGC++_H})
-  include_directories(${PATH_LIBSIGC++CONFIG_H})
-  link_directories(${PATH_LIBSIGC++_LIB})
-  set(SIMGRID_HAVE_LIBSIG "1")
-else()
-  set(SIMGRID_HAVE_LIBSIG "0")
-endif()
-
-mark_as_advanced(PATH_LIBSIGC++_H)
-mark_as_advanced(PATH_LIBSIGC++CONFIG_H)
-mark_as_advanced(PATH_LIBSIGC++_LIB)