@@ -219,87 +219,95 @@ class py_object(_CanCastTo, _SimpleCData[_T]):
219219 if sys .version_info >= (3 , 14 ):
220220 def __class_getitem__ (cls , item : Any , / ) -> GenericAlias : ...
221221
222- class c_bool (_SimpleCData [bool ]):
222+ @type_check_only
223+ class _SwappableCData :
224+ __ctype_be__ : ClassVar [type [Self ]]
225+ __ctype_le__ : ClassVar [type [Self ]]
226+
227+ class c_bool (_SwappableCData , _SimpleCData [bool ]):
223228 _type_ : ClassVar [Literal ["?" ]]
224229 def __init__ (self , value : SupportsBool | SupportsLen | None = ...) -> None : ...
225230
226- class c_byte (_SimpleCData [int ]):
231+ class c_byte (_SwappableCData , _SimpleCData [int ]):
227232 _type_ : ClassVar [Literal ["b" ]]
228233
229- class c_ubyte (_SimpleCData [int ]):
234+ class c_ubyte (_SwappableCData , _SimpleCData [int ]):
230235 _type_ : ClassVar [Literal ["B" ]]
231236
232- class c_short (_SimpleCData [int ]):
237+ class c_short (_SwappableCData , _SimpleCData [int ]):
233238 _type_ : ClassVar [Literal ["h" ]]
234239
235- class c_ushort (_SimpleCData [int ]):
240+ class c_ushort (_SwappableCData , _SimpleCData [int ]):
236241 _type_ : ClassVar [Literal ["H" ]]
237242
238- class c_long (_SimpleCData [int ]):
243+ class c_long (_SwappableCData , _SimpleCData [int ]):
239244 _type_ : ClassVar [Literal ["l" ]]
240245
241- class c_ulong (_SimpleCData [int ]):
246+ class c_ulong (_SwappableCData , _SimpleCData [int ]):
242247 _type_ : ClassVar [Literal ["L" ]]
243248
244- class c_int (_SimpleCData [int ]): # can be an alias for c_long
249+ class c_int (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_long
245250 _type_ : ClassVar [Literal ["i" , "l" ]]
246251
247- class c_uint (_SimpleCData [int ]): # can be an alias for c_ulong
252+ class c_uint (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_ulong
248253 _type_ : ClassVar [Literal ["I" , "L" ]]
249254
250- class c_longlong (_SimpleCData [int ]): # can be an alias for c_long
255+ class c_longlong (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_long
251256 _type_ : ClassVar [Literal ["q" , "l" ]]
252257
253- class c_ulonglong (_SimpleCData [int ]): # can be an alias for c_ulong
258+ class c_ulonglong (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_ulong
254259 _type_ : ClassVar [Literal ["Q" , "L" ]]
255260
256261c_int8 = c_byte
257262c_uint8 = c_ubyte
258263
259- class c_int16 (_SimpleCData [int ]): # can be an alias for c_short or c_int
264+ class c_int16 (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_short or c_int
260265 _type_ : ClassVar [Literal ["h" , "i" ]]
261266
262- class c_uint16 (_SimpleCData [int ]): # can be an alias for c_ushort or c_uint
267+ class c_uint16 (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_ushort or c_uint
263268 _type_ : ClassVar [Literal ["H" , "I" ]]
264269
265- class c_int32 (_SimpleCData [int ]): # can be an alias for c_int or c_long
270+ class c_int32 (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_int or c_long
266271 _type_ : ClassVar [Literal ["i" , "l" ]]
267272
268- class c_uint32 (_SimpleCData [int ]): # can be an alias for c_uint or c_ulong
273+ class c_uint32 (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_uint or c_ulong
269274 _type_ : ClassVar [Literal ["I" , "L" ]]
270275
271- class c_int64 (_SimpleCData [int ]): # can be an alias for c_long or c_longlong
276+ class c_int64 (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_long or c_longlong
272277 _type_ : ClassVar [Literal ["l" , "q" ]]
273278
274- class c_uint64 (_SimpleCData [int ]): # can be an alias for c_ulong or c_ulonglong
279+ class c_uint64 (_SwappableCData , _SimpleCData [int ]): # can be an alias for c_ulong or c_ulonglong
275280 _type_ : ClassVar [Literal ["L" , "Q" ]]
276281
277- class c_ssize_t (_SimpleCData [int ]): # alias for c_int, c_long, or c_longlong
282+ class c_ssize_t (_SwappableCData , _SimpleCData [int ]): # alias for c_int, c_long, or c_longlong
278283 _type_ : ClassVar [Literal ["i" , "l" , "q" ]]
279284
280- class c_size_t (_SimpleCData [int ]): # alias for c_uint, c_ulong, or c_ulonglong
285+ class c_size_t (_SwappableCData , _SimpleCData [int ]): # alias for c_uint, c_ulong, or c_ulonglong
281286 _type_ : ClassVar [Literal ["I" , "L" , "Q" ]]
282287
283- class c_float (_SimpleCData [float ]):
288+ class c_float (_SwappableCData , _SimpleCData [float ]):
284289 _type_ : ClassVar [Literal ["f" ]]
285290
286- class c_double (_SimpleCData [float ]):
291+ class c_double (_SwappableCData , _SimpleCData [float ]):
287292 _type_ : ClassVar [Literal ["d" ]]
288293
289- class c_longdouble (_SimpleCData [float ]): # can be an alias for c_double
294+ class c_longdouble (_SwappableCData , _SimpleCData [float ]): # can be an alias for c_double
290295 _type_ : ClassVar [Literal ["d" , "g" ]]
291296
292297if sys .version_info >= (3 , 14 ) and sys .platform != "win32" :
293- class c_double_complex (_SimpleCData [complex ]):
298+ # NOTE: currently (3.14.4) the `__ctype_{be,le}__` attributes of these complex types are missing at runtime:
299+ # https://github.com/python/cpython/issues/148464
300+
301+ class c_double_complex (_SwappableCData , _SimpleCData [complex ]):
294302 _type_ : ClassVar [Literal ["D" ]]
295303
296- class c_float_complex (_SimpleCData [complex ]):
304+ class c_float_complex (_SwappableCData , _SimpleCData [complex ]):
297305 _type_ : ClassVar [Literal ["F" ]]
298306
299- class c_longdouble_complex (_SimpleCData [complex ]):
307+ class c_longdouble_complex (_SwappableCData , _SimpleCData [complex ]):
300308 _type_ : ClassVar [Literal ["G" ]]
301309
302- class c_char (_SimpleCData [bytes ]):
310+ class c_char (_SwappableCData , _SimpleCData [bytes ]):
303311 _type_ : ClassVar [Literal ["c" ]]
304312 def __init__ (self , value : int | bytes | bytearray = ...) -> None : ...
305313
0 commit comments