@@ -15,6 +15,7 @@ pub(crate) use exponential_histogram::{EXPO_MAX_SCALE, EXPO_MIN_SCALE};
15
15
/// Marks a type that can have a value added and retrieved atomically. Required since
16
16
/// different types have different backing atomic mechanisms
17
17
pub ( crate ) trait AtomicTracker < T > : Sync + Send + ' static {
18
+ fn store ( & self , value : T ) ;
18
19
fn add ( & self , value : T ) ;
19
20
fn get_value ( & self ) -> T ;
20
21
fn get_and_reset_value ( & self ) -> T ;
@@ -90,6 +91,10 @@ impl Number<f64> for f64 {
90
91
}
91
92
92
93
impl AtomicTracker < u64 > for AtomicU64 {
94
+ fn store ( & self , value : u64 ) {
95
+ self . store ( value, Ordering :: Relaxed ) ;
96
+ }
97
+
93
98
fn add ( & self , value : u64 ) {
94
99
self . fetch_add ( value, Ordering :: Relaxed ) ;
95
100
}
@@ -112,6 +117,10 @@ impl AtomicallyUpdate<u64> for u64 {
112
117
}
113
118
114
119
impl AtomicTracker < i64 > for AtomicI64 {
120
+ fn store ( & self , value : i64 ) {
121
+ self . store ( value, Ordering :: Relaxed ) ;
122
+ }
123
+
115
124
fn add ( & self , value : i64 ) {
116
125
self . fetch_add ( value, Ordering :: Relaxed ) ;
117
126
}
@@ -146,6 +155,11 @@ impl F64AtomicTracker {
146
155
}
147
156
148
157
impl AtomicTracker < f64 > for F64AtomicTracker {
158
+ fn store ( & self , value : f64 ) {
159
+ let mut guard = self . inner . lock ( ) . expect ( "F64 mutex was poisoned" ) ;
160
+ * guard = value;
161
+ }
162
+
149
163
fn add ( & self , value : f64 ) {
150
164
let mut guard = self . inner . lock ( ) . expect ( "F64 mutex was poisoned" ) ;
151
165
* guard += value;
0 commit comments