1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
U
L±d7ªã@sÔddlZddlZddlZddlZddlmZejdkr<eZne    Z
e Z e Zdd„ZGdd„deƒZGd    d
„d
eƒZGd d „d eƒZGd d„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZdS)éNé)Úmodel)écCs
t|gƒS©N)Úbytes)Únum©rúJd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\cffi/backend_ctypes.pyÚ<lambda>
ó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__z<cdata>cGstd|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"tk
r,td|fƒ‚YnX|rR|j|Ž}t||ƒsZ| |¡}n| ¡}|S)Nzcannot create an instance of %r)Ú_ctypeÚAttributeErrorrr!Ú
isinstance)rr ÚctypeÚresrrr    Ú_arg_to_ctypes s
 
 
 zCTypesData._arg_to_ctypescCs|dkr| ¡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)NrÚNULLréz0x%x)ÚctypesÚsizeofÚc_void_p)rÚaddressrrr    Ú
_addr_reprFs
zCTypesData._addr_reprNcCs| ¡}d|p| ¡|fS)Nz <cdata %r %s>)r6r)rÚc_nameZownrrr    Ú__repr__NszCTypesData.__repr__cCs8|dkrtd| ¡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©r9r:r"r1rrr    Ú    _get_sizeZszCTypesData._get_sizecCs t |j¡SrrBr5rrr    Ú_get_size_of_instance^sz CTypesData._get_size_of_instancecCstd| ¡fƒ‚dS)Nzcannot cast to %rr©rÚsourcerrr    Ú
_cast_fromaszCTypesData._cast_fromcCs
| d¡Sr)rAr5rrr    Ú_cast_to_integereszCTypesData._cast_to_integercCs t |j¡Sr)r9Ú    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$ÚCTypesGenericPrimitiverrAÚNotImplementedÚ_value)rÚotherZv_is_ptrZw_is_ptr©Zcmpfuncrr    Úcmprs 
 
ÿ
ÿ
 
z!CTypesData._make_cmp.<locals>.cmp)ÚgetattrÚoperatorÚ    func_name)ÚnamerQrrPr    Ú    _make_cmpps
 zCTypesData._make_cmpÚ__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__cCst| d¡ƒSr)ÚhashrAr5rrr    Ú__hash__‹szCTypesData.__hash__cCstd|fƒ‚dS)Nz string(): %rr©rÚmaxlenrrr    Ú
_to_stringŽszCTypesData._to_string)r+)N)#rrrr Ú __metaclass__Ú    __slots__rÚ classmethodrÚ staticmethodr!r'r)r*rr2r6r=r?rArCrDrGrHrJrKrVrWrXrYrZr[r\r^rarrrr    rsP
 
 
 
 
 
 
 
 
 
rc@s eZdZgZdd„Zdd„ZdS)rLcCs
t|jƒSr)r]rNr5rrr    r^•szCTypesGenericPrimitive.__hash__cCst| |j¡ƒSr)Úreprr*rNr5rrr    r6˜sz$CTypesGenericPrimitive._get_own_reprN)rrrrcr^r6rrrr    rL’srLc@s,eZdZgZedd„ƒZdd„Zdd„ZdS)ÚCTypesGenericArraycCs||ƒSrrrrrr    rŸszCTypesGenericArray._newpccs tt|ƒƒD]}||Vq dSr)ÚxrangeÚlen)rÚirrr    rK£szCTypesGenericArray.__iter__cCs| t |j¡¡Sr©r=r9Ú    addressofÚ_blobr5rrr    r6§sz CTypesGenericArray._get_own_reprN)rrrrcrdrrKr6rrrr    rgœs
 
rgc@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|dkrd}n>t|tƒr"| ¡}n*t|ttfƒr6|}ntd|t|ƒjfƒ‚| |¡S©Nrzbad type for cast to %r: %r)    r$rrHÚintÚlongrÚtyperÚ_new_pointer_at)rrFr<rrr    rG´s
 
 ÿzCTypesGenericPtr._cast_fromcCs$| |¡}||_t ||j¡|_|Sr)Ú__new__ror9Úcastr"rp)rr<rrrr    rvÁs
