diff options
| author | bors <bors@rust-lang.org> | 2013-05-24 19:01:51 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-05-24 19:01:51 -0700 |
| commit | 5f90f1ca1d142dc408108a58e8ac48f10f2d719b (patch) | |
| tree | 5cee1fbd9d7d22b258b97665e2ed62e4cbe29d41 /src | |
| parent | 9a40c5c8ddb9055124cb12a710dc23b24276c9ac (diff) | |
| parent | ff28bb7839a039641788436b21130ae2d378609b (diff) | |
| download | rust-5f90f1ca1d142dc408108a58e8ac48f10f2d719b.tar.gz rust-5f90f1ca1d142dc408108a58e8ac48f10f2d719b.zip | |
auto merge of #6723 : osaut/rust/arc-remove-get, r=brson
* Remove clone and get functions from ARC. * Update the tests and bench.
Diffstat (limited to 'src')
| -rw-r--r-- | src/libextra/arc.rs | 32 | ||||
| -rw-r--r-- | src/test/bench/graph500-bfs.rs | 14 | ||||
| -rw-r--r-- | src/test/compile-fail/no-capture-arc.rs | 6 | ||||
| -rw-r--r-- | src/test/compile-fail/no-reuse-move-arc.rs | 6 |
4 files changed, 24 insertions, 34 deletions
diff --git a/src/libextra/arc.rs b/src/libextra/arc.rs index 648089a5524..123e7275935 100644 --- a/src/libextra/arc.rs +++ b/src/libextra/arc.rs @@ -107,7 +107,7 @@ pub impl<'self> Condvar<'self> { ****************************************************************************/ /// An atomically reference counted wrapper for shared immutable state. -struct ARC<T> { x: UnsafeAtomicRcBox<T> } +pub struct ARC<T> { x: UnsafeAtomicRcBox<T> } /// Create an atomically reference counted wrapper. pub fn ARC<T:Const + Owned>(data: T) -> ARC<T> { @@ -118,15 +118,12 @@ pub fn ARC<T:Const + Owned>(data: T) -> ARC<T> { * Access the underlying data in an atomically reference counted * wrapper. */ -pub fn get<'a, T:Const + Owned>(rc: &'a ARC<T>) -> &'a T { - rc.get() -} - -impl<T:Const+Owned> ARC<T> { - pub fn get<'a>(&'a self) -> &'a T { +pub impl<T:Const+Owned> ARC<T> { + fn get<'a>(&'a self) -> &'a T { unsafe { &*self.x.get_immut() } } } + /** * Duplicate an atomically reference counted wrapper. * @@ -134,13 +131,9 @@ impl<T:Const+Owned> ARC<T> { * object. However, one of the `arc` objects can be sent to another task, * allowing them to share the underlying data. */ -pub fn clone<T:Const + Owned>(rc: &ARC<T>) -> ARC<T> { - ARC { x: rc.x.clone() } -} - impl<T:Const + Owned> Clone for ARC<T> { fn clone(&self) -> ARC<T> { - clone(self) + ARC { x: self.x.clone() } } } @@ -512,17 +505,14 @@ pub impl<'self, T:Const + Owned> RWReadMode<'self, T> { #[cfg(test)] mod tests { use core::prelude::*; - + use core::cell::Cell; use arc::*; use arc; - use core::cell::Cell; - use core::task; - #[test] fn manually_share_arc() { let v = ~[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - let arc_v = arc::ARC(v); + let arc_v = ARC(v); let (p, c) = comm::stream(); @@ -530,16 +520,16 @@ mod tests { let p = comm::PortSet::new(); c.send(p.chan()); - let arc_v = p.recv(); + let arc_v : ARC<~[int]> = p.recv(); - let v = copy *arc::get::<~[int]>(&arc_v); + let v = copy (*arc_v.get()); assert_eq!(v[3], 4); }; let c = p.recv(); - c.send(arc::clone(&arc_v)); + c.send(arc_v.clone()); - assert_eq!((*arc::get(&arc_v))[2], 3); + assert_eq!(arc_v.get()[2], 3); assert_eq!(arc_v.get()[4], 5); info!(arc_v); diff --git a/src/test/bench/graph500-bfs.rs b/src/test/bench/graph500-bfs.rs index 734b5a0006f..06c8d0c145b 100644 --- a/src/test/bench/graph500-bfs.rs +++ b/src/test/bench/graph500-bfs.rs @@ -1,6 +1,6 @@ // xfail-pretty -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -234,7 +234,7 @@ fn pbfs(graph: &arc::ARC<graph>, key: node_id) -> bfs_result { black(node_id) }; - let graph_vec = arc::get(graph); // FIXME #3387 requires this temp + let graph_vec = graph.get(); // FIXME #3387 requires this temp let mut colors = do vec::from_fn(graph_vec.len()) |i| { if i as node_id == key { gray(key) @@ -266,13 +266,13 @@ fn pbfs(graph: &arc::ARC<graph>, key: node_id) -> bfs_result { let color = arc::ARC(colors); - let color_vec = arc::get(&color); // FIXME #3387 requires this temp + let color_vec = color.get(); // FIXME #3387 requires this temp colors = do par::mapi(*color_vec) { - let colors = arc::clone(&color); - let graph = arc::clone(graph); + let colors = color.clone(); + let graph = graph.clone(); let result: ~fn(x: uint, y: &color) -> color = |i, c| { - let colors = arc::get(&colors); - let graph = arc::get(&graph); + let colors = colors.get(); + let graph = graph.get(); match *c { white => { let i = i as node_id; diff --git a/src/test/compile-fail/no-capture-arc.rs b/src/test/compile-fail/no-capture-arc.rs index 132a5326a88..2a83e479e87 100644 --- a/src/test/compile-fail/no-capture-arc.rs +++ b/src/test/compile-fail/no-capture-arc.rs @@ -1,4 +1,4 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -18,11 +18,11 @@ fn main() { let arc_v = arc::ARC(v); do task::spawn() { - let v = *arc::get(&arc_v); + let v = arc_v.get(); assert_eq!(v[3], 4); }; - assert_eq!((*arc::get(&arc_v))[2], 3); + assert_eq!((arc_v.get())[2], 3); info!(arc_v); } diff --git a/src/test/compile-fail/no-reuse-move-arc.rs b/src/test/compile-fail/no-reuse-move-arc.rs index 8bed4e6da47..607127f2fee 100644 --- a/src/test/compile-fail/no-reuse-move-arc.rs +++ b/src/test/compile-fail/no-reuse-move-arc.rs @@ -1,4 +1,4 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -16,11 +16,11 @@ fn main() { let arc_v = arc::ARC(v); do task::spawn() { //~ NOTE `arc_v` moved into closure environment here - let v = *arc::get(&arc_v); + let v = arc_v.get(); assert_eq!(v[3], 4); }; - assert!((*arc::get(&arc_v))[2] == 3); //~ ERROR use of moved value: `arc_v` + assert_eq!((arc_v.get())[2], 3); //~ ERROR use of moved value: `arc_v` info!(arc_v); } |
