@@ -11,76 +11,8 @@ cfg_has_atomic_u64! {
1111}
1212
1313cfg_not_has_atomic_u64 ! {
14- use crate :: loom :: sync :: Mutex ;
15- use std :: sync :: atomic :: Ordering ;
14+ # [ path = "atomic_u64_as_mutex.rs" ]
15+ mod atomic_u64_as_mutex ;
1616
17- #[ derive( Debug ) ]
18- pub ( crate ) struct AtomicU64 {
19- inner: Mutex <u64 >,
20- }
21-
22- impl AtomicU64 {
23- pub ( crate ) fn new( val: u64 ) -> Self {
24- Self {
25- inner: Mutex :: new( val) ,
26- }
27- }
28-
29- pub ( crate ) fn load( & self , _: Ordering ) -> u64 {
30- * self . inner. lock( )
31- }
32-
33- pub ( crate ) fn store( & self , val: u64 , _: Ordering ) {
34- * self . inner. lock( ) = val;
35- }
36-
37- pub ( crate ) fn fetch_add( & self , val: u64 , _: Ordering ) -> u64 {
38- let mut lock = self . inner. lock( ) ;
39- let prev = * lock;
40- * lock = prev + val;
41- prev
42- }
43-
44- pub ( crate ) fn fetch_or( & self , val: u64 , _: Ordering ) -> u64 {
45- let mut lock = self . inner. lock( ) ;
46- let prev = * lock;
47- * lock = prev | val;
48- prev
49- }
50-
51- pub ( crate ) fn compare_exchange(
52- & self ,
53- current: u64 ,
54- new: u64 ,
55- _success: Ordering ,
56- _failure: Ordering ,
57- ) -> Result <u64 , u64 > {
58- let mut lock = self . inner. lock( ) ;
59-
60- if * lock == current {
61- * lock = new;
62- Ok ( current)
63- } else {
64- Err ( * lock)
65- }
66- }
67-
68- pub ( crate ) fn compare_exchange_weak(
69- & self ,
70- current: u64 ,
71- new: u64 ,
72- success: Ordering ,
73- failure: Ordering ,
74- ) -> Result <u64 , u64 > {
75- self . compare_exchange( current, new, success, failure)
76- }
77- }
78-
79- impl Default for AtomicU64 {
80- fn default ( ) -> AtomicU64 {
81- Self {
82- inner: Mutex :: new( 0 ) ,
83- }
84- }
85- }
17+ pub ( crate ) use atomic_u64_as_mutex:: AtomicU64 ;
8618}
0 commit comments