o
    %e                     @   sL   d dl mZmZmZ d dlmZ d dlmZ ddlm	Z
 G dd de
Z	dS )	    )absolute_importdivisionunicode_literals)	text_type)bisect_left   )Triec                   @   sF   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdd Z	dS )r   c                 C   sJ   t dd | D std|| _t| | _d| _dt|f| _d S )Nc                 s   s    | ]}t |tV  qd S N)
isinstancer   ).0x r   D/var/www/html/venv/lib/python3.10/site-packages/html5lib/_trie/py.py	<genexpr>   s    z Trie.__init__.<locals>.<genexpr>zAll keys must be strings r   )	allkeys	TypeError_datasorted_keys	_cachestrlen_cachepoints)selfdatar   r   r   __init__
   s   zTrie.__init__c                 C   s
   || j v S r	   r   r   keyr   r   r   __contains__      
zTrie.__contains__c                 C   
   t | jS r	   )r   r   r   r   r   r   __len__   r!   zTrie.__len__c                 C   r"   r	   )iterr   r#   r   r   r   __iter__   r!   zTrie.__iter__c                 C   s
   | j | S r	   r   r   r   r   r   __getitem__   r!   zTrie.__getitem__Nc                 C   s   |d u s|dks| j st| j S || jr&| j\}}t| j ||| }}nt| j | }}t }|t| j kr:|S | j | |rV|| j |  |d7 }| j | |sB|| _||f| _|S )Nr   r   )r   set
startswithr   r   r   r   add)r   prefixlohistartir   r   r   r   r      s    


z	Trie.keysc                 C   sd   || j v rdS || jr| j\}}t| j|||}nt| j|}|t| jkr*dS | j| |S )NTF)r   r)   r   r   r   r   r   )r   r+   r,   r-   r/   r   r   r   has_keys_with_prefix6   s   

zTrie.has_keys_with_prefixr	   )
__name__
__module____qualname__r   r    r$   r&   r'   r   r0   r   r   r   r   r   	   s    	
r   N)
__future__r   r   r   sixr   bisectr   _baser   ABCTrier   r   r   r   <module>   s
    