[pygccxml-development] char *variables
Brought to you by:
mbaas,
roman_yakovenko
|
From: Gordon W. <gor...@gm...> - 2008-07-11 03:51:09
|
I have my char *variables working now, here's the current py++ code I am
using, any comments would be appreciated
for (className, varName) in stringVars:
wrapClass = mb.class_(className)
wrapClass.var(varName).exclude()
wrapAlias = wrapClass.wrapper_alias
wrapperCode = """
char *wrap_%s;
void set_%s(%s& inst, bp::object obj){
char **strPtr = &wrap_%s;
if(*strPtr != NULL) delete *strPtr;
bp::extract<std::string> x(obj);
if (x.check()){
std::string str = x();
*strPtr = new char[str.length()+1];
strcpy_s(*strPtr, str.length()+1, str.c_str());
}else{
*strPtr = NULL;
}
inst.%s = *strPtr;
}
static boost::python::object get_%s(%s& inst){
std::string str;
if(inst.%s != NULL){
std::string str(inst.%s);
return bp::object(str);
}else{
return bp::object();
}
}
""" % (varName, varName, className, varName, varName, varName,
className, varName, varName)
wrapClass.add_wrapper_code(wrapperCode)
constructorCode = "wrap_%s = NULL;" % (varName)
add_constructors_body(wrapClass, constructorCode)
registrationCode = 'add_property("%s", &%s::get_%s, &%s::set_%s)' %
(varName, wrapAlias, varName, wrapAlias, varName)
wrapClass.add_registration_code(registrationCode)
|