/* If Model-Checking support was requested */
#cmakedefine HAVE_MC @HAVE_MC@
+#cmakedefine SIMGRID_HAVE_LIBSIG @SIMGRID_HAVE_LIBSIG@
+
#endif /* SIMGRID_PUBLIC_CONFIG_H */
--- /dev/null
+/* Copyright (c) 2014-2015. The SimGrid Team. All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#ifndef SIMGRID_XBT_SIGNAL_HPP
+#define SIMGRID_XBT_SIGNAL_HPP
+
+#ifdef SIMGRID_HAVE_LIBSIG
+#include <sigc++/sigc++.h>
+
+namespace simgrid {
+namespace xbt {
+ // Wraps sigc++ signals with the interface of boost::signals2:
+ template<class T> class signal;
+ template<class R, class... P>
+ class signal<R(P...)> {
+ private:
+ sigc::signal<R, P...> sig_;
+ 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...))
+ {
+ sig_.connect(sigc::ptr_fun(slot));
+ }
+ template<class... Args> XBT_ALWAYS_INLINE
+ R operator()(Args&&... args) const
+ {
+ return sig_.emit(std::forward<Args>(args)...);
+ }
+ };
+}
+}
+
+#else
+
+#include <boost/signals2.hpp>
+namespace simgrid {
+namespace xbt {
+ template<class T>
+ using signal = ::boost::signals2::signal<T>;
+}
+}
+
+#endif
+
+#endif
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include <cmath> /* std::isfinite() */
+
#include <functional>
#include "src/mc/mc_replay.h"
#include "smx_private.h"
#include "src/mc/mc_forward.h"
#include "xbt/ex.h"
-#include <math.h> /* isfinite() */
#include "mc/mc.h"
#include "src/simix/smx_host_private.h"
#include "src/simix/smx_private.hpp"
double priority, double bound, unsigned long affinity_mask)
{
/* checking for infinite values */
- xbt_assert(isfinite(flops_amount), "flops_amount is not finite!");
- xbt_assert(isfinite(priority), "priority is not finite!");
+ xbt_assert(std::isfinite(flops_amount), "flops_amount is not finite!");
+ xbt_assert(std::isfinite(priority), "priority is not finite!");
return simcall_BODY_process_execute(name, flops_amount, priority, bound, affinity_mask);
}
int i,j;
/* checking for infinite values */
for (i = 0 ; i < host_nb ; ++i) {
- xbt_assert(isfinite(flops_amount[i]), "flops_amount[%d] is not finite!", i);
+ xbt_assert(std::isfinite(flops_amount[i]), "flops_amount[%d] is not finite!", i);
for (j = 0 ; j < host_nb ; ++j) {
- xbt_assert(isfinite(bytes_amount[i + host_nb * j]),
+ xbt_assert(std::isfinite(bytes_amount[i + host_nb * j]),
"bytes_amount[%d+%d*%d] is not finite!", i, host_nb, j);
}
}
- xbt_assert(isfinite(amount), "amount is not finite!");
- xbt_assert(isfinite(rate), "rate is not finite!");
+ xbt_assert(std::isfinite(amount), "amount is not finite!");
+ xbt_assert(std::isfinite(rate), "rate is not finite!");
return simcall_BODY_process_parallel_execute(name, host_nb, host_list,
flops_amount,
void simcall_process_execution_set_priority(smx_synchro_t execution, double priority)
{
/* checking for infinite values */
- xbt_assert(isfinite(priority), "priority is not finite!");
+ xbt_assert(std::isfinite(priority), "priority is not finite!");
simcall_BODY_process_execution_set_priority(execution, priority);
}
e_smx_state_t simcall_process_sleep(double duration)
{
/* checking for infinite values */
- xbt_assert(isfinite(duration), "duration is not finite!");
+ xbt_assert(std::isfinite(duration), "duration is not finite!");
return (e_smx_state_t) simcall_BODY_process_sleep(duration);
}
double timeout)
{
/* checking for infinite values */
- xbt_assert(isfinite(task_size), "task_size is not finite!");
- xbt_assert(isfinite(rate), "rate is not finite!");
- xbt_assert(isfinite(timeout), "timeout is not finite!");
+ xbt_assert(std::isfinite(task_size), "task_size is not finite!");
+ xbt_assert(std::isfinite(rate), "rate is not finite!");
+ xbt_assert(std::isfinite(timeout), "timeout is not finite!");
xbt_assert(rdv, "No rendez-vous point defined for send");
int detached)
{
/* checking for infinite values */
- xbt_assert(isfinite(task_size), "task_size is not finite!");
- xbt_assert(isfinite(rate), "rate is not finite!");
+ xbt_assert(std::isfinite(task_size), "task_size is not finite!");
+ xbt_assert(std::isfinite(rate), "rate is not finite!");
xbt_assert(rdv, "No rendez-vous point defined for isend");
void (*copy_data_fun)(smx_synchro_t, void*, size_t),
void *data, double timeout, double rate)
{
- xbt_assert(isfinite(timeout), "timeout is not finite!");
+ xbt_assert(std::isfinite(timeout), "timeout is not finite!");
xbt_assert(rdv, "No rendez-vous point defined for recv");
if (MC_is_active() || MC_record_replay_is_active()) {
*/
void simcall_comm_wait(smx_synchro_t comm, double timeout)
{
- xbt_assert(isfinite(timeout), "timeout is not finite!");
+ xbt_assert(std::isfinite(timeout), "timeout is not finite!");
simcall_BODY_comm_wait(comm, timeout);
}
smx_mutex_t mutex,
double timeout)
{
- xbt_assert(isfinite(timeout), "timeout is not finite!");
+ xbt_assert(std::isfinite(timeout), "timeout is not finite!");
simcall_BODY_cond_wait_timeout(cond, mutex, timeout);
}
*/
void simcall_sem_acquire_timeout(smx_sem_t sem, double timeout)
{
- xbt_assert(isfinite(timeout), "timeout is not finite!");
+ xbt_assert(std::isfinite(timeout), "timeout is not finite!");
simcall_BODY_sem_acquire_timeout(sem, timeout);
}
action->getVariable(), 0)));
}
-simgrid::surf::signal<void(CpuAction*, e_surf_action_state_t, e_surf_action_state_t)> cpuActionStateChangedCallbacks;
+simgrid::xbt::signal<void(CpuAction*, e_surf_action_state_t, e_surf_action_state_t)> cpuActionStateChangedCallbacks;
void cpu_add_traces(){
surf_cpu_model_pm->addTraces();
XBT_OUT();
}
-simgrid::surf::signal<void(simgrid::surf::CpuAction*, e_surf_action_state_t, e_surf_action_state_t)> CpuAction::onStateChange;
+simgrid::xbt::signal<void(simgrid::surf::CpuAction*, e_surf_action_state_t, e_surf_action_state_t)> CpuAction::onStateChange;
void CpuAction::setState(e_surf_action_state_t state){
e_surf_action_state_t old = getState();
/** @brief Callbacks handler which emit the callbacks after CpuAction State changed *
* @details Callback functions have the following signature: `void(CpuAction *action, e_surf_action_state_t old, e_surf_action_state_t current)`
*/
- static simgrid::surf::signal<void(simgrid::surf::CpuAction*, e_surf_action_state_t, e_surf_action_state_t)> onStateChange;
+ static simgrid::xbt::signal<void(simgrid::surf::CpuAction*, e_surf_action_state_t, e_surf_action_state_t)> onStateChange;
/** @brief CpuAction constructor */
CpuAction(simgrid::surf::Model *model, double cost, bool failed)
/************
* Resource *
************/
-simgrid::surf::signal<void(simgrid::surf::Host*)> Host::onCreation;
-simgrid::surf::signal<void(simgrid::surf::Host*)> Host::onDestruction;
-simgrid::surf::signal<void(simgrid::surf::Host*)> Host::onStateChange;
+simgrid::xbt::signal<void(simgrid::surf::Host*)> Host::onCreation;
+simgrid::xbt::signal<void(simgrid::surf::Host*)> Host::onDestruction;
+simgrid::xbt::signal<void(simgrid::surf::Host*)> Host::onStateChange;
void Host::classInit()
{
static simgrid::xbt::Extension<simgrid::Host, Host> EXTENSION_ID;
/* callbacks */
- static simgrid::surf::signal<void(Host*)> onCreation; /** Called on each newly created object */
- static simgrid::surf::signal<void(Host*)> onDestruction; /** Called just before destructing an object */
- static simgrid::surf::signal<void(Host*)> onStateChange; /** Called when the machine is turned on or off */
+ static simgrid::xbt::signal<void(Host*)> onCreation; /** Called on each newly created object */
+ static simgrid::xbt::signal<void(Host*)> onDestruction; /** Called just before destructing an object */
+ static simgrid::xbt::signal<void(Host*)> onStateChange; /** Called when the machine is turned on or off */
public:
static void classInit(); // must be called before the first use of that class
* Callbacks *
*************/
-simgrid::surf::signal<void(simgrid::surf::Link*)> Link::onCreation;
-simgrid::surf::signal<void(simgrid::surf::Link*)> Link::onDestruction;
-simgrid::surf::signal<void(simgrid::surf::Link*, int, int)> Link::onStateChange; // signature: wasOn, currentlyOn
+simgrid::xbt::signal<void(simgrid::surf::Link*)> Link::onCreation;
+simgrid::xbt::signal<void(simgrid::surf::Link*)> Link::onDestruction;
+simgrid::xbt::signal<void(simgrid::surf::Link*, int, int)> Link::onStateChange; // signature: wasOn, currentlyOn
-simgrid::surf::signal<void(simgrid::surf::NetworkAction*, e_surf_action_state_t, e_surf_action_state_t)> networkActionStateChangedCallbacks;
-simgrid::surf::signal<void(simgrid::surf::NetworkAction*, simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst, double size, double rate)> networkCommunicateCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::NetworkAction*, e_surf_action_state_t, e_surf_action_state_t)> networkActionStateChangedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::NetworkAction*, simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst, double size, double rate)> networkCommunicateCallbacks;
}
}
/** @brief Callback signal fired when the state of a NetworkAction changes
* Signature: `void(NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t current)` */
-XBT_PUBLIC_DATA(simgrid::surf::signal<void(simgrid::surf::NetworkAction*, e_surf_action_state_t, e_surf_action_state_t)>) networkActionStateChangedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::NetworkAction*, e_surf_action_state_t, e_surf_action_state_t)>) networkActionStateChangedCallbacks;
/** @brief Callback signal fired when a NetworkAction is created (when a communication starts)
* Signature: `void(NetworkAction *action, RoutingEdge *src, RoutingEdge *dst, double size, double rate)` */
-XBT_PUBLIC_DATA(simgrid::surf::signal<void(simgrid::surf::NetworkAction*, simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst, double size, double rate)>) networkCommunicateCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::NetworkAction*, simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst, double size, double rate)>) networkCommunicateCallbacks;
}
}
public:
/** @brief Callback signal fired when a new Link is created.
* Signature: void(Link*) */
- static simgrid::surf::signal<void(simgrid::surf::Link*)> onCreation;
+ static simgrid::xbt::signal<void(simgrid::surf::Link*)> onCreation;
/** @brief Callback signal fired when a Link is destroyed.
* Signature: void(Link*) */
- static simgrid::surf::signal<void(simgrid::surf::Link*)> onDestruction;
+ static simgrid::xbt::signal<void(simgrid::surf::Link*)> onDestruction;
/** @brief Callback signal fired when the state of a Link changes
* Signature: `void(LinkAction *action, int previouslyOn, int currentlyOn)` */
- static simgrid::surf::signal<void(simgrid::surf::Link*, int, int)> onStateChange;
+ static simgrid::xbt::signal<void(simgrid::surf::Link*, int, int)> onStateChange;
/** @brief Get the bandwidth in bytes per second of current Link */
* Callbacks *
*************/
-simgrid::surf::signal<void(simgrid::surf::Storage*)> storageCreatedCallbacks;
-simgrid::surf::signal<void(simgrid::surf::Storage*)> storageDestructedCallbacks;
-simgrid::surf::signal<void(simgrid::surf::Storage*, int, int)> storageStateChangedCallbacks; // signature: wasOn, isOn
-simgrid::surf::signal<void(simgrid::surf::StorageAction*, e_surf_action_state_t, e_surf_action_state_t)> storageActionStateChangedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::Storage*)> storageCreatedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::Storage*)> storageDestructedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::Storage*, int, int)> storageStateChangedCallbacks; // signature: wasOn, isOn
+simgrid::xbt::signal<void(simgrid::surf::StorageAction*, e_surf_action_state_t, e_surf_action_state_t)> storageActionStateChangedCallbacks;
/*********
* Model *
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <xbt/base.h>
+#include <xbt/signal.hpp>
#include "surf_interface.hpp"
#include "src/surf/PropertyHolder.hpp"
* @brief Callbacks handler which emit the callbacks after Storage creation *
* @details Callback functions have the following signature: `void(Storage*)`
*/
-XBT_PUBLIC_DATA(simgrid::surf::signal<void(simgrid::surf::Storage*)>) storageCreatedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::Storage*)>) storageCreatedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emit the callbacks after Storage destruction *
* @details Callback functions have the following signature: `void(StoragePtr)`
*/
-XBT_PUBLIC_DATA(simgrid::surf::signal<void(simgrid::surf::Storage*)>) storageDestructedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::Storage*)>) storageDestructedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emit the callbacks after Storage State changed *
* @details Callback functions have the following signature: `void(StorageAction *action, int previouslyOn, int currentlyOn)`
*/
-XBT_PUBLIC_DATA(simgrid::surf::signal<void(simgrid::surf::Storage*, int, int)>) storageStateChangedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::Storage*, int, int)>) storageStateChangedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emit the callbacks after StorageAction State changed *
* @details Callback functions have the following signature: `void(StorageAction *action, e_surf_action_state_t old, e_surf_action_state_t current)`
*/
-XBT_PUBLIC_DATA(simgrid::surf::signal<void(simgrid::surf::StorageAction*, e_surf_action_state_t, e_surf_action_state_t)>) storageActionStateChangedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::StorageAction*, e_surf_action_state_t, e_surf_action_state_t)>) storageActionStateChangedCallbacks;
/*********
* Model *
namespace simgrid {
namespace surf {
-simgrid::surf::signal<void(void)> surfExitCallbacks;
+simgrid::xbt::signal<void(void)> surfExitCallbacks;
}
}
#include <boost/function.hpp>
#include <boost/intrusive/list.hpp>
+
+#include <xbt/signal.hpp>
+
#include "surf/trace_mgr.h"
#include "xbt/lib.h"
#include "surf/surf_routing.h"
#include "src/surf/surf_private.h"
#include "src/internal_config.h"
-#ifdef LIBSIGC
-#include <sigc++/sigc++.h>
-namespace simgrid {
-namespace surf {
- // Wraps sigc++ signals with the interface of boost::signals2:
- template<class T> class signal;
- template<class R, class... P>
- class signal<R(P...)> {
- private:
- sigc::signal<R, P...> sig_;
- 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...))
- {
- sig_.connect(sigc::ptr_fun(slot));
- }
- template<class... Args> XBT_ALWAYS_INLINE
- R operator()(Args&&... args) const
- {
- return sig_.emit(std::forward<Args>(args)...);
- }
- };
-}
-}
-#else
-#include <boost/signals2.hpp>
-namespace simgrid {
-namespace surf {
- template<class T>
- using signal = ::boost::signals2::signal<T>;
-}
-}
-#endif
-
extern XBT_PRIVATE tmgr_history_t history;
#define NO_MAX_DURATION -1.0
namespace simgrid {
namespace surf {
-extern XBT_PRIVATE simgrid::surf::signal<void(void)> surfExitCallbacks;
+extern XBT_PRIVATE simgrid::xbt::signal<void(void)> surfExitCallbacks;
}
}
namespace simgrid {
namespace surf {
-simgrid::surf::signal<void(simgrid::surf::NetCard*)> routingEdgeCreatedCallbacks;
-simgrid::surf::signal<void(simgrid::surf::As*)> asCreatedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::NetCard*)> routingEdgeCreatedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::As*)> asCreatedCallbacks;
}
}
#define NETWORK_ROUTING_HPP_
#include <xbt/base.h>
+#include <xbt/signal.hpp>
#include "surf_interface.hpp"
#include <float.h>
* Callbacks *
*************/
-XBT_PUBLIC_DATA(simgrid::surf::signal<void(NetCard*)>) routingEdgeCreatedCallbacks;
-XBT_PUBLIC_DATA(simgrid::surf::signal<void(As*)>) asCreatedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(NetCard*)>) routingEdgeCreatedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(As*)>) asCreatedCallbacks;
}
}
* Callbacks *
*************/
-simgrid::surf::signal<void(simgrid::surf::VirtualMachine*)> VMCreatedCallbacks;
-simgrid::surf::signal<void(simgrid::surf::VirtualMachine*)> VMDestructedCallbacks;
-simgrid::surf::signal<void(simgrid::surf::VirtualMachine*)> VMStateChangedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::VirtualMachine*)> VMCreatedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::VirtualMachine*)> VMDestructedCallbacks;
+simgrid::xbt::signal<void(simgrid::surf::VirtualMachine*)> VMStateChangedCallbacks;
/*********
* Model *
/** @ingroup SURF_callbacks
* @brief Callbacks fired after VM creation. Signature: `void(VirtualMachine*)`
*/
-extern XBT_PRIVATE simgrid::surf::signal<void(simgrid::surf::VirtualMachine*)> VMCreatedCallbacks;
+extern XBT_PRIVATE simgrid::xbt::signal<void(simgrid::surf::VirtualMachine*)> VMCreatedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks fired after VM destruction. Signature: `void(VirtualMachine*)`
*/
-extern XBT_PRIVATE simgrid::surf::signal<void(simgrid::surf::VirtualMachine*)> VMDestructedCallbacks;
+extern XBT_PRIVATE simgrid::xbt::signal<void(simgrid::surf::VirtualMachine*)> VMDestructedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks after VM State changes. Signature: `void(VirtualMachine*)`
*/
-extern XBT_PRIVATE simgrid::surf::signal<void(simgrid::surf::VirtualMachine*)> VMStateChangedCallbacks;
+extern XBT_PRIVATE simgrid::xbt::signal<void(simgrid::surf::VirtualMachine*)> VMStateChangedCallbacks;
/************
* Resource *
if(HAVE_LIBSIGC++)
SET(SIMGRID_DEP "${SIMGRID_DEP} -lsigc-2.0")
add_definitions(-DLIBSIGC)
+ set(SIMGRID_HAVE_LIBSIG 1)
endif()
if(HAVE_MC)