
    ci֥                        d dl Z d dlZ d dlZd dlZddlmZ ej                  dk  reZn	e	Z
eZeZd Z G d de      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    N   )model)   c                     t        | g      S N)bytes)nums    :/tmp/pip-target-z3e9_cxr/lib/python/cffi/backend_ctypes.py<lambda>r   
   s    %,     c                       e Zd Zy)
CTypesTypeN__name__
__module____qualname__ r   r
   r   r      s    r   r   c                   `   e Zd ZeZdgZdZ d Zed        Ze	d        Z
ed        Zed        Ze	d        Zedd	       Zed
        Zd Zd Zd dZd Zed        Zd Zed        Zd Zed        Zd Zd Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z d Z!d Z"y)!
CTypesData__weakref__z<cdata>c                 2    t        d| j                        )Nzcannot instantiate )	TypeError	__class__)selfargss     r
   __init__zCTypesData.__init__   s    4>>CDDr   c                 <    t        d| j                         d      )Nz(expected a pointer or array ctype, got ''r   _get_c_nameclsinits     r
   _newpzCTypesData._newp   s    ??,/ 0 	0r   c                     t         r   r   values    r
   
_to_ctypeszCTypesData._to_ctypes       r   c                     	 | j                   }|r. | j                  | }t	        ||      s| j                  |      }|S | j                         }|S # t        $ r t        d|       w xY w)Nzcannot create an instance of )_ctypeAttributeErrorr   r)   
isinstance)r"   r(   ctyperess       r
   _arg_to_ctypeszCTypesData._arg_to_ctypes    sw    	HJJE  #..%(Cc5)jjo 
 **,C
  	HFGG	Hs   A A(c                 H    || j                         S | j                  |      S r   r1   r!   s     r
   _create_ctype_objzCTypesData._create_ctype_obj.   s'    <%%''%%d++r   c                     t         r   r&   )ctypes_values    r
   _from_ctypeszCTypesData._from_ctypes5   r*   r   c                 :    | j                   j                  d|      S N &)_reftypenamereplace)r"   replace_withs     r
   r    zCTypesData._get_c_name9   s    ''l;;r   c                 v    d| j                         d| _        d| j                         d| _        d| _        y )NzCData<>ffi)r    r   r   r   r"   s    r
   
_fix_classzCTypesData._fix_class=   s,    &)oo&79*-//*;=r   c                     t         r   NotImplementedErrorr   s    r
   _get_own_reprzCTypesData._get_own_reprC   s    !!r   c                 z    |dk(  ry|dk  r,|ddt        j                  t         j                        z  z  z  }d|z  S )Nr   NULLr      z0x%x)ctypessizeofc_void_p)r   addresss     r
   
_addr_reprzCTypesData._addr_reprF   s?    a<{16==#A!ABBG##r   Nc                 X    | j                         }d|xs | j                         d|dS )Nz<cdata  r?   )rG   r    )r   c_nameowns      r
   __repr__zCTypesData.__repr__N   s,      ""(">D,<,<,>">DDr   c                     |t        d| j                         d      t        d| j                         d|j                               )Nzcannot convert z to an addressz to r   r   BClasss     r
   _convert_to_addresszCTypesData._convert_to_addressR   sP    >  "% & &   "F$6$6$8: ; ;r   c                 @    t        j                  | j                        S r   rK   rL   r,   rA   s    r
   	_get_sizezCTypesData._get_sizeZ   s    }}SZZ((r   c                 @    t        j                  | j                        S r   rZ   rF   s    r
   _get_size_of_instancez CTypesData._get_size_of_instance^   s    }}T[[))r   c                 :    t        d| j                               )Nzcannot cast to r   r"   sources     r
   
_cast_fromzCTypesData._cast_froma   s    s/@BCCr   c                 $    | j                  d       S r   )rX   rF   s    r
   _cast_to_integerzCTypesData._cast_to_integere   s    ''--r   c                 @    t        j                  | j                        S r   )rK   	alignmentr,   rA   s    r
   
_alignmentzCTypesData._alignmenth   s    

++r   c                 :    t        d| j                         z        )Nz#cdata %r does not support iterationr   rF   s    r
   __iter__zCTypesData.__iter__l   s#    =  " 	"r   c                 @    t        t        |       fd}| |_        |S )Nc                 X   t        | t               }t        |t              xr t        |t               }|r)|r' | j                  d       |j                  d             S |s|rt        S t        | t              r| j
                  } t        |t              r|j
                  } | |      S r   )r.   CTypesGenericPrimitiver   rX   NotImplemented_value)r   otherv_is_ptrw_is_ptrcmpfuncs       r
   cmpz!CTypesData._make_cmp.<locals>.cmpr   s    %d,BCCH"5*5 I)%1GHH Ht77=$88>@ @X%%d$:;;;De%;<!LLEtU++r   )getattroperator	func_name)namerr   rq   s     @r
   	_make_cmpzCTypesData._make_cmpp   s"    (D)	, 
r   __eq____ne____lt____le____gt____ge__c                 6    t        | j                  d             S r   )hashrX   rF   s    r
   __hash__zCTypesData.__hash__   s    D,,T233r   c                     t        d|       )Nz
string(): r&   r   maxlens     r
   
_to_stringzCTypesData._to_string   s    $011r   ) r   )#r   r   r   r   __metaclass__	__slots__r   classmethodr$   staticmethodr)   r1   r4   r7   r    rB   rG   rO   rT   rX   r[   r]   ra   rc   rf   rh   rw   rx   ry   rz   r{   r|   r}   r   r   r   r   r
   r   r      sT   MIHE 0 0     , ,   < <  
"$E; ) )* D D. , ,"( x Fx Fx Fx Fx Fx F42r   r   c                       e Zd Zg Zd Zd Zy)rk   c                 ,    t        | j                        S r   )r   rm   rF   s    r
   r   zCTypesGenericPrimitive.__hash__   s    DKK  r   c                 J    t        | j                  | j                              S r   )reprr7   rm   rF   s    r
   rG   z$CTypesGenericPrimitive._get_own_repr   s    D%%dkk233r   N)r   r   r   r   r   rG   r   r   r
   rk   rk      s    I!4r   rk   c                   ,    e Zd Zg Zed        Zd Zd Zy)CTypesGenericArrayc                      | |      S r   r   r!   s     r
   r$   zCTypesGenericArray._newp       4yr   c              #   L   K   t        t        |             D ]	  }| |     y wr   )xrangelen)r   is     r
   rh   zCTypesGenericArray.__iter__   s'     D	" 	Aq'M	s   "$c                 ^    | j                  t        j                  | j                              S r   rO   rK   	addressof_blobrF   s    r
   rG   z CTypesGenericArray._get_own_repr        v//

;<<r   N)r   r   r   r   r   r$   rh   rG   r   r   r
   r   r      s#    I =r   r   c                       e Zd ZddgZdZdZed        Zed        Zed        Z	d Z
d	 Zd
 ZeZed        Zed        Zed        Zd Zy)CTypesGenericPtr_address_as_ctype_ptrFpointerc                      | |      S r   r   r!   s     r
   r$   zCTypesGenericPtr._newp   r   r   c                     |d}n^t        |t              r|j                         }n=t        |t        t        f      r|}n$t        d| dt        |      j                        | j                  |      S Nr   zbad type for cast to z: )	r.   r   rc   intlongr   typer   _new_pointer_at)r"   r`   rN   s      r
   ra   zCTypesGenericPtr._cast_from   si    >G
