
    	h
                           G d  d          Z dS )c                   J    e Zd ZdZ G d d          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    ^/var/www/html/web-builder-api.evdpl.com/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	          |          |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__   s~    	(:Dyy~~ + +~c*}$smm#=  	( 	( 	(3--R'	(s   AA 
A*A%%A*c                 L   g }	 d| j         }}|                    d          D ])}||j        |         }}|                    |||f           *d|_        t          |          D ]\  }}}|j        s|j         dS |j        |=  dS # 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^^ / / $dnQ&7VQ-.... DM $,C== ( (4> T]%>UU$Q''( (  	( 	( 	(3--R'	(s   AB 
B#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   r8   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(   r7   r8   s     @@@r   
iter_matchzMQTTMatcher.iter_match9   sh     kk#%%c***	" 	" 	" 	" 	" 	" 	" 	"  s4: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=      sA   M M M M M M M M M Mr   