X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/39f8af06615c92f5dbfd2dd4695e7f9ffca59e70..b22376a626135f9681167d3e78406cf4e7547181:/src/simix/simcalls.py diff --git a/src/simix/simcalls.py b/src/simix/simcalls.py index 80845dabaf..457de47a10 100755 --- a/src/simix/simcalls.py +++ b/src/simix/simcalls.py @@ -79,10 +79,10 @@ class Simcall(object): return True def enum(self): - return ' SIMCALL_%s,' % (self.name.upper()) + return ' %s,' % (self.name.upper()) def string(self): - return ' "SIMCALL_%s",' % self.name.upper() + return ' "Simcall::%s",' % self.name.upper() def accessors(self): res = [] @@ -132,7 +132,7 @@ class Simcall(object): indent = ' ' args = ["simgrid::simix::unmarshal<%s>(simcall_.args_[%d])" % (arg.rettype(), i) for i, arg in enumerate(self.args)] - res.append(indent + 'case SIMCALL_%s:' % (self.name.upper())) + res.append(indent + 'case Simcall::%s:' % (self.name.upper())) if self.need_handler: call = "simcall_HANDLER_%s(&simcall_%s%s)" % (self.name, ", " if args else "", @@ -156,14 +156,14 @@ class Simcall(object): self.name, ', '.join('%s %s' % (arg.rettype(), arg.name) for arg in self.args))) res.append('{') - res.append(' if (0) /* Go to that function to follow the code flow through the simcall barrier */') + res.append(' if (false) /* Go to that function to follow the code flow through the simcall barrier */') if self.need_handler: res.append(' simcall_HANDLER_%s(%s);' % (self.name, ', '.join(["&SIMIX_process_self()->simcall_"] + [arg.name for arg in self.args]))) else: res.append(' SIMIX_%s(%s);' % (self.name, ', '.join(arg.name for arg in self.args))) - res.append(' return simcall<%s%s>(SIMCALL_%s%s);' % ( + res.append(' return simcall<%s%s>(Simcall::%s%s);' % ( self.res.rettype(), "".join([", " + arg.rettype() for i, arg in enumerate(self.args)]), self.name.upper(), @@ -292,19 +292,24 @@ if __name__ == '__main__': fd.close() # - # popping_enum.h + # popping_enum.hpp # - fd = header("popping_enum.h") + fd = header("popping_enum.hpp") + fd.write('namespace simgrid {\n') + fd.write('namespace simix {\n') fd.write('/**\n') fd.write(' * @brief All possible simcalls.\n') fd.write(' */\n') - fd.write('typedef enum {\n') - fd.write(' SIMCALL_NONE,\n') + fd.write('enum class Simcall {\n') + fd.write(' NONE,\n') handle(fd, Simcall.enum, simcalls, simcalls_dict) - fd.write(' NUM_SIMCALLS\n') - fd.write('} e_smx_simcall_t;\n') + fd.write('};\n') + fd.write('\n') + fd.write('constexpr int NUM_SIMCALLS = ' + str(1 + len(simcalls)) + ';\n') + fd.write('} // namespace simix\n') + fd.write('} // namespace simgrid\n') fd.close() # @@ -314,6 +319,7 @@ if __name__ == '__main__': fd = header("popping_generated.cpp") fd.write('#include "smx_private.hpp"\n') + fd.write('#include \n') fd.write('#include \n') fd.write('#if SIMGRID_HAVE_MC\n') fd.write('#include "src/mc/mc_forward.hpp"\n') @@ -323,14 +329,16 @@ if __name__ == '__main__': fd.write('\n') fd.write('XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_popping);\n\n') + fd.write('using simgrid::simix::Simcall;') + fd.write('\n') fd.write( '/** @brief Simcalls\' names (generated from src/simix/simcalls.in) */\n') - fd.write('const char* simcall_names[] = {\n') + fd.write('constexpr std::array simcall_names{{\n') - fd.write(' "SIMCALL_NONE",\n') + fd.write(' "Simcall::NONE",\n') handle(fd, Simcall.string, simcalls, simcalls_dict) - fd.write('};\n\n') + fd.write('}};\n\n') fd.write('/** @private\n') fd.write( @@ -350,9 +358,7 @@ if __name__ == '__main__': handle(fd, Simcall.case, simcalls, simcalls_dict) - fd.write(' case NUM_SIMCALLS:\n') - fd.write(' break;\n') - fd.write(' case SIMCALL_NONE:\n') + fd.write(' case Simcall::NONE:\n') fd.write(' throw std::invalid_argument(simgrid::xbt::string_printf("Asked to do the noop syscall on %s@%s",\n') fd.write(' get_cname(),\n') fd.write(' sg_host_get_name(get_host())));\n') @@ -378,8 +384,10 @@ if __name__ == '__main__': fd.write(''' XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); +using simgrid::simix::Simcall; + template -inline static R simcall(e_smx_simcall_t call, T const&... t) +inline static R simcall(Simcall call, T const&... t) { smx_actor_t self = SIMIX_process_self(); simgrid::simix::marshal(&self->simcall_, call, t...);