+--/Gd,G $v,"7"79 : :""7++r   c                     | j                  |       }||_        t        j                  || j                        |_        |S r   )__new__r   rK   castr,   r   )r"   rN   r   s      r
   r   z CTypesGenericPtr._new_pointer_at   s3    {{3#[[#**=r   c                 X    	 | j                  | j                        S # t        $ r Y yw xY w)Nz???)rO   r   r-   rF   s    r
   rG   zCTypesGenericPtr._get_own_repr   s,    	??4==11 		s    	))c                     | j                   S r   )r   rF   s    r
   rc   z!CTypesGenericPtr._cast_to_integer   s    }}r   c                 ,    t        | j                        S r   )boolr   rF   s    r
   __nonzero__zCTypesGenericPtr.__nonzero__   s    DMM""r   c                     t        |t              s!t        dt        |      j                  z        |j                  |       }t        j                  || j                        S )Nzunexpected %s object)	r.   r   r   r   r   rX   rK   r   r,   )r"   r(   rN   s      r
   r)   zCTypesGenericPtr._to_ctypes   sL    %,2T%[5I5IIJJ++C0{{7CJJ//r   c                     t        j                  |t         j                        j                  xs d}| j	                  |      S Nr   )rK   r   rM   r(   r   )r"   
ctypes_ptrrN   s      r
   r7   zCTypesGenericPtr._from_ctypes   s2    ++j&//:@@EA""7++r   c                 J    |r!| j                  |      j                  |_        y y r   )r)   contents)r"   r   r(   s      r
   _initializezCTypesGenericPtr._initialize   s!    "%.."7"@"@J r   c                     || j                   d fv s|j                  s| j                  r| j                  S t        j	                  | |      S r   )r   _automatic_castsr   r   rX   rV   s     r
   rX   z$CTypesGenericPtr._convert_to_address   sA    t~~t,,0G0G$$== 11$??r   N)r   r   r   r   r   kindr   r$   ra   r   rG   rc   r   __bool__r)   r7   r   rX   r   r   r
   r   r      s    _-ID  
, 
,  #H0 0 , , A A@r   r   c                   f    e Zd ZdgZed        Zd Zed        Zd Zed        Z	ed        Z
d
d	Zy)CTypesBaseStructOrUnionr   c                     t        d|       )Nzcannot instantiate opaque type r&   r!   s     r
   r4   z)CTypesBaseStructOrUnion._create_ctype_obj   s     sDEEr   c                 ^    | j                  t        j                  | j                              S r   r   rF   s    r
   rG   z%CTypesBaseStructOrUnion._get_own_repr   r   r   c                 B    t        | j                  |      j                  S r   )rs   r,   offset)r"   	fieldnames     r
   	_offsetofz!CTypesBaseStructOrUnion._offsetof   s    szz9-444r   c                     t        |dd       | j                  u rt        j                  | j                        S t
        j                  | |      S )N_BItem)rs   r   rK   r   r   r   rX   rV   s     r
   rX   z+CTypesBaseStructOrUnion._convert_to_address   s?    68T*dnn<##DJJ//11$??r   c                 6    | j                  |       }||_        |S r   r   r   )r"   ctypes_struct_or_unionr   s      r
   r7   z$CTypesBaseStructOrUnion._from_ctypes  s    {{3+
r   c                     |j                   S r   )r   )r"   r(   s     r
   r)   z"CTypesBaseStructOrUnion._to_ctypes	  s    {{r   Nc                 T    t         j                  | |xs | j                  d            S r9   )r   rT   r    )r   rR   s     r
   rT   z CTypesBaseStructOrUnion.__repr__  s%    ""4)I43C3CD3IJJr   r   )r   r   r   r   r   r4   rG   r   rX   r7   r)   rT   r   r   r
   r   r      sj    	IF F= 5 5@  
  Kr   r   c                      e Zd Zej                  ej
                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                   ej"                  dZdD ]t  Z ej(                  ee         Zee   eddez  z  <   e ej(                  ej,                        k(  ree   ed<   e ej(                  ej.                        k(  smee   ed<   v dD ]|  Z ej(                  ee         Zee   eddez  z  <   e ej(                  ej,                        k(  ree   ed	<   ee   ed
<   e ej(                  ej.                        k(  suee   ed<   ~ d Zd Zd Zd(dZd Zd Zd Zd Zd Z d Z!d Z"	 	 d)dZ#d Z$d Z%d Z&d Z'd*dZ(d*dZ)d Zd Z*d  Z+d! Z,d" Z-d#Z.d(d$Z/e0Z1d% Z2d(d&Z3d+d'Z4y#),CTypesBackend)charshortr   r   	long longsigned charunsigned charunsigned shortunsigned intunsigned longunsigned long longfloatdouble_Bool)r   r   r   r   r   zuint%d_trJ   	uintptr_tsize_t)r   r   r   r   r   zint%d_tintptr_t	ptrdiff_tssize_tc                 t    d| _         d| _        t        j                  | _        t        j                  | _        y r   )	RTLD_LAZYRTLD_NOWrK   RTLD_GLOBAL
RTLD_LOCALrF   s    r
   r   zCTypesBackend.__init__7  s+    !-- ++r   c                     || _         y r   )r@   )r   r@   s     r
   set_ffizCTypesBackend.set_ffi=  s	    r   c                     t         t        fS r   )r   r   rF   s    r
   
