@@ -28,7 +28,7 @@ use crate::{
28
28
29
29
mod taptree;
30
30
31
- pub use self :: taptree:: TapTreeIterItem ;
31
+ pub use self :: taptree:: { TapTreeIter , TapTreeIterItem } ;
32
32
33
33
/// A Taproot Tree representation.
34
34
// Hidden leaves are not yet supported in descriptor spec. Conceptually, it should
@@ -132,7 +132,7 @@ impl<Pk: MiniscriptKey> TapTree<Pk> {
132
132
133
133
/// Iterates over all miniscripts in DFS walk order compatible with the
134
134
/// PSBT requirements (BIP 371).
135
- pub fn iter ( & self ) -> TapTreeIter < Pk > { TapTreeIter { stack : vec ! [ ( 0 , self ) ] } }
135
+ pub fn iter ( & self ) -> TapTreeIter < Pk > { TapTreeIter :: from_tree ( self ) }
136
136
137
137
// Helper function to translate keys
138
138
fn translate_helper < T > ( & self , t : & mut T ) -> Result < TapTree < T :: TargetPk > , TranslateErr < T :: Error > >
@@ -201,7 +201,7 @@ impl<Pk: MiniscriptKey> Tr<Pk> {
201
201
pub fn iter_scripts ( & self ) -> TapTreeIter < Pk > {
202
202
match self . tree {
203
203
Some ( ref t) => t. iter ( ) ,
204
- None => TapTreeIter { stack : vec ! [ ] } ,
204
+ None => TapTreeIter :: empty ( ) ,
205
205
}
206
206
}
207
207
@@ -451,48 +451,6 @@ impl Tr<DefiniteDescriptorKey> {
451
451
}
452
452
}
453
453
454
- /// Iterator for Taproot structures
455
- /// Yields a pair of (depth, miniscript) in a depth first walk
456
- /// For example, this tree:
457
- /// - N0 -
458
- /// / \\
459
- /// N1 N2
460
- /// / \ / \\
461
- /// A B C N3
462
- /// / \\
463
- /// D E
464
- /// would yield (2, A), (2, B), (2,C), (3, D), (3, E).
465
- ///
466
- #[ derive( Debug , Clone ) ]
467
- pub struct TapTreeIter < ' a , Pk : MiniscriptKey > {
468
- stack : Vec < ( u8 , & ' a TapTree < Pk > ) > ,
469
- }
470
-
471
- impl < Pk : MiniscriptKey > TapTreeIter < ' _ , Pk > {
472
- /// Helper function to return an empty iterator from Descriptor::tap_tree_iter.
473
- pub ( super ) fn empty ( ) -> Self { Self { stack : vec ! [ ] } }
474
- }
475
-
476
- impl < ' a , Pk > Iterator for TapTreeIter < ' a , Pk >
477
- where
478
- Pk : MiniscriptKey + ' a ,
479
- {
480
- type Item = TapTreeIterItem < ' a , Pk > ;
481
-
482
- fn next ( & mut self ) -> Option < Self :: Item > {
483
- while let Some ( ( depth, last) ) = self . stack . pop ( ) {
484
- match * last {
485
- TapTree :: Tree { ref left, ref right, height : _ } => {
486
- self . stack . push ( ( depth + 1 , right) ) ;
487
- self . stack . push ( ( depth + 1 , left) ) ;
488
- }
489
- TapTree :: Leaf ( ref ms) => return Some ( TapTreeIterItem { node : ms, depth } ) ,
490
- }
491
- }
492
- None
493
- }
494
- }
495
-
496
454
impl < Pk : FromStrKey > core:: str:: FromStr for Tr < Pk > {
497
455
type Err = Error ;
498
456
0 commit comments