Skip to content

Commit 635e04a

Browse files
committed
Drop write_utf8() and read_utf8(); optimize read_len_prefixed_utf8()
1 parent 1bcd54e commit 635e04a

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

buffer.pxd

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ cdef class WriteBuffer:
2828
cdef inline len(self):
2929
return self._length
3030

31+
cdef inline write_len_prefixed_utf8(self, str s):
32+
return self.write_len_prefixed_bytes(s.encode('utf-8'))
33+
3134
cdef inline _check_readonly(self)
3235
cdef inline _ensure_alloced(self, ssize_t extra_length)
3336
cdef _reallocate(self, ssize_t new_size)
@@ -39,7 +42,6 @@ cdef class WriteBuffer:
3942
cdef write_len_prefixed_bytes(self, bytes data)
4043
cdef write_bytestring(self, bytes string)
4144
cdef write_str(self, str string, str encoding)
42-
cdef write_utf8(self, str string)
4345
cdef write_cstr(self, const char *data, ssize_t len)
4446
cdef write_int16(self, int16_t i)
4547
cdef write_int32(self, int32_t i)
@@ -101,12 +103,6 @@ cdef class ReadBuffer:
101103
cdef inline int32_t get_message_length(self):
102104
return self._current_message_len
103105

104-
cdef inline read_utf8(self):
105-
return self.read_null_str().decode('utf-8')
106-
107-
cdef inline read_len_prefixed_utf8(self):
108-
return self.read_len_prefixed_bytes().decode('utf-8')
109-
110106
cdef feed_data(self, data)
111107
cdef inline _ensure_first_buf(self)
112108
cdef _switch_to_next_buf(self)
@@ -116,6 +112,7 @@ cdef class ReadBuffer:
116112
cdef inline _read_and_discard(self, ssize_t nbytes)
117113
cdef bytes read_bytes(self, ssize_t nbytes)
118114
cdef bytes read_len_prefixed_bytes(self)
115+
cdef str read_len_prefixed_utf8(self)
119116
cdef inline int32_t read_int32(self) except? -1
120117
cdef inline int16_t read_int16(self) except? -1
121118
cdef inline read_null_str(self)

buffer.pyx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,6 @@ cdef class WriteBuffer:
151151
cdef write_str(self, str string, str encoding):
152152
self.write_bytestring(string.encode(encoding))
153153

154-
cdef write_utf8(self, str string):
155-
self.write_bytestring(string.encode('utf-8'))
156-
157154
cdef write_len_prefixed_bytes(self, bytes data):
158155
# Write a length-prefixed (not NULL-terminated) UTF-8 string.
159156
cdef:
@@ -401,6 +398,23 @@ cdef class ReadBuffer:
401398
'negative length for a len-prefixed bytes value')
402399
return self.read_bytes(size)
403400

401+
cdef str read_len_prefixed_utf8(self):
402+
cdef:
403+
int32_t size
404+
const char *cbuf
405+
406+
size = self.read_int32()
407+
if size < 0:
408+
raise exceptions.BufferError(
409+
'negative length for a len-prefixed bytes value')
410+
411+
self._ensure_first_buf()
412+
cbuf = self._try_read_bytes(size)
413+
if cbuf != NULL:
414+
return cpython.PyUnicode_DecodeUTF8(cbuf, size, NULL)
415+
else:
416+
return self.read_len_prefixed_bytes().decode('utf-8')
417+
404418
cdef inline char read_byte(self) except? -1:
405419
cdef const char *first_byte
406420

0 commit comments

Comments
 (0)