<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
MZ0T                 @   s  d dl Z d dlZddlmZ ddlmZmZmZ dZdZ	dZ
dd ZG d	d
 d
eZG dd deZG dd deZe ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZeeZdd  ZeeZG d!d" d"eZG d#d$ d$eZeed%dZG d&d' d'eZG d(d) d)eZ G d*d+ d+e Z!G d,d- d-e Z"G d.d/ d/eZ#d<d0d1Z$d=d2d3Z%e Z&ej' Z(d4d5 Z)d6d7 Z*d8d9 Z+d:d; Z,dS )>    N   )allocate_lock)	CDefErrorVerificationErrorVerificationMissing      c             C   s@   | t @ rd|j  }| t@ r(d|j  }| t@ r<d|j  }|S )Nz const z
 volatile z __restrict )Q_CONSTlstrip
Q_VOLATILE
Q_RESTRICT)qualsreplace_with r   /usr/lib64/python3.6/model.pyqualify   s    r   c               @   sP   e Zd ZdZdZdddZdd Zd	d
 Zdd ZdddZ	dd Z
dd ZdS )BaseTypeByIdentityF a C filer   c             C   sx   | j }|j }|rB|jdr.d|kr.d| }n|d dkrBd| }t||}|jd|}d|krttd	| j |f |S )
N*z&[z(%s)r   z[( &$z-cannot generate '%s' in %s: unknown type name)c_name_with_markerstrip
startswithr   replacer   _get_c_name)selfr   contextr   resultr   r   r   
get_c_name   s    

zBaseTypeByIdentity.get_c_namec             C   s   | j jddS )Nr   r   )r   r   )r   r   r   r   r   /   s    zBaseTypeByIdentity._get_c_namec             C   s   d| j  kS )Nr   )r   )r   r   r   r   
has_c_name2   s    zBaseTypeByIdentity.has_c_namec             C   s   dS )NFr   )r   r   r   r   is_integer_type5   s    z"BaseTypeByIdentity.is_integer_typec             C   sB   y|j |  }W n. tk
r<   | j||}|j j| |}Y nX |S )N)_cached_btypesKeyErrorbuild_backend_type
setdefault)r   ffi
finishlist	can_delayBTypeZBType2r   r   r   get_cached_btype8   s    z#BaseTypeByIdentity.get_cached_btypec             C   s   d| j  f S )Nz<%s>)r   )r   r   r   r   __repr__A   s    zBaseTypeByIdentity.__repr__c                s    fdd j D S )Nc                s   g | ]}|t  |fqS r   )getattr).0name)r   r   r   
<listcomp>E   s    z1BaseTypeByIdentity._get_items.<locals>.<listcomp>)_attrs_)r   r   )r   r   
_get_itemsD   s    zBaseTypeByIdentity._get_itemsN)r   r   r   )F)__name__
__module____qualname__is_array_typeis_raw_functionr!   r   r"   r#   r,   r-   r3   r   r   r   r   r      s   

	r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )BaseTypec             C   s   | j |j ko| j |j kS )N)	__class__r3   )r   otherr   r   r   __eq__J   s    zBaseType.__eq__c             C   s
   | |k S )Nr   )r   r;   r   r   r   __ne__N   s    zBaseType.__ne__c             C   s   t | jt| j fS )N)hashr:   tupler3   )r   r   r   r   __hash__Q   s    zBaseType.__hash__N)r4   r5   r6   r<   r=   r@   r   r   r   r   r9   H   s   r9   c               @   s    e Zd Zf Zdd Zdd ZdS )VoidTypec             C   s
   d| _ d S )Nzvoid&)r   )r   r   r   r   __init__X   s    zVoidType.__init__c             C   s   t | |dS )NZnew_void_type)global_cache)r   r(   r)   r   r   r   r&   [   s    zVoidType.build_backend_typeN)r4   r5   r6   r2   rB   r&   r   r   r   r   rA   U   s   rA   c               @   s   e Zd Zdd ZdS )BasePrimitiveTypec             C   s   dS )NFr   )r   r   r   r   is_complex_typeb   s    z!BasePrimitiveType.is_complex_typeN)r4   r5   r6   rE   r   r   r   r   rD   a   s   rD   c            4   @   s   e Zd ZdZdddddddddddddddddddddddddddddddddddddddddddddddddddd3Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dS )PrimitiveTyper0   cifj)3charZshortintlongz	long longzsigned charzunsigned charzunsigned shortzunsigned intzunsigned longzunsigned long longfloatZdoublezlong doublezfloat _Complexzdouble _ComplexZ_BoolZwchar_tZchar16_tZchar32_tZint8_tZuint8_tZint16_tZuint16_tZint32_tZuint32_tZint64_tZuint64_tZint_least8_tZuint_least8_tZint_least16_tZuint_least16_tZint_least32_tZuint_least32_tZint_least64_tZuint_least64_tZint_fast8_tZuint_fast8_tZint_fast16_tZuint_fast16_tZint_fast32_tZuint_fast32_tZint_fast64_tZuint_fast64_tZintptr_tZ	uintptr_tZintmax_tZ	uintmax_tZ	ptrdiff_tZsize_tZssize_tc             C   s   || _ |d | _d S )Nr   )r0   r   )r   r0   r   r   r   rB      s    zPrimitiveType.__init__c             C   s   | j | j dkS )NrG   )ALL_PRIMITIVE_TYPESr0   )r   r   r   r   is_char_type   s    zPrimitiveType.is_char_typec             C   s   | j | j dkS )NrH   )rO   r0   )r   r   r   r   r#      s    zPrimitiveType.is_integer_typec             C   s   | j | j dkS )NrI   )rO   r0   )r   r   r   r   is_float_type   s    zPrimitiveType.is_float_typec             C   s   | j | j dkS )NrJ   )rO   r0   )r   r   r   r   rE      s    zPrimitiveType.is_complex_typec             C   s   t | |d| jS )NZnew_primitive_type)rC   r0   )r   r(   r)   r   r   r   r&      s    z PrimitiveType.build_backend_typeN)r0   )r4   r5   r6   r2   rO   rB   rP   r#   rQ   rE   r&   r   r   r   r   rF   f   st   rF   c               @   s(   e Zd Zd	Zdd Zdd Zdd ZdS )
