Browse Source

feat: add pickle support of PyLayout

master
Dnomd343 3 weeks ago
parent
commit
984192dff7
  1. 5
      src/core_ffi/python_ffi/binder/klsk_code.cc
  2. 10
      src/core_ffi/python_ffi/include/py_ffi/layout.h

5
src/core_ffi/python_ffi/binder/klsk_code.cc

@ -61,6 +61,11 @@ static void bind_layout(const py::module_ &mod) {
return PyLayout(self);
}, py::arg("memo"))
.def("__getstate__", [](const PyLayout &self) {
return self.value();
})
.def("__setstate__", &PyLayout::set_state)
.def("next_cases", &PyLayout::next_cases)
.def("dump_seq", &PyLayout::dump_seq)
// TODO: add fast_cal / fast_cal_multi / ...

10
src/core_ffi/python_ffi/include/py_ffi/layout.h

@ -11,6 +11,11 @@
// TODO: add `copy` and `pickle` support
#include <iostream>
#include <pybind11/pybind11.h>
namespace py = pybind11;
namespace klotski::ffi {
enum class PyBlock : uint8_t {
@ -71,6 +76,11 @@ public:
/// Wrapper of `__repr__` method in Python.
static std::string repr(PyLayout code) noexcept;
void set_state(uint64_t state) {
// std::cout << "set_state called" << std::endl;
code_ = codec::CommonCode::unsafe_create(state);
}
// ------------------------------------------------------------------------------------- //
[[nodiscard]] std::vector<PyLayout> next_cases() const noexcept;

Loading…
Cancel
Save