_get_typeszCTypesBackend._get_types@  s    :%%r   c                 F    t        j                  ||      }t        | |      S r   )rK   CDLLCTypesLibrary)r   pathflagscdlls       r
   load_libraryzCTypesBackend.load_libraryC  s    {{4'T4((r   c                 D     G d dt               }|j                          |S )Nc                   4    e Zd Zg ZdZed        Zed        Zy)/CTypesBackend.new_void_type.<locals>.CTypesVoidzvoid &c                      y r   r   novalues    r
   r7   z<CTypesBackend.new_void_type.<locals>.CTypesVoid._from_ctypesK  s    r   c                 L    | "t        dt        |       j                  d      y )NzNone expected, got z object)r   r   r   r   s    r
   r)   z:CTypesBackend.new_void_type.<locals>.CTypesVoid._to_ctypesN  s*    &#%)']%;%;%> ? ?r   N)r   r   r   r   r;   r   r7   r)   r   r   r
   
CTypesVoidr   H  s0    I#L  r   r   )r   rB   )r   r   s     r
   new_void_typezCTypesBackend.new_void_typeG  s"    	 	 	r   c                    dk(  rt              | j                     dk(  rd}n-dv rd}n&dv rd}n
dk(  rd}nd	} d
      j                  d
k(  fd| G fddt              j	                          S )Nwchar_tr   )r   r   r   )r   r   byter   r   r   c                 &   t        | t        t        t        f      rt        |       } | S t        | t              r| j                         } | S t        | t              rt        |       } | S | d} | S t        ddt        |       j                        r   )r.   r   r   r   r   rc   r   ordr   r   r   )r`   CTypesPrimitives    r
   _cast_source_to_intz=CTypesBackend.new_primitive_type.<locals>._cast_source_to_inth  s    &3e"45V M FJ/002 M FE*V M  M  !0$v,2G2G!I J Jr   c                      e Zd ZdgZW ZdW z  ZW Zd Ze fd       Z	edk(  sedk(  re
fd       Zd Zed	k(  re
fd
       Zd Zedk(  re
fd       Zd Zedk(  re
fd       Zd Zd ZeZedk(  s
edk(  sed	k(  refd       Zedk(  re fd       Zd Znd ZeZedk(  r
efd       Zed        Ze fd       Zedk(  rd Zedk(  rd Zyy)9CTypesBackend.new_primitive_type.<locals>.CTypesPrimitiverm   %s &c                     || _         y r   rm   r   r(   s     r
   r   zBCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__init__}  s	    #r   c                 D    |         S  j                  |             S r   )r)   )r#   r   r/   s    r
   r4   zKCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._create_ctype_obj  s%    < 7N_77=>>r   r   r   c                 H     |      } |      j                   } | |      S r   r'   r"   r`   r   r/   s     r
   ra   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._cast_from  s&    08F"6]00Fv;&r   c                     | j                   S r   r  rF   s    r
   __int__zACTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__int__      ;;&r   r   c                 l    t        |t        t        t        f      s |      } | t	        |            S r   )r.   r   r   r   r   r"   r`   r   s     r
   ra   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._cast_from  s-    %fsD%.@A!4V!<tF|,,r   c                 ,    t        | j                        S r   r   rm   rF   s    r
   r  zACTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__int__      t{{++r   r   c                 @     |      }t        |dz        } | |      S N   )bytechrr
  s     r
   ra   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._cast_from  s%    08F$Vd]3Fv;&r   c                 ,    t        | j                        S r   r   rm   rF   s    r
   r  zACTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__int__  r  r   r   c                     t        |t              rn<t        |t              r$t        |d      rt        |      }nt	        |      }n |      } |      j
                  } | |      S )N	__float__)r.   r   rk   hasattrr   r(   r  s     r
   ra   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._cast_from  sZ    !&%0#F,BC"6;7%*6]F%([F!4V!<"6]00Fv;&r   c                 ,    t        | j                        S r   r  rF   s    r
   r  zACTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__int__  r  r   c                     | j                   S r   r  rF   s    r
   r  zCCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__float__  r  r   c                    t        | t        t        f      s=t        | t              rt        |       } n!t	        dt        |       j                  z         |       j                  | k7  r#s| dk  rt        dz        t        dz        | S )Nzinteger expected, got %sr   z%s: negative integerz%s: integer out of bounds)	r.   r   r   r   r   r   r   r(   OverflowError)xr/   	is_signedrv   s    r
   r)   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._to_ctypes  s    %a#t5%a4 #AA"+,F,0G,<,<-= #> >Qx~~*(QU"/0F0M"NN"/0K2617 #8 8Hr   c                     t        | t              rt        |       dk(  r| S t        |       r| j                  S t	        dt        |       j                  z        )Nr   zcharacter expected, got %s)r.   r   r   rm   r   r   r   )r  r   s    r
   r)   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._to_ctypes  sQ    !!U+A! !!_5 xx#$@$(G$4$4%5 6 6r   c                 2    t        | j                        dk7  S r   r  rF   s    r
   r   zECTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__nonzero__  s    t{{+q00r   c                      | j                   dk7  S r   r  rF   s    r
   r   zECTypesBackend.new_primitive_type.<locals>.CTypesPrimitive.__nonzero__  s    ;;!++r   c                     t        | t        t        t        t        f      s!t        dt        |       j                  z         |       j                  S )Nzfloat expected, got %s)	r.   r   r   r   r   r   r   r   r(   )r  r/   s    r
   r)   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._to_ctypes  sF    %a#tUJ)GH'(@(,Q(8(8)9 : : 8>>)r   c                     t        | d|       S )Nr(   rs   r'   s    r
   r7   zFCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._from_ctypes  s    ugu55r   c                 2    j                  |      | _        y r   )r)   r(   )blobr#   r   s     r
   r   zECTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._initialize  s    ,77=