UnknownIntegerTyper0   c             C   s   || _ |d | _d S )Nr   )r0   r   )r   r0   r   r   r   rB      s    zUnknownIntegerType.__init__c             C   s   dS )NTr   )r   r   r   r   r#      s    z"UnknownIntegerType.is_integer_typec             C   s   t d| j d S )Nz4integer type '%s' can only be used after compilation)NotImplementedErrorr0   )r   r(   r)   r   r   r   r&      s    z%UnknownIntegerType.build_backend_typeN)r0   )r4   r5   r6   r2   rB   r#   r&   r   r   r   r   rR      s   rR   c               @   s    e Zd ZdZdd Zdd ZdS )UnknownFloatTyper0   c             C   s   || _ |d | _d S )Nr   )r0   r   )r   r0   r   r   r   rB      s    zUnknownFloatType.__init__c             C   s   t d| j d S )Nz2float type '%s' can only be used after compilation)rS   r0   )r   r(   r)   r   r   r   r&      s    z#UnknownFloatType.build_backend_typeN)r0   )r4   r5   r6   r2   rB   r&   r   r   r   r   rT      s   rT   c               @   s   e Zd ZdZd	ddZdS )
BaseFunctionTypeargsr    ellipsisabiNc             C   s   || _ || _|| _|| _dd | j D }| jr8|jd |p@dg}| jdj|f }|d k	r||d d | d |dd   }| jjjd|| _d S )	Nc             S   s   g | ]}|j  qS r   )r   )r/   argr   r   r   r1      s    z-BaseFunctionType.__init__.<locals>.<listcomp>z...voidz, r   r   r   )	rV   r    rW   rX   append_base_patternjoinr   r   )r   rV   r    rW   rX   Zreprargsr   r   r   r   rB      s    

 zBaseFunctionType.__init__)rV   r    rW   rX   )N)r4   r5   r6   r2   rB   r   r   r   r   rU      s   rU   c               @   s$   e Zd ZdZdZdd Zdd ZdS )RawFunctionTypez(&)(%s)Tc             C   s   t d| f d S )NzPcannot render the type %r: it is a function type, not a pointer-to-function type)r   )r   r(   r)   r   r   r   r&      s    z"RawFunctionType.build_backend_typec             C   s   t | j| j| j| jS )N)FunctionPtrTyperV   r    rW   rX   )r   r   r   r   as_function_pointer   s    z#RawFunctionType.as_function_pointerN)r4   r5   r6   r\   r8   r&   r`   r   r   r   r   r^      s   r^   c               @   s    e Zd ZdZdd Zdd ZdS )r_   z(*&)(%s)c             C   s   | j j||}g }x | jD ]}|j|j|| qW f }| jdkrl| jsly|jjf}W n tk
