|
@ -114,7 +114,121 @@ impl RawCode { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
impl RawCode { |
|
|
impl RawCode { |
|
|
|
|
|
/// Determine whether two layouts are mirrored vertically.
|
|
|
|
|
|
/// # Example
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
/// use klotski_ffi::RawCode;
|
|
|
|
|
|
///
|
|
|
|
|
|
/// let r1 = RawCode::from(0x0_E58_FC8_5FF_EBC_4DB).unwrap(); // 4FEA13400
|
|
|
|
|
|
/// let r2 = RawCode::from(0x0_EDB_5FF_EBC_5C8_E58).unwrap(); // 8346AFC00
|
|
|
|
|
|
///
|
|
|
|
|
|
/// println!("is vertical mirror: {}", RawCode::is_vertical_mirror(&r1, &r2));
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
#[inline] |
|
|
|
|
|
pub fn is_vertical_mirror(r1: &RawCode, r2: &RawCode) -> bool { |
|
|
|
|
|
r1 == &r2.to_vertical_mirror() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// TODO: mirror function
|
|
|
/// Determine whether two layouts are mirrored horizontally.
|
|
|
|
|
|
/// # Example
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
/// use klotski_ffi::RawCode;
|
|
|
|
|
|
///
|
|
|
|
|
|
/// let r1 = RawCode::from(0x0_E58_FC8_5FF_EBC_4DB).unwrap(); // 4FEA13400
|
|
|
|
|
|
/// let r2 = RawCode::from(0x0_0F9_1CF_FFA_F17_6DA).unwrap(); // 6BFA47000
|
|
|
|
|
|
///
|
|
|
|
|
|
/// println!("is horizontal mirror: {}", RawCode::is_horizontal_mirror(&r1, &r2));
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
#[inline] |
|
|
|
|
|
pub fn is_horizontal_mirror(r1: &RawCode, r2: &RawCode) -> bool { |
|
|
|
|
|
r1 == &r2.to_horizontal_mirror() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Determine whether the current layout is vertically mirrored with another layout.
|
|
|
|
|
|
/// # Example
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
/// use klotski_ffi::RawCode;
|
|
|
|
|
|
///
|
|
|
|
|
|
/// let r1 = RawCode::from(0x0_E58_FC8_5FF_EBC_4DB).unwrap(); // 4FEA13400
|
|
|
|
|
|
/// let r2 = RawCode::from(0x0_EDB_5FF_EBC_5C8_E58).unwrap(); // 8346AFC00
|
|
|
|
|
|
///
|
|
|
|
|
|
/// println!("is vertical mirror: {}", r1.is_vertical_mirror_with(&r2));
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
#[inline] |
|
|
|
|
|
pub fn is_vertical_mirror_with(&self, raw_code: &RawCode) -> bool { |
|
|
|
|
|
self == &raw_code.to_vertical_mirror() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Determine whether the current layout is horizontally mirrored with another layout.
|
|
|
|
|
|
/// # Example
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
/// use klotski_ffi::RawCode;
|
|
|
|
|
|
///
|
|
|
|
|
|
/// let r1 = RawCode::from(0x0_E58_FC8_5FF_EBC_4DB).unwrap(); // 4FEA13400
|
|
|
|
|
|
/// let r2 = RawCode::from(0x0_0F9_1CF_FFA_F17_6DA).unwrap(); // 6BFA47000
|
|
|
|
|
|
///
|
|
|
|
|
|
/// println!("is horizontal mirror: {}", r1.is_horizontal_mirror_with(&r2));
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
#[inline] |
|
|
|
|
|
pub fn is_horizontal_mirror_with(&self, raw_code: &RawCode) -> bool { |
|
|
|
|
|
self == &raw_code.to_horizontal_mirror() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Determine whether the layout is vertically symmetrical.
|
|
|
|
|
|
/// # Example
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
/// use klotski_ffi::RawCode;
|
|
|
|
|
|
///
|
|
|
|
|
|
/// let r = RawCode::from(0x0_603_EDF_5CA_FFF_5E2).unwrap(); // 1A9BF0C00
|
|
|
|
|
|
///
|
|
|
|
|
|
/// println!("is vertically symmetrical: {}", r.is_self_vertical_mirror());
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
#[inline] |
|
|
|
|
|
pub fn is_self_vertical_mirror(&self) -> bool { |
|
|
|
|
|
codec_ffi::is_vertical_mirror_unsafe(self.code) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Determine whether the layout is horizontally symmetrical.
|
|
|
|
|
|
/// # Example
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
/// use klotski_ffi::RawCode;
|
|
|
|
|
|
///
|
|
|
|
|
|
/// let r = RawCode::from(0x0_603_EDF_5CA_FFF_5E2).unwrap(); // 1A9BF0C00
|
|
|
|
|
|
///
|
|
|
|
|
|
/// println!("is horizontally symmetrical: {}", r.is_self_horizontal_mirror());
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
#[inline] |
|
|
|
|
|
pub fn is_self_horizontal_mirror(&self) -> bool { |
|
|
|
|
|
codec_ffi::is_horizontal_mirror_unsafe(self.code) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Get vertical mirroring of the layout.
|
|
|
|
|
|
/// # Example
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
/// use klotski_ffi::RawCode;
|
|
|
|
|
|
///
|
|
|
|
|
|
/// let r = RawCode::from(0x0_E58_FC8_5FF_EBC_4DB).unwrap(); // 4FEA13400
|
|
|
|
|
|
/// println!("vertical mirror: {}", r.to_vertical_mirror());
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
#[inline] |
|
|
|
|
|
pub fn to_vertical_mirror(&self) -> RawCode { |
|
|
|
|
|
RawCode::new( |
|
|
|
|
|
codec_ffi::to_vertical_mirror_unsafe(self.code) |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Get horizontally mirroring of the layout.
|
|
|
|
|
|
/// # Example
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
/// use klotski_ffi::RawCode;
|
|
|
|
|
|
///
|
|
|
|
|
|
/// let r = RawCode::from(0x0_E58_FC8_5FF_EBC_4DB).unwrap(); // 4FEA13400
|
|
|
|
|
|
/// println!("horizontal mirror: {}", r.to_horizontal_mirror());
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
#[inline] |
|
|
|
|
|
pub fn to_horizontal_mirror(&self) -> RawCode { |
|
|
|
|
|
RawCode::new( |
|
|
|
|
|
codec_ffi::to_horizontal_mirror_unsafe(self.code) |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|