r   c                     | j                   S r   r  r   s     r
   r   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._to_string  r  r   c                 2    t        | j                  dz        S r  )chrrm   r   s     r
   r   zDCTypesBackend.new_primitive_type.<locals>.CTypesPrimitive._to_string  s    t{{T122r   N)r   r   r   r   r,   r;   r   r   r   r4   r   ra   r  r  rc   r)   r   r   r7   r   r   )r   r   r/   r  kind1rv   s   r
   r   r   w  sx   !
IF!D=LD$ ? ?
 u}' '' v~- -, v~' ', w' ','  'u}$&.  v~6 61,"Hw* * 6 6 > > v~'v~3 r   r   )rE   PRIMITIVE_TYPESr(   rk   rB   )r   rv   r   r   r   r/   r  r(  s    ` @@@@@r
   new_primitive_typez CTypesBackend.new_primitive_typeW  s    9%d++$$T*6>D((D77rB.I	 u	3 u	34 u	3n 	""$r   c                 2   | j                   j                  } |t        j                  d            u rdnX |t        j                  d             |t        j                  d            fv rdn |t        j                        u rdnd G fdd	t
              | j                   j                  t        j                        u s0| j                   j                  t        j                  d            u rd
_        j                          S )Nr   charpr   r   bytepvoidpgenericc                       e Zd ZdgZW dk(  redgz  ZW Z eW d      r; ej                  W j                        Z ej                  W j                        Z
nej                  Z eW e      rW j                  d      ZnW j                  d      ZfdZd Zd	 Zfd
ZfdZW dk(  sW dk(  re fd       ZW dk(  sW dk(  rd Z fdZ xZS )1CTypesBackend.new_pointer_type.<locals>.CTypesPtr_ownr,  __as_strbufr,   (* &)z * &c                    j                  |      }dk(  rWt        j                  |j                  dz         | _        t        j
                  | j                  | j                        | _        nt        j                  |      | _        t        j
                  | j                  t        j                        j                  | _
        d| _        y )Nr,      T)r4   rK   create_string_bufferr(   _CTypesPtr__as_strbufr   r,   r   r   rM   r   r2  )r   r#   ctypeobjBItemr   s      r
   r   z:CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__init__  s     22487?'-'B'B 0(2D$)/(($++*7D& *0)AD& &D,>,>,2OO!==BU  	r   c                     t        |t        t        f      r+| j                  | j                  || j
                  z  z         S t        S r   )r.   r   r   r   r   _bitem_sizerl   r   rn   s     r
   __add__z9CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__add__  sG    ec4[1//058H8H0H1I J J *)r   c                    t        |t        t        f      r+| j                  | j                  || j
                  z  z
        S t        |       t        |      u r&| j                  |j                  z
  | j
                  z  S t        S r   )r.   r   r   r   r   r<  r   rl   r=  s     r
   __sub__z9CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__sub__   ss    ec4[1//058H8H0H1I J J$Z4;. MMENN:t?O?OOO))r   c                 p    t        | dd      r|dk7  rt        j                  | j                  |         S )Nr2  Fr   )rs   
IndexErrorr7   r   r   indexr:  s     r
   __getitem__z=CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__getitem__)  s7    4/EQJ$$))$*<*<U*CDDr   c                 B    j                  |      | j                  |<   y r   )r)   r   r   rD  r(   r:  s      r
   __setitem__z=CTypesBackend.new_pointer_type.<locals>.CTypesPtr.__setitem__.  s    ,1,<,<U,C""5)r   r.  c                 v    |r+t        |d   t              rt        j                  |d         S t	        |   | S r   )r.   r   rK   c_char_psuperr1   )r"   r(   	CTypesPtrr   s     r
   r1   z@CTypesBackend.new_pointer_type.<locals>.CTypesPtr._arg_to_ctypes2  s8    E!He!<%uQx88$YCUKKr   r-  c                 R   |dk  rt         j                  }t        j                  | j                  t        j
                  t        j                              }d}||k  r||   dk7  r|dz  }||k  r	||   dk7  rdj                  t        |      D cg c]  }||   	 c}      S c c}w Nr   r6  r   r   )	sysmaxsizerK   r   r   POINTERc_charjoinranger   r   pnr   s        r
   r   z<CTypesBackend.new_pointer_type.<locals>.CTypesPtr._to_string:  s    z!$D$6$6$*NN6==$ACAAf*1Q f*18858$<aQqT$<==$<s   B$c                     t        | dd      r-dt        j                  | j                  j                        fz  S t
        |          S Nr2  Fzowning %d bytes)rs   rK   rL   r   r   rK  rG   )r   rL  r   s    r
   rG   z?CTypesBackend.new_pointer_type.<locals>.CTypesPtr._get_own_reprD  sL    4/,d&8&8&A&AB0E E EY;==r   )r   r   r   r   r   r  rK   rQ  r,   rL   r<  rM   
issubclassr   r    r;   r   r>  r@  rE  rH  r   r1   r   rG   __classcell__)r   r:  rL  r   s   @r
   rL  r1    s    Iwm_,	Fuh''5+fmmELL9%!34$009$008!**E
D w$'/L L w$'/>> >r   rL  T)r@   _get_cached_btyper   PrimitiveType	void_typer   r   rB   )r   r:  getbtyperL  r   s    ` @@r
   new_pointer_typezCTypesBackend.new_pointer_type  s    88--HU00899Dx 3 3M BC 3 3O DEG GDhu//DDK	> K	>( K	>Z TXX//@@TXX//0C0CF0KLL)-I&r   c                 p   dndz  j                   | j                  j                  } |t        j                  d            u rdn= |t        j                  d             |t        j                  d            fv rdnd G fdd	t
              j                          S )