z CTypesGenericPtr._new_pointer_atcCs*z| |j¡WStk
r$YdSXdS)Nz???)r=ror#r5rrr    r6ÈszCTypesGenericPtr._get_own_reprcCs|jSr)ror5rrr    rHÎsz!CTypesGenericPtr._cast_to_integercCs
t|jƒSr)Úboolror5rrr    Ú __nonzero__ÑszCTypesGenericPtr.__nonzero__cCs4t|tƒstdt|ƒjƒ‚| |¡}t ||j¡S)Nzunexpected %s object)    r$rrrurrAr9rxr")rr r<rrr    r!Õs
 
zCTypesGenericPtr._to_ctypescCst |tj¡jpd}| |¡S©Nr)r9rxr;r rv)rÚ
ctypes_ptrr<rrr    r*ÜszCTypesGenericPtr._from_ctypescCs|r| |¡j|_dSr)r!Úcontents)rr|r rrr    Ú _initializeászCTypesGenericPtr._initializecCs0||jdfks|js|jr |jSt ||¡SdSr)rÚ_automatic_castsrorrAr@rrr    rAæs
ÿz$CTypesGenericPtr._convert_to_addressN)rrrrcrÚkindrdrrGrvr6rHrzÚ__bool__r!r*r~rArrrr    rn«s(
 
 
 
 
 
rnc@s\eZdZdgZedd„ƒZdd„Zedd„ƒZdd    „Zed
d „ƒZ    ed d „ƒZ
ddd„Z dS)ÚCTypesBaseStructOrUnionrmcCstd|fƒ‚dS)Nz!cannot instantiate opaque type %srrrrr    r)ñsz)CTypesBaseStructOrUnion._create_ctype_objcCs| t |j¡¡Srrkr5rrr    r6ösz%CTypesBaseStructOrUnion._get_own_reprcCst|j|ƒjSr)rRr"Úoffset)rÚ    fieldnamerrr    Ú    _offsetofùsz!CTypesBaseStructOrUnion._offsetofcCs.t|ddƒ|jkrt |j¡St ||¡SdS)NÚ_BItem)rRrr9rlrmrrAr@rrr    rAýs z+CTypesBaseStructOrUnion._convert_to_addresscCs| |¡}||_|Sr©rwrm)rZctypes_struct_or_unionrrrr    r*s
z$CTypesBaseStructOrUnion._from_ctypescCs|jSr)rm©rr rrr    r!    sz"CTypesBaseStructOrUnion._to_ctypesNcCst ||p| d¡¡Sr,)rr?r)rr>rrr    r? sz CTypesBaseStructOrUnion.__repr__)N) rrrrcrdr)r6r…rAr*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.dId=d>„Z/e0Z1d?d@„Z2dJdAdB„Z3dKdCdD„Z4d<S)LÚ CTypesBackend)ÚcharÚshortrsrtú    long longú signed charú unsigned charúunsigned shortú unsigned intú unsigned longúunsigned long longÚfloatÚdoubleÚ_Bool)r’r‘rrrŽzuint%d_tr8Z    uintptr_tZsize_t)rŒrtrsr‹rzint%d_tZintptr_tZ    ptrdiff_tZssize_tcCs d|_d|_tj|_tj|_dSr{)Z    RTLD_LAZYÚRTLD_NOWr9Ú RTLD_GLOBALÚ
RTLD_LOCALr5rrr    r7szCTypesBackend.__init__cCs
||_dSr)r0)rr0rrr    Úset_ffi=szCTypesBackend.set_fficCsttfSr)rr r5rrr    Ú
_get_types@szCTypesBackend._get_typesrcCst ||¡}t||ƒSr)r9ÚCDLLÚ CTypesLibrary)rÚpathÚflagsÚcdllrrr    Ú load_libraryCs zCTypesBackend.load_librarycCsGdd„dtƒ}| ¡|S)Nc@s,eZdZgZdZedd„ƒZedd„ƒZdS)z/CTypesBackend.new_void_type.<locals>.CTypesVoidzvoid &cSsdSrr©Znovaluerrr    r*Ksz<CTypesBackend.new_void_type.<locals>.CTypesVoid._from_ctypescSs |dk    rtdt|ƒjfƒ‚dS)NzNone expected, got %s object)rrurr¡rrr    r!Ns
 
