From 1ab53581c103e994044ad511c25c5cba0f12d605 Mon Sep 17 00:00:00 2001 From: hatoo Date: Wed, 20 Jan 2021 23:25:06 +0900 Subject: [PATCH] Optimize impl From for LitBool --- src/lib.rs | 265 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 260 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 53385c6..4209954 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -74,12 +74,267 @@ pub mod solver { Undef = 2, } impl From for LitBool { + #[inline] fn from(x: i8) -> Self { - match x { - 0 => LitBool::True, - 1 => LitBool::False, - _ => LitBool::Undef, - } + const MAP: [LitBool; 256] = [ + LitBool::True, + LitBool::False, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + LitBool::Undef, + ]; + *unsafe { MAP.get_unchecked(std::mem::transmute::(x) as usize) } } } impl Index for Vec {