Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
eb61b839f322d772970eefb67d36946980219254
[simgrid.git] / src / kernel / activity / IoImpl.cpp
1 /* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "src/kernel/activity/IoImpl.hpp"
7 #include "simgrid/kernel/resource/Action.hpp"
8 #include "src/simix/smx_io_private.hpp"
9
10 void simgrid::kernel::activity::IoImpl::suspend()
11 {
12   if (surf_action_ != nullptr)
13     surf_action_->suspend();
14 }
15
16 void simgrid::kernel::activity::IoImpl::resume()
17 {
18   if (surf_action_ != nullptr)
19     surf_action_->resume();
20 }
21
22 void simgrid::kernel::activity::IoImpl::post()
23 {
24   for (smx_simcall_t const& simcall : simcalls_) {
25     switch (simcall->call) {
26       case SIMCALL_STORAGE_WRITE:
27         simcall_storage_write__set__result(simcall, surf_action_->get_cost());
28         break;
29       case SIMCALL_STORAGE_READ:
30         simcall_storage_read__set__result(simcall, surf_action_->get_cost());
31         break;
32       default:
33         break;
34     }
35   }
36
37   switch (surf_action_->get_state()) {
38     case simgrid::kernel::resource::Action::State::FAILED:
39       state_ = SIMIX_FAILED;
40       break;
41     case simgrid::kernel::resource::Action::State::FINISHED:
42       state_ = SIMIX_DONE;
43       break;
44     default:
45       THROW_IMPOSSIBLE;
46       break;
47   }
48
49   SIMIX_io_finish(this);
50 }