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