rj   Y nX t	| |dt
||| jf| S )NZ	__stdcallZnew_function_type)r    r,   rV   r[   rX   rW   _backendZFFI_STDCALLAttributeErrorrC   r?   )r   r(   r)   r    rV   tpZabi_argsr   r   r   r&      s    
z"FunctionPtrType.build_backend_typec             C   s   t | j| j| j| jS )N)r^   rV   r    rW   rX   )r   r   r   r   as_raw_function  s    zFunctionPtrType.as_raw_functionN)r4   r5   r6   r\   r&   rd   r   r   r   r   r_      s   r_   c               @   s"   e Zd Zd	Zd
ddZdd ZdS )PointerTypetotyper   r   c             C   s>   || _ || _t|d}|jr*d|j f }|jjd|| _d S )Nz *&z(%s)r   )rf   r   r   r7   r
   r   r   )r   rf   r   Zextrar   r   r   rB     s    
zPointerType.__init__c             C   s    | j j||dd}t| |d|S )NT)r*   new_pointer_type)rf   r,   rC   )r   r(   r)   ZBItemr   r   r   r&     s    zPointerType.build_backend_typeN)rf   r   )r   )r4   r5   r6   r2   rB   r&   r   r   r   r   re     s   
re   c             C   s
   t | tS )N)re   r	   )rf   r   r   r   ConstPointerType  s    rh   c               @   s   e Zd ZdZdddZdS )	NamedPointerTyperf   r0   r   c             C   s"   t j| || || _|d | _d S )Nr   )re   rB   r0   r   )r   rf   r0   r   r   r   r   rB     s    zNamedPointerType.__init__N)rf   r0   )r   )r4   r5   r6   r2   rB   r   r   r   r   ri     s   ri   c               @   s,   e Zd ZdZdZdd Zdd Zdd	 Zd
S )	ArrayTypeitemlengthTc             C   sF   || _ || _|d krd}n|dkr(d}nd| }| j jjd|| _d S )Nz&[]z...z
&[/*...*/]z&[%s]r   )rk   rl   r   r   )r   rk   rl   Zbracketsr   r   r   rB   )  s    zArrayType.__init__c             C   s   t | j|S )N)rj   rk   )r   Z	newlengthr   r   r   resolve_length6  s    zArrayType.resolve_lengthc             C   sJ   | j dkrtd| f | jj|| t| jj||}t| |d|| j S )Nz...z)cannot render the type %r: unknown lengthZnew_array_type)rl   r   rk   r,   re   rC   )r   r(   r)   ZBPtrItemr   r   r   r&   9  s    

zArrayType.build_backend_typeN)rk   rl   )r4   r5   r6   r2   r7   rB   rm   r&   r   r   r   r   rj   %  s
   rj   rK   c               @   s,   e Zd Zd	ZdZdd Zdd Zdd ZdS )
