@@ -583,48 +583,53 @@ impl Layout {
583583 // deduced. For immutable entities the entries in upper_vec are missing hence they are considered
584584 // having a lower bound at particular block and upper bound at infinity.
585585 while lower_now. is_some ( ) || upper_now. is_some ( ) {
586- let ( ewt, block) = if lower_now. is_some ( ) {
587- if upper_now. is_some ( ) {
588- if lower > upper {
589- // we have upper bound at this block, but no lower bounds at the same block so it's deletion
590- let ( ewt, block) = transform ( upper, EntitySubgraphOperation :: Delete ) ?;
591- // advance upper_vec pointer
592- upper_now = upper_iter. next ( ) ;
593- upper = upper_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
594- ( ewt, block)
595- } else if lower < upper {
596- // we have lower bound at this block but no upper bound at the same block so its creation
597- let ( ewt, block) = transform ( lower, EntitySubgraphOperation :: Create ) ?;
598- // advance lower_vec pointer
599- lower_now = lower_iter. next ( ) ;
600- lower = lower_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
601- ( ewt, block)
602- } else {
603- assert ! ( upper == lower) ;
604- let ( ewt, block) = transform ( lower, EntitySubgraphOperation :: Modify ) ?;
605- // advance both lower_vec and upper_vec pointers
606- lower_now = lower_iter. next ( ) ;
607- lower = lower_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
608- upper_now = upper_iter. next ( ) ;
609- upper = upper_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
610- ( ewt, block)
586+ let ( ewt, block) = match ( lower_now. is_some ( ) , upper_now. is_some ( ) ) {
587+ ( true , true ) => {
588+ match lower. cmp ( & upper) {
589+ std:: cmp:: Ordering :: Greater => {
590+ // we have upper bound at this block, but no lower bounds at the same block so it's deletion
591+ let ( ewt, block) = transform ( upper, EntitySubgraphOperation :: Delete ) ?;
592+ // advance upper_vec pointer
593+ upper_now = upper_iter. next ( ) ;
594+ upper = upper_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
595+ ( ewt, block)
596+ }
597+ std:: cmp:: Ordering :: Less => {
598+ // we have lower bound at this block but no upper bound at the same block so its creation
599+ let ( ewt, block) = transform ( lower, EntitySubgraphOperation :: Create ) ?;
600+ // advance lower_vec pointer
601+ lower_now = lower_iter. next ( ) ;
602+ lower = lower_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
603+ ( ewt, block)
604+ }
605+ std:: cmp:: Ordering :: Equal => {
606+ let ( ewt, block) = transform ( lower, EntitySubgraphOperation :: Modify ) ?;
607+ // advance both lower_vec and upper_vec pointers
608+ lower_now = lower_iter. next ( ) ;
609+ lower = lower_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
610+ upper_now = upper_iter. next ( ) ;
611+ upper = upper_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
612+ ( ewt, block)
613+ }
611614 }
612- } else {
615+ }
616+ ( true , false ) => {
613617 // we have lower bound at this block but no upper bound at the same block so its creation
614618 let ( ewt, block) = transform ( lower, EntitySubgraphOperation :: Create ) ?;
615619 // advance lower_vec pointer
616620 lower_now = lower_iter. next ( ) ;
617621 lower = lower_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
618622 ( ewt, block)
619623 }
620- } else {
621- // we have upper bound at this block, but no lower bounds at all so it's deletion
622- assert ! ( upper_now. is_some( ) ) ;
623- let ( ewt, block) = transform ( upper, EntitySubgraphOperation :: Delete ) ?;
624- // advance upper_vec pointer
625- upper_now = upper_iter. next ( ) ;
626- upper = upper_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
627- ( ewt, block)
624+ ( false , have_upper) => {
625+ // we have upper bound at this block, but no lower bounds at all so it's deletion
626+ assert ! ( have_upper) ;
627+ let ( ewt, block) = transform ( upper, EntitySubgraphOperation :: Delete ) ?;
628+ // advance upper_vec pointer
629+ upper_now = upper_iter. next ( ) ;
630+ upper = upper_now. unwrap_or ( & EntityDataExt :: default ( ) ) . clone ( ) ;
631+ ( ewt, block)
632+ }
628633 } ;
629634
630635 match entities. get_mut ( & block) {
0 commit comments