set(HAVE_GRAPHVIZ 0)
include(FindGraphviz)
-include(FindLibSigc++)
set(HAVE_LUA 0)
if(enable_lua)
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}")
#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 */
#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
-
}
}
"libm",
"libpthread",
"librt",
- "libsigc",
"libstdc++",
"libunwind",
"libunwind-x86_64",
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
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.
+++ /dev/null
-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)