chiark / gitweb /
hidden notch: some refactoring, variable names, etc.
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 2 Mar 2021 18:44:37 +0000 (18:44 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 2 Mar 2021 19:44:01 +0000 (19:44 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/hidden.rs

index f6777e85307d7e5ed5906fe9bddaa5282f0bc9fa..c5d96900cb9c0856839c2ff734b4f5af051c8296 100644 (file)
@@ -189,6 +189,18 @@ mod vpid {
   }
   type NR = NotchRecord;
 
+  impl NotchRecord {
+    fn unwrap_free(&self) -> NotchPtr { match self {
+      &NR::Free(ptr) => ptr,
+      _ => panic!(),
+    }}
+
+    fn unwrap_free_mut(&mut self) -> &mut NotchPtr { match self {
+      NR::Free(ptr) => ptr,
+      _ => panic!(),
+    }}
+  }
+
   #[derive(Clone,Debug,Serialize,Deserialize,Default)]
   pub struct Notches {
     freelist: NotchPtr,
@@ -211,13 +223,10 @@ mod vpid {
         None => {
           self.table.push(new)
         },
-        Some(u) => {
-          self.freelist = match self.table[u] {
-            NR::Free(n) => n,
-            NR::Piece(_) => panic!(),
-          };
-          self.table[u] = new;
-          u
+        Some(old_free_head) => {
+          self.freelist = self.table[old_free_head].unwrap_free();
+          self.table[old_free_head] = new;
+          old_free_head
         },
       }
     }
@@ -236,8 +245,7 @@ mod vpid {
           if notch < next { break }
           if notch == next { panic!() };
           let next = &mut self.table[next];
-          insert_here =
-            if let NR::Free(f) = next { f } else { panic!() };
+          insert_here = next.unwrap_free_mut();
         }
         // Now either *insert_here==NULL or notch < insert_here->next
         let old_next = mem::replace(insert_here, Some(notch));