
    >qa
                     "     G d  de           ZdS )c                   L    e Zd ZdZ G d de          Zd Zd Zd Zd Z	d Z
d	S )
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dS )MQTTMatcher.Node	_children_contentc                 "    i | _         d | _        d S Nr   selfs    E/opt/windhager/venv/lib/python3.11/site-packages/paho/mqtt/matcher.py__init__zMQTTMatcher.Node.__init__   s    DN DMMM    N)__name__
__module____qualname__	__slots__r    r   r   Noder   	   s(        +		! 	! 	! 	! 	!r   r   c                 8    |                                  | _        d S r
   )r   _rootr   s    r   r   zMQTTMatcher.__init__   s    YY[[


r   c                     | j         }|                    d          D ]/}|j                            ||                                           }0||_        dS )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__   sP     z99S>> 	? 	?C>,,S$))++>>DDr   c                     	 | j         }|                    d          D ]}|j        |         }|j        t	          |          |j        S # t          $ r t	          |          w xY w)z9Retrieve the value associated with some topic filter :keyr   )r   r   r   r   KeyError)r   r   r   r   s       r   __getitem__zMQTTMatcher.__getitem__   sx    	 :Dyy~~ + +~c*}$smm#=  	  	  	 3--	 s   AA A%c                 B   g }	 d| j         }}|                    d          D ])}||j        |         }}|                    |||f           *d|_        t          |          D ]\  }}}|j        s|j         dS |j        |=  dS # t          $ r t          |          w xY w)z7Delete the value associated with some topic filter :keyNr   )r   r   r   appendr   reversedr"   )r   r   lstparentr   ks         r   __delitem__zMQTTMatcher.__delitem__'   s    	(DFYYs^^ / / $dnQ&7VQ-.... DM $,C== ( (4> T]%>UU$Q''( (  	  	  	 3--	 s   AB Bc                     |                     d          |                    d           dfd	 | j                  S )zVReturn an iterator on all values associated with filters
        that match the :topicr   $    c              3   z  K   |t                    k    r| j        	| j        V  nd|         }|| j        v r! | j        |         |dz             D ]}|V  d| j        v r)s|dk    r! | j        d         |dz             D ]}|V  d| j        v r"s|dk    r| j        d         j        }||V  d S d S d S d S )N   +r-   #)lenr   r   )r   ipartcontentr'   normalrecs       r   r7   z#MQTTMatcher.iter_match.<locals>.rec>   s     CHH}}=,-'''1v4>))#&3t~d';QU#C#C & &%$.((f(A#&3t~c':AE#B#B & &%dn$$&$AEE.-6&!MMMMM %$&& 5:Er   )r-   )r   
startswithr   )r   topicr'   r6   r7   s     @@@r   
iter_matchzMQTTMatcher.iter_match9   sh     kk#%%c***	" 	" 	" 	" 	" 	" 	" 	"  s4:r   N)r   r   r   __doc__objectr   r   r    r#   r*   r:   r   r   r   r   r      s         ! ! ! ! !v ! ! !! ! !  
  
  
 ( ( ($    r   r   N)r<   r   r   r   r   <module>r=      sC   M M M M M& M M M M Mr   