[2016][rust][23.1] more canonical way of getting index from Register
change ltmkzwtlmkutqouxkxskowrrukuolwrk
commit 8d4c3d0998b75e5ce41e7f7dfd52d81f5b69bfff
author Alpha Chen <alpha.chen@gmail.com>
date
parent qttzozlw
diff --git a/2016/rust/src/assembunny.rs b/2016/rust/src/assembunny.rs
index 9871625..6e31e6f 100644
--- a/2016/rust/src/assembunny.rs
+++ b/2016/rust/src/assembunny.rs
@@ -86,28 +86,20 @@ impl Registers {
     pub fn new() -> Self {
         Registers([0; 5])
     }
-
-    fn index(r: Register) -> usize {
-        match r {
-            Register::PC => 0,
-            Register::A => 1,
-            Register::B => 2,
-            Register::C => 3,
-            Register::D => 4,
-        }
-    }
 }
 
 impl ops::Index<Register> for Registers {
     type Output = isize;
 
     fn index(&self, _index: Register) -> &isize {
-        self.0.index(Self::index(_index))
+        let index: u8 = _index.into();
+        self.0.index(index as usize)
     }
 }
 impl ops::IndexMut<Register> for Registers {
     fn index_mut(&mut self, _index: Register) -> &mut isize {
-        self.0.index_mut(Self::index(_index))
+        let index: u8 = _index.into();
+        self.0.index_mut(index as usize)
     }
 }
 
@@ -154,6 +146,18 @@ pub enum Register {
     D,
 }
 
+impl From<Register> for u8 {
+    fn from(r: Register) -> u8 {
+        match r {
+            Register::PC => 0,
+            Register::A => 1,
+            Register::B => 2,
+            Register::C => 3,
+            Register::D => 4,
+        }
+    }
+}
+
 #[derive(Clone, Copy, Debug, PartialEq)]
 pub enum Instruction {
     Cpy(Variable, Variable),