U
    Ê¼µb  ã                   @   sb   d Z ddlZzddlmZ W n  ek
r<   ddlmZ Y nX e dddg¡ZG dd„ deƒZdS )	zR
hyperframe/flags
~~~~~~~~~~~~~~~~

Defines basic Flag and Flags data structures.
é    N)Ú
MutableSetÚFlagÚnameÚbitc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚFlagszÓ
    A simple MutableSet implementation that will only accept known flags as
    elements.

    Will behave like a regular set(), except that a ValueError will be thrown
    when .add()ing unexpected flags.
    c                 C   s    t dd„ |D ƒƒ| _t ƒ | _d S )Nc                 s   s   | ]}|j V  qd S ©N)r   )Ú.0Úflag© r
   ú4/tmp/pip-unpacked-wheel-v_cm_a_3/hyperframe/flags.pyÚ	<genexpr>   s     z!Flags.__init__.<locals>.<genexpr>)ÚsetÚ_valid_flagsÚ_flags)ÚselfZdefined_flagsr
   r
   r   Ú__init__   s    zFlags.__init__c                 C   s   | j  |¡S r   )r   Ú__contains__)r   Úxr
   r
   r   r      s    zFlags.__contains__c                 C   s
   | j  ¡ S r   )r   Ú__iter__©r   r
   r
   r   r   "   s    zFlags.__iter__c                 C   s
   | j  ¡ S r   )r   Ú__len__r   r
   r
   r   r   %   s    zFlags.__len__c                 C   s   | j  |¡S r   )r   Údiscard©r   Úvaluer
   r
   r   r   (   s    zFlags.discardc                 C   s(   || j krtd || j ¡ƒ‚| j |¡S )Nz(Unexpected flag: {}. Valid flags are: {})r   Ú
ValueErrorÚformatr   Úaddr   r
   r
   r   r   +   s    
 ÿÿz	Flags.addN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r
   r
   r
   r   r      s   r   )r    ÚcollectionsÚcollections.abcr   ÚImportErrorÚ
namedtupler   r   r
   r
   r
   r   Ú<module>   s   