Remove Allowed::replace and Allowed::take.
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_platferm.
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);
-}