Major fixes and new features
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# Copyright (C) 2016-present the asyncpg authors and contributors
|
||||
# <see AUTHORS file>
|
||||
#
|
||||
# This module is part of asyncpg and is released under
|
||||
# the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
cdef inline uint32_t _apg_tolower(uint32_t c):
|
||||
if c >= <uint32_t><Py_UCS4>'A' and c <= <uint32_t><Py_UCS4>'Z':
|
||||
return c + <uint32_t><Py_UCS4>'a' - <uint32_t><Py_UCS4>'A'
|
||||
else:
|
||||
return c
|
||||
|
||||
|
||||
cdef int apg_strcasecmp(const Py_UCS4 *s1, const Py_UCS4 *s2):
|
||||
cdef:
|
||||
uint32_t c1
|
||||
uint32_t c2
|
||||
int i = 0
|
||||
|
||||
while True:
|
||||
c1 = s1[i]
|
||||
c2 = s2[i]
|
||||
|
||||
if c1 != c2:
|
||||
c1 = _apg_tolower(c1)
|
||||
c2 = _apg_tolower(c2)
|
||||
if c1 != c2:
|
||||
return <int32_t>c1 - <int32_t>c2
|
||||
|
||||
if c1 == 0 or c2 == 0:
|
||||
break
|
||||
|
||||
i += 1
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
cdef int apg_strcasecmp_char(const char *s1, const char *s2):
|
||||
cdef:
|
||||
uint8_t c1
|
||||
uint8_t c2
|
||||
int i = 0
|
||||
|
||||
while True:
|
||||
c1 = <uint8_t>s1[i]
|
||||
c2 = <uint8_t>s2[i]
|
||||
|
||||
if c1 != c2:
|
||||
c1 = <uint8_t>_apg_tolower(c1)
|
||||
c2 = <uint8_t>_apg_tolower(c2)
|
||||
if c1 != c2:
|
||||
return <int8_t>c1 - <int8_t>c2
|
||||
|
||||
if c1 == 0 or c2 == 0:
|
||||
break
|
||||
|
||||
i += 1
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
cdef inline bint apg_ascii_isspace(Py_UCS4 ch):
|
||||
return (
|
||||
ch == ' ' or
|
||||
ch == '\n' or
|
||||
ch == '\r' or
|
||||
ch == '\t' or
|
||||
ch == '\v' or
|
||||
ch == '\f'
|
||||
)
|
||||
|
||||
|
||||
cdef Py_UCS4 *apg_parse_int32(Py_UCS4 *buf, int32_t *num):
|
||||
cdef:
|
||||
Py_UCS4 *p
|
||||
int32_t n = 0
|
||||
int32_t neg = 0
|
||||
|
||||
if buf[0] == '-':
|
||||
neg = 1
|
||||
buf += 1
|
||||
elif buf[0] == '+':
|
||||
buf += 1
|
||||
|
||||
p = buf
|
||||
while <int>p[0] >= <int><Py_UCS4>'0' and <int>p[0] <= <int><Py_UCS4>'9':
|
||||
n = 10 * n - (<int>p[0] - <int32_t><Py_UCS4>'0')
|
||||
p += 1
|
||||
|
||||
if p == buf:
|
||||
return NULL
|
||||
|
||||
if not neg:
|
||||
n = -n
|
||||
|
||||
num[0] = n
|
||||
|
||||
return p
|
||||
Reference in New Issue
Block a user