
    (\i
                          G d  d      Z y)c                   B    e Zd ZdZ G d d      Zd Zd Zd Zd Zd Z	y	)
MQTTMatchera  Intended to manage topic filters including wildcards.

    Internally, MQTTMatcher use a prefix tree (trie) to store
    values associated with filters, and has an iter_match()
    method to iterate efficiently over all filters that match
    some topic name.c                       e Zd ZdZd Zy)MQTTMatcher.Node	_children_contentc                      i | _         d | _        y Nr   selfs    a/home/devuser/fomin/mqttuser/mqtt_project/myenv/lib/python3.12/site-packages/paho/mqtt/matcher.py__init__zMQTTMatcher.Node.__init__   s    DN DM    N)__name__
__module____qualname__	__slots__r    r   r   Noder   	   s    +		!r   r   c                 .    | j                         | _        y r
   )r   _rootr   s    r   r   zMQTTMatcher.__init__   s    YY[
r   c                     | j                   }|j                  d      D ],  }|j                  j                  || j	                               }. ||_        y)zMAdd a topic filter :key to the prefix tree
        and associate it to :value/N)r   splitr   
setdefaultr   r   )r   keyvaluenodesyms        r   __setitem__zMQTTMatcher.__setitem__   sG     zz99S> 	?C>>,,S$))+>D	?r   c                     	 | j                   }|j                  d      D ]  }|j                  |   } |j                  t	        |      |j                  S # t        $ r}t	        |      |d}~ww xY w)z9Retrieve the value associated with some topic filter :keyr   N)r   r   r   r   KeyError)r   r   r   r   kes        r   __getitem__zMQTTMatcher.__getitem__   so    	(::Dyy~ +~~c*+}}$sm#==  	(3-R'	(s   AA 	A0A++A0c                 Z   g }	 d| j                   }}|j                  d      D ]'  }||j                  |   }}|j                  |||f       ) d|_        t        |      D ]-  \  }}}|j                  s|j                   y|j                  |= / y# t        $ r}t        |      |d}~ww xY w)z7Delete the value associated with some topic filter :keyNr   )r   r   r   appendr   reversedr"   )r   r   lstparentr   kr#   s          r   __delitem__zMQTTMatcher.__delitem__'   s    	(DFYYs^ / $dnnQ&7VQ-./ !DM $,C= (4>>T]]%>$$Q'(  	(3-R'	(s   AB 	B*B%%B*c                     |j                  d      |j                  d       dfd	 | j                        S )zVReturn an iterator on all values associated with filters
        that match the :topicr   $c              3     K   |t              k(  r| j                  {| j                   nl|   }|| j                  v r" | j                  |   |dz         D ]  }|  d| j                  v r)s|dkD  r" | j                  d   |dz         D ]  }|  d| j                  v r)s|dkD  r!| j                  d   j                  }|| y y y y w)N   +    #)lenr   r   )r   ipartcontentr(   normalrecs       r   r8   z#MQTTMatcher.iter_match.<locals>.rec>   s     CH}==,--'1v4>>)#&t~~d';QU#C &%&$..(fA#&t~~c':AE#B &%&dnn$&AE..-66&!M ' 5:$s   CC)r1   )r   
startswithr   )r   topicr(   r7   r8   s     @@@r   
iter_matchzMQTTMatcher.iter_match9   s;     kk#%%c**	"  4::r   N)
r   r   r   __doc__r   r   r    r$   r+   r;   r   r   r   r   r      s*    ! !!
(($r   r   N)r   r   r   r   <module>r=      s   M Mr   