python: New wrapper system working for unique_ptr maps

Signed-off-by: David Shah <davey1576@gmail.com>
This commit is contained in:
David Shah 2018-07-03 11:04:55 +02:00
parent a382d906ef
commit 3e8bdb5cbd
2 changed files with 11 additions and 5 deletions

View File

@ -63,6 +63,8 @@ Context *load_design_shim(std::string filename, ArchArgs args)
BOOST_PYTHON_MODULE(MODULE_NAME)
{
using namespace PythonConversion;
class_<GraphicElement>("GraphicElement")
.def_readwrite("type", &GraphicElement::type)
.def_readwrite("x1", &GraphicElement::x1)
@ -95,14 +97,14 @@ BOOST_PYTHON_MODULE(MODULE_NAME)
.def_readwrite("net", &PortInfo::net)
.def_readwrite("type", &PortInfo::type);
class_<CellInfo, CellInfo *>("CellInfo")
/*class_<CellInfo, CellInfo *>("CellInfo")
.def_readwrite("name", &CellInfo::name)
.def_readwrite("type", &CellInfo::type)
.def_readwrite("ports", &CellInfo::ports)
.def_readwrite("attrs", &CellInfo::attrs)
.def_readwrite("params", &CellInfo::params)
.def_readwrite("bel", &CellInfo::bel)
.def_readwrite("pins", &CellInfo::pins);
.def_readwrite("pins", &CellInfo::pins);*/
// WRAP_MAP(decltype(CellInfo::ports), "IdPortMap");
// WRAP_MAP(decltype(CellInfo::pins), "IdIdMap");
@ -114,6 +116,10 @@ BOOST_PYTHON_MODULE(MODULE_NAME)
// WRAP_MAP_UPTR(decltype(Context::nets), "IdNetMap");
// WRAP_MAP_UPTR(decltype(Context::cells), "IdCellMap");
auto ci_cls = class_<ContextualWrapper<CellInfo&>>("CellInfo", no_init);
readonly_wrapper<CellInfo&, typeof(&CellInfo::type), &CellInfo::type, conv_to_str<IdString>>::def_wrap(ci_cls,
"type");
def("parse_json", parse_json_shim);
def("load_design", load_design_shim, return_value_policy<manage_new_object>());

View File

@ -342,7 +342,7 @@ template <typename T1, typename T2> struct map_pair_wrapper_uptr
static void wrap(const char *pair_name, const char *iter_name)
{
pair_iterator_wrapper::wrap(iter_name);
class_<wrapped_pair, boost::noncopyable>(pair_name, no_init)
class_<wrapped_pair>(pair_name, no_init)
.def("__iter__", iter)
.def("__len__", len)
.def("__getitem__", get)
@ -390,9 +390,9 @@ template <typename T> struct map_wrapper_uptr
static void wrap(const char *map_name, const char *kv_name, const char *kv_iter_name, const char *iter_name)
{
map_pair_wrapper_uptr<typename KV::first_type, typename KV::second_type>::wrap(kv_name, kv_iter_name);
typedef range_wrapper<T, return_value_policy<return_by_value>, PythonConversion::wrap_context<KV &>> rw;
typedef range_wrapper<T&, return_value_policy<return_by_value>, PythonConversion::wrap_context<KV &>> rw;
typename rw::iter_wrap().wrap(iter_name);
class_<wrapped_map, boost::noncopyable>(map_name, no_init)
class_<wrapped_map>(map_name, no_init)
.def("__iter__", rw::iter)
.def("__len__", &T::size)
.def("__getitem__", get)