[pypy-svn] r48821 - pypy/dist/pypy/lib/ctypes
fijal at codespeak.net
fijal at codespeak.net
Tue Nov 20 13:25:53 CET 2007
Author: fijal
Date: Tue Nov 20 13:25:52 2007
New Revision: 48821
Added:
pypy/dist/pypy/lib/ctypes/_basics.py (contents, props changed)
pypy/dist/pypy/lib/ctypes/_pointers.py (contents, props changed)
Modified:
pypy/dist/pypy/lib/ctypes/__init__.py
Log:
Shuffle stuff around
Modified: pypy/dist/pypy/lib/ctypes/__init__.py
==============================================================================
--- pypy/dist/pypy/lib/ctypes/__init__.py (original)
+++ pypy/dist/pypy/lib/ctypes/__init__.py Tue Nov 20 13:25:52 2007
@@ -28,69 +28,8 @@
self._handle = self.lib._handle.ptr(self.name, llargs,
self.restype._type_)
-class _SimpleCData(object):
- def __init__(self, value):
- self.value = value
-
-class c_ushort(_SimpleCData):
- _type_ = 'H'
-
-class c_double(_SimpleCData):
- _type_ = 'd'
-
-class c_ubyte(_SimpleCData):
- _type_ = 'B'
-
-class c_float(_SimpleCData):
- _type_ = 'f'
-
-class c_ulong(_SimpleCData):
- _type_ = 'L'
-
-class c_short(_SimpleCData):
- _type_ = 'h'
-
-class c_ubyte(_SimpleCData):
- _type_ = 'b'
-
-class c_byte(_SimpleCData):
- _type_ = 'B'
-
-class c_char(_SimpleCData):
- _type_ = 'c'
-
-class c_long(_SimpleCData):
- _type_ = 'l'
-
-class c_ulonglong(_SimpleCData):
- _type_ = 'Q'
-
-class c_longlong(_SimpleCData):
- _type_ = 'q'
-
-class c_int(_SimpleCData):
- _type_ = 'i'
-
-class c_uint(_SimpleCData):
- _type_ = 'I'
-
-class c_double(_SimpleCData):
- _type_ = 'd'
-
-class c_float(_SimpleCData):
- _type_ = 'f'
-
-c_size_t = c_ulong # XXX
-
-class POINTER(object):
- def __init__(self, cls):
- self.cls = cls
-
-class c_void_p(_SimpleCData):
- _type_ = 'P'
-
-class c_char_p(_SimpleCData):
- _type_ = 's'
+from ctypes._basics import *
+from ctypes._pointers import POINTER
class CDLL(object):
"""An instance of this class represents a loaded dll/shared
Added: pypy/dist/pypy/lib/ctypes/_basics.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/lib/ctypes/_basics.py Tue Nov 20 13:25:52 2007
@@ -0,0 +1,60 @@
+
+class _SimpleCData(object):
+ def __init__(self, value):
+ self.value = value
+
+class c_ushort(_SimpleCData):
+ _type_ = 'H'
+
+class c_double(_SimpleCData):
+ _type_ = 'd'
+
+class c_ubyte(_SimpleCData):
+ _type_ = 'B'
+
+class c_float(_SimpleCData):
+ _type_ = 'f'
+
+class c_ulong(_SimpleCData):
+ _type_ = 'L'
+
+class c_short(_SimpleCData):
+ _type_ = 'h'
+
+class c_ubyte(_SimpleCData):
+ _type_ = 'b'
+
+class c_byte(_SimpleCData):
+ _type_ = 'B'
+
+class c_char(_SimpleCData):
+ _type_ = 'c'
+
+class c_long(_SimpleCData):
+ _type_ = 'l'
+
+class c_ulonglong(_SimpleCData):
+ _type_ = 'Q'
+
+class c_longlong(_SimpleCData):
+ _type_ = 'q'
+
+class c_int(_SimpleCData):
+ _type_ = 'i'
+
+class c_uint(_SimpleCData):
+ _type_ = 'I'
+
+class c_double(_SimpleCData):
+ _type_ = 'd'
+
+class c_float(_SimpleCData):
+ _type_ = 'f'
+
+c_size_t = c_ulong # XXX
+
+class c_void_p(_SimpleCData):
+ _type_ = 'P'
+
+class c_char_p(_SimpleCData):
+ _type_ = 's'
Added: pypy/dist/pypy/lib/ctypes/_pointers.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/lib/ctypes/_pointers.py Tue Nov 20 13:25:52 2007
@@ -0,0 +1,31 @@
+
+# This cache maps types to pointers to them.
+_pointer_type_cache = {}
+
+class PointerMetaclass(type):
+ def __new__(self, name, superclass, attrs):
+ res = super(PointerMetaclass, self).__new__(self, name, superclass,
+ attrs)
+ return res
+
+class _Pointer(object):
+ __metaclass__ = PointerMetaclass
+
+def POINTER(cls):
+ try:
+ return _pointer_type_cache[cls]
+ except KeyError:
+ pass
+ if type(cls) is str:
+ klass = type(_Pointer)("LP_%s" % cls,
+ (_Pointer,),
+ {})
+ _pointer_type_cache[id(klass)] = klass
+ return klass
+ else:
+ name = "LP_%s" % cls.__name__
+ klass = type(_Pointer)(name,
+ (_Pointer,),
+ {'_type_': cls})
+ _pointer_type_cache[cls] = klass
+ return klass
More information about the Pypy-commit
mailing list