X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f6d4ca5d06bb0d90e4d5505d8b289e2a1c8a39d1..3eaab01ff3aaf3b8addf247073237c5891f485d4:/src/simix/simcalls.py diff --git a/src/simix/simcalls.py b/src/simix/simcalls.py index 68635e5dd2..f846463b9c 100755 --- a/src/simix/simcalls.py +++ b/src/simix/simcalls.py @@ -80,14 +80,21 @@ class Simcall(object): def accessors(self): res = [] res.append('') + regex = re.compile(r"^boost::intrusive_ptr<(.*?)>(.*)$") # to compute the raw type # Arguments getter/setters for i in range(len(self.args)): arg = self.args[i] + rawtype = regex.sub(r'\1*\2', arg.rettype()) res.append('static inline %s simcall_%s__get__%s(smx_simcall_t simcall) {' % ( arg.rettype(), self.name, arg.name)) res.append( ' return simgrid::simix::unmarshal<%s>(simcall->args[%i]);' % (arg.rettype(), i)) res.append('}') + res.append('static inline %s simcall_%s__getraw__%s(smx_simcall_t simcall) {' % ( + rawtype, self.name, arg.name)) + res.append( + ' return simgrid::simix::unmarshal_raw<%s>(simcall->args[%i]);' % (rawtype, i)) + res.append('}') res.append('static inline void simcall_%s__set__%s(smx_simcall_t simcall, %s arg) {' % ( self.name, arg.name, arg.rettype())) res.append(' simgrid::simix::marshal<%s>(simcall->args[%i], arg);' % (arg.rettype(), i)) @@ -95,10 +102,15 @@ class Simcall(object): # Return value getter/setters if self.res.type != 'void': + rawtype = regex.sub(r'\1*\2', self.res.rettype()) res.append( 'static inline %s simcall_%s__get__result(smx_simcall_t simcall){' % (self.res.rettype(), self.name)) res.append(' return simgrid::simix::unmarshal<%s>(simcall->result);' % self.res.rettype()) res.append('}') + res.append( + 'static inline %s simcall_%s__getraw__result(smx_simcall_t simcall){' % (rawtype, self.name)) + res.append(' return simgrid::simix::unmarshal_raw<%s>(simcall->result);' % rawtype) + res.append('}') res.append( 'static inline void simcall_%s__set__result(smx_simcall_t simcall, %s result){' % (self.name, self.res.rettype())) res.append(' simgrid::simix::marshal<%s>(simcall->result, result);' % (self.res.rettype()))