StructOrUnionOrEnumr0   Nc             C   s$   | j pd| j| jf }|d | _d S )Nz%s %sr   )	forcenamekindr0   r   )r   r0   r   r   r   build_c_name_with_markerH  s    z,StructOrUnionOrEnum.build_c_name_with_markerc             C   s   || _ | j  d S )N)ro   rq   )r   ro   r   r   r   force_the_nameL  s    z"StructOrUnionOrEnum.force_the_namec             C   s   | j d d S )Nr   )r   )r   r   r   r   get_official_nameP  s    z%StructOrUnionOrEnum.get_official_name)r0   )r4   r5   r6   r2   ro   rq   rr   rt   r   r   r   r   rn   D  s
   rn   c               @   sj   e Zd ZdZdZdZdZdddZ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S )StructOrUnionNr   Fc             C   s*   || _ || _|| _|| _|| _| j  d S )N)r0   fldnamesfldtypes
fldbitsizefldqualsrq   )r   r0   rv   rw   rx   ry   r   r   r   rB   [  s    zStructOrUnion.__init__c             c   sB   | j d k	r>x2t| j| j D ] \}}|dkrt|tr|V  qW d S )Nr   )rw   ziprv   
isinstanceru   )r   r0   typer   r   r   anonymous_struct_fieldsc  s    
z%StructOrUnion.anonymous_struct_fieldsTc             c   s   | j }|d krdt| j }xbt| j| j| j|D ]J\}}}}|dkrnt|trn|rnx&|j D ]
}|V  q^W q2||||fV  q2W d S )Nr   r   )r   )	ry   lenrv   rz   rw   rx   r{   ru   
enumfields)r   Zexpand_anonymous_struct_unionry   r0   r|   bitsizer   r    r   r   r   r   i  s    zStructOrUnion.enumfieldsc       	      C   s~   g }g }g }g }x@| j  D ]4\}}}}|j| |j| |j| |j| qW t|| _t|| _t|| _t|| _d S )N)r   r[   r?   rv   rw   rx   ry   )	r   namestypesZbitsizesry   r0   r|   r   r   r   r   r   force_flattenw  s    





zStructOrUnion.force_flattenc             C   s$   t j| |||}|s | j|| |S )N)rn   r,   finish_backend_type)r   r(   r)   r*   r+   r   r   r   r,     s
    
