@@ -10,6 +10,7 @@ use std::{
1010 u64,
1111} ;
1212
13+ use crate :: types:: iterator:: IterKey ;
1314use crate :: {
1415 boxed:: { ZBox , ZBoxable } ,
1516 convert:: { FromZval , IntoZval } ,
@@ -463,7 +464,7 @@ impl ZendHashTable {
463464 /// assert!(!ht.has_numerical_keys());
464465 /// ```
465466 pub fn has_numerical_keys ( & self ) -> bool {
466- !self . iter ( ) . any ( |( _ , k, _) | k . is_some ( ) )
467+ !self . iter ( ) . any ( |( k, _) | !k . is_numerical ( ) )
467468 }
468469
469470 /// Checks if the hashtable has numerical, sequential keys.
@@ -492,7 +493,7 @@ impl ZendHashTable {
492493 !self
493494 . iter ( )
494495 . enumerate ( )
495- . any ( |( i, ( k, strk , _) ) | i as u64 != k || strk . is_some ( ) )
496+ . any ( |( i, ( k, _) ) | IterKey :: Long ( i as u64 ) != k)
496497 }
497498
498499 /// Returns an iterator over the key(s) and value contained inside the
@@ -505,12 +506,12 @@ impl ZendHashTable {
505506 ///
506507 /// let mut ht = ZendHashTable::new();
507508 ///
508- /// for (idx, key, val) in ht.iter() {
509+ /// for (key, val) in ht.iter() {
509510 /// // ^ Index if inserted at an index.
510511 /// // ^ Optional string key, if inserted like a hashtable.
511512 /// // ^ Inserted value.
512513 ///
513- /// dbg!(idx, key, val);
514+ /// dbg!(key, val);
514515 /// }
515516 #[ inline]
516517 pub fn iter ( & self ) -> Iter {
@@ -546,10 +547,7 @@ unsafe impl ZBoxable for ZendHashTable {
546547impl Debug for ZendHashTable {
547548 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
548549 f. debug_map ( )
549- . entries (
550- self . iter ( )
551- . map ( |( k, k2, v) | ( k2. unwrap_or_else ( || k. to_string ( ) ) , v) ) ,
552- )
550+ . entries ( self . iter ( ) . map ( |( k, v) | ( k. to_string ( ) , v) ) )
553551 . finish ( )
554552 }
555553}
@@ -594,7 +592,7 @@ impl<'a> Iter<'a> {
594592}
595593
596594impl < ' a > Iterator for Iter < ' a > {
597- type Item = ( u64 , Option < String > , & ' a Zval ) ;
595+ type Item = ( IterKey , & ' a Zval ) ;
598596
599597 fn next ( & mut self ) -> Option < Self :: Item > {
600598 let key_type = unsafe {
@@ -622,9 +620,10 @@ impl<'a> Iterator for Iter<'a> {
622620 & mut self . pos as * mut HashPosition ,
623621 )
624622 } ;
625- let r: ( u64 , Option < String > , & Zval ) = match key. is_long ( ) {
626- true => ( key. long ( ) . unwrap_or ( 0 ) as u64 , None , value) ,
627- false => ( self . current_num , key. try_into ( ) . ok ( ) , value) ,
623+
624+ let r = match IterKey :: from_zval ( & key) {
625+ Some ( key) => ( key, value) ,
626+ None => ( IterKey :: Long ( self . current_num ) , value) ,
628627 } ;
629628
630629 unsafe {
@@ -679,9 +678,10 @@ impl<'a> DoubleEndedIterator for Iter<'a> {
679678 & mut self . pos as * mut HashPosition ,
680679 )
681680 } ;
682- let r: ( u64 , Option < String > , & Zval ) = match key. is_long ( ) {
683- true => ( key. long ( ) . unwrap_or ( 0 ) as u64 , None , value) ,
684- false => ( self . current_num , key. try_into ( ) . ok ( ) , value) ,
681+
682+ let r = match IterKey :: from_zval ( & key) {
683+ Some ( key) => ( key, value) ,
684+ None => ( IterKey :: Long ( self . current_num ) , value) ,
685685 } ;
686686
687687 unsafe {
@@ -715,7 +715,7 @@ impl<'a> Iterator for Values<'a> {
715715 type Item = & ' a Zval ;
716716
717717 fn next ( & mut self ) -> Option < Self :: Item > {
718- self . 0 . next ( ) . map ( |( _, _ , zval) | zval)
718+ self . 0 . next ( ) . map ( |( _, zval) | zval)
719719 }
720720
721721 fn count ( self ) -> usize
@@ -734,7 +734,7 @@ impl<'a> ExactSizeIterator for Values<'a> {
734734
735735impl < ' a > DoubleEndedIterator for Values < ' a > {
736736 fn next_back ( & mut self ) -> Option < Self :: Item > {
737- self . 0 . next_back ( ) . map ( |( _, _ , zval) | zval)
737+ self . 0 . next_back ( ) . map ( |( _, zval) | zval)
738738 }
739739}
740740
@@ -780,9 +780,9 @@ where
780780 fn try_from ( value : & ' a ZendHashTable ) -> Result < Self > {
781781 let mut hm = HashMap :: with_capacity ( value. len ( ) ) ;
782782
783- for ( idx , key, val) in value. iter ( ) {
783+ for ( key, val) in value. iter ( ) {
784784 hm. insert (
785- key. unwrap_or_else ( || idx . to_string ( ) ) ,
785+ key. to_string ( ) ,
786786 V :: from_zval ( val) . ok_or_else ( || Error :: ZvalConversion ( val. get_type ( ) ) ) ?,
787787 ) ;
788788 }
@@ -849,7 +849,7 @@ where
849849 fn try_from ( value : & ' a ZendHashTable ) -> Result < Self > {
850850 let mut vec = Vec :: with_capacity ( value. len ( ) ) ;
851851
852- for ( _, _ , val) in value. iter ( ) {
852+ for ( _, val) in value. iter ( ) {
853853 vec. push ( T :: from_zval ( val) . ok_or_else ( || Error :: ZvalConversion ( val. get_type ( ) ) ) ?) ;
854854 }
855855
0 commit comments