mirror of https://github.com/dnomd343/klotski.git
Dnomd343
1 month ago
5 changed files with 151 additions and 14 deletions
@ -1,15 +1,68 @@ |
|||||
#include "rust_ffi/include/common_code.h" |
#include "rust_ffi/include/common_code.h" |
||||
|
|
||||
|
#include <mover/mover.h> |
||||
#include <common_code/common_code.h> |
#include <common_code/common_code.h> |
||||
|
|
||||
|
using klotski::codec::RawCode; |
||||
|
using klotski::codec::ShortCode; |
||||
|
using klotski::codec::CommonCode; |
||||
|
|
||||
|
using klotski::mover::MaskMover; |
||||
|
|
||||
|
using klotski::ffi::RsShortCode; |
||||
using klotski::ffi::RsCommonCode; |
using klotski::ffi::RsCommonCode; |
||||
|
|
||||
|
// TODO: it seems that cxx.rs not support `std::optional`
|
||||
|
uint64_t klotski::ffi::common_code_from_str(rust::Str s) { |
||||
|
std::string_view sv {s.data(), s.length()}; |
||||
|
if (const auto ret = CommonCode::from_string(sv); ret.has_value()) { |
||||
|
return ret.value().unwrap(); |
||||
|
} |
||||
|
return 0x10FFFFFFFF; // return invalid value for now
|
||||
|
} |
||||
|
|
||||
|
bool klotski::ffi::common_code_check(uint64_t val) { |
||||
|
return CommonCode::check(val); |
||||
|
} |
||||
|
|
||||
rust::String RsCommonCode::to_string() const noexcept { |
rust::String RsCommonCode::to_string() const noexcept { |
||||
return codec::CommonCode::unsafe_create(code).to_string(); |
return CommonCode::unsafe_create(code).to_string(); |
||||
} |
} |
||||
|
|
||||
// TODO: it seems that cxx.rs not support `std::optional`
|
rust::String RsCommonCode::to_shorten_string() const noexcept { |
||||
RsCommonCode klotski::ffi::from_string(rust::Str s) { |
return CommonCode::unsafe_create(code).to_string(true); |
||||
std::string_view sv {s.data(), s.length()}; |
} |
||||
return {codec::CommonCode::from_string(sv)->unwrap()}; // TODO: value check
|
|
||||
|
RsShortCode RsCommonCode::to_short_code() const noexcept { |
||||
|
return {CommonCode::unsafe_create(code).to_short_code().unwrap()}; |
||||
|
} |
||||
|
|
||||
|
bool RsCommonCode::is_vertical_mirror() const noexcept { |
||||
|
return CommonCode::unsafe_create(code).is_vertical_mirror(); |
||||
|
} |
||||
|
|
||||
|
bool RsCommonCode::is_horizontal_mirror() const noexcept { |
||||
|
return CommonCode::unsafe_create(code).is_horizontal_mirror(); |
||||
|
} |
||||
|
|
||||
|
RsCommonCode RsCommonCode::to_vertical_mirror() const noexcept { |
||||
|
return {CommonCode::unsafe_create(code).to_vertical_mirror().unwrap()}; |
||||
|
} |
||||
|
|
||||
|
RsCommonCode RsCommonCode::to_horizontal_mirror() const noexcept { |
||||
|
return {CommonCode::unsafe_create(code).to_horizontal_mirror().unwrap()}; |
||||
|
} |
||||
|
|
||||
|
rust::Vec<RsCommonCode> RsCommonCode::next_cases() const noexcept { |
||||
|
std::vector<CommonCode> result; |
||||
|
auto mover = MaskMover([&result](const RawCode code, uint64_t) { |
||||
|
result.emplace_back(code.to_common_code()); |
||||
|
}); |
||||
|
mover.next_cases(CommonCode::unsafe_create(code).to_raw_code(), 0); |
||||
|
|
||||
|
rust::Vec<RsCommonCode> vec; |
||||
|
for (auto x : result) { |
||||
|
vec.emplace_back(RsCommonCode(x.unwrap())); |
||||
|
} |
||||
|
return vec; |
||||
} |
} |
||||
|
Loading…
Reference in new issue