summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-11-08 02:11:09 -0800
committerbors <bors@rust-lang.org>2013-11-08 02:11:09 -0800
commitbfa80f7d6fd06a3f90c88309fc249bd3c8f39b82 (patch)
tree6576bf416c4d3482d3a58d0cd6be1e191a045cd1 /src/libstd
parent57d1ed819b9e32a8e915ced9b5e130c299a46bca (diff)
parenteabdc8c960f971bd0ce72e50a5847f3bfedaa65f (diff)
downloadrust-bfa80f7d6fd06a3f90c88309fc249bd3c8f39b82.tar.gz
rust-bfa80f7d6fd06a3f90c88309fc249bd3c8f39b82.zip
auto merge of #10344 : brson/rust/atomiccopy, r=alexcrichton
I didn't try to add clone methods since it's not clear to me which types are appropriate to clone or what the memory ordering should be.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/unstable/atomics.rs34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/libstd/unstable/atomics.rs b/src/libstd/unstable/atomics.rs
index e8835462a80..9aaccb3ebba 100644
--- a/src/libstd/unstable/atomics.rs
+++ b/src/libstd/unstable/atomics.rs
@@ -23,40 +23,46 @@ use cast;
 use option::{Option,Some,None};
 use libc::c_void;
 use ops::Drop;
+use util::NonCopyable;
 
 /**
  * A simple atomic flag, that can be set and cleared. The most basic atomic type.
  */
 pub struct AtomicFlag {
-    priv v: int
+    priv v: int,
+    priv nocopy: NonCopyable
 }
 
 /**
  * An atomic boolean type.
  */
 pub struct AtomicBool {
-    priv v: uint
+    priv v: uint,
+    priv nocopy: NonCopyable
 }
 
 /**
  * A signed atomic integer type, supporting basic atomic arithmetic operations
  */
 pub struct AtomicInt {
-    priv v: int
+    priv v: int,
+    priv nocopy: NonCopyable
 }
 
 /**
  * An unsigned atomic integer type, supporting basic atomic arithmetic operations
  */
 pub struct AtomicUint {
-    priv v: uint
+    priv v: uint,
+    priv nocopy: NonCopyable
 }
 
 /**
  * An unsafe atomic pointer. Only supports basic atomic operations
  */
 pub struct AtomicPtr<T> {
-    priv p: *mut T
+    priv p: *mut T,
+    priv nocopy: NonCopyable
 }
 
 /**
@@ -75,15 +81,15 @@ pub enum Ordering {
     SeqCst
 }
 
-pub static INIT_ATOMIC_FLAG : AtomicFlag = AtomicFlag { v: 0 };
-pub static INIT_ATOMIC_BOOL : AtomicBool = AtomicBool { v: 0 };
-pub static INIT_ATOMIC_INT  : AtomicInt  = AtomicInt  { v: 0 };
-pub static INIT_ATOMIC_UINT : AtomicUint = AtomicUint { v: 0 };
+pub static INIT_ATOMIC_FLAG : AtomicFlag = AtomicFlag { v: 0, nocopy: NonCopyable };
+pub static INIT_ATOMIC_BOOL : AtomicBool = AtomicBool { v: 0, nocopy: NonCopyable };
+pub static INIT_ATOMIC_INT  : AtomicInt  = AtomicInt  { v: 0, nocopy: NonCopyable };
+pub static INIT_ATOMIC_UINT : AtomicUint = AtomicUint { v: 0, nocopy: NonCopyable };
 
 impl AtomicFlag {
 
     pub fn new() -> AtomicFlag {
-        AtomicFlag { v: 0 }
+        AtomicFlag { v: 0, nocopy: NonCopyable }
     }
 
     /**
@@ -106,7 +112,7 @@ impl AtomicFlag {
 
 impl AtomicBool {
     pub fn new(v: bool) -> AtomicBool {
-        AtomicBool { v: if v { 1 } else { 0 } }
+        AtomicBool { v: if v { 1 } else { 0 }, nocopy: NonCopyable }
     }
 
     #[inline]
@@ -171,7 +177,7 @@ impl AtomicBool {
 
 impl AtomicInt {
     pub fn new(v: int) -> AtomicInt {
-        AtomicInt { v:v }
+        AtomicInt { v:v, nocopy: NonCopyable }
     }
 
     #[inline]
@@ -209,7 +215,7 @@ impl AtomicInt {
 
 impl AtomicUint {
     pub fn new(v: uint) -> AtomicUint {
-        AtomicUint { v:v }
+        AtomicUint { v:v, nocopy: NonCopyable }
     }
 
     #[inline]
@@ -247,7 +253,7 @@ impl AtomicUint {
 
 impl<T> AtomicPtr<T> {
     pub fn new(p: *mut T) -> AtomicPtr<T> {
-        AtomicPtr { p:p }
+        AtomicPtr { p:p, nocopy: NonCopyable }
     }
 
     #[inline]