ÿz:CTypesBackend.new_void_type.<locals>.CTypesVoid._to_ctypesN)rrrrcr-rer*r!rrrr    Ú
CTypesVoidHs 
r¢)rr2)rr¢rrr    Ú new_void_typeGs zCTypesBackend.new_void_typecsžˆdkrtˆƒ‚|jˆ‰ˆdkr(d}n<ˆdkr6d}n.ˆdkrDd}nˆdkrRd}nd    }ˆd
ƒjd
k‰‡fd d „‰|‰G‡‡‡‡‡‡fd d„dtƒ‰ˆ ¡ˆS)NZwchar_trŠ)r“r”r“)rrŽÚbyter•ryrséÿÿÿÿcsjt|tttfƒrt|ƒ}nLt|tƒr.| ¡}n8t|tƒrBt|ƒ}n$|dkrPd}ntdˆt    |ƒj
fƒ‚|Srr) r$rsrtr“rrHrÚordrrur)rF©ÚCTypesPrimitiverr    Ú_cast_source_to_inths
 
 
 
 
 ÿz=CTypesBackend.new_primitive_type.<locals>._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.<locals>.CTypesPrimitiverNú%s &cSs
||_dSr©rN©rr rrr    r}szBCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__init__cs|dkrˆƒSˆˆ |¡ƒSr)r!©r)r¨r%rr    r)€szKCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._create_ctype_objrsr¤csˆ|ƒ}ˆ|ƒj}||ƒSrrrE©r©r%rr    rG‡s
zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._cast_fromcSs|jSrr«r5rrr    Ú__int__ŒszACTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__int__rycs$t|tttfƒsˆ|ƒ}|t|ƒƒSr)r$rsrtr“ryrE©r©rr    rGscSs
t|jƒSr©rsrNr5rrr    r¯•srŠcsˆ|ƒ}t|d@ƒ}||ƒS©Néÿ)ÚbytechrrEr°rr    rG™s cSs
t|jƒSr©r¦rNr5rrr    r¯žsr“csNt|tƒr n0t|tƒr4t|dƒr*t|ƒ}q<t|ƒ}nˆ|ƒ}ˆ|ƒj}||ƒS)NÚ    __float__)r$r“rLÚhasattrrsr rEr®rr    rG¢s
 
 
 
 
 
cSs
t|jƒSrr±r5rrr    r¯¯scSs|jSrr«r5rrr    r¶±szCCTypesBackend.new_primitive_type.<locals>.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$rsrtrrrurr Ú OverflowError©Úx)r%Ú    is_signedrUrr    r!·s
 
ÿ ÿzDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._to_ctypescs@t|tƒrt|ƒdkr|St|ˆƒr*|jStdt|ƒjƒ‚dS)Nrzcharacter expected, got %s)r$rrirNrrurr¹r§rr    r!Ès
ÿcSst|jƒdkSr{rµr5rrr    rzÐszECTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__nonzero__cSs
|jdkSr{r«r5rrr    rzÓscs.t|ttttfƒs$tdt|ƒjƒ‚ˆ|ƒjS)Nzfloat expected, got %s)    r$rsrtr“rrrurr r¹)r%rr    r!Øs
ÿcSs t|d|ƒS)Nr ©rRrrrr    r*ßszFCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._from_ctypescsˆ |¡|_dSr)r!r )Úblobrr§rr    r~ãszECTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._initializecSs|jSrr«r_rrr    raèszDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._to_stringcSst|jd@ƒSr²)ÚchrrNr_rrr    raësN)rrrrcr"r-r€rrer)rdrGr¯r¶rHr!rzrr*r~rar©r¨r©r%r»Úkind1rUrr    r¨wsZ 
 
 
 
 
 
r¨)r4ÚPRIMITIVE_TYPESr rLr2)rrUr€rr¿r    Únew_primitive_typeWs$
 wz CTypesBackend.new_primitive_typecs°|jj}ˆ|t d¡ƒkr d‰n>ˆ|t d¡ƒ|t d¡ƒfkrFd‰nˆ|tjƒkrZd‰nd‰G‡‡‡fdd    „d    tƒ‰ˆ|j tj¡ksžˆ|j t d¡¡kr¤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.<locals>.CTypesPtrÚ_ownrÃZ __as_strbufr"ú(* &)z * &csbˆ |¡}ˆdkr8t |jd¡|_t |j|j¡|_n t |¡|_t |jtj    ¡j|_
