grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a (ˆ`Ö¥ã@sÔddlZddlZddlZddlZddlmZejdkr ór c@s eZdZdS)Ú CTypesTypeN©Ú__name__Ú __module__Ú __qualname__rrrr r sr c@seZdZeZdgZdZdd„Zedd„ƒZe dd„ƒZ ed d „ƒZ ed d „ƒZ e d d„ƒZ ed5dd„ƒZedd„ƒZdd„Zdd„Zd6dd„Zdd„Zedd„ƒZdd „Zed!d"„ƒZd#d$„Zed%d&„ƒZd'd(„Zd)d*„Zed+ƒZed,ƒZed-ƒZed.ƒZed/ƒZed0ƒZ d1d2„Z!d3d4„Z"dS)7Ú CTypesDataÚ __weakref__zcGstd|jfƒ‚dS)Nzcannot instantiate %r)Ú TypeErrorÚ __class__)ÚselfÚargsrrr Ú__init__szCTypesData.__init__cCstd| ¡fƒ‚dS)Nz+expected a pointer or array ctype, got '%s'©rÚ _get_c_name©ÚclsÚinitrrr Ú_newpsÿzCTypesData._newpcCst‚dSr©r©Úvaluerrr Ú _to_ctypesszCTypesData._to_ctypescGs\z |j}Wn ty*td|fƒ‚Yn0|rP|j|Ž}t||ƒsX| |¡}n| ¡}|S)Nzcannot create an instance of %r)Ú_ctypeÚAttributeErrorrr!Ú isinstance)rr ÚctypeÚresrrr Ú_arg_to_ctypes s     zCTypesData._arg_to_ctypescCs|dur| ¡S| |¡SdSr©r'rrrr Ú_create_ctype_obj.szCTypesData._create_ctype_objcCst‚dSrr)Z ctypes_valuerrr Ú _from_ctypes5szCTypesData._from_ctypesÚcCs|j d|¡S©Nz &)Ú _reftypenameÚreplace)rÚ replace_withrrr r9szCTypesData._get_c_namecCs*d| ¡f|_d| ¡f|_d|_dS)Nz CData<%s>Úffi)rrrr©rrrr Ú _fix_class=szCTypesData._fix_classcCst‚dSr©ÚNotImplementedError©rrrr Ú _get_own_reprCszCTypesData._get_own_reprcCs8|dkr dS|dkr,|ddt tj¡>7}d|SdS)NrZNULLréz0x%x)ÚctypesÚsizeofÚc_void_p)rÚaddressrrr Ú _addr_reprFs zCTypesData._addr_reprNcCs| ¡}d|p| ¡|fS)Nz )r6r)rÚc_nameZownrrr Ú__repr__NszCTypesData.__repr__cCs8|durtd| ¡fƒ‚ntd| ¡| ¡fƒ‚dS)Nzcannot convert %r to an addresszcannot convert %r to %rr©rZBClassrrr Ú_convert_to_addressRsÿ  ÿzCTypesData._convert_to_addresscCs t |j¡Sr©r8r9r"r1rrr Ú _get_sizeZszCTypesData._get_sizecCs t |j¡SrrAr5rrr Ú_get_size_of_instance^sz CTypesData._get_size_of_instancecCstd| ¡fƒ‚dS)Nzcannot cast to %rr©rÚsourcerrr Ú _cast_fromaszCTypesData._cast_fromcCs | d¡Sr)r@r5rrr Ú_cast_to_integereszCTypesData._cast_to_integercCs t |j¡Sr)r8Z alignmentr"r1rrr Ú _alignmenthszCTypesData._alignmentcCstd| ¡ƒ‚dS)Nz#cdata %r does not support iterationrr5rrr Ú__iter__lsÿzCTypesData.__iter__cs tt|ƒ‰‡fdd„}||_|S)Ncszt|tƒ }t|tƒo t|tƒ }|r@|r@ˆ| d¡| d¡ƒS|sH|rLtSt|tƒr\|j}t|tƒrl|j}ˆ||ƒSdSr)r$ÚCTypesGenericPrimitiverr@ÚNotImplementedÚ_value)rÚotherZv_is_ptrZw_is_ptr©Zcmpfuncrr Úcmprs   ÿ ÿ  z!CTypesData._make_cmp..cmp)ÚgetattrÚoperatorZ func_name)ÚnamerOrrNr Ú _make_cmpps  zCTypesData._make_cmpÚ__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__cCst| d¡ƒSr)Úhashr@r5rrr Ú__hash__‹szCTypesData.__hash__cCstd|fƒ‚dS)Nz string(): %rr©rÚmaxlenrrr Ú _to_stringŽszCTypesData._to_string)r+)N)#rrrr Z __metaclass__Ú __slots__rÚ classmethodrÚ staticmethodr!r'r)r*rr2r6r<r>r@rBrCrFrGrHrIrSrTrUrVrWrXrYr[r^rrrr rsP           rc@s eZdZgZdd„Zdd„ZdS)rJcCs t|jƒSr)rZrLr5rrr r[•szCTypesGenericPrimitive.__hash__cCst| |j¡ƒSr)Úreprr*rLr5rrr r6˜sz$CTypesGenericPrimitive._get_own_reprN)rrrr_r[r6rrrr rJ’srJc@s,eZdZgZedd„ƒZdd„Zdd„ZdS)ÚCTypesGenericArraycCs||ƒSrrrrrr rŸszCTypesGenericArray._newpccs tt|ƒƒD]}||Vq dSr)ÚxrangeÚlen)rÚirrr rI£szCTypesGenericArray.__iter__cCs| t |j¡¡Sr©r<r8Ú addressofÚ_blobr5rrr r6§sz CTypesGenericArray._get_own_reprN)rrrr_r`rrIr6rrrr rcœs  rcc@sˆeZdZddgZdZdZedd„ƒZedd„ƒZed d „ƒZ d d „Z d d„Z dd„Z e Z edd„ƒZedd„ƒZedd„ƒZdd„ZdS)ÚCTypesGenericPtrÚ_addressÚ _as_ctype_ptrFÚpointercCs||ƒSrrrrrr r°szCTypesGenericPtr._newpcCsV|durd}n>t|tƒr"| ¡}n*t|ttfƒr6|}ntd|t|ƒjfƒ‚| |¡S©Nrzbad type for cast to %r: %r) r$rrGÚintÚlongrÚtyperÚ_new_pointer_at)rrEr;rrr rF´s   ÿzCTypesGenericPtr._cast_fromcCs$| |¡}||_t ||j¡|_|Sr)Ú__new__rkr8Úcastr"rl)rr;rrrr rrÁs z CTypesGenericPtr._new_pointer_atcCs(z| |j¡WSty"YdS0dS)Nz???)r<rkr#r5rrr r6Ès zCTypesGenericPtr._get_own_reprcCs|jSr)rkr5rrr rGÎsz!CTypesGenericPtr._cast_to_integercCs t|jƒSr)Úboolrkr5rrr Ú __nonzero__ÑszCTypesGenericPtr.__nonzero__cCs4t|tƒstdt|ƒjƒ‚| |¡}t ||j¡S)Nzunexpected %s object) r$rrrqrr@r8rtr")rr r;rrr r!Õs  zCTypesGenericPtr._to_ctypescCst |tj¡jpd}| |¡S©Nr)r8rtr:r rr)rÚ ctypes_ptrr;rrr r*ÜszCTypesGenericPtr._from_ctypescCs|r| |¡j|_dSr)r!Úcontents)rrxr rrr Ú _initializeászCTypesGenericPtr._initializecCs0||jdfvs|js|jr |jSt ||¡SdSr)rÚ_automatic_castsrkrr@r?rrr r@æs ÿz$CTypesGenericPtr._convert_to_addressN)rrrr_r{Úkindr`rrFrrr6rGrvÚ__bool__r!r*rzr@rrrr rj«s(      rjc@s\eZdZdgZedd„ƒZdd„Zedd„ƒZdd „Zed d „ƒZ ed d „ƒZ ddd„Z dS)ÚCTypesBaseStructOrUnionricCstd|fƒ‚dS)Nz!cannot instantiate opaque type %srrrrr r)ñsz)CTypesBaseStructOrUnion._create_ctype_objcCs| t |j¡¡Srrgr5rrr r6ösz%CTypesBaseStructOrUnion._get_own_reprcCst|j|ƒjSr)rPr"Úoffset)rÚ fieldnamerrr Ú _offsetofùsz!CTypesBaseStructOrUnion._offsetofcCs.t|ddƒ|jurt |j¡St ||¡SdS)NÚ_BItem)rPrr8rhrirr@r?rrr r@ýs z+CTypesBaseStructOrUnion._convert_to_addresscCs| |¡}||_|Sr©rsri)rZctypes_struct_or_unionrrrr r*s z$CTypesBaseStructOrUnion._from_ctypescCs|jSr)ri©rr rrr r! sz"CTypesBaseStructOrUnion._to_ctypesNcCst ||p| d¡¡Sr,)rr>r)rr=rrr r> sz CTypesBaseStructOrUnion.__repr__)N) rrrr_r`r)r6r�r@r*r!r>rrrr r~îs    r~c@s eZdZejejejejejej ej ej ej ej ejejejejdœZdD]^Ze ee¡Zeeedde<ee ej¡krŒeeed<ee ej¡krJeeed<qJdD]jZe ee¡Zeeedde<ee ej¡krüeeed <eeed <ee ej¡kr®eeed <q®d d „Zdd„Zdd„ZdEdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z dd „Z!d!d"„Z"dFd$d%„Z#d&d'„Z$d(d)„Z%d*d+„Z&d,d-„Z'dGd.d/„Z(dHd0d1„Z)d2d3„Zd4d5„Z*d6d7„Z+d8d9„Z,d:d;„Z-d„Z/e0Z1d?d@„Z2dJdAdB„Z3dKdCdD„Z4d.CTypesVoidzvoid &cSsdSrr©Znovaluerrr r*Ksz.CTypesVoid._from_ctypescSs |durtdt|ƒjfƒ‚dS)NzNone expected, got %s object)rrqrr�rrr r!Ns  ÿz:CTypesBackend.new_void_type..CTypesVoid._to_ctypesN)rrrr_r-rar*r!rrrr Ú CTypesVoidHs  rž)rr2)rržrrr Ú new_void_typeGs zCTypesBackend.new_void_typecsžˆdkrtˆƒ‚|jˆ‰ˆdkr(d}n<ˆdvr6d}n.ˆdvrDd}nˆdkrRd}nd }ˆd ƒjd k‰‡fd d „‰|‰G‡‡‡‡‡‡fd d„dtƒ‰ˆ ¡ˆS)NZwchar_tr†)r�r�r�)r‰rŠÚbyter‘ruroéÿÿÿÿcsjt|tttfƒrt|ƒ}nLt|tƒr.| ¡}n8t|tƒrBt|ƒ}n$|durPd}ntdˆt |ƒj fƒ‚|Srn) r$rorpr�rrGrÚordrrqr)rE©ÚCTypesPrimitiverr Ú_cast_source_to_inths      ÿz=CTypesBackend.new_primitive_type.._cast_source_to_intcsŠeZdZdgZ”Zd”Z”Zdd„Ze‡‡fdd„ƒZ edksHedkrbe ‡‡fd d „ƒZ d d „Z ed kr‚e ‡fdd „ƒZ dd „Z edkr¢e ‡fdd „ƒZ dd „Z edkrÌe ‡‡fdd „ƒZ dd „Z dd„Z e Zedksèedksèed krüe‡‡‡fdd„ƒZedk�r e‡fdd„ƒZdd„Zndd„ZeZedk�rFe‡fdd„ƒZedd „ƒZe‡fd!d"„ƒZedk�rtd#d$„Zedk�r†d%d$„Zd&S)'z9CTypesBackend.new_primitive_type..CTypesPrimitiverLú%s &cSs ||_dSr©rL©rr rrr r}szBCTypesBackend.new_primitive_type..CTypesPrimitive.__init__cs|durˆƒSˆˆ |¡ƒSr)r!©r)r¤r%rr r)€szKCTypesBackend.new_primitive_type..CTypesPrimitive._create_ctype_objror csˆ|ƒ}ˆ|ƒj}||ƒSrrrD©r¥r%rr rF‡s zDCTypesBackend.new_primitive_type..CTypesPrimitive._cast_fromcSs|jSrr§r5rrr Ú__int__ŒszACTypesBackend.new_primitive_type..CTypesPrimitive.__int__rucs$t|tttfƒsˆ|ƒ}|t|ƒƒSr)r$rorpr�rurD©r¥rr rF�scSs t|jƒSr©rorLr5rrr r«•sr†csˆ|ƒ}t|d@ƒ}||ƒS©Néÿ)ÚbytechrrDr¬rr rF™s cSs t|jƒSr©r¢rLr5rrr r«žsr�csNt|tƒr n0t|tƒr4t|dƒr*t|ƒ}q.CTypesPrimitive.__float__cslt|ttfƒs4t|tƒr"t|ƒ}ntdt|ƒjƒ‚ˆ|ƒj|krhˆs\|dkr\tdˆƒ‚n tdˆƒ‚|S)Nzinteger expected, got %srz%s: negative integerz%s: integer out of bounds) r$rorprrrqrr Ú OverflowError©Úx)r%Ú is_signedrRrr r!·s  ÿ ÿzDCTypesBackend.new_primitive_type..CTypesPrimitive._to_ctypescs@t|tƒrt|ƒdkr|St|ˆƒr*|jStdt|ƒjƒ‚dS)Nrzcharacter expected, got %s)r$rrerLrrqrrµr£rr r!Ès ÿcSst|jƒdkSrwr±r5rrr rvÐszECTypesBackend.new_primitive_type..CTypesPrimitive.__nonzero__cSs |jdkSrwr§r5rrr rvÓscs.t|ttttfƒs$tdt|ƒjƒ‚ˆ|ƒjS)Nzfloat expected, got %s) r$rorpr�rrrqrr rµ)r%rr r!Øs ÿcSs t|d|ƒS)Nr ©rPrrrr r*ßszFCTypesBackend.new_primitive_type..CTypesPrimitive._from_ctypescsˆ |¡|_dSr)r!r )Úblobrr£rr rzãszECTypesBackend.new_primitive_type..CTypesPrimitive._initializecSs|jSrr§r\rrr r^èszDCTypesBackend.new_primitive_type..CTypesPrimitive._to_stringcSst|jd@ƒSr®)ÚchrrLr\rrr r^ësN)rrrr_r"r-r|rrar)r`rFr«r²rGr!rvr}r*rzr^r©r¤r¥r%r·Úkind1rRrr r¤wsZ       r¤)r4ÚPRIMITIVE_TYPESr rJr2)rrRr|rr»r Únew_primitive_typeWs$  wz CTypesBackend.new_primitive_typecs°|jj}ˆ|t d¡ƒur d‰n>ˆ|t d¡ƒ|t d¡ƒfvrFd‰nˆ|tjƒurZd‰nd‰G‡‡‡fdd „d tƒ‰ˆ|j tj¡usžˆ|j t d¡¡ur¤d ˆ_ˆ ¡ˆS) Nr†Úcharpr‰rŠÚbytepÚvoidpÚgenericcsôeZdZdgZ”dkr edg7Z”Ze”dƒrHe ”j¡Ze  ”j¡Z nej Ze ”e ƒrd” d¡Zn ” d¡Z‡‡fdd„Zd d „Zd d „Z‡fd d„Z‡fdd„Z”dks´”dkrÆe‡‡fdd„ƒZ”dksÖ”dkrÞdd„Z‡‡fdd„Z‡ZS)z1CTypesBackend.new_pointer_type..CTypesPtrÚ_ownr¿Z __as_strbufr"ú(* &)z * &csbˆ |¡}ˆdkr8t |jd¡|_t |j|j¡|_n t |¡|_t |jtj ¡j|_ d|_ dS)Nr¿óT) r)r8Zcreate_string_bufferr Z_CTypesPtr__as_strbufrtr"rlrmr:rkrÃ)rrZctypeobj)ÚBItemr|rr r s ÿÿ ÿz:CTypesBackend.new_pointer_type..CTypesPtr.__init__cSs,t|ttfƒr$| |j||j¡StSdSr)r$rorprrrkÚ _bitem_sizerK©rrMrrr Ú__add__s ÿz9CTypesBackend.new_pointer_type..CTypesPtr.__add__cSsNt|ttfƒr$| |j||j¡St|ƒt|ƒurF|j|j|jStSdSr)r$rorprrrkrÇrqrKrÈrrr Ú__sub__ sÿz9CTypesBackend.new_pointer_type..CTypesPtr.__sub__cs(t|ddƒr|dkrt‚ˆ |j|¡S)NrÃFr)rPÚ IndexErrorr*rl©rÚindex©rÆrr Ú __getitem__)sz=CTypesBackend.new_pointer_type..CTypesPtr.__getitem__csˆ |¡|j|<dSr)r!rl©rrÍr rÎrr Ú __setitem__.sz=CTypesBackend.new_pointer_type..CTypesPtr.__setitem__rÁcs4|r t|dtƒr t |d¡Stˆ|ƒj|ŽSdSrw)r$rr8Zc_char_pÚsuperr'r„©Ú CTypesPtrrrr r'2sz@CTypesBackend.new_pointer_type..CTypesPtr._arg_to_ctypesrÀcsb|dkrtj}t |jt tj¡¡‰d}||krFˆ|dkrF|d7}q(d ‡fdd„t|ƒDƒ¡S)NrrÅrr csg|] }ˆ|‘qSrr©Ú.0rf©Úprr Ú Br zPCTypesBackend.new_pointer_type..CTypesPtr._to_string..) ÚsysÚmaxsizer8rtrlÚPOINTERÚc_charÚjoinÚrange©rr]Únrr×r r^:s ÿ z.CTypesPtr._to_stringcs.t|ddƒr dt |jj¡fStˆ|ƒ ¡S©NrÃFzowning %d bytes)rPr8r9rlryrÒr6r5rÓrr r6Ds   ÿz?CTypesBackend.new_pointer_type..CTypesPtr._get_own_repr)rrrr_r‚r³r8rÜr"r9rÇr:Ú issubclassrcrr-rrÉrÊrÏrÑr`r'r^r6Ú __classcell__r©rÆrÔr|©rr rÔýs,          rÔT)r0Ú_get_cached_btyperÚ PrimitiveTypeZ void_typerjr{r2)rrÆÚgetbtyperrår Únew_pointer_typeñs" ÿMÿzCTypesBackend.new_pointer_typecs�ˆdurd‰ndˆ‰ˆj‰|jj}ˆ|t d¡ƒur.CTypesArrayrirÃNr"cs†ˆdur\t|ttfƒr |}d}n0ˆdkr@t|tƒr@t|ƒd}nt|ƒ}t|ƒ}ˆj||_| ¡|_d|_|dur‚|  |j|¡dS)Nr†rT) r$rorprreÚtupler"rirÃrz)rrZlen1)rÆr|Úlengthrr rjs  z:CTypesBackend.new_array_type..CTypesArray.__init__csØtˆtƒr&‡fdd„ttˆƒƒDƒ‰n:tˆtƒrXtˆƒt|ƒksJtˆˆƒsXtdˆfƒ‚tˆƒ‰tˆƒt|ƒkrxtdƒ‚t  |tj ¡j }t  ˆj ¡}t ˆj ¡}tˆƒD]*\}}t  ||||¡}ˆ |j|¡q¨dS)Ncsg|]}ˆ||d…‘qS)rrrÕr©rr rÙ}r zQCTypesBackend.new_array_type..CTypesArray._initialize..zlength/type mismatch: %sztoo many initializers)r$rrßrercrrërËr8rtr:r rÜr"r9Ú enumeraterzry)r¹rÚaddrÚPTRÚitemsizerfr rØ)rÆÚ CTypesArrayr©r rzzs   ÿ  z=CTypesBackend.new_array_type..CTypesArray._initializecSs t|jƒSr)rerir5rrr Ú__len__�sz9CTypesBackend.new_array_type..CTypesArray.__len__cs0d|krt|jƒks nt‚ˆ |j|¡Srw)rerirËr*rÌrÎrr rÏ�sz=CTypesBackend.new_array_type..CTypesArray.__getitem__cs4d|krt|jƒks nt‚ˆ |¡|j|<dSrw)rerirËr!rÐrÎrr rÑ•sz=CTypesBackend.new_array_type..CTypesArray.__setitem__r†r csf|dkrt|jƒ}t |jt tj¡¡‰d}||krJˆ|dkrJ|d7}q,d ‡fdd„t|ƒDƒ¡S)NrrÅrr csg|] }ˆ|‘qSrrrÕr×rr rÙ£r zPCTypesBackend.new_array_type..CTypesArray._to_string..)rerir8rtrÜrÝrÞrßràrr×r r^›s  ÿ z.CTypesArray._to_stringcs,t|ddƒrdt |j¡fStˆ|ƒ ¡Srâ)rPr8r9rirÒr6r5)rñrrr r6¥s z?CTypesBackend.new_array_type..CTypesArray._get_own_reprcs.|ˆdfvs|jrt |j¡St ||¡SdSr)r{r8rhrirr@r?©rÔrr r@ªs zECTypesBackend.new_array_type..CTypesArray._convert_to_addresscsˆ ˆ¡}||_|Srrƒ)Z ctypes_arrayr)rñrr r*°s z>CTypesBackend.new_array_type..CTypesArray._from_ctypescs ˆ |¡Srr(rrórr r'¶sz@CTypesBackend.new_array_type..CTypesArray._arg_to_ctypescs8t|ttfƒr0ˆ t |j¡|t ˆj¡¡St SdSr) r$rorprrr8rhrir9r"rKrÈ)rÆrÔrr rɺs ÿÿz9CTypesBackend.new_array_type..CTypesArray.__add__cSstd| ¡fƒ‚dS)Nz casting to %r)r4rrDrrr rFÂsÿz.CTypesArray._cast_from)rrrr_r"Úappendrr-Ú_declared_lengthÚ_CTPtrrrarzròrÏrÑr^r6r@r*r'rÉr`rFrär©rÆrñrÔZbracketsr|rìrær rñ`s0       rñ)r‚r0rçrrèrcr2)rrÔrìrérr÷r Únew_array_typeQs ÿgzCTypesBackend.new_array_typecsFGdd„d|ƒ‰d|ˆfˆ_|‰G‡‡‡fdd„dtƒ}| ¡|S)Nc@s eZdZdS)z;CTypesBackend._new_struct_or_union..struct_or_unionNr rrrr Ústruct_or_unionÌsrùz%s_%scs(eZdZdgZ”Zd”fZ”ZZdS)z?CTypesBackend._new_struct_or_union..CTypesStructOrUnionrir¦N)rrrr_r"r-Ú_kindr|r©r¼rRrùrr ÚCTypesStructOrUnionÑs rü)rr~r2)rr|rRZbase_ctypes_classrürrûr Ú_new_struct_or_unionÊs z"CTypesBackend._new_struct_or_unioncCs| d|tj¡S)NÚstruct)rýr8Z Structure©rrRrrr Únew_struct_typeÚszCTypesBackend.new_struct_typecCs| d|tj¡S)NÚunion)rýr8ÚUnionrÿrrr Únew_union_typeÝszCTypesBackend.new_union_typer¡csP|dks|dkrtdƒ‚ˆj‰dd„|Dƒ‰dd„|Dƒ}dd„|Dƒ} i} g} |D]F\} } }|dkr€|  | | jf¡| | | <qT|  | | j|f¡t| | <qT|d@r¬dˆ_n |r¶|ˆ_| ˆ_| ˆ_t‡‡fd d „ƒ}|ˆ_‡‡‡‡fd d „‰ˆj d k‰t t ˆt || ƒƒƒ‰|D]Ü\} } }| dk�r*tdƒ‚t ˆ| ƒ�rBt d| ƒ‚|dk�rº| | ˆ | ¡t | j¡fdd„}| | fdd„}t| tƒ�rÖd}| jdk�rÖ| | jˆ | ¡t | j¡fdd„}n| | fdd„}| | fdd„}tˆ| t||ƒƒ�q|j t |¡¡}ˆD]H} t || ƒ�rt d| ƒ‚| fdd„}| fdd„}t|| t||ƒƒ�qdS)Nrz‚the ctypes backend of CFFI does not support structures completed by verify(); please compile and install the _cffi_backend module.cSsg|]\}}}|‘qSrr©rÖÚfnameÚBFieldÚbitsizerrr rÙèr z:CTypesBackend.complete_struct_or_union..cSsg|]\}}}|‘qSrrrrrr rÙér cSsg|]\}}}|‘qSrrrrrr rÙêr r7rcsˆƒ}|durˆ||ƒ|Srr)rÚresult)Ú initializerùrr r)üs zACTypesBackend.complete_struct_or_union.._create_ctype_objc s؈r"t|ƒdkr"tdt|ƒfƒ‚t|tƒsxt|ttfƒrBtdƒ‚t|ƒ}t|ƒtˆƒkrjtdˆ ¡ƒ‚tt ˆ|ƒƒ}t   |¡}|  ¡D]H\}}ˆ|\}}ˆ  |¡}t  |j¡}t  |||¡} | | j|¡qŠdS)NrzPunion initializer: %d items given, but only one supported (use a dict if needed)zunion initializer: got a strz"too many values for %s initializer)reÚ ValueErrorr$ÚdictrÚunicoderrërÚzipr8rhÚitemsr�rÜr"rtrzry) r¹rrîrr rrrrïrØ)rüÚfnamesÚis_unionÚname2fieldtyperr r s* þ ÿ    z:CTypesBackend.complete_struct_or_union..initializerr+znested anonymous structs/unionsz1the field name %r conflicts in the ctypes backendcSs(t |j¡}t |||¡}| |j¡Sr)r8rhrirtr*ry)rrrrrïrîrØrrr Úgetter%s z6CTypesBackend.complete_struct_or_union..gettercSst|j|| |¡ƒdSr)Úsetattrrir!)rr rrrrr Úsetter+sz6CTypesBackend.complete_struct_or_union..settercSs&t |j¡}t |||¡}| |¡Sr)r8rhrirtr*)rrZ BFieldPtrrrïrîrØrrr r1s cSs| t|j|ƒ¡Sr)r*rPri)rrrrrr r9scSsN| |¡}t|j|ƒ}t|j||ƒ|t|j|ƒkrJt|j||ƒtdƒ‚dS)Nzvalue too large for bitfield)r!rPrirr´)rr rrZoldvaluerrr r;s   cSst|d|ƒSrwr¸)rrrrr rJscSst|d||ƒdSrw)r)rr rrrr rLs)r4r"rôÚEllipsisZ_pack_Z_fields_Ú _bfield_typesrar)rúr r r³r r�r8rÜrãrcrõrörÚpropertyr0rçrZ PointerType)rrüÚfieldsÚtpZ totalsizeZtotalalignmentZsflagsÚpackZbtypesZ bitfieldsZ bfield_typesZcfieldsrrrr)rrrÔr)rürr rrrùr Úcomplete_struct_or_unionàst     ÿ  þ    þ  ÿ  z&CTypesBackend.complete_struct_or_unioncsNdd„ˆDƒ‰ˆrˆ d¡d ˆ¡‰G‡‡‡‡‡fdd„dtƒ‰ˆ ¡ˆS)NcSsg|] }| ¡‘qSr©r©rÖÚBArgrrr rÙQr z3CTypesBackend.new_function_type..z...z, cs˜eZdZddgZeje”ddƒgdd„”Dƒ¢RddiŽZ” d ”f¡Z d‡‡‡‡fd d „ Z e d d „ƒZ dd„Z ‡‡fdd„Z‡‡‡fdd„Z‡ZS)z:CTypesBackend.new_function_type..CTypesFunctionPtrÚ _own_callbackÚ_namer"NcSsg|] }|j‘qSr©r"rrrr rÙYr zECTypesBackend.new_function_type..CTypesFunctionPtr.Ú use_errnoTz (* &)(%s)cs ddl‰tˆddƒdur*ˆ ˆ ˆ¡¡‰nd‰‡‡‡‡‡fdd„}tˆtƒrrtjtjgdd„ˆDƒ¢RddiŽ}nˆj }||ƒ|_ t  |j tj¡j |_ ˆ|_dS) Nrr"cs€g}t|ˆƒD]\}}| | |¡¡qzˆ|Ž}ˆ |¡}Wnˆ ¡ˆ}Yn0tˆtƒr||rxt |tj ¡j }nd}|Sr) r rôr*r!Ú print_excrãrjr8rtr:r )rZargs2ÚargrZres2)ÚBArgsÚBResultÚerrorrÚ tracebackrr Úcallbackfs  zUCTypesBackend.new_function_type..CTypesFunctionPtr.__init__..callbackcSsg|] }|j‘qSrr!rrrr rÙ}r zWCTypesBackend.new_function_type..CTypesFunctionPtr.__init__..r"T)r(rPr*r)rãrjr8Ú CFUNCTYPEr:r"rlrtr rkr)rrr'r)Zcallback_ctype)r%r&ÚCTypesFunctionPtrÚ has_varargs)r'rr(r r]s*ÿ ÿ þý ÿzCCTypesBackend.new_function_type..CTypesFunctionPtr.__init__cSs|r tdƒ‚dS)NzActypes backend: not supported: initializers for function pointersr3)rxr rrr rz†szFCTypesBackend.new_function_type..CTypesFunctionPtr._initializecSsPt|ddƒ}|rD|j d¡}|j|ddvr6d|}|j d|¡}t ||¡S)Nr rÄrz )*ú )rPr-rÍr.rr>)rr=rfrrr r>Œs  zCCTypesBackend.new_function_type..CTypesFunctionPtr.__repr__cs*t|ddƒdurd|jfStˆ|ƒ ¡S)Nrz calling %r)rPrrÒr6r5)r+rrr r6•s zHCTypesBackend.new_function_type..CTypesFunctionPtr._get_own_reprcsΈr&|tˆƒd…}|dtˆƒ…}ng}t|ˆƒD]\}}| | |¡¡q4ˆrºt|ƒD]^\}}|dur|| t d¡¡qZt|tƒs¨t ddtˆƒ|t |ƒj fƒ‚| | |¡¡qZ|j |Ž}ˆ  |¡S)NrzKargument %d passed in the variadic part needs to be a cdata object (got %s)r)rer rôr'rír8r:r$rrrqrrlr*)rrZ extraargsZ ctypes_argsr$rrfr)r%r&r,rr Ú__call__šs( þÿ zCCTypesBackend.new_function_type..CTypesFunctionPtr.__call__)N)rrrr_r8r*rPr"rr-rrarzr>r6r.rär©r%r&r+r,Znameargsrær r+Vs ÿþ)  r+)rôrÞrjr2)rr%r&r,rr/r Únew_function_typePs  \zCTypesBackend.new_function_typecs8ttt|ƒt|ƒƒƒ‰G‡‡fdd„d|ƒ}| ¡|S)Ncs0eZdZgZd”Z‡fdd„Z‡fdd„ZdS)z/CTypesBackend.new_enum_type..CTypesEnumr¦cs8|j}zd|ˆ|fWSty2t|ƒYS0dS)Nz%d: %s©rLÚKeyErrorÚstrr¨©Úreverse_mappingrr r6¾s  z=CTypesBackend.new_enum_type..CTypesEnum._get_own_reprcs0|j}z ˆ|WSty*t|ƒYS0dSrr1)rr]r r4rr r^Ås   z:CTypesBackend.new_enum_type..CTypesEnum._to_stringN)rrrr_r-r6r^r©rRr5rr Ú CTypesEnumºs r7)r r Úreversedr2)rrRZ enumeratorsZ enumvaluesZ CTypesIntr7rr6r Ú new_enum_typeµs  ÿzCTypesBackend.new_enum_typecCst ¡Sr)r8Ú get_errnor5rrr r:ÏszCTypesBackend.get_errnocCst |¡dSr)r8Ú set_errnor¨rrr r;ÒszCTypesBackend.set_errnocCs | |¡Sr)r^)rÚbr]rrr ÚstringÕszCTypesBackend.stringcCs tdƒ‚dS)Nzbuffer() with ctypes backendr3)rZbptrÚsizerrr ÚbufferØszCTypesBackend.buffercCst|tƒr| ¡S| ¡SdSr)r$rrCrB)rZcdata_or_BTyperrr r9Ûs zCTypesBackend.sizeofcCs| ¡Sr)rH)rÚBTyperrr ÚalignofâszCTypesBackend.alignofcCst|tƒst‚| |¡Sr)rãrrr©rr@rErrr Únewpæs zCTypesBackend.newpcCs | |¡Sr)rFrBrrr rtëszCTypesBackend.castcCs |||ƒSrr)rr@rEr'Úonerrorrrr r)îszCTypesBackend.callbackNcs¢|jdur.ddl}Gdd„d|jƒ}i|f|_|j\‰}|durnzˆ||ƒ=Wntyhtdƒ‚Yn0dS‡fdd„}| | |¡|¡}||fˆ|||ƒ<|S)Nrc@s$eZdZdd„Zdd„Zdd„ZdS)z CTypesBackend.gcp..MyRefcSs |ƒ}||up|duo||ƒuSrr)rrMZmyrefrrr rTøsÿz'CTypesBackend.gcp..MyRef.__eq__cSs ||k SrrrÈrrr rUüsz'CTypesBackend.gcp..MyRef.__ne__cSs2z|jWSty,t|ƒƒ|_|jYS0dSr)Ú_hashr#rZr5rrr r[þs   z)CTypesBackend.gcp..MyRef.__hash__N)rrrrTrUr[rrrr ÚMyRef÷srFzFCan remove destructor only on a object previously returned by ffi.gc()cs$ˆ |d¡\}}|dur ||ƒdS)N)NN)Úpop)ÚkÚcdataÚ destructor©Z weak_cacherr Úremovesz!CTypesBackend.gcp..remove)Ú_weakref_cache_refÚweakrefÚrefr2rrtÚtypeof)rrIrJr>rNrFrLZ new_cdatarrKr Úgcpôs     zCTypesBackend.gcpcCs | |¡Srr)rr@r/rrr ÚgetcnameszCTypesBackend.getcnamecCsÄt|tƒr\|dkr"t|tƒr"|j}t|tƒs4tdƒ‚|j|}|turNtdƒ‚||  |¡fSt|t t fƒr´t|t ƒrz|j }t|tƒsŒtdƒ‚|j}| ¡|}|tjkr¬t‚||fStt|ƒƒ‚dS)Nrz expected a struct or union ctypeznot supported for bitfieldszexpected an array or ptr ctype)r$r3rãrjr‚r~rrrr�rorprcrörBrÚrÛr´rq)rr@r€rrrÆrrrr Ú typeoffsetofs(       zCTypesBackend.typeoffsetofcCs°t|tƒr t t|ƒ |¡¡}n\t|tƒrZ|dusBtt|ƒjtƒsJt dƒ‚t|ƒ |¡}n"t|t ƒrtt|ƒ |¡}nt dƒ‚|r¦t  t  t  |tj ¡j |¡t|ƒ¡}| |¡S)Nzunexpected cdata typez$expected a )r$r~r8rmrqr!rjrãr‚rrcrtr:r r*)rZBTypePtrrIrZptrrrr Ú rawaddressof5s&  ÿ ÿýzCTypesBackend.rawaddressof)r)r¡r¡rr)r¡)r¡)r)r)N)5rrrr8rÝZc_shortZc_intZc_longZ c_longlongZc_byteZc_ubyteZc_ushortZc_uintZc_ulongZ c_ulonglongZc_floatZc_doubleZc_boolr½r r9Ú_sizer:Zc_size_trr–r—rœrŸr¾rêrørýrrrr0r9r:r;r=r?rArCrtr)rMrQrqrPrRrSrTrrrr r…s|ò    `yþ pe   % r…c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r˜cCs||_||_dSr)Úbackendr›)rrVr›rrr rKszCTypesLibrary.__init__cCs t|j|ƒ}| |¡}||_|Sr)rPr›r*r )rr@rRZc_funcÚfuncobjrrr Ú load_functionOs  zCTypesLibrary.load_functionc CsLz|j |j|¡}Wn,ty@}zt|ƒ‚WYd}~n d}~00| |¡Sr)r"Úin_dllr›r#r4r*)rr@rRÚ ctypes_objÚerrr Ú read_variableUs zCTypesLibrary.read_variablecCs@| |¡}|j |j|¡}t t |¡t |¡t |j¡¡dSr)r!r"rYr›r8Zmemmoverhr9)rr@rRr Znew_ctypes_objrZrrr Úwrite_variable\s    þzCTypesLibrary.write_variableN)rrrrrXr\r]rrrr r˜Isr˜)r8Z ctypes.utilrQrÚr+rÚ version_inforºr°r3r rorprßrdrqr ÚobjectrrJrcrjr~r…r˜rrrr Ús,    C#>