diff options
| author | Steven Fackler <sfackler@gmail.com> | 2013-11-16 13:26:15 -0800 |
|---|---|---|
| committer | Steven Fackler <sfackler@gmail.com> | 2013-11-22 21:19:53 -0800 |
| commit | 5759f2fc571f9531c675a5966b44d570b7dbe685 (patch) | |
| tree | 37158dccd917ca076e3c7f95cb3367db3d9ff03e /src/libstd | |
| parent | 8a26266f6586f765ebdfbc0304e4976bfff28895 (diff) | |
| download | rust-5759f2fc571f9531c675a5966b44d570b7dbe685.tar.gz rust-5759f2fc571f9531c675a5966b44d570b7dbe685.zip | |
Strip down Cell functionality
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/cell.rs | 62 |
1 files changed, 3 insertions, 59 deletions
diff --git a/src/libstd/cell.rs b/src/libstd/cell.rs index 54849a44f6d..b33a18ed95d 100644 --- a/src/libstd/cell.rs +++ b/src/libstd/cell.rs @@ -8,12 +8,11 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -//! A mutable, nullable memory location +//! Runtime move semantics #[missing_doc]; use cast::transmute_mut; -use unstable::finally::Finally; use prelude::*; /* @@ -35,11 +34,6 @@ impl<T> Cell<T> { Cell { value: Some(value) } } - /// Creates a new empty cell with no value inside. - pub fn new_empty() -> Cell<T> { - Cell { value: None } - } - /// Yields the value, failing if the cell is empty. pub fn take(&self) -> T { let this = unsafe { transmute_mut(self) }; @@ -56,34 +50,10 @@ impl<T> Cell<T> { this.value.take() } - /// Returns the value, failing if the cell is full. - pub fn put_back(&self, value: T) { - let this = unsafe { transmute_mut(self) }; - if !this.is_empty() { - fail!("attempt to put a value back into a full cell"); - } - this.value = Some(value); - } - /// Returns true if the cell is empty and false if the cell is full. pub fn is_empty(&self) -> bool { self.value.is_none() } - - /// Calls a closure with a reference to the value. - pub fn with_ref<R>(&self, op: |v: &T| -> R) -> R { - do self.with_mut_ref |ptr| { op(ptr) } - } - - /// Calls a closure with a mutable reference to the value. - pub fn with_mut_ref<R>(&self, op: |v: &mut T| -> R) -> R { - let mut v = Some(self.take()); - do (|| { - op(v.get_mut_ref()) - }).finally { - self.put_back(v.take_unwrap()); - } - } } #[test] @@ -93,38 +63,12 @@ fn test_basic() { let value = value_cell.take(); assert!(value == ~10); assert!(value_cell.is_empty()); - value_cell.put_back(value); - assert!(!value_cell.is_empty()); } #[test] #[should_fail] fn test_take_empty() { - let value_cell: Cell<~int> = Cell::new_empty(); + let value_cell: Cell<~int> = Cell::new(~0); + value_cell.take(); value_cell.take(); -} - -#[test] -#[should_fail] -fn test_put_back_non_empty() { - let value_cell = Cell::new(~10); - value_cell.put_back(~20); -} - -#[test] -fn test_with_ref() { - let good = 6; - let c = Cell::new(~[1, 2, 3, 4, 5, 6]); - let l = do c.with_ref() |v| { v.len() }; - assert_eq!(l, good); -} - -#[test] -fn test_with_mut_ref() { - let good = ~[1, 2, 3]; - let v = ~[1, 2]; - let c = Cell::new(v); - do c.with_mut_ref() |v| { v.push(3); } - let v = c.take(); - assert_eq!(v, good); } |
