@@ -58,8 +58,28 @@ impl<NI: Idx, EV> AdjacencyList<NI, EV> {
58
58
#[ inline]
59
59
pub ( crate ) fn insert ( & self , source : NI , target : Target < NI , EV > ) {
60
60
let mut edges = self . edges [ source. index ( ) ] . write ( ) . unwrap ( ) ;
61
+ Self :: apply_layout ( self . layout , & mut edges, target) ;
62
+ }
61
63
62
- match self . layout {
64
+ #[ inline]
65
+ pub ( crate ) fn insert_mut ( & mut self , source : NI , target : Target < NI , EV > ) {
66
+ let edges = self . edges [ source. index ( ) ] . get_mut ( ) . unwrap ( ) ;
67
+ Self :: apply_layout ( self . layout , edges, target) ;
68
+ }
69
+
70
+ #[ inline]
71
+ fn check_bounds ( & self , node : NI ) -> Result < ( ) , crate :: Error > {
72
+ if node >= self . node_count ( ) {
73
+ return Err ( crate :: Error :: MissingNode {
74
+ node : format ! ( "{}" , node. index( ) ) ,
75
+ } ) ;
76
+ } ;
77
+ Ok ( ( ) )
78
+ }
79
+
80
+ #[ inline]
81
+ fn apply_layout ( layout : CsrLayout , edges : & mut Vec < Target < NI , EV > > , target : Target < NI , EV > ) {
82
+ match layout {
63
83
CsrLayout :: Sorted => match edges. binary_search ( & target) {
64
84
Ok ( i) => edges. insert ( i, target) ,
65
85
Err ( i) => edges. insert ( i, target) ,
@@ -345,26 +365,35 @@ impl<NI: Idx, NV> EdgeMutation<NI> for DirectedALGraph<NI, NV> {
345
365
fn add_edge ( & self , source : NI , target : NI ) -> Result < ( ) , crate :: Error > {
346
366
self . add_edge_with_value ( source, target, ( ) )
347
367
}
368
+
369
+ fn add_edge_mut ( & mut self , source : NI , target : NI ) -> Result < ( ) , crate :: Error > {
370
+ self . add_edge_with_value_mut ( source, target, ( ) )
371
+ }
348
372
}
349
373
350
374
impl < NI : Idx , NV , EV : Copy > EdgeMutationWithValues < NI , EV > for DirectedALGraph < NI , NV , EV > {
351
375
fn add_edge_with_value ( & self , source : NI , target : NI , value : EV ) -> Result < ( ) , crate :: Error > {
352
- if source >= self . al_out . node_count ( ) {
353
- return Err ( crate :: Error :: MissingNode {
354
- node : format ! ( "{}" , source. index( ) ) ,
355
- } ) ;
356
- }
357
- if target >= self . al_inc . node_count ( ) {
358
- return Err ( crate :: Error :: MissingNode {
359
- node : format ! ( "{}" , target. index( ) ) ,
360
- } ) ;
361
- }
362
-
376
+ self . al_out . check_bounds ( source) ?;
377
+ self . al_inc . check_bounds ( target) ?;
363
378
self . al_out . insert ( source, Target :: new ( target, value) ) ;
364
379
self . al_inc . insert ( target, Target :: new ( source, value) ) ;
365
380
366
381
Ok ( ( ) )
367
382
}
383
+
384
+ fn add_edge_with_value_mut (
385
+ & mut self ,
386
+ source : NI ,
387
+ target : NI ,
388
+ value : EV ,
389
+ ) -> Result < ( ) , crate :: Error > {
390
+ self . al_out . check_bounds ( source) ?;
391
+ self . al_inc . check_bounds ( target) ?;
392
+ self . al_out . insert_mut ( source, Target :: new ( target, value) ) ;
393
+ self . al_inc . insert_mut ( target, Target :: new ( source, value) ) ;
394
+
395
+ Ok ( ( ) )
396
+ }
368
397
}
369
398
370
399
impl < NI , EV , E > From < ( E , CsrLayout ) > for DirectedALGraph < NI , ( ) , EV >
@@ -482,26 +511,35 @@ impl<NI: Idx, NV> EdgeMutation<NI> for UndirectedALGraph<NI, NV, ()> {
482
511
fn add_edge ( & self , source : NI , target : NI ) -> Result < ( ) , crate :: Error > {
483
512
self . add_edge_with_value ( source, target, ( ) )
484
513
}
514
+
515
+ fn add_edge_mut ( & mut self , source : NI , target : NI ) -> Result < ( ) , crate :: Error > {
516
+ self . add_edge_with_value_mut ( source, target, ( ) )
517
+ }
485
518
}
486
519
487
520
impl < NI : Idx , NV , EV : Copy > EdgeMutationWithValues < NI , EV > for UndirectedALGraph < NI , NV , EV > {
488
521
fn add_edge_with_value ( & self , source : NI , target : NI , value : EV ) -> Result < ( ) , crate :: Error > {
489
- if source >= self . al . node_count ( ) {
490
- return Err ( crate :: Error :: MissingNode {
491
- node : format ! ( "{}" , source. index( ) ) ,
492
- } ) ;
493
- }
494
- if target >= self . al . node_count ( ) {
495
- return Err ( crate :: Error :: MissingNode {
496
- node : format ! ( "{}" , target. index( ) ) ,
497
- } ) ;
498
- }
499
-
522
+ self . al . check_bounds ( source) ?;
523
+ self . al . check_bounds ( target) ?;
500
524
self . al . insert ( source, Target :: new ( target, value) ) ;
501
525
self . al . insert ( target, Target :: new ( source, value) ) ;
502
526
503
527
Ok ( ( ) )
504
528
}
529
+
530
+ fn add_edge_with_value_mut (
531
+ & mut self ,
532
+ source : NI ,
533
+ target : NI ,
534
+ value : EV ,
535
+ ) -> Result < ( ) , crate :: Error > {
536
+ self . al . check_bounds ( source) ?;
537
+ self . al . check_bounds ( target) ?;
538
+ self . al . insert_mut ( source, Target :: new ( target, value) ) ;
539
+ self . al . insert_mut ( target, Target :: new ( source, value) ) ;
540
+
541
+ Ok ( ( ) )
542
+ }
505
543
}
506
544
507
545
impl < NI , EV , E > From < ( E , CsrLayout ) > for UndirectedALGraph < NI , ( ) , EV >
0 commit comments