diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2013-02-25 13:23:16 -0800 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2013-02-26 04:18:12 -0800 |
| commit | e2f90091cf652218fe456ec1a54892fe1ceabb36 (patch) | |
| tree | 05fa716cc71d35bb3e288b36fa458a16785a2e3c /src/libstd | |
| parent | c483aab4ae391eb26dae5a17d40c148551a6c674 (diff) | |
| download | rust-e2f90091cf652218fe456ec1a54892fe1ceabb36.tar.gz rust-e2f90091cf652218fe456ec1a54892fe1ceabb36.zip | |
libcore: Move Cell to core and de-~mut core and std
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/cell.rs | 90 | ||||
| -rw-r--r-- | src/libstd/std.rc | 1 |
2 files changed, 0 insertions, 91 deletions
diff --git a/src/libstd/cell.rs b/src/libstd/cell.rs deleted file mode 100644 index c8121daddab..00000000000 --- a/src/libstd/cell.rs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or -// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use core::option; -use core::prelude::*; - -/// A dynamic, mutable location. -/// -/// Similar to a mutable option type, but friendlier. - -pub struct Cell<T> { - mut value: Option<T> -} - -/// Creates a new full cell with the given value. -pub fn Cell<T>(value: T) -> Cell<T> { - Cell { value: Some(value) } -} - -pub pure fn empty_cell<T>() -> Cell<T> { - Cell { value: None } -} - -impl<T> Cell<T> { - /// Yields the value, failing if the cell is empty. - fn take() -> T { - if self.is_empty() { - fail!(~"attempt to take an empty cell"); - } - - let mut value = None; - value <-> self.value; - return option::unwrap(value); - } - - /// Returns the value, failing if the cell is full. - fn put_back(value: T) { - if !self.is_empty() { - fail!(~"attempt to put a value back into a full cell"); - } - self.value = Some(value); - } - - /// Returns true if the cell is empty and false if the cell is full. - pure fn is_empty() -> bool { - self.value.is_none() - } - - // Calls a closure with a reference to the value. - fn with_ref<R>(op: fn(v: &T) -> R) -> R { - let v = self.take(); - let r = op(&v); - self.put_back(v); - r - } -} - -#[test] -fn test_basic() { - let value_cell = Cell(~10); - assert !value_cell.is_empty(); - 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] -#[ignore(cfg(windows))] -fn test_take_empty() { - let value_cell = empty_cell::<~int>(); - value_cell.take(); -} - -#[test] -#[should_fail] -#[ignore(cfg(windows))] -fn test_put_back_non_empty() { - let value_cell = Cell(~10); - value_cell.put_back(~20); -} diff --git a/src/libstd/std.rc b/src/libstd/std.rc index b6d99800aa2..854abfdd112 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -54,7 +54,6 @@ pub mod uv_global_loop; pub mod c_vec; pub mod timer; -pub mod cell; pub mod io_util; // Concurrency |