d|_ dS)NrÃóT) r)r9Úcreate_string_bufferr Z_CTypesPtr__as_strbufrxr"rprqr;rorÇ)rrZctypeobj)ÚBItemr€rr    r s
ÿÿ ÿz:CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__init__cSs,t|ttfƒr$| |j||j¡StSdSr)r$rsrtrvroÚ _bitem_sizerM©rrOrrr    Ú__add__s
ÿz9CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__add__cSsNt|ttfƒr$| |j||j¡St|ƒt|ƒkrF|j|j|jStSdSr)r$rsrtrvrorÌrurMrÍrrr    Ú__sub__ sÿz9CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__sub__cs(t|ddƒr|dkrt‚ˆ |j|¡S)NrÇFr)rRÚ
IndexErrorr*rp©rÚindex©rËrr    Ú __getitem__)sz=CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__getitem__csˆ |¡|j|<dSr)r!rp©rrÒr rÓrr    Ú __setitem__.sz=CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__setitem__rÅcs4|r t|dtƒr t |d¡Stˆ|ƒj|ŽSdSr{)r$rr9Úc_char_pÚsuperr'rˆ©Ú    CTypesPtrrrr    r'2sz@CTypesBackend.new_pointer_type.<locals>.CTypesPtr._arg_to_ctypesrÄcsb|dkrtj}t |jt tj¡¡‰d}||krFˆ|dkrF|d7}q(d ‡fdd„t|ƒDƒ¡S)NrrÉrr csg|] }ˆ|‘qSrr©Ú.0rj©Úprr    Ú
<listcomp>BszPCTypesBackend.new_pointer_type.<locals>.CTypesPtr._to_string.<locals>.<listcomp>)    ÚsysÚmaxsizer9rxrpÚPOINTERÚc_charÚjoinÚrange©rr`ÚnrrÝr    ra:s
ÿ
z<CTypesBackend.new_pointer_type.<locals>.CTypesPtr._to_stringcs.t|ddƒr dt |jj¡fStˆ|ƒ ¡S©NrÇFzowning %d bytes)rRr9r:rpr}rØr6r5rÙrr    r6Ds
  ÿz?CTypesBackend.new_pointer_type.<locals>.CTypesPtr._get_own_repr)rrrrcr†r·r9râr"r:rÌr;Ú
issubclassrgrr-rrÎrÏrÔrÖrdr'rar6Ú __classcell__r©rËrÚr€©rr    rÚýs,
 
 
 
       
rÚT)r0Ú_get_cached_btyperÚ PrimitiveTypeZ    void_typernrr2)rrËÚgetbtyperrër    Únew_pointer_typeñs" ÿMÿzCTypesBackend.new_pointer_typecsˆdkrd‰ndˆ‰ˆj‰|jj}ˆ|t d¡ƒkr<d‰n*ˆ|t d¡ƒ|t d¡ƒfkrbd‰nd‰G‡‡‡‡‡‡fdd    „d    tƒ‰ˆ ¡ˆS)
Nz &[]z &[%d]rŠrrŽr¤rÆcsöeZdZddgZ”dk    r$”j”Zn
e d¡” ”¡Z”Z”Z    ‡‡‡fdd„Z
e ‡‡fdd„ƒZ d    d
„Z ‡fd d „Z‡fd d„Z”dks’”dkršdd„Z‡‡fdd„Z‡fdd„Ze ‡fdd„ƒZe ‡fdd„ƒZ‡‡fdd„Zedd„ƒZ‡ZS)z1CTypesBackend.new_array_type.<locals>.CTypesArrayrmrÇNr"cs†ˆdkr\t|ttfƒr |}d}n0ˆdkr@t|tƒr@t|ƒd}nt|ƒ}t|ƒ}ˆj||_| ¡|_d|_|dk    r‚|     |j|¡dS)NrŠrT)
r$rsrtrriÚtupler"rmrÇr~)rrZlen1)rËr€Úlengthrr    rjs 
z:CTypesBackend.new_array_type.<locals>.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ß}szQCTypesBackend.new_array_type.<locals>.CTypesArray._initialize.<locals>.<listcomp>zlength/type mismatch: %sztoo many initializers)r$rrårirgrrñrÐr9rxr;r râr"r:Ú    enumerater~r})r½rÚaddrÚPTRÚitemsizerjr rÞ)rËÚ CTypesArrayr­r    r~zs 
 
ÿ  z=CTypesBackend.new_array_type.<locals>.CTypesArray._initializecSs
t|jƒSr)rirmr5rrr    Ú__len__sz9CTypesBackend.new_array_type.<locals>.CTypesArray.__len__cs0d|krt|jƒks nt‚ˆ |j|¡Sr{)rirmrÐr*rÑrÓrr    rԐsz=CTypesBackend.new_array_type.<locals>.CTypesArray.__getitem__cs4d|krt|jƒks nt‚ˆ |¡|j|<dSr{)rirmrÐr!rÕrÓrr    r֕sz=CTypesBackend.new_array_type.<locals>.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ߣszPCTypesBackend.new_array_type.<locals>.CTypesArray._to_string.<locals>.<listcomp>)rirmr9rxrârãrärårærrÝr    ra›s
 
ÿ
z<CTypesBackend.new_array_type.<locals>.CTypesArray._to_stringcs,t|ddƒrdt |j¡fStˆ|ƒ ¡Srè)rRr9r:rmrØr6r5)r÷rrr    r6¥s z?CTypesBackend.new_array_type.<locals>.CTypesArray._get_own_reprcs.|ˆdfks|jrt |j¡St ||¡SdSr)rr9rlrmrrAr@©rÚrr    rAªs zECTypesBackend.new_array_type.<locals>.CTypesArray._convert_to_addresscsˆ ˆ¡}||_|Srr‡)Z ctypes_arrayr)r÷rr    r*°s
z>CTypesBackend.new_array_type.<locals>.CTypesArray._from_ctypescs
ˆ |¡Srr(rrùrr    r'¶sz@CTypesBackend.new_array_type.<locals>.CTypesArray._arg_to_ctypescs8t|ttfƒr0ˆ t |j¡|t ˆj¡¡St    SdSr)
r$rsrtrvr9rlrmr:r"rMrÍ)rËrÚrr    rκs
ÿÿz9CTypesBackend.new_array_type.<locals>.CTypesArray.__add__cSstd| ¡fƒ‚dS)Nz casting to %r)r4rrErrr    rGÂsÿz<CTypesBackend.new_array_type.<locals>.CTypesArray._cast_from)rrrrcr"Úappendrr-Ú_declared_lengthÚ_CTPtrrrer~rørÔrÖrar6rAr*r'rÎrdrGrêr©rËr÷rÚZbracketsr€ròrìr    r÷`s0 
 
 
 r÷)r†r0rírrîrgr2)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.<locals>.struct_or_unionNr rrrr    Ústruct_or_unionÌsrÿz%s_%scs(eZdZdgZ”Zd”fZ”ZZdS)z?CTypesBackend._new_struct_or_union.<locals>.CTypesStructOrUnionrmrªN)rrrrcr"r-Ú_kindr€r©rÀrUrÿrr    ÚCTypesStructOrUnionÑs
