From d955bcb1c2208507bc5aa6621d810478658105da Mon Sep 17 00:00:00 2001 From: Tom Janson Date: Sun, 18 Dec 2016 00:02:43 +0100 Subject: [PATCH] add BitVector binding --- src/mod_storage.cpp | 2 ++ src/storage/bitvector.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/storage/bitvector.h | 8 ++++++++ 3 files changed, 49 insertions(+) create mode 100644 src/storage/bitvector.cpp create mode 100644 src/storage/bitvector.h diff --git a/src/mod_storage.cpp b/src/mod_storage.cpp index 835f1e7..221cbbe 100644 --- a/src/mod_storage.cpp +++ b/src/mod_storage.cpp @@ -1,10 +1,12 @@ #include "common.h" +#include "storage/bitvector.h" #include "storage/model.h" #include "storage/matrix.h" PYBIND11_PLUGIN(storage) { py::module m("storage"); + define_bitvector(m); define_model(m); define_sparse_matrix(m); return m.ptr(); diff --git a/src/storage/bitvector.cpp b/src/storage/bitvector.cpp new file mode 100644 index 0000000..dc24960 --- /dev/null +++ b/src/storage/bitvector.cpp @@ -0,0 +1,39 @@ +#include "bitvector.h" +#include "storm/storage/BitVector.h" + +#include + +void define_bitvector(py::module& m) { + using BitVector = storm::storage::BitVector; + + py::class_(m, "BitVector") + .def(py::init<>()) + .def(py::init(), "other"_a) + .def(py::init(), "length"_a) + .def(py::init(), "length"_a, "init"_a) + .def(py::init>(), "length"_a, "set_entries"_a) + + .def("size", &BitVector::size) + .def("number_of_set_bits", &BitVector::getNumberOfSetBits) + //.def("get", &BitVector::get, "index"_a) // no idea why this does not work + .def("get", [](BitVector const& b, uint_fast64_t i) { return b.get(i); }, "index"_a) + + .def(py::self == py::self) + .def(py::self != py::self) + + .def(py::self < py::self) + .def(py::self & py::self) + .def(py::self | py::self) + .def(py::self ^ py::self) + .def(py::self % py::self) + .def(~py::self) + + .def(py::self &= py::self) + .def(py::self |= py::self) + + .def("__repr__", [](BitVector const& b) { std::ostringstream oss; oss << b; return oss.str(); }) + + // TODO (when needed): iterator + ; + +} diff --git a/src/storage/bitvector.h b/src/storage/bitvector.h new file mode 100644 index 0000000..9c548da --- /dev/null +++ b/src/storage/bitvector.h @@ -0,0 +1,8 @@ +#ifndef PYTHON_STORAGE_BITVECTOR_H_ +#define PYTHON_STORAGE_BITVECTOR_H_ + +#include "common.h" + +void define_bitvector(py::module& m); + +#endif /* PYTHON_STORAGE_BITVECTOR_H_ */