Nz &[]z &[%d]r   r   r   r   r/  c                   R    e Zd ZddgZW W j                  W z  Znej                  d       W j                  W       ZW ZW Z	fdZ
efd       Zd ZfdZfdZW d	k(  sW d
k(  rd Z fdZfdZefd       Zefd       ZfdZed        Z xZS )1CTypesBackend.new_array_type.<locals>.CTypesArrayr   r2  r,   c                 R   it        |t        t        f      r|}d }n:dk(  rt        |t              rt	        |      dz   }nt        |      }t	        |      }j                  |z  | _        | j                         | _        d| _        || j                  | j                  |       y y )Nr   r   T)
r.   r   r   r   r   tupler,   r   r2  r   )r   r#   len1r:  r   lengths      r
   r   z:CTypesBackend.new_array_type.<locals>.CTypesArray.__init__j  s    >!$d4##JtU,C"4y1}$T{"4y"',,"5DK![[]
 	#$$TZZ6 $r   c                    t        |t              r(t        t        |            D cg c]
  }|||dz     }}nLt        |t              r1t        |      t        |       k7  st        |	      st        d|      t        |      }t        |      t        |       kD  rt        d      t        j                  | t        j                        j                  }t        j                  j                        }t        j                  j                        }t        |      D ]=  \  }}t        j                  |||z  z   |      }j!                  |j"                  |       ? y c c}w )Nr   zlength/type mismatch: ztoo many initializers)r.   r   rT  r   r   r   re  rB  rK   r   rM   r(   rQ  r,   rL   	enumerater   r   )
r$  r#   r   addrPTRitemsizer(   rV  r:  CTypesArrays
           r
   r   z=CTypesBackend.new_array_type.<locals>.CTypesArray._initializez  s   dE*16s4y1ABAD1Q3KBDB!$(:;IT2 *4 ="+$,P"QQ ;Dt9s4y($%<=={{49??nnU\\2!==6 )$ 9HAuD1x<$7=A%%ajj%89 Cs   E c                 ,    t        | j                        S r   )r   r   rF   s    r
   __len__z9CTypesBackend.new_array_type.<locals>.CTypesArray.__len__  s    4::&r   c                     d|cxk  rt        | j                        k  st         t        j                  | j                  |         S r   )r   r   rB  r7   rC  s     r
   rE  z=CTypesBackend.new_array_type.<locals>.CTypesArray.__getitem__  sC    U4S_4$$ 5$$))$**U*;<<r   c                     d|cxk  rt        | j                        k  st         t        j                  |      | j                  |<   y r   )r   r   rB  r)   rG  s      r
   rH  z=CTypesBackend.new_array_type.<locals>.CTypesArray.__setitem__  sB    U4S_4$$ 5$$$)$4$4U$;

5!r   r   r   c                 \   |dk  rt        | j                        }t        j                  | j                  t        j                  t        j
                              }d}||k  r||   dk7  r|dz  }||k  r	||   dk7  rdj                  t        |      D cg c]  }||   	 c}      S c c}w rN  )r   r   rK   r   rQ  rR  rS  rT  rU  s        r
   r   z<CTypesBackend.new_array_type.<locals>.CTypesArray._to_string  s    z!$TZZDJJ$*NN6==$ACAAf*1Q f*18858$<aQqT$<==$<s   B)c                     t        | dd      r#dt        j                  | j                        fz  S t        |          S rY  )rs   rK   rL   r   rK  rG   )r   rm  r   s    r
   rG   z?CTypesBackend.new_array_type.<locals>.CTypesArray._get_own_repr  s:    4/,djj0I/KKK[$=??r   c                     |d fv s|j                   rt        j                  | j                        S t        j                  | |      S r   )r   rK   r   r   r   rX   )r   rW   rL  s     r
   rX   zECTypesBackend.new_array_type.<locals>.CTypesArray._convert_to_address  s@    i..&2I2I!++DJJ77%99$GGr   c                 8    j                        }| |_        |S r   r   )ctypes_arrayr   rm  s     r
   r7   z>CTypesBackend.new_array_type.<locals>.CTypesArray._from_ctypes  s    "**;7)
r   c                 &    j                  |       S r   r3   )r(   rL  s    r
   r1   z@CTypesBackend.new_array_type.<locals>.CTypesArray._arg_to_ctypes  s     //66r   c                     t        |t        t        f      rQj                  t	        j
                  | j                        |t	        j                  j                        z  z         S t        S r   )
r.   r   r   r   rK   r   r   rL   r,   rl   )r   rn   r:  rL  s     r
   r>  z9CTypesBackend.new_array_type.<locals>.CTypesArray.__add__  sX    ec4[1$44((4ell ;;<= = *)r   c                 :    t        d| j                               )Nzcasting to )rE   r    r_   s     r
   ra   z<CTypesBackend.new_array_type.<locals>.CTypesArray._cast_from  s    )OO%+( ) )r   )r   r   r   r   r,   appendr    r;   _declared_length_CTPtrr   r   r   ro  rE  rH  r   rG   rX   r7   r1   r>  r   ra   r[  )r   r:  rm  rL  bracketsr   rg  s   @r
   rm  rc  `  s     &)I!.  * ,,X6L%F7  9 9$'=
<
 v~>@
H  
 7 7* ) )r   rm  )r   r@   r\  r   r]  r   rB   )r   rL  rg  r_  r:  rm  r}  r   s    `` @@@@r
   new_array_typezCTypesBackend.new_array_typeQ  s    >H&(H  88--HU00899Dx 3 3M BC 3 3O DEG GDDe	) e	), e	)N 	 r   c                      G d d|      |d_         | G fddt              }|j                          |S )Nc                       e Zd Zy);CTypesBackend._new_struct_or_union.<locals>.struct_or_unionNr   r   r   r
   struct_or_unionr    s    r   r  _c                   0    e Zd ZdgZW ZW dZW  xZZy)?CTypesBackend._new_struct_or_union.<locals>.CTypesStructOrUnionr   r:   N)r   r   r   r   r,   r;   _kindr   )r(  rv   r  s   r
   CTypesStructOrUnionr    s!     	I$F%)+L  EDr   r  )r   r   rB   )r   r   rv   base_ctypes_classr  r(  r  s     `  @@r
   _new_struct_or_unionz"CTypesBackend._new_struct_or_union  sH    	/ 	.2D#9 	! 	!"9 	! 	&&(""r   c                 D    | j                  d|t        j                        S )Nstruct)r  rK   	Structurer   rv   s     r
   new_struct_typezCTypesBackend.new_struct_type  s    ((49I9IJJr   c                 D    | j                  d|t        j                        S )Nunion)r  rK   Unionr  s     r
   new_union_typezCTypesBackend.new_union_type  s    (($EEr   c           	      r   |dk\  s|dk\  rt        d      j                  |D 	
cg c]  \  }}	}
|
 c}
}	}|D 	
cg c]  \  }}	}
|	
 }}	}}
