o
    _ØfI  ã                   @   s\   	 d dl mZ edd… dkrd dlmZ nd dlmZ G dd„ deƒZG dd	„ d	eƒZdS )
é    )Úversion_infoNé   )é   é   )Úgcdc                   @   sJ   e Zd Zddd„Zdd„ Zdd„ Zed	d
„ ƒZdd„ Zdd„ Z	dd„ Z
dS )Ú	Alignmenté   r   c                 C   s   || _ || | _d S ©N©ÚalignÚoffset)Úselfr   r   © r   úc/home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/xcbgen/align.pyÚ__init__   s   zAlignment.__init__c                 C   s   | j |j ko| j|jkS r	   r
   ©r   Úotherr   r   r   Ú__eq__   s   zAlignment.__eq__c                 C   s   d| j | jf S )Nz(align=%d, offset=%d)r
   ©r   r   r   r   Ú__str__   s   zAlignment.__str__c                 C   sL   | d dkrt ddƒS | d dkrt ddƒS | d dkr!t ddƒS t ddƒS )Né   r   r   r   é   )r   )Úsizer   r   r   Úfor_primitive_type   s   



zAlignment.for_primitive_typec                 C   s   | j | | j }t| j|ƒS r	   )r   r   r   )r   r   Ú
new_offsetr   r   r   Úalign_after_fixed_size(   s   z Alignment.align_after_fixed_sizec                 C   sd   	 | j dkr| jdkrdS |d u rdS |j | j k rdS |j | j  dkr%dS |j| j  | jkr0dS dS )Nr   r   TFr
   )r   Zexternal_alignr   r   r   Úis_guaranteed_at-   s   zAlignment.is_guaranteed_atc                 C   sh   t | j|jƒ}| j| }|j| }||kr|}nt|| ƒ}t ||ƒ}| j| }|j| }|}t||ƒS r	   )r   r   r   Úabsr   )r   r   Z	new_alignZnew_offset_candidate1Znew_offset_candidate2r   Zoffset_diffr   r   r   Úcombine_withN   s   





zAlignment.combine_withN)r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   Ústaticmethodr   r   r   r   r   r   r   r   r      s    

!r   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚAlignmentLogc                 C   s   g | _ g | _d| _d S )Nr   )Úok_listÚ	fail_listÚ	verbosityr   r   r   r   r   c   s   
zAlignmentLog.__init__c           
   
   C   sF  d}| j D ]O\}}}}}t|ƒ}d| }|  |¡rT|d u s!|dkr3|d|t|ƒ|t|ƒt|ƒf 7 }n|d|t|ƒt|ƒ|t|ƒt|ƒf 7 }| jdkrT||  ||¡7 }q| jD ]H\}}}}}	t|ƒ}d| }|d u so|dkr€|d|t|ƒ|t|ƒ||	f 7 }n|d|t|ƒ|t|ƒt|ƒ||	f 7 }| jdkr ||  ||¡7 }qX|S )NÚ z  z'    %sok: %s:
	%sbefore: %s, after: %s
z5    %sok: field "%s" in %s:
	%sbefore: %s, after: %s
r   z>    %sfail: align %s is incompatible with
	%s%s
	%sReason: %s
zL    %sfail: align %s is incompatible with
	%sfield "%s" in %s
	%sReason: %s
)r$   ÚlenÚok_callstack_is_relevantÚstrr&   Úcallstack_to_strr%   )
r   ÚresultÚalign_beforeÚ
field_nameÚtype_objÚ	callstackÚalign_afterZ	stacksizeÚindentÚreasonr   r   r   r   h   s>   
ÿÿÿ
€ÿÿ
€zAlignmentLog.__str__c                 C   s6   d| }|D ]}|d|t |ƒf 7 }q|d| 7 }|S )Nz	%scallstack: [
z	  %s%s
z	%s]
)r*   )r   r2   r0   r,   Z
stack_elemr   r   r   r+   Œ   s
   zAlignmentLog.callstack_to_strc           	      C   sz   | j dkrdS t|ƒdkrdS | jD ](\}}}}}t|ƒt|ƒkr:t||d t|ƒ… ƒ}tdd„ |D ƒƒ}|r: dS qdS )Nr   Tr   c                 S   s   g | ]\}}||k‘qS r   r   )Ú.0ÚiÚjr   r   r   Ú
<listcomp>¡   s    z9AlignmentLog.ok_callstack_is_relevant.<locals>.<listcomp>F)r&   r(   r%   ÚzipÚall)	r   Zok_callstackr-   r.   r/   Zfail_callstackr3   ZzippedZ	is_subsetr   r   r   r)   ”   s   
€z%AlignmentLog.ok_callstack_is_relevantc                 C   ó   | j  |||||f¡ d S r	   )r$   Úappend)r   r-   r.   r/   r0   r1   r   r   r   Úok¨   ó   zAlignmentLog.okc                 C   r:   r	   )r%   r;   )r   r-   r.   r/   r0   r3   r   r   r   Úfail«   r=   zAlignmentLog.failc                 C   s    | j  |j ¡ | j |j¡ d S r	   )r$   Úextendr%   r   r   r   r   r;   ®   s   zAlignmentLog.appendc                 C   s
   t | jƒS r	   )r(   r$   r   r   r   r   Úok_count²   s   
zAlignmentLog.ok_countN)r   r    r!   r   r   r+   r)   r<   r>   r;   r@   r   r   r   r   r#   a   s    $r#   )Úsysr   Zmathr   Z	fractionsÚobjectr   r#   r   r   r   r   Ú<module>   s    U