r)rr‚r2)rr€rUZbase_ctypes_classrrrr    Ú_new_struct_or_unionÊs z"CTypesBackend._new_struct_or_unioncCs| d|tj¡S)NÚstruct)rr9Ú    Structure©rrUrrr    Únew_struct_typeÚszCTypesBackend.new_struct_typecCs| d|tj¡S)NÚunion)rr9ÚUnionrrrr    Ú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ßèsz:CTypesBackend.complete_struct_or_union.<locals>.<listcomp>cSsg|]\}}}|‘qSrrr rrr    rßéscSsg|]\}}}|‘qSrrr rrr    rßêsr8rcsˆƒ}|dk    rˆ||ƒ|Srr)rÚresult)Ú
initializerÿrr    r)üs
zACTypesBackend.complete_struct_or_union.<locals>._create_ctype_objc
sèˆr"t|ƒdkr"tdt|ƒfƒ‚t|tƒsxt|ttfƒrBtdƒ‚t|ƒ}t|ƒtˆƒkrjtdˆ ¡ƒ‚tt    ˆ|ƒƒ}t
  |¡}|  ¡D]X\}}ˆ|\}}|dks®t dƒ‚ˆ |¡}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 initializerrz,not implemented: initializer with bit fields)riÚ
ValueErrorr$ÚdictrÚunicoderrñrÚzipr9rlÚitemsÚAssertionErrorr…râr"rxr~r})
r½rrôr r r rrƒrõrÞ)rÚfnamesÚis_unionÚname2fieldtyperr    rs0 þ
ÿ
 