|D 	
cg c]  \  }}	}
|

 }}	}}
i }g }|D ]U  \  }}	}
|
dk  r#|j                  ||	j                  f       |	||<   /|j                  ||	j                  |
f       t        ||<   W |dz  rd_        n	|r|_        |_        |_        t        fd       }|_        fdj                  dk(  t        t        t        ||                  |D ]  \  }}	}
|dk(  rt        d	      t        |      rt        d
|z        |
dk  r||	j                  |      t        j                   |	j                        fd}||	fd}t#        |	t$              r\d }|	j&                  dk(  rK||	j(                  j                  |      t        j                   |	j                        fd}n||	fd}||	fd}t+        |t-        ||              | j.                  j1                  t3        j4                  |            }D ]=  }t        ||      rt        d
|z        |fd}|fd}t+        ||t-        ||             ? y c c}
}	}w c c}
}	}w c c}
}	}w )Nr   zthe ctypes backend of CFFI does not support structures completed by verify(); please compile and install the _cffi_backend module.rJ   r   c                 ,            }| 	 ||        |S r   r   )r#   result
initializer  s     r
   r4   zACTypesBackend.complete_struct_or_union.<locals>._create_ctype_obj  s     $&F64(Mr   c                    r&t        |      dkD  rt        dt        |      fz        t        |t              stt        |t        t
        f      rt        d      t        |      }t        |      t              kD  rt        d
j                         z        t        t        |            }t        j                  |       }|j                         D ]~  \  }}|   \  }}|dk  sJ d       
j                  |      }t        j                  |j                        }t        j                   ||z   |      }	|j#                  |	j$                  |        y )Nr   zPunion initializer: %d items given, but only one supported (use a dict if needed)zunion initializer: got a strz"too many values for %s initializerr   z,not implemented: initializer with bit fields)r   
ValueErrorr.   dictr   unicoder   re  r    ziprK   r   itemsr   rQ  r,   r   r   r   )r$  r#   rj  fnamer(   BFieldbitsizer   rk  rV  r  fnamesis_unionname2fieldtypes             r
   r  z:CTypesBackend.complete_struct_or_union.<locals>.initialize  s@   t9q=$ &P(+D	|&4 5 5 dD)dUG$45#$BCCT{t9s6{*$%I%8%D%D%F&G H HC-.##D)D $

 6u"0"7{ FEF{,66u=nnV]]3KKvs3""1::u56r   r  r   znested anonymous structs/unionsz1the field name %r conflicts in the ctypes backendc                     t        j                  | j                        }t        j                  ||z   |      }|j	                  |j
                        S r   )rK   r   r   r   r7   r   )r   r  r  r   rk  rj  rV  s          r
   getterz6CTypesBackend.complete_struct_or_union.<locals>.getter%  sA     "++DJJ7DD6M37A!..qzz::r   c                 P    t        | j                  ||j                  |             y r   )setattrr   r)   )r   r(   r  r  s       r
   setterz6CTypesBackend.complete_struct_or_union.<locals>.setter+  s    DJJv/@/@/GHr   c                     t        j                  | j                        }t        j                  ||z   |      }|j	                  |      S r   )rK   r   r   r   r7   )r   r  	BFieldPtrr   rk  rj  rV  s          r
   r  z6CTypesBackend.complete_struct_or_union.<locals>.getter1  s=     $*#3#3DJJ#?D &D6M3 ?A#,#9#9!#<<r   c                 L    |j                  t        | j                  |            S r   )r7   rs   r   )r   r  r  s      r
   r  z6CTypesBackend.complete_struct_or_union.<locals>.getter9  s    !..wtzz5/IJJr   c                     |j                  |      }t        | j                  |      }t        | j                  ||       |t        | j                  |      k7  r"t        | j                  ||       t	        d      y )Nzvalue too large for bitfield)r)   rs   r   r  r  )r   r(   r  r  oldvalues        r
   r  z6CTypesBackend.complete_struct_or_union.<locals>.setter;  sf    "--e4E&tzz59HDJJu5

E ::

