Cleanup and fixes
diff --git a/libtrellis/src/PyTrellis.cpp b/libtrellis/src/PyTrellis.cpp
index fa003fd..03e211f 100644
--- a/libtrellis/src/PyTrellis.cpp
+++ b/libtrellis/src/PyTrellis.cpp
@@ -24,18 +24,17 @@
namespace py = pybind11;
- typedef pair<int, int> IntPair;
- typedef pair<string, bool> StringBoolPair;
- typedef pair<RoutingId, ident_t> BelPin;
- typedef pair<RoutingId, PortDirection> BelWireDir;
+typedef pair<int, int> IntPair;
+typedef pair<string, bool> StringBoolPair;
+typedef pair<RoutingId, ident_t> BelPin;
+typedef pair<RoutingId, PortDirection> BelWireDir;
- // Common Types
- PYBIND11_MAKE_OPAQUE(IntPair)
- PYBIND11_MAKE_OPAQUE(LocationData)
- PYBIND11_MAKE_OPAQUE(checksum_t)
- PYBIND11_MAKE_OPAQUE(map<checksum_t, LocationData>)
- PYBIND11_MAKE_OPAQUE(Location)
- PYBIND11_MAKE_OPAQUE(std::set<RelId>)
+// Common Types
+PYBIND11_MAKE_OPAQUE(IntPair)
+PYBIND11_MAKE_OPAQUE(LocationData)
+PYBIND11_MAKE_OPAQUE(checksum_t)
+PYBIND11_MAKE_OPAQUE(map<checksum_t, LocationData>)
+PYBIND11_MAKE_OPAQUE(Location)
PYBIND11_MODULE (pytrellis, m)
{
@@ -47,11 +46,9 @@
py::bind_vector<vector<bool>>(m, "BoolVector");
class_<IntPair>(m, "IntPair")
- .def(init<IntPair>())
.def_readonly("first", &std::pair<int, int>::first)
.def_readonly("second", &std::pair<int, int>::second);
-
m.def("make_IntPair", [](int first, int second) {
return std::make_pair(first, second);
});
@@ -75,7 +72,7 @@
.def("write_bit", &Bitstream::write_bit_py)
.def_readwrite("metadata", &Bitstream::metadata)
.def_readwrite("data", &Bitstream::data)
- .def("deserialise_chip", static_cast<Chip (Bitstream::*)()>(&Bitstream::deserialise_chip));
+ .def("deserialise_chip", static_cast<Chip (Bitstream::*)()>(&Bitstream::deserialise_chip));
class_<DeviceLocator>(m, "DeviceLocator")
.def_readwrite("family", &DeviceLocator::family)
@@ -259,8 +256,12 @@
m.def("cbit_from_str", cbit_from_str);
py::bind_vector<vector<ConfigBit>>(m, "ConfigBitVector");
- class_<std::set<ConfigBit>>(m, "ConfigBitSet");
-
+ class_<std::set<ConfigBit>>(m, "ConfigBitSet")
+ .def("__len__", [](const std::set<ConfigBit> &v) { return v.size(); })
+ .def("__iter__", [](std::set<ConfigBit> &v) {
+ return py::make_iterator(v.begin(), v.end());
+ }, py::keep_alive<0, 1>()); /* Keep vector alive while iterator is used */
+
class_<BitGroup>(m, "BitGroup")
.def(init<const CRAMDelta &>())
.def_readwrite("bits", &BitGroup::bits)
diff --git a/util/common/tiles.py b/util/common/tiles.py
index e64c9a1..4eed5e7 100644
--- a/util/common/tiles.py
+++ b/util/common/tiles.py
@@ -6,8 +6,7 @@
"""
Extract the tile position as a (row, column) tuple from its name
"""
- pair = pytrellis.make_IntPair(chip_size[0],chip_size[1])
- size = pytrellis.IntPair(pair)
+ size = pytrellis.make_IntPair(chip_size[0],chip_size[1])
pos = pytrellis.get_row_col_pair_from_chipsize(tile, size, bias)
return int(pos.first), int(pos.second)