zStructOrUnion.get_cached_btypec                s  | j r$| j dkr td| jf d S  j|  }d| _ | jd krBn| jd kr fdd| jD }tt| j|| j	}d}| j
rd} jj||| dd| nfg }| j\}}}	}
x&tt| jD ]}|| }| j| }t|to|jdkrn|jj }t| j|\}}|dkr<| jd	| j| j| p4d
f  |j|}| jd | |f | j|d d   | _|j }t|tr|jd krn8 j|}||kr| jd| j| j| pd
||f  |j| qW tt| j|| j	|} jj||| |	|
 d| _ d S )Nr   z(recursive structure declaration for '%s'r   c                s   g | ]}|j  qS r   )r,   )r/   rc   )r(   r)   r   r   r1     s   z5StructOrUnion.finish_backend_type.<locals>.<listcomp>r      z...zfield '%s.%s' has a bogus size?z{}z=field '%s.%s' is declared as %d bytes, but is really %d bytesrs   rs   )	completedrS   r0   r$   rw   fixedlayoutlistrz   rv   rx   packedra   Zcomplete_struct_or_unionranger~   r{   rj   rl   rk   r,   divmodsizeof_verification_errorrm   r[   )r   r(   r)   r+   rw   ZlstZsflagsZfieldofsZ	fieldsizeZ	totalsizeZtotalalignmentrH   ZfsizeZftypeZ	BItemTypeZnlenZnrestZ
BFieldTypeZ	bitemsizer   )r(   r)   r   r     s`    









z!StructOrUnion.finish_backend_typec             C   s   t |d S )N)r   )r   msgr   r   r   r     s    z!StructOrUnion._verification_errorc             C   s    | j r| jd krt| j d S )N)partialr   r   r   )r   r   r   r   check_not_partial  s    zStructOrUnion.check_not_partialc             C   s.   | j   |j|  t| |d| j | j | dS )Nznew_%s_type)key)r   r[   rC   rp   rt   )r   r(   r)   r   r   r   r&     s    
z StructOrUnion.build_backend_type)N)T)F)r4   r5   r6   r   r   r   r   rB   r}   r   r   r,   r   r   r   r&   r   r   r   r   ru   U  s   


<ru   c               @   s   e Zd ZdZdS )
StructTypestructN)r4   r5   r6   rp   r   r   r   r   r     s   r   c               @   s   e Zd ZdZdS )	UnionTypeunionN)r4   r5   r6   rp   r   r   r   r   r     s   r   c               @   sB   e Zd ZdZdZdZdddZdd Zdd	 Zd
d Z	dd Z
dS )EnumTypeenumFNc             C   s$   || _ || _|| _|| _| j  d S )N)r0   enumerators
enumvaluesbaseinttyperq   )r   r0   r   r   r   r   r   r   rB     s
    zEnumType.__init__c             C   s4   t j| | | jd kr0| j }d|jdd | _d S )Nr   r   _)rn   rr   ro   rt   r   )r   ro   r0   r   r   r   rr     s    
zEnumType.force_the_namec             C   s   | j r| j rt| j d S )N)r   partial_resolvedr   r   )r   r   r   r   r     s    zEnumType.check_not_partialc          
   C   s4   | j   | j||}t| |d| j | j| j|| dS )NZnew_enum_type)r   )r   build_baseinttyperC   rt   r   r   )r   r(   r)   Z
base_btyper   r   r   r&     s    zEnumType.build_backend_typec             C   sH  | j d k	r| j j||S | jr4t| j}t| j}nDdd l}ytj  W n tk
r\   Y nX |j	d| j
   d }}|dk rd}td}td}nd}td}td}|j||}	|j||}
|j|	}|j|
}|d
d| d > ko|dd| | > k r|	S |dd| d > kr4|dd| | > k r4|
S td	| j
  d S )Nr   zU%r has no values explicitly defined; guessing that it is equivalent to 'unsigned int'r   rL   rM   zunsigned intzunsigned longr   z=%s values don't all fit into either 'long' or 'unsigned long'rs   rs   )r   r,   r   minmaxwarningsZ__warningregistry__clear	NameErrorwarnr   rF   r   r   )r   r(   r)   Zsmallest_valueZlargest_valuer   ZsignZ
candidate1Z
candidate2Zbtype1Zbtype2Zsize1Zsize2r   r   r   r     s@    




zEnumType.build_baseinttype)N)r4   r5   r6   rp   r   r   rB   rr   r   r&   r   r   r   r   r   r     s   
r   c             C   s2   |d krd|  }t |d d d }|j|  d|_|S )Nz$%sunknown_type)r   rr   origin)r0   
structnamerc   r   r   r   r   *  s    
r   c             C   s(   |d krd|  }t |d d d }t|| S )Nz$$%s)r   ri   )r0   r   rc   r   r   r   unknown_ptr_type2  s    r   c          
   C   sF   t | tjrtS t( tt| ds2tj t| _	t| j	S Q R X d S )N__typecache)
r{   r   
ModuleType_typecache_cffi_backendglobal_lockhasattrr|   weakrefWeakValueDictionaryr   )Zbackendr   r   r   get_typecache<  s    r   c       
       O   s   |j d||f}y
|j| S  tk
r.   Y nX yt|j|| }W n4 tk
rx } ztd|| |f W Y d d }~X nX |j}t( |j|}	|	d kr|||< |S |	S W d Q R X d S )Nr   z
%s: %r: %s)popZ
_typecacher%   r.   ra   rS   r   get)
Zsrctyper(   funcnamerV   kwdsr   resecacheZres1r   r   r   rC   G  s     
$
rC   c             C   s   t d| d|S )N?rg   )rC   )r(   r+   r   r   r   pointer_cache^  s    r   c             C   s@   | j r<t| j d tkr<d|| j d f f| j dd   | _ d S )Nr   z%s: %sr   )rV   r|   str)r   r0   r   r   r   attach_exception_infoa  s    r   )N)N)-r   r   lockr   errorr   r   r   r	   r   r   r   objectr   r9   rA   Z	void_typerD   rF   rR   rT   rU   r^   r_   re   Z
voidp_typerh   Zconst_voidp_typeri   rj   Zchar_array_typern   ru   r   r   r   r   r   r   r   r   r   rC   r   r   r   r   r   r   <module>   sN   /	L	 G