E8<+,JKK ;r   c                      t        | d   |      S r   r"  )r   r  s     r
   r  z6CTypesBackend.complete_struct_or_union.<locals>.getterJ  s    tAw..r   c                 $    t        | d   ||       y r   )r  )r   r(   r  s      r
   r  z6CTypesBackend.complete_struct_or_union.<locals>.setterL  s    Q.r   )rE   r,   rz  Ellipsis_pack__fields__bfield_typesr   r4   r  r  r  r  r  r   rK   rQ  rZ  r   r{  r|  r  propertyr@   r\  r   PointerType)r   r  fieldstp	totalsizetotalalignmentsflagspackr  r  r  btypes	bitfieldsbfield_typescfieldsr4   r  r  rL  r  r  r  r  r  s    `                 @@@@@r
   complete_struct_or_unionz&CTypesBackend.complete_struct_or_union  s    >^q0% 'V W W .448>??4UFG%?9?@@5eVW&@@=CDD!9%WD	D(. 	/$UFG{v}}56&,U#v}}g>?&.U#	/ A:%&O"%)O"#* ,8)		 
	
 1B-	6. ',,7c&#fi*@AB&, %	J"E67{)*KLL*E2  "68="> ? ?{',V"5"?"?"F%~~fmm<; /4F I f&89!F..!3/4*=*G*G*N'-~~fmm'D= (-V K.3F L '0HIK%	JN HH..u/@/@/DE	 	@Ey%(  "68="> ? ?#( /*/ /Iuhvv&>?	@} @@Ds   J$J+J2c                     D cg c]  }|j                          c}rj                  d       dj                         G fddt              j	                          S c c}w )Nz...z, c                      e Zd ZddgZ ej
                   eW dd      gW D  cg c]  }|j                   c}} ddiZW j                  dW d      Z	dfd		Z
ed
        Zd ZfdZfdZxZS c c}} w ):CTypesBackend.new_function_type.<locals>.CTypesFunctionPtr_own_callback_namer,   N	use_errnoTz(* &)()c                    dd l 
rJ d       t        dd       !j                  j                              nd fd}t	        t
              r@t        j                  t        j                  gD cg c]  }|j                   c}ddi}n	j                  } ||      | _
        t        j                  | j                  t        j                        j                  | _        | _        y c c}w )Nr   z#varargs not supported for callbacksr,   c                  \   g }t        |       D ]%  \  }}|j                  |j                  |             ' 	  | }j                  |      }t        t              r4|r0t        j                  |t        j                        j                  }|S d }|S #  	j	                          }Y \xY wr   )r  rz  r7   r)   	print_excrZ  r   rK   r   rM   r(   )
r   args2argBArgres2BArgsBResulterrorr#   	tracebacks
        r
   callbackzUCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__init__.<locals>.callbackf  s    E%(u%5 =	TT%6%6s%;<=%#U|&11$7 "'+;<#);;tV__#E#K#KD
  K $(DK%!++-$s   B B+r  T)r  rs   r7   r4   rZ  r   rK   	CFUNCTYPErM   r,   r   r   r(   r   r  )r   r#   r  r  r  callback_ctyper  r  r  CTypesFunctionPtrhas_varargss    ``   @r
   r   zCCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__init__]  s     &M(MM7Hd3?#0011%8:E !E   $ g'78 &,%5%5&(278$$++8&( #'&(N
 &7%=%=N%3H%=" &D,>,>,2OO!==BU %)" 9s   >C9
c                     |rt        d      y )NzActypes backend: not supported: initializers for function pointersrD   )r   r(   s     r
   r   zFCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr._initialize  s    - /O P P r   c                     t        | dd       }|rP| j                  j                  d      }| j                  |dz
     dvrd|z   }| j                  j                  d|      }t        j                  | |      S )Nr  r4  r   z )*rQ   )rs   r;   rD  r<   r   rT   )r   rR   r   s      r
   rT   zCCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__repr__  st     w5))//8A((1-U:!$v!..66wGF!**488r   c                 X    t        | dd       d| j                  S t        |          S )Nr  zcalling )rs   r  rK  rG   )r   r  r   s    r
   rG   zHCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr._get_own_repr  s2    4$7C+/+=+=??.CEEr   c                    
r6t        |      t              k\  sJ |t              d  }|d t               }nt        |      t              k(  sJ g }t        |      D ]%  \  }}|j                  |j                  |             ' 
rt	              D ]  \  }}|%|j                  t        j                  d             -t        |t              s2t        ddt              z   |z   t        |      j                  fz        |j                  |j                  |               | j                  | }	j                  |      S )Nr   zKargument %d passed in the variadic part needs to be a cdata object (got %s)r   )r   r  rz  r1   ri  rK   rM   r.   r   r   r   r   r   r7   )r   r   	extraargsctypes_argsr  r  r   r  r  r  r  s           r
   __call__zCCTypesBackend.new_function_type.<locals>.CTypesFunctionPtr.__call__  sL   t9E
222 $SZ[ 1IU,Dt9E
222 !$T5!1 AIC&&t':':3'?@A"+I"6 	D3;'..vq/AB$)#z:"+!F!"SZ!!3T#Y5G5G H!I#J J $**3+=+=c+BC	D ,++[9++F33r   r   )r   r   r   r   rK   r  rs   r,   r    r;   r   r   r   rT   rG   r  r[  ).0r  r   r  r  r  r  nameargss   00@r
   r  r  V  s    ('2I%V%%ggx&F 6@E'F'F6046F #..h/HIL'* '*R P P
9F
4 4C (Gs   Br  )r    rz  rS  r   rB   )r   r  r  r  r  r  r  s    ``` @@r
   new_function_typezCTypesBackend.new_function_typeP  si    3894D$$&9OOE"99X&Z	4 Z	4 0 Z	4x 	$$&  E :s   A/c                     t        t              sJ t        t        t	        |      t	        |                   G fdd|      }|j                          |S )Nc                   2    e Zd Zg ZdW  z  ZfdZfdZy)/CTypesBackend.new_enum_type.<locals>.CTypesEnumr   c                 f    | j                   }	 d||   fz  S # t        $ r t        |      cY S w xY w)Nz%d: %srm   KeyErrorstr)r   r(   reverse_mappings     r
   rG   z=CTypesBackend.new_enum_type.<locals>.CTypesEnum._get_own_repr  s?    &#uoe.D&EEE &u:%&s   	 00c                 \    | j                   }	 |   S # t        $ r t        |      cY S w xY wr   r  )r   r   r(   r  s      r
   r   z:CTypesBackend.new_enum_type.<locals>.CTypesEnum._to_string  s5    &*511 &u:%&s    ++N)r   r   r   r   r;   rG   r   )rv   r  s   r
   
CTypesEnumr    s    I!D=L&&r   r  )r.   r  r  r  reversedrB   )r   rv   enumerators
enumvalues	CTypesIntr  r  s    `    @r
   new_enum_typezCTypesBackend.new_enum_type  sS    $$$$s8J#7#+K#8 : ;	& 	&$ 	r   c                 *    t        j                         S r   )rK   	get_errnorF   s    r
   r  zCTypesBackend.get_errno  s    !!r   c                 .    t        j                  |       y r   )rK   	set_errnor  s     r
   r  zCTypesBackend.set_errno  s    r   c                 $    |j                  |      S r   )r   )r   br   s      r
   stringzCTypesBackend.string  s    ||F##r   c                     t        d      )Nzbuffer() with ctypes backendrD   )r   bptrsizes      r
   bufferzCTypesBackend.buffer  s    !"@AAr   c                     t        |t              r|j                         S t        |t              sJ |j	                         S r   )r.   r   r]   rZ  r[   )r   cdata_or_BTypes     r
   rL   zCTypesBackend.sizeof  s:    nj1!7799nj999!++--r   c                 F    t        |t              sJ |j                         S r   )rZ  r   rf   )r   BTypes     r
   alignofzCTypesBackend.alignof  s!    %,,,!!r   c                 P    t        |t              st        |j                  |      S r   )rZ  r   r   r$   r   r  r`   s      r
   newpzCTypesBackend.newp  s     %,O{{6""r   c                 $    |j                  |      S r   )ra   r  s      r
   r   zCTypesBackend.cast  s    ''r   c                     |J  |||      S r   r   )r   r  r`   r  onerrors        r
   r  zCTypesBackend.callback  s    VU##r   Nc                 @   | j                   "dd l} G d d|j                        }i |f| _         | j                   \  }|	  ||      = y fd}| j                  | j                  |      |      }||usJ ||f |||      <   |S # t        $ r t	        d      w xY w)Nr   c                       e Zd Zd Zd Zd Zy) CTypesBackend.gcp.<locals>.MyRefc                 :     |        }| |u xs |d uxr	 | |       u S r   r   )r   rn   myrefs      r
   rx   z'CTypesBackend.gcp.<locals>.MyRef.__eq__  s0     FE5= @T)>euw.>@r   c                     | |k(   S r   r   r=  s     r
   ry   z'CTypesBackend.gcp.<locals>.MyRef.__ne__  s     $..r   c                 |    	 | j                   S # t        $ r$ t         |              | _         | j                   cY S w xY wr   )_hashr-   r   rF   s    r
   r   z)CTypesBackend.gcp.<locals>.MyRef.__hash__  s7    *#zz)) *%)$&\
#zz)*s    *;;N)r   r   r   rx   ry   r   r   r   r
   MyRefr    s    @/*r   r  zFCan remove destructor only on a object previously returned by ffi.gc()c                 F    j                  | d      \  }}|	 ||       y y )N)NN)pop)kcdata
destructor
weak_caches      r
   removez!CTypesBackend.gcp.<locals>.remove  s+     *q, ?E:%5! &r   )_weakref_cache_refweakrefrefr  r   r   typeof)	r   r  r  r  r  r  r  	new_cdatar  s	           @r
   gcpzCTypesBackend.gcp  s    ""** * ')%iD# 33
ECuU|, 	"
 IIdkk%0%8	%%%05z/B
5F+,  C !B C CCs   	B Bc                 $    |j                  |      S r   )r    )r   r  r=   s      r
   getcnamezCTypesBackend.getcname  s      ..r   c                 >   t        |t              rq|dk(  rt        |t              r|j                  }t        |t
              st        d      |j                  |   }|t        u rt        d      ||j                  |      fS t        |t        t        f      rst        |t              r|j                  }t        |t              st        d      |j                  }|j                         |z  }|t        j                   kD  rt"        ||fS t        t%        |            )Nr   z expected a struct or union ctypeznot supported for bitfieldszexpected an array or ptr ctype)r.   r  rZ  r   r   r   r   r  r  r   r   r   r   r|  r[   rO  rP  r  r   )r   r  r   r	   r  r:  r   s          r
   typeoffsetofzCTypesBackend.typeoffsetof  s    i%axJu.>?e%<= BCC((3F! =>>EOOI677	C;/%!34e%56 @AALLE__&2F###6?"DO,,r   c                    t        |t              r.t        j                  t	        |      j                  |            }nt        |t              rK|#t        t	        |      j                  t              st        d      t	        |      j                  |      }n6t        |t              rt	        |      j                  |      }nt        d      |rat        j                  t        j                  t        j                  |t        j                        j                  |z         t	        |            }|j                  |      S )Nzunexpected cdata typez$expected a <cdata 'struct-or-union'>)r.   r   rK   r   r   r)   r   rZ  r   r   r   r   rM   r(   r7   )r   BTypePtrr  r   ptrs        r
   rawaddressofzCTypesBackend.rawaddressof5  s    e45..e!7!7!>?C/0~ZU0B0B0G&I 788u+((/C12u+((/CBCC++KKV__5;;fDFS	C $$S))r   )r   )r   r   r   r   )r   r   )5r   r   r   rK   rR  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  rL   _sizerM   c_size_tr   r   r   r   r   r*  r`  r~  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r   r  r  r  r#  r   r   r
   r   r     sG    ||&&}} //$00//
O"E ?oe452A%2H
ag./MFMM&//22+:5+AOK(MFMM&//22(7(>OH%? F @oe451@1G	QuW-.MFMM&//22*9%*@OJ'+:5+AOK(MFMM&//22)8)?OI&@,&) Xt^@wr# KF JK&'n@`c!J4" $B."#
($ #J F/-.*r   r   c                   $    e Zd Zd Zd Zd Zd Zy)r   c                      || _         || _        y r   )backendr   )r   r5  r   s      r
   r   zCTypesLibrary.__init__K  s    	r   c                 b    t        | j                  |      }|j                  |      }||_        |S r   )rs   r   r7   r  )r   r  rv   c_funcfuncobjs        r
   load_functionzCTypesLibrary.load_functionO  s.    D)$$V,r   c                     	 |j                   j                  | j                  |      }|j                  |      S # t        $ r}t	        |      d }~ww xY wr   )r,   in_dllr   r-   rE   r7   )r   r  rv   
ctypes_objes        r
   read_variablezCTypesLibrary.read_variableU  sQ    	),,TYY=J !!*--  	)%a((	)s   &9 	AAAc                 &   |j                  |      }|j                  j                  | j                  |      }t	        j
                  t	        j                  |      t	        j                  |      t	        j                  |j                               y r   )r)   r,   r;  r   rK   memmover   rL   )r   r  rv   r(   new_ctypes_objr<  s         r
   write_variablezCTypesLibrary.write_variable\  sc    ))%0\\((D9
v''
3''7}}U\\2	4r   N)r   r   r   r   r9  r>  rB  r   r   r
   r   r   I  s    .4r   r   )rK   ctypes.utilrt   rO  r   r   version_infor'  r  r  r  r   r   rT  r   r   r   objectr   rk   r   r   r   r   r   r   r   r
   <module>rF     s    ) ) dGGDF&G	 	@2 @2F4Z 4= =@@z @@F Kj  KFu*F u*p4F 4r   