diff --git a/pyopencl/_pvt_struct.py b/pyopencl/_pvt_struct.py index f7461e5094f77b1ead29a0ad60f96511d7d41692..fa8718686a8cc5836edb2306000c1fefdbf7c1f9 100644 --- a/pyopencl/_pvt_struct.py +++ b/pyopencl/_pvt_struct.py @@ -29,6 +29,7 @@ THE SOFTWARE. #import pyopencl._cl as _cl import pyopencl.cffi_cl as _cl +import sys from struct import pack as _pack _size_t_char = ({ @@ -42,10 +43,29 @@ _type_char_map = { 'N': _size_t_char } del _size_t_char -def pack(type_char, obj): + + +def pack_normal(type_char, obj): + if type_char == 'F': + return _pack('f', obj.real) + _pack('f', obj.imag) + elif type_char == "D": + return _pack('d', obj.real) + _pack('d', obj.imag) + else: + return _pack(_type_char_map.get(type_char, type_char), obj) + + +def pack_py26(type_char, obj): if type_char == 'F': return _pack('f', obj.real) + _pack('f', obj.imag) elif type_char == "D": return _pack('d', obj.real) + _pack('d', obj.imag) + elif type_char in "LD": + return _pack(type_char, long(obj)) else: return _pack(_type_char_map.get(type_char, type_char), obj) + + +if (2, 6) <= sys.version_info < (2, 7): + pack = pack_py26 +else: + pack = pack_normal