`simcall_<name>()` and `simcall_HANDLER()` are defined somewhere, and
generates the following files:
-- smx_popping_accessors.h:
+- popping_accessors.hpp:
Helper functions to get and set simcall arguments and results
-- smx_popping_bodies.cpp:
+- popping_bodies.cpp:
The BODY function of each simcall
-- smx_popping_enum.c:
+- popping_enum.h:
Definition of type `enum e_smx_simcall_t` (one value per existing simcall)
-- smx_popping_generated.cpp:
+- popping_generated.cpp:
Definitions of `simcall_names[]` (debug name of each simcall), and
SIMIX_simcall_enter() that deals with the simcall from within the kernel
try {
std::vector<char> result = simgrid::simix::kernelSync([&] {
// Fictional example, simgrid::kernel::readFile does not exist.
- simgrid::Future<std::vector<char>> result = simgrid::kernel::readFile(file);
+ simgrid::kernel::Future<std::vector<char>> result = simgrid::kernel::readFile(file);
return result;
});
XBT_DEBUG("Finished reading file %s: length %zu", file, result.size());
}
+// If the operation failed, kernelSync() throws an exception:
catch (std::runtime_error& e) {
XBT_ERROR("Could not read file %s", file);
}
~~~
simgrid::simix::Future<std:vector<char>> result = simgrid::simix::kernelSync([&] {
// Fictional example, simgrid::kernel::readFile does not exist.
- simgrid::Future<std::vector<char>> result = simgrid::kernel::readFile(file);
+ simgrid::kernek::Future<std::vector<char>> result = simgrid::kernel::readFile(file);
return result;
};
// We don't have anything to do, wait for the operation to complete and
// get its value:
try {
- std:vector<char> value = result.get();
- XBT_DEBUG("Finished reading file %s: length %zu", file, result.size());
+ std:vector<char> data = result.get();
+ XBT_DEBUG("Finished reading file %s: length %zu", file, data.size());
}
+// If the operation failed, .get() throws an exception:
catch (std::runtime_error& e) {
XBT_ERROR("Could not read file %s", file);
}