Merge #231

231: Remove `Allowed::replace` and `Allowed::take`. r=jrvanwhy a=jrvanwhy

When I originally implemented `Allowed`, I made it work with non-`Copy` types. `Allowed::get` cannot with with non-`Copy` types, so I added `Allowed::replace` to allow client code to read a non-`Copy` type out of an `Allowed` buffer. However, during the PR review we changed `Allowed` to only contain `Copy` types. Because of this change, I don't anticipate `Allowed::replace` (and `Allowed::take` which is built on top of `Allowed::replace`) seeing much use. This PR removes `Allowed::replace` and `Allowed::take` to reduce the amount of `unsafe` in `libtock_platform`.

Co-authored-by: Johnathan Van Why <jrvanwhy@google.com>
diff --git a/core/platform/src/allows/allowed.rs b/core/platform/src/allows/allowed.rs
index 4d66c2b..386562f 100644
--- a/core/platform/src/allows/allowed.rs
+++ b/core/platform/src/allows/allowed.rs
@@ -65,21 +65,7 @@
 }
 
 impl<'b, T: crate::AllowReadable + Copy + 'b> Allowed<'b, T> {
-    pub fn replace(&self, value: T) -> T {
-        let current = unsafe { core::ptr::read_volatile(self.buffer.as_ptr()) };
-        unsafe {
-            core::ptr::write_volatile(self.buffer.as_ptr(), value);
-        }
-        current
-    }
-
     pub fn get(&self) -> T {
         unsafe { core::ptr::read_volatile(self.buffer.as_ptr()) }
     }
 }
-
-impl<'b, T: crate::AllowReadable + Copy + Default + 'b> Allowed<'b, T> {
-    pub fn take(&self) -> T {
-        self.replace(T::default())
-    }
-}
diff --git a/core/platform/src/allows/allowed_tests.rs b/core/platform/src/allows/allowed_tests.rs
index f1f0c08..1859dd1 100644
--- a/core/platform/src/allows/allowed_tests.rs
+++ b/core/platform/src/allows/allowed_tests.rs
@@ -84,19 +84,6 @@
 }
 
 #[test]
-fn replace() {
-    let mut buffer = 1;
-    let (allowed, kernel_ptr) = KernelPtr::allow(&mut buffer);
-    assert_eq!(kernel_ptr.get(), 1);
-
-    // Simulate the kernel replacing the value in buffer.
-    kernel_ptr.set(2);
-    let returned = allowed.replace(3);
-    assert_eq!(returned, 2);
-    assert_eq!(kernel_ptr.get(), 3);
-}
-
-#[test]
 fn get() {
     let mut buffer = 1;
     let (allowed, kernel_ptr) = KernelPtr::allow(&mut buffer);
@@ -109,16 +96,3 @@
     assert_eq!(allowed.get(), 2);
     assert_eq!(kernel_ptr.get(), 2);
 }
-
-#[test]
-fn take() {
-    let mut buffer = 1;
-    let (allowed, kernel_ptr) = KernelPtr::allow(&mut buffer);
-    assert_eq!(kernel_ptr.get(), 1);
-
-    // Simulate the kernel replacing the value in buffer.
-    kernel_ptr.set(2);
-    let returned = allowed.take();
-    assert_eq!(returned, 2);
-    assert_eq!(kernel_ptr.get(), 0);
-}