ÿ
 z:CTypesBackend.complete_struct_or_union.<locals>.initializerr+znested anonymous structs/unionsz1the field name %r conflicts in the ctypes backendcSs(t |j¡}t |||¡}| |j¡Sr)r9rlrmrxr*r})rr r rƒrõrôrÞrrr    Úgetter%s z6CTypesBackend.complete_struct_or_union.<locals>.gettercSst|j|| |¡ƒdSr)Úsetattrrmr!)rr r r rrr    Úsetter+sz6CTypesBackend.complete_struct_or_union.<locals>.settercSs&t |j¡}t |||¡}| |¡Sr)r9rlrmrxr*)rr Z    BFieldPtrrƒrõrôrÞrrr    r1s cSs| t|j|ƒ¡Sr)r*rRrm)rr r rrr    r9scSsN| |¡}t|j|ƒ}t|j||ƒ|t|j|ƒkrJt|j||ƒtdƒ‚dS)Nzvalue too large for bitfield)r!rRrmrr¸)rr r r Zoldvaluerrr    r;s 
 cSst|d|ƒSr{r¼)rr rrr    rJscSst|d||ƒdSr{)r)rr r rrr    rLs)r4r"rúÚEllipsisÚ_pack_Ú_fields_Ú _bfield_typesrer)rrrr·rr…r9rârérgrûrürÚpropertyr0rírZ PointerType)rrÚfieldsÚtpZ    totalsizeZtotalalignmentZsflagsÚpackZbtypesZ    bitfieldsZ bfield_typesZcfieldsr r rr)rrrÚr)rrrrrrÿ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ßQsz3CTypesBackend.new_function_type.<locals>.<listcomp>z...z, cs–eZdZddgZeje”ddƒfdd„”DƒžddiŽZ” d    ”f¡Z    d‡‡‡‡fd
d „    Z
e d d „ƒZ dd„Z ‡‡fdd„Z‡‡‡fdd„Z‡ZS)z:CTypesBackend.new_function_type.<locals>.CTypesFunctionPtrÚ _own_callbackÚ_namer"NcSsg|]
}|j‘qSr©r"r'rrr    rßYszECTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.<listcomp>Ú    use_errnoTz    (* &)(%s)csªddl‰ˆrtdƒ‚tˆddƒdk    r6ˆ ˆ ˆ¡¡‰nd‰‡‡‡‡‡fdd„}tˆtƒr|tjtj    fdd„ˆDƒždd    iŽ}nˆj
}||ƒ|_ t  |j tj    ¡j |_ˆ|_dS)
Nrz#varargs not supported for callbacksr"cs€g}t|ˆƒD]\}}| | |¡¡qzˆ|Ž}ˆ |¡}Wnˆ ¡ˆ}YnXtˆtƒr||rxt |tj    ¡j
}nd}|Sr) rrúr*r!Ú    print_excrérnr9rxr;r )rZargs2Úargr(Zres2)ÚBArgsÚBResultÚerrorrÚ    tracebackrr    Úcallbackfs
 
zUCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__init__.<locals>.callbackcSsg|]
}|j‘qSrr+r'rrr    rß}szWCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__init__.<locals>.<listcomp>r,T)r2rrRr*r)rérnr9Ú    CFUNCTYPEr;r"rprxr ror))rrr1r3Zcallback_ctype)r/r0ÚCTypesFunctionPtrÚ has_varargs)r1rr2r    r]s, ÿ
ÿ þý
ÿzCCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__init__cSs|r tdƒ‚dS)NzActypes backend: not supported: initializers for function pointersr3)r|r rrr    r~†szFCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr._initializecSsPt|ddƒ}|rD|j d¡}|j|ddkr6d|}|j d|¡}t ||¡S)Nr*rÈrz )*ú )rRr-rÒr.rr?)rr>rjrrr    r?Œs  zCCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__repr__cs*t|ddƒdk    rd|jfStˆ|ƒ ¡S)Nr)z
calling %r)rRr)rØr6r5)r5rrr    r6•s zHCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr._get_own_reprcsöˆr:t|ƒtˆƒkst‚|tˆƒd…}|dtˆƒ…}nt|ƒtˆƒksNt‚g}t|ˆƒD]\}}| | |¡¡q\ˆrât|ƒD]^\}}|dkr¤| t d¡¡q‚t|t    ƒsÐt
ddtˆƒ|t |ƒj fƒ‚| | |¡¡q‚|j |Ž}ˆ |¡S)NrzKargument %d passed in the variadic part needs to be a cdata object (got %s)r)rirrrúr'rór9r;r$rrrurrpr*)rrZ    extraargsZ ctypes_argsr.r(rjr)r/r0r6rr    Ú__call__šs,
þÿ
zCCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__call__)N)rrrrcr9r4rRr"rr-rrer~r?r6r8rêr©r/r0r5r6Znameargsrìr    r5Vs ÿþ)
    r5)rúrärnr2)rr/r0r6rr9r    Únew_function_typePs
 
\zCTypesBackend.new_function_typecsFtˆtƒst‚ttt|ƒt|ƒƒƒ‰G‡‡fdd„d|ƒ}| ¡|S)Ncs0eZdZgZd”Z‡fdd„Z‡fdd„ZdS)z/CTypesBackend.new_enum_type.<locals>.CTypesEnumrªcs:|j}zd|ˆ|fWStk
r4t|ƒYSXdS)Nz%d: %s©rNÚKeyErrorÚstrr¬©Úreverse_mappingrr    r6¾s
z=CTypesBackend.new_enum_type.<locals>.CTypesEnum._get_own_reprcs2|j}z
ˆ|WStk
r,t|ƒYSXdSrr;)rr`r r>rr    raÅs
 
z:CTypesBackend.new_enum_type.<locals>.CTypesEnum._to_stringN)rrrrcr-r6rar©rUr?rr    Ú
CTypesEnumºs rA)r$r=rrrÚreversedr2)rrUZ enumeratorsZ
enumvaluesZ    CTypesIntrArr@r    Ú new_enum_typeµs
ÿzCTypesBackend.new_enum_typecCst ¡Sr)r9Ú    get_errnor5rrr    rDÏszCTypesBackend.get_errnocCst |¡dSr)r9Ú    set_errnor¬rrr    rEÒszCTypesBackend.set_errnocCs
| |¡Sr)ra)rÚbr`rrr    ÚstringÕszCTypesBackend.stringcCs tdƒ‚dS)Nzbuffer() with ctypes backendr3)rZbptrÚsizerrr    ÚbufferØszCTypesBackend.buffercCs,t|tƒr| ¡St|tƒs t‚| ¡SdSr)r$rrDrérrC)rZcdata_or_BTyperrr    r:Ûs
zCTypesBackend.sizeofcCst|tƒst‚| ¡Sr)rérrrJ)rÚBTyperrr    ÚalignofâszCTypesBackend.alignofcCst|tƒst‚| |¡Sr)rérrr©rrJrFrrr    Únewpæs
zCTypesBackend.newpcCs
| |¡Sr)rGrLrrr    rxëszCTypesBackend.castcCs|dks t‚|||ƒSr)r)rrJrFr1Úonerrorrrr    r3îs zCTypesBackend.callbackNcs°|jdkr.ddl}Gdd„d|jƒ}i|f|_|j\‰}|dkrpzˆ||ƒ=Wntk
rjtdƒ‚YnXdS‡fdd„}| | |¡|¡}||k    sšt‚||fˆ|||ƒ<|S)Nrc@s$eZdZdd„Zdd„Zdd„ZdS)z CTypesBackend.gcp.<locals>.MyRefcSs |ƒ}||kp|dk    o||ƒkSrr)rrOZmyrefrrr    rWøsÿz'CTypesBackend.gcp.<locals>.MyRef.__eq__cSs
||k SrrrÍrrr    rXüsz'CTypesBackend.gcp.<locals>.MyRef.__ne__cSs4z|jWStk
r.t|ƒƒ|_|jYSXdSr)Ú_hashr#r]r5rrr    r^þs
 z)CTypesBackend.gcp.<locals>.MyRef.__hash__N)rrrrWrXr^rrrr    ÚMyRef÷srPzFCan remove destructor only on a object previously returned by ffi.gc()cs$ˆ |d¡\}}|dk    r ||ƒdS)N)NN)Úpop)ÚkÚcdataÚ
destructor©Z
weak_cacherr    Úremovesz!CTypesBackend.gcp.<locals>.remove)Ú_weakref_cache_refÚweakrefÚrefr<rrxÚtypeofr)rrSrTrHrXrPrVZ    new_cdatarrUr    Úgcpôs 
 
 
  zCTypesBackend.gcpcCs
| |¡Srr&)rrJr/rrr    ÚgetcnameszCTypesBackend.getcnamecCsÄt|tƒr\|dkr"t|tƒr"|j}t|tƒs4tdƒ‚|j|}|tkrNtdƒ‚||     |¡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$r=rérnr†r‚rr rr…rsrtrgrürCràrár¸ru)rrJr„rr rËrƒrrr    Ú typeoffsetofs(
 
 
 
 
 
zCTypesBackend.typeoffsetofcCs°t|tƒr t t|ƒ |¡¡}n\t|tƒrZ|dksBtt|ƒjtƒsJt    dƒ‚t|ƒ |¡}n"t|t
ƒrtt|ƒ |¡}nt    dƒ‚|r¦t  t  t  |tj ¡j |¡t|ƒ¡}| |¡S)Nzunexpected cdata typez$expected a <cdata 'struct-or-union'>)r$r‚r9rqrur!rnrér†rrgrxr;r r*)rZBTypePtrrSrƒÚptrrrr    Ú rawaddressof5s&
 
ÿ
ÿýzCTypesBackend.rawaddressof)r)r¥r¥rr)r¥)r¥)r)r)N)5rrrr9rãÚc_shortÚc_intÚc_longÚ
c_longlongÚc_byteÚc_ubyteÚc_ushortÚc_uintÚc_ulongÚ c_ulonglongÚc_floatÚc_doubleÚc_boolrÁr*r:Ú_sizer;Úc_size_trr™ršr r£rÂrðrþrrr
r%r:rCrDrErGrIrKrMrxr3rWr[rurZr\r]r_rrrr    r‰s€ò   
`yþ
pe
 
 
%
r‰c@s,eZdZdd„Zdd„Zdd„Zdd„Zd    S)
rœcCs||_||_dSr)ÚbackendrŸ)rrorŸrrr    rKszCTypesLibrary.__init__cCs t|j|ƒ}| |¡}||_|Sr)rRrŸr*r*)rrJrUZc_funcÚfuncobjrrr    Ú load_functionOs 
zCTypesLibrary.load_functionc
CsJz|j |j|¡}Wn*tk
r>}z t|ƒ‚W5d}~XYnX| |¡Sr)r"Úin_dllrŸr#r4r*)rrJrUÚ
ctypes_objÚerrr    Ú read_variableUs
zCTypesLibrary.read_variablecCs@| |¡}|j |j|¡}t t |¡t |¡t |j¡¡dSr)r!r"rrrŸr9Úmemmoverlr:)rrJrUr Znew_ctypes_objrsrrr    Úwrite_variable\s 
 
þzCTypesLibrary.write_variableN)rrrrrqrurwrrrr    rœIsrœ)r9Ú ctypes.utilrSràr+rÚ version_infor¾r´r=rrsrtrårhrur ÚobjectrrLrgrnr‚r‰rœrrrr    Ú<module>s,  

C#>