Skip to content

Commit d7c1068

Browse files
committed
Remove cython marshalling pass-through functions
1 parent 5ef6078 commit d7c1068

3 files changed

Lines changed: 23 additions & 54 deletions

File tree

cassandra/cython_marshal.pyx

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ from cassandra.util import is_little_endian
2626

2727
cdef bint PY3 = six.PY3
2828

29+
2930
ctypedef fused num_t:
3031
int64_t
3132
int32_t
@@ -38,56 +39,24 @@ ctypedef fused num_t:
3839
double
3940
float
4041

41-
cdef inline num_t copy_maybe_swap(char *buf, num_t *dummy=NULL): # dummy pointer because cython wants the fused type as an arg
42+
cdef inline num_t unpack_num(Buffer *buf, num_t *dummy=NULL): # dummy pointer because cython wants the fused type as an arg
4243
"""
4344
Copy to aligned destination, conditionally swapping to native byte order
4445
"""
45-
cdef num_t ret = 0
4646
cdef Py_ssize_t start, end, i
47-
cdef char* out = <char*> &ret
47+
cdef char *src = buf_read(buf, sizeof(num_t))
48+
cdef num_t ret = 0
49+
cdef char *out = <char*> &ret
4850

4951
if is_little_endian:
5052
for i in range(sizeof(num_t)):
51-
out[sizeof(num_t) - i - 1] = buf[i]
53+
out[sizeof(num_t) - i - 1] = src[i]
5254
else:
5355
# TODO: use inline function as in numpy_parser
54-
memcpy(out, buf, sizeof(num_t))
56+
memcpy(out, src, sizeof(num_t))
5557

5658
return ret
5759

58-
cdef inline Py_ssize_t div2(Py_ssize_t x):
59-
return x >> 1
60-
61-
cdef inline int64_t int64_unpack(Buffer *buf) except ?0xDEAD:
62-
return copy_maybe_swap[int64_t](buf_read(buf, sizeof(int64_t)))
63-
64-
cdef inline int32_t int32_unpack(Buffer *buf) except ?0xDEAD:
65-
return copy_maybe_swap[int32_t](buf_read(buf, sizeof(int32_t)))
66-
67-
cdef inline int16_t int16_unpack(Buffer *buf) except ?0xDED:
68-
return copy_maybe_swap[int16_t](buf_read(buf, sizeof(int16_t)))
69-
70-
cdef inline int8_t int8_unpack(Buffer *buf) except ?80:
71-
return copy_maybe_swap[int8_t](buf_read(buf, sizeof(int8_t)))
72-
73-
cdef inline uint64_t uint64_unpack(Buffer *buf) except ?0xDEAD:
74-
return copy_maybe_swap[uint64_t](buf_read(buf, sizeof(uint64_t)))
75-
76-
cdef inline uint32_t uint32_unpack(Buffer *buf) except ?0xDEAD:
77-
return copy_maybe_swap[uint32_t](buf_read(buf, sizeof(uint32_t)))
78-
79-
cdef inline uint16_t uint16_unpack(Buffer *buf) except ?0xDEAD:
80-
return copy_maybe_swap[uint16_t](buf_read(buf, sizeof(uint16_t)))
81-
82-
cdef inline uint8_t uint8_unpack(Buffer *buf) except ?0xff:
83-
return copy_maybe_swap[uint8_t](buf_read(buf, sizeof(uint8_t)))
84-
85-
cdef inline double double_unpack(Buffer *buf) except ?1.74:
86-
return copy_maybe_swap[double](buf_read(buf, sizeof(double)))
87-
88-
cdef inline float float_unpack(Buffer *buf) except ?1.74:
89-
return copy_maybe_swap[float](buf_read(buf, sizeof(float)))
90-
9160
cdef varint_unpack(Buffer *term):
9261
"""Unpack a variable-sized integer"""
9362
if PY3:

cassandra/deserializers.pyx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ cdef class DesDecimalType(Deserializer):
5353
cdef Buffer varint_buf
5454
slice_buffer(buf, &varint_buf, 4, buf.size - 4)
5555

56-
scale = int32_unpack(buf)
56+
scale = unpack_num[int32_t](buf)
5757
unscaled = varint_unpack(&varint_buf)
5858

5959
return Decimal('%de%d' % (unscaled, -scale))
@@ -66,14 +66,14 @@ cdef class DesUUIDType(Deserializer):
6666

6767
cdef class DesBooleanType(Deserializer):
6868
cdef deserialize(self, Buffer *buf, int protocol_version):
69-
if int8_unpack(buf):
69+
if unpack_num[int8_t](buf):
7070
return True
7171
return False
7272

7373

7474
cdef class DesByteType(Deserializer):
7575
cdef deserialize(self, Buffer *buf, int protocol_version):
76-
return int8_unpack(buf)
76+
return unpack_num[int8_t](buf)
7777

7878

7979
cdef class DesAsciiType(Deserializer):
@@ -85,22 +85,22 @@ cdef class DesAsciiType(Deserializer):
8585

8686
cdef class DesFloatType(Deserializer):
8787
cdef deserialize(self, Buffer *buf, int protocol_version):
88-
return float_unpack(buf)
88+
return unpack_num[float](buf)
8989

9090

9191
cdef class DesDoubleType(Deserializer):
9292
cdef deserialize(self, Buffer *buf, int protocol_version):
93-
return double_unpack(buf)
93+
return unpack_num[double](buf)
9494

9595

9696
cdef class DesLongType(Deserializer):
9797
cdef deserialize(self, Buffer *buf, int protocol_version):
98-
return int64_unpack(buf)
98+
return unpack_num[int64_t](buf)
9999

100100

101101
cdef class DesInt32Type(Deserializer):
102102
cdef deserialize(self, Buffer *buf, int protocol_version):
103-
return int32_unpack(buf)
103+
return unpack_num[int32_t](buf)
104104

105105

106106
cdef class DesIntegerType(Deserializer):
@@ -127,7 +127,7 @@ cdef class DesCounterColumnType(DesLongType):
127127

128128
cdef class DesDateType(Deserializer):
129129
cdef deserialize(self, Buffer *buf, int protocol_version):
130-
cdef double timestamp = int64_unpack(buf) / 1000.0
130+
cdef double timestamp = unpack_num[int64_t](buf) / 1000.0
131131
return datetime_from_timestamp(timestamp)
132132

133133

@@ -147,18 +147,18 @@ EPOCH_OFFSET_DAYS = 2 ** 31
147147

148148
cdef class DesSimpleDateType(Deserializer):
149149
cdef deserialize(self, Buffer *buf, int protocol_version):
150-
days = uint32_unpack(buf) - EPOCH_OFFSET_DAYS
150+
days = unpack_num[uint32_t](buf) - EPOCH_OFFSET_DAYS
151151
return util.Date(days)
152152

153153

154154
cdef class DesShortType(Deserializer):
155155
cdef deserialize(self, Buffer *buf, int protocol_version):
156-
return int16_unpack(buf)
156+
return unpack_num[int16_t](buf)
157157

158158

159159
cdef class DesTimeType(Deserializer):
160160
cdef deserialize(self, Buffer *buf, int protocol_version):
161-
return util.Time(int64_unpack(buf))
161+
return util.Time(unpack_num[int64_t](buf))
162162

163163

164164
cdef class DesUTF8Type(Deserializer):
@@ -273,9 +273,9 @@ cdef int _unpack_len(itemlen_t idx, itemlen_t *elemlen, Buffer *buf) except -1:
273273
slice_buffer(buf, &itemlen_buf, idx, sizeof(itemlen_t))
274274

275275
if itemlen_t is uint16_t:
276-
elemlen[0] = uint16_unpack(&itemlen_buf)
276+
elemlen[0] = unpack_num[uint16_t](&itemlen_buf)
277277
else:
278-
elemlen[0] = int32_unpack(&itemlen_buf)
278+
elemlen[0] = unpack_num[int32_t](&itemlen_buf)
279279

280280
return 0
281281

@@ -359,7 +359,7 @@ cdef class DesTupleType(_DesParameterizedType):
359359
item = None
360360
if p < buf.size:
361361
slice_buffer(buf, &itemlen_buf, p, 4)
362-
itemlen = int32_unpack(&itemlen_buf)
362+
itemlen = unpack_num[int32_t](&itemlen_buf)
363363
p += 4
364364
if itemlen >= 0:
365365
slice_buffer(buf, &item_buf, p, itemlen)
@@ -407,7 +407,7 @@ cdef class DesCompositeType(_DesParameterizedType):
407407
res = res[:i]
408408
break
409409

410-
element_length = uint16_unpack(buf)
410+
element_length = unpack_num[uint16_t](buf)
411411
slice_buffer(buf, &elem_buf, 2, element_length)
412412

413413
deserializer = self.deserializers[i]

cassandra/ioutils.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,4 @@ cdef inline int32_t read_int(BytesIOReader reader) except ?0xDEAD:
4444
cdef Buffer buf
4545
buf.ptr = reader.read(4)
4646
buf.size = 4
47-
return int32_unpack(&buf)
47+
return unpack_num[int32_t](&buf)

0 commit comments

Comments
 (0)