simgrid::surf::signal<void(simgrid::surf::Host*)> Host::onDestruction;
simgrid::surf::signal<void(simgrid::surf::Host*, e_surf_resource_state_t, e_surf_resource_state_t)> Host::onStateChange;
-void Host::init()
+static void host_destroy(void *h){
+ static_cast<simgrid::surf::Host*>(h)->destroy();
+}
+
+void Host::classInit()
{
if (!EXTENSION_ID.valid()) {
- EXTENSION_ID = simgrid::Host::extension_create<simgrid::surf::Host>();
+ EXTENSION_ID = simgrid::Host::extension_create<simgrid::surf::Host>(host_destroy);
SURF_HOST_LEVEL = EXTENSION_ID.id(); // FIXME: KILLME
}
}
p_params.ramsize = 0;
}
-void Host::onDie()
+/** @brief use destroy() instead of this destructor */
+Host::~Host()
{
- onDestruction(this);
- Resource::onDie();
+ xbt_assert(currentlyDestroying_, "Don't delete Hosts directly. Call destroy() instead.");
}
-
-Host::~Host()
+/** @brief Fire the require callbacks and destroy the object
+ *
+ * Don't delete directly an Host, call h->destroy() instead.
+ */
+void Host::destroy()
{
- this->die();
+ if (!currentlyDestroying_) {
+ currentlyDestroying_ = true;
+ onDestruction(this);
+ delete this;
+ }
}
void Host::attach(simgrid::Host* host)
onCreation(this);
}
+e_surf_resource_state_t Host::getState() {
+ return p_cpu->getState();
+}
void Host::setState(e_surf_resource_state_t state){
e_surf_resource_state_t old = Resource::getState();
Resource::setState(state);
p_cpu->setState(state);
}
+Action *Host::execute(double size) {
+ return p_cpu->execute(size);
+}
+Action *Host::sleep(double duration) {
+ return p_cpu->sleep(duration);
+}
+
+
simgrid::surf::Storage *Host::findStorageOnMountList(const char* mount)
{
simgrid::surf::Storage *st = NULL;
p_params = *params;
}
-/**********
- * Action *
- **********/
-simgrid::surf::signal<void(simgrid::surf::HostAction*, e_surf_action_state_t, e_surf_action_state_t)> HostAction::onStateChange;
-
-void HostAction::setState(e_surf_action_state_t state){
- e_surf_action_state_t old = getState();
- Action::setState(state);
- onStateChange(this, old, state);
-}
-
}
}