@@ -224,6 +224,7 @@ impl<'a, T: 'a + ScoreUpdate + ScoreLookUp> LockableScore<'a> for RefCell<T> {
224
224
}
225
225
}
226
226
227
+ #[ cfg( not( c_bindings) ) ]
227
228
impl < ' a , SP : Sized , T : ' a + ScoreUpdate + ScoreLookUp < ScoreParams = SP > > LockableScore < ' a > for RwLock < T > {
228
229
type ScoreUpdate = T ;
229
230
type ScoreLookUp = T ;
@@ -250,15 +251,15 @@ pub struct MultiThreadedLockableScore<T: ScoreLookUp + ScoreUpdate> {
250
251
impl < ' a , SP : Sized , T : ' a + ScoreLookUp < ScoreParams = SP > + ScoreUpdate > LockableScore < ' a > for MultiThreadedLockableScore < T > {
251
252
type ScoreUpdate = T ;
252
253
type ScoreLookUp = T ;
253
- type WriteLocked = RwLockWriteGuard < ' a , Self :: ScoreUpdate > ;
254
- type ReadLocked = RwLockReadGuard < ' a , Self :: ScoreLookUp > ;
254
+ type WriteLocked = MultiThreadedScoreLockWrite < ' a , Self :: ScoreUpdate > ;
255
+ type ReadLocked = MultiThreadedScoreLockRead < ' a , Self :: ScoreLookUp > ;
255
256
256
257
fn read_lock ( & ' a self ) -> Self :: ReadLocked {
257
- RwLock :: read ( & self . score ) . unwrap ( )
258
+ MultiThreadedScoreLockRead ( self . score . read ( ) . unwrap ( ) )
258
259
}
259
260
260
261
fn write_lock ( & ' a self ) -> Self :: WriteLocked {
261
- RwLock :: write ( & self . score ) . unwrap ( )
262
+ MultiThreadedScoreLockWrite ( self . score . write ( ) . unwrap ( ) )
262
263
}
263
264
}
264
265
@@ -282,31 +283,43 @@ impl<T: ScoreLookUp + ScoreUpdate> MultiThreadedLockableScore<T> {
282
283
283
284
#[ cfg( c_bindings) ]
284
285
/// A locked `MultiThreadedLockableScore`.
285
- pub struct MultiThreadedScoreLock < ' a , T : ScoreLookUp + ScoreUpdate > ( MutexGuard < ' a , T > ) ;
286
+ pub struct MultiThreadedScoreLockRead < ' a , T : ScoreLookUp > ( RwLockReadGuard < ' a , T > ) ;
287
+
288
+ #[ cfg( c_bindings) ]
289
+ /// A locked `MultiThreadedLockableScore`.
290
+ pub struct MultiThreadedScoreLockWrite < ' a , T : ScoreUpdate > ( RwLockWriteGuard < ' a , T > ) ;
286
291
287
292
#[ cfg( c_bindings) ]
288
- impl < ' a , T : ' a + ScoreUpdate + ScoreLookUp > Writeable for MultiThreadedScoreLock < ' a , T > {
293
+ impl < ' a , T : ' a + ScoreUpdate > Writeable for MultiThreadedScoreLockWrite < ' a , T > {
289
294
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
290
295
self . 0 . write ( writer)
291
296
}
292
297
}
293
298
294
299
#[ cfg( c_bindings) ]
295
- impl < ' a , T : ' a + ScoreUpdate + ScoreLookUp > DerefMut for MultiThreadedScoreLock < ' a , T > {
296
- fn deref_mut ( & mut self ) -> & mut Self :: Target {
297
- self . 0 . deref_mut ( )
300
+ impl < ' a , T : ' a + ScoreLookUp > Deref for MultiThreadedScoreLockRead < ' a , T > {
301
+ type Target = T ;
302
+
303
+ fn deref ( & self ) -> & Self :: Target {
304
+ self . 0 . deref ( )
298
305
}
299
306
}
300
307
301
308
#[ cfg( c_bindings) ]
302
- impl < ' a , T : ' a + ScoreUpdate + ScoreLookUp > Deref for MultiThreadedScoreLock < ' a , T > {
309
+ impl < ' a , T : ' a + ScoreUpdate > Deref for MultiThreadedScoreLockWrite < ' a , T > {
303
310
type Target = T ;
304
311
305
312
fn deref ( & self ) -> & Self :: Target {
306
313
self . 0 . deref ( )
307
314
}
308
315
}
309
316
317
+ #[ cfg( c_bindings) ]
318
+ impl < ' a , T : ' a + ScoreUpdate > DerefMut for MultiThreadedScoreLockWrite < ' a , T > {
319
+ fn deref_mut ( & mut self ) -> & mut Self :: Target {
320
+ self . 0 . deref_mut ( )
321
+ }
322
+ }
310
323
311
324
312
325
/// Proposed use of a channel passed as a parameter to [`ScoreLookUp::channel_penalty_msat`].
0 commit comments