@@ -43,11 +43,9 @@ impl<K: Eq + TotalOrd, V: Eq> Eq for TreeMap<K, V> {
43
43
let mut x = self . iter ( ) ;
44
44
let mut y = other. iter ( ) ;
45
45
for self . len( ) . times {
46
- unsafe { // unsafe as a purity workaround
47
- if map_next( & mut x) . unwrap( ) !=
48
- map_next( & mut y) . unwrap ( ) {
49
- return false
50
- }
46
+ if map_next( & mut x) . unwrap( ) !=
47
+ map_next( & mut y) . unwrap( ) {
48
+ return false
51
49
}
52
50
}
53
51
true
@@ -64,12 +62,10 @@ fn lt<K: Ord + TotalOrd, V>(a: &TreeMap<K, V>,
64
62
65
63
let ( a_len, b_len) = ( a. len ( ) , b. len ( ) ) ;
66
64
for uint:: min( a_len, b_len) . times {
67
- unsafe { // purity workaround
68
- let ( key_a, _) = map_next( & mut x) . unwrap( ) ;
69
- let ( key_b, _) = map_next( & mut y) . unwrap( ) ;
70
- if * key_a < * key_b { return true ; }
71
- if * key_a > * key_b { return false ; }
72
- }
65
+ let ( key_a, _) = map_next( & mut x) . unwrap( ) ;
66
+ let ( key_b, _) = map_next( & mut y) . unwrap( ) ;
67
+ if * key_a < * key_b { return true ; }
68
+ if * key_a > * key_b { return false ; }
73
69
} ;
74
70
75
71
a_len < b_len
@@ -311,17 +307,15 @@ impl<T: TotalOrd> Set<T> for TreeSet<T> {
311
307
fn is_disjoint ( & self , other : & TreeSet < T > ) -> bool {
312
308
let mut x = self . iter ( ) ;
313
309
let mut y = other. iter ( ) ;
314
- unsafe { // purity workaround
315
- let mut a = set_next ( & mut x) ;
316
- let mut b = set_next ( & mut y) ;
317
- while a. is_some ( ) && b. is_some ( ) {
318
- let a1 = a. unwrap ( ) ;
319
- let b1 = b. unwrap ( ) ;
320
- match a1. cmp ( b1) {
321
- Less => a = set_next ( & mut x) ,
322
- Greater => b = set_next ( & mut y) ,
323
- Equal => return false
324
- }
310
+ let mut a = set_next ( & mut x) ;
311
+ let mut b = set_next ( & mut y) ;
312
+ while a. is_some ( ) && b. is_some ( ) {
313
+ let a1 = a. unwrap ( ) ;
314
+ let b1 = b. unwrap ( ) ;
315
+ match a1. cmp ( b1) {
316
+ Less => a = set_next ( & mut x) ,
317
+ Greater => b = set_next ( & mut y) ,
318
+ Equal => return false
325
319
}
326
320
}
327
321
true
@@ -337,25 +331,23 @@ impl<T: TotalOrd> Set<T> for TreeSet<T> {
337
331
fn is_superset ( & self , other : & TreeSet < T > ) -> bool {
338
332
let mut x = self . iter ( ) ;
339
333
let mut y = other. iter ( ) ;
340
- unsafe { // purity workaround
341
- let mut a = set_next ( & mut x) ;
342
- let mut b = set_next ( & mut y) ;
343
- while b. is_some ( ) {
344
- if a. is_none ( ) {
345
- return false
346
- }
347
-
348
- let a1 = a. unwrap ( ) ;
349
- let b1 = b. unwrap ( ) ;
334
+ let mut a = set_next ( & mut x) ;
335
+ let mut b = set_next ( & mut y) ;
336
+ while b. is_some ( ) {
337
+ if a. is_none ( ) {
338
+ return false
339
+ }
350
340
351
- match a1. cmp ( b1) {
352
- Less => ( ) ,
353
- Greater => return false ,
354
- Equal => b = set_next ( & mut y) ,
355
- }
341
+ let a1 = a. unwrap ( ) ;
342
+ let b1 = b. unwrap ( ) ;
356
343
357
- a = set_next ( & mut x) ;
344
+ match a1. cmp ( b1) {
345
+ Less => ( ) ,
346
+ Greater => return false ,
347
+ Equal => b = set_next ( & mut y) ,
358
348
}
349
+
350
+ a = set_next ( & mut x) ;
359
351
}
360
352
true
361
353
}
@@ -365,29 +357,27 @@ impl<T: TotalOrd> Set<T> for TreeSet<T> {
365
357
let mut x = self . iter ( ) ;
366
358
let mut y = other. iter ( ) ;
367
359
368
- unsafe { // purity workaround
369
- let mut a = set_next ( & mut x) ;
370
- let mut b = set_next ( & mut y) ;
360
+ let mut a = set_next ( & mut x) ;
361
+ let mut b = set_next ( & mut y) ;
371
362
372
- while a. is_some ( ) {
373
- if b. is_none ( ) {
374
- return do a. while_some ( ) |a1| {
375
- if f ( a1) { set_next ( & mut x) } else { None }
376
- }
363
+ while a. is_some ( ) {
364
+ if b. is_none ( ) {
365
+ return do a. while_some ( ) |a1| {
366
+ if f ( a1) { set_next ( & mut x) } else { None }
377
367
}
368
+ }
378
369
379
- let a1 = a. unwrap ( ) ;
380
- let b1 = b. unwrap ( ) ;
370
+ let a1 = a. unwrap ( ) ;
371
+ let b1 = b. unwrap ( ) ;
381
372
382
- let cmp = a1. cmp ( b1) ;
373
+ let cmp = a1. cmp ( b1) ;
383
374
384
- if cmp == Less {
385
- if !f ( a1) { return }
386
- a = set_next ( & mut x) ;
387
- } else {
388
- if cmp == Equal { a = set_next ( & mut x) }
389
- b = set_next ( & mut y) ;
390
- }
375
+ if cmp == Less {
376
+ if !f ( a1) { return }
377
+ a = set_next ( & mut x) ;
378
+ } else {
379
+ if cmp == Equal { a = set_next ( & mut x) }
380
+ b = set_next ( & mut y) ;
391
381
}
392
382
}
393
383
}
@@ -398,37 +388,35 @@ impl<T: TotalOrd> Set<T> for TreeSet<T> {
398
388
let mut x = self . iter ( ) ;
399
389
let mut y = other. iter ( ) ;
400
390
401
- unsafe { // purity workaround
402
- let mut a = set_next ( & mut x) ;
403
- let mut b = set_next ( & mut y) ;
391
+ let mut a = set_next ( & mut x) ;
392
+ let mut b = set_next ( & mut y) ;
404
393
405
- while a. is_some ( ) {
406
- if b. is_none ( ) {
407
- return do a. while_some ( ) |a1| {
408
- if f ( a1) { set_next ( & mut x) } else { None }
409
- }
394
+ while a. is_some ( ) {
395
+ if b. is_none ( ) {
396
+ return do a. while_some ( ) |a1| {
397
+ if f ( a1) { set_next ( & mut x) } else { None }
410
398
}
399
+ }
411
400
412
- let a1 = a. unwrap ( ) ;
413
- let b1 = b. unwrap ( ) ;
401
+ let a1 = a. unwrap ( ) ;
402
+ let b1 = b. unwrap ( ) ;
414
403
415
- let cmp = a1. cmp ( b1) ;
404
+ let cmp = a1. cmp ( b1) ;
416
405
417
- if cmp == Less {
418
- if !f ( a1) { return }
419
- a = set_next ( & mut x) ;
406
+ if cmp == Less {
407
+ if !f ( a1) { return }
408
+ a = set_next ( & mut x) ;
409
+ } else {
410
+ if cmp == Greater {
411
+ if !f ( b1) { return }
420
412
} else {
421
- if cmp == Greater {
422
- if !f ( b1) { return }
423
- } else {
424
- a = set_next ( & mut x) ;
425
- }
426
- b = set_next ( & mut y) ;
413
+ a = set_next ( & mut x) ;
427
414
}
415
+ b = set_next ( & mut y) ;
428
416
}
429
- do b . while_some |b1| {
430
- if f ( b1 ) { set_next ( & mut y ) } else { None }
431
- }
417
+ }
418
+ do b . while_some |b1| {
419
+ if f ( b1 ) { set_next ( & mut y ) } else { None }
432
420
}
433
421
}
434
422
@@ -437,24 +425,22 @@ impl<T: TotalOrd> Set<T> for TreeSet<T> {
437
425
let mut x = self . iter ( ) ;
438
426
let mut y = other. iter ( ) ;
439
427
440
- unsafe { // purity workaround
441
- let mut a = set_next ( & mut x) ;
442
- let mut b = set_next ( & mut y) ;
428
+ let mut a = set_next ( & mut x) ;
429
+ let mut b = set_next ( & mut y) ;
443
430
444
- while a. is_some ( ) && b. is_some ( ) {
445
- let a1 = a. unwrap ( ) ;
446
- let b1 = b. unwrap ( ) ;
431
+ while a. is_some ( ) && b. is_some ( ) {
432
+ let a1 = a. unwrap ( ) ;
433
+ let b1 = b. unwrap ( ) ;
447
434
448
- let cmp = a1. cmp ( b1) ;
435
+ let cmp = a1. cmp ( b1) ;
449
436
450
- if cmp == Less {
451
- a = set_next ( & mut x) ;
452
- } else {
453
- if cmp == Equal {
454
- if !f ( a1) { return }
455
- }
456
- b = set_next ( & mut y) ;
437
+ if cmp == Less {
438
+ a = set_next ( & mut x) ;
439
+ } else {
440
+ if cmp == Equal {
441
+ if !f ( a1) { return }
457
442
}
443
+ b = set_next ( & mut y) ;
458
444
}
459
445
}
460
446
}
@@ -464,36 +450,34 @@ impl<T: TotalOrd> Set<T> for TreeSet<T> {
464
450
let mut x = self . iter ( ) ;
465
451
let mut y = other. iter ( ) ;
466
452
467
- unsafe { // purity workaround
468
- let mut a = set_next ( & mut x) ;
469
- let mut b = set_next ( & mut y) ;
453
+ let mut a = set_next ( & mut x) ;
454
+ let mut b = set_next ( & mut y) ;
470
455
471
- while a. is_some ( ) {
472
- if b. is_none ( ) {
473
- return do a. while_some ( ) |a1| {
474
- if f ( a1) { set_next ( & mut x) } else { None }
475
- }
456
+ while a. is_some ( ) {
457
+ if b. is_none ( ) {
458
+ return do a. while_some ( ) |a1| {
459
+ if f ( a1) { set_next ( & mut x) } else { None }
476
460
}
461
+ }
477
462
478
- let a1 = a. unwrap ( ) ;
479
- let b1 = b. unwrap ( ) ;
463
+ let a1 = a. unwrap ( ) ;
464
+ let b1 = b. unwrap ( ) ;
480
465
481
- let cmp = a1. cmp ( b1) ;
466
+ let cmp = a1. cmp ( b1) ;
482
467
483
- if cmp == Greater {
484
- if !f ( b1) { return }
468
+ if cmp == Greater {
469
+ if !f ( b1) { return }
470
+ b = set_next ( & mut y) ;
471
+ } else {
472
+ if !f ( a1) { return }
473
+ if cmp == Equal {
485
474
b = set_next ( & mut y) ;
486
- } else {
487
- if !f ( a1) { return }
488
- if cmp == Equal {
489
- b = set_next ( & mut y) ;
490
- }
491
- a = set_next ( & mut x) ;
492
475
}
476
+ a = set_next ( & mut x) ;
493
477
}
494
- do b . while_some |b1| {
495
- if f ( b1 ) { set_next ( & mut y ) } else { None }
496
- }
478
+ }
479
+ do b . while_some |b1| {
480
+ if f ( b1 ) { set_next ( & mut y ) } else { None }
497
481
}
498
482
}
499
483
}
0 commit comments