o
    º¸Z4  ã                   @   sH   d dl mZ d dlmZ d dlmZ G dd„ deƒZG dd„ deƒZdS )	é    )ÚBlockingIOError)Úsleep)Úmaxsizec                   @   sP   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zddd„Zdd„ Zdd„ Z	dd„ Z
dS )ÚRestreamedBytesIOc                 C   s4   || _ || _|| _|| _|| _d| _d| _d| _d S )Nó    r   )Ú	substreamÚencoderÚencoderunitÚdecoderÚdecoderunitÚrbufferÚwbufferÚsincereadwritten)Úselfr   r
   r   r   r	   © r   úI/var/www/html/env/lib/python3.10/site-packages/construct/lib/bitstream.pyÚ__init__   s   
zRestreamedBytesIO.__init__Nc                 C   s   |d u r4	 | j  | j¡}|d u st|ƒdkrn|  j|  |¡7  _q| jd}| _|  jt|ƒ7  _|S |dk r<tdƒ‚t| jƒ|k rg| j  | j¡}|d u sTt|ƒdkrVdS |  j|  |¡7  _t| jƒ|k sC| jd |… | j|d … }| _|  j|7  _|S )NTr   r   zcount cannot be negative)r   Úreadr   Úlenr   r
   r   Ú
ValueError)r   ÚcountÚdatar   r   r   r      s*   üü zRestreamedBytesIO.readc                 C   s~   |  j |7  _ t|ƒ}t| j ƒ| jkr6| j d | j… | j | jd … }| _ | j |  |¡¡ t| j ƒ| jks|  j|7  _|S ©N)r   r   r	   r   Úwriter   r   )r   r   Údatalenr   r   r   r   )   s   $þzRestreamedBytesIO.writec                 C   sH   t | jƒrtdt | jƒ| jf ƒ‚t | jƒr"tdt | jƒ| jf ƒ‚d S )Nz=closing stream but %d unread bytes remain, %d is decoded unitz@closing stream but %d unwritten bytes remain, %d is encoded unit)r   r   r   r   r   r	   ©r   r   r   r   Úclose2   s
   

ÿzRestreamedBytesIO.closer   c                 C   s   t ‚r   )ÚIOError©r   ÚatÚwhencer   r   r   Úseek8   ó   zRestreamedBytesIO.seekc                 C   ó   dS )NFr   r   r   r   r   Úseekable;   r"   zRestreamedBytesIO.seekablec                 C   ó   | j S )zDWARNING: tell is correct only on read-only and write-only instances.)r   r   r   r   r   Útell>   s   zRestreamedBytesIO.tellc                 C   r#   ©NTr   r   r   r   r   ÚtellableB   r"   zRestreamedBytesIO.tellabler   ©r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r!   r$   r&   r(   r   r   r   r   r      s    

	
r   c                   @   sZ   e Zd Zddd„Zddd„Zdd„ Zdd	d
„Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚRebufferedBytesIONc                 C   s"   || _ d| _d| _d| _|| _d S )Nr   r   )r   ÚoffsetÚrwbufferÚmovedÚ
tailcutoff)r   r   r1   r   r   r   r   H   s
   
zRebufferedBytesIO.__init__c                 C   s(  |d u rt dƒ‚| j}|| }|| jk rtdƒ‚| jt| jƒ |k rNz| j d¡}W n ty5   d }Y nw |s=t	dƒ q|  j|7  _| jt| jƒ |k s"| j|| j || j … }|  j|7  _| j
d urˆ| j| j| j
 k rˆ| j| j
 | j }|  j|7  _| j|d … | _t|ƒ|k r’tdƒ‚|S )Nz6count must be integer, reading until EOF not supportedz'could not read because tail was cut offé   r   z1could not read enough bytes, something went wrong)r   r.   r0   r   r   r/   r   r   r   r   r1   )r   r   ÚstartsatÚendsatÚnewdatar   Úremovedr   r   r   r   O   s4   
ÿø	zRebufferedBytesIO.readc                 C   sè   | j }|t|ƒ }| jt| jƒ |k r0| j d¡}|  j|7  _|s&tdƒ | jt| jƒ |k s| jd || j … | | j|| j d …  | _|| _ | jd urp| j| j | j k rp| j | j | j }|  j|7  _| j|d … | _t|ƒS )Nr2   r   )r.   r   r0   r/   r   r   r   r1   )r   r   r3   r4   r5   r6   r   r   r   r   i   s   ü.zRebufferedBytesIO.writer   c                 C   s8   |dkr
|| _ | j S |dkr|  j |7  _ | j S tdƒ‚)Nr   é   z7this class seeks only with whence: 0 and 1 (excluded 2))r.   r   r   r   r   r   r!   y   s   zRebufferedBytesIO.seekc                 C   r#   r'   r   r   r   r   r   r$   ƒ   r"   zRebufferedBytesIO.seekablec                 C   r%   r   )r.   r   r   r   r   r&   †   ó   zRebufferedBytesIO.tellc                 C   r#   r'   r   r   r   r   r   r(   ‰   r"   zRebufferedBytesIO.tellablec                 C   r%   r   )r0   r   r   r   r   Ú
cachedfromŒ   r8   zRebufferedBytesIO.cachedfromc                 C   s   | j t| jƒ S r   )r0   r   r/   r   r   r   r   Úcachedto�   s   zRebufferedBytesIO.cachedtor   r)   )r*   r+   r,   r   r   r   r!   r$   r&   r(   r9   r:   r   r   r   r   r-   F   s    



r-   N)	Úior   Útimer   Úsysr   Úobjectr   r-   r   r   r   r   Ú<module>   s
    @