@@ -28,7 +28,7 @@ use crate::{
2828
2929mod taptree;
3030
31- pub use self :: taptree:: TapTreeIterItem ;
31+ pub use self :: taptree:: { TapTreeIter , TapTreeIterItem } ;
3232
3333/// A Taproot Tree representation.
3434// Hidden leaves are not yet supported in descriptor spec. Conceptually, it should
@@ -132,7 +132,7 @@ impl<Pk: MiniscriptKey> TapTree<Pk> {
132132
133133 /// Iterates over all miniscripts in DFS walk order compatible with the
134134 /// 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 ) }
136136
137137 // Helper function to translate keys
138138 fn translate_helper < T > ( & self , t : & mut T ) -> Result < TapTree < T :: TargetPk > , TranslateErr < T :: Error > >
@@ -201,7 +201,7 @@ impl<Pk: MiniscriptKey> Tr<Pk> {
201201 pub fn iter_scripts ( & self ) -> TapTreeIter < Pk > {
202202 match self . tree {
203203 Some ( ref t) => t. iter ( ) ,
204- None => TapTreeIter { stack : vec ! [ ] } ,
204+ None => TapTreeIter :: empty ( ) ,
205205 }
206206 }
207207
@@ -451,48 +451,6 @@ impl Tr<DefiniteDescriptorKey> {
451451 }
452452}
453453
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-
496454impl < Pk : FromStrKey > core:: str:: FromStr for Tr < Pk > {
497455 type Err = Error ;
498456
0 commit comments