Browse Source

add support for struct field type char array (fixed)

master
heck 4 years ago
parent
commit
4147f0a168
  1. 25
      pEpACIDgen/gen_backend/gen_pybind11.ysl2

25
pEpACIDgen/gen_backend/gen_pybind11.ysl2

@ -195,8 +195,28 @@ tstylesheet {
const "array_type", "substring-before($type, '[')"; const "array_type", "substring-before($type, '[')";
const "array_len", "substring-before(substring-after($type, '['),']')"; const "array_len", "substring-before(substring-after($type, '['),']')";
choose { choose {
// If is array type
when "string-length($array_len) > 0" { when "string-length($array_len) > 0" {
choose {
when "$array_type = 'char '" {
||
.def_property("«$name»",
[](::«$structname» &obj) -> py::bytes {
// cout << "«$structname»::«$name»: getter called" << endl;
return py::bytes(obj.«$name», «$array_len»);
},
[](::«$structname» &obj, py::bytes val) -> void {
// cout << "«$structname»::«$name»: setter called" << endl;
std::string strval{val};
for(int i = 0; i < «$array_len»; ++i) {
obj.«$name»[i] = strval[i];
}
},
py::return_value_policy::copy)
||
} otherwise {
|| ||
.def_property("«$name»", .def_property("«$name»",
[](::«$structname» &obj) -> py::list { [](::«$structname» &obj) -> py::list {
@ -208,7 +228,7 @@ tstylesheet {
return l; return l;
}, },
[](::«$structname» &obj, py::list val) -> void { [](::«$structname» &obj, py::list val) -> void {
// cout << "«$structname»::«$name»: getter called" << endl; // cout << "«$structname»::«$name»: setter called" << endl;
if(val.size() <= 0) { if(val.size() <= 0) {
// empty array given, doing nothing (static c array cant be cleared) // empty array given, doing nothing (static c array cant be cleared)
} else { } else {
@ -232,6 +252,9 @@ tstylesheet {
py::return_value_policy::copy) py::return_value_policy::copy)
|| ||
}
}
// not array type
} otherwise { } otherwise {
|| ||
.def_property("«@name»", .def_property("«@name»",

Loading…
Cancel
Save