15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// IncludeStringH.proto ////////////////////
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string.h>
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// IncludeCppStringH.proto ////////////////////
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string>
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// InitStrings.proto ////////////////////
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// InitStrings ////////////////////
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    while (t->p) {
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #if PY_MAJOR_VERSION < 3
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (t->is_unicode) {
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else if (t->intern) {
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            *t->p = PyString_InternFromString(t->s);
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #else  /* Python 3+ has unicode identifiers */
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (t->is_unicode | t->is_str) {
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (t->intern) {
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                *t->p = PyUnicode_InternFromString(t->s);
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            } else if (t->encoding) {
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            } else {
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            }
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #endif
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!*t->p)
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        ++t;
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// BytesContains.proto ////////////////////
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character); /*proto*/
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// BytesContains ////////////////////
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character) {
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const Py_ssize_t length = PyBytes_GET_SIZE(bytes);
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    char* char_start = PyBytes_AS_STRING(bytes);
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    char* pos;
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    for (pos=char_start; pos < char_start+length; pos++) {
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (character == pos[0]) return 1;
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// PyUCS4InUnicode.proto ////////////////////
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_UnicodeContainsUCS4(PyObject* unicode, Py_UCS4 character); /*proto*/
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicodeBufferContainsUCS4(Py_UNICODE* buffer, Py_ssize_t length, Py_UCS4 character); /*proto*/
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// PyUCS4InUnicode ////////////////////
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_UnicodeContainsUCS4(PyObject* unicode, Py_UCS4 character) {
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_PEP393_ENABLED
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const int kind = PyUnicode_KIND(unicode);
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (likely(kind != PyUnicode_WCHAR_KIND)) {
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t i;
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        const void* udata = PyUnicode_DATA(unicode);
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        const Py_ssize_t length = PyUnicode_GET_LENGTH(unicode);
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        for (i=0; i < length; i++) {
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (unlikely(character == PyUnicode_READ(kind, udata, i))) return 1;
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return 0;
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return __Pyx_PyUnicodeBufferContainsUCS4(
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyUnicode_AS_UNICODE(unicode),
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyUnicode_GET_SIZE(unicode),
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        character);
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicodeBufferContainsUCS4(Py_UNICODE* buffer, Py_ssize_t length, Py_UCS4 character) {
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_UNICODE uchar;
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_UNICODE* pos;
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #if Py_UNICODE_SIZE == 2
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (character > 65535) {
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        /* handle surrogate pairs for Py_UNICODE buffers in 16bit Unicode builds */
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_UNICODE high_val, low_val;
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        high_val = (Py_UNICODE) (0xD800 | (((character - 0x10000) >> 10) & ((1<<10)-1)));
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        low_val  = (Py_UNICODE) (0xDC00 | ( (character - 0x10000)        & ((1<<10)-1)));
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        for (pos=buffer; pos < buffer+length-1; pos++) {
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (unlikely(high_val == pos[0]) & unlikely(low_val == pos[1])) return 1;
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return 0;
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #endif
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    uchar = (Py_UNICODE) character;
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    for (pos=buffer; pos < buffer+length; pos++) {
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(uchar == pos[0])) return 1;
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// PyUnicodeContains.proto ////////////////////
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicode_Contains(PyObject* substring, PyObject* text, int eq) {
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int result = PyUnicode_Contains(text, substring);
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// StrEquals.proto ////////////////////
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: BytesEquals
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: UnicodeEquals
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// UnicodeEquals.proto ////////////////////
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// UnicodeEquals ////////////////////
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: BytesEquals
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyObject_RichCompareBool(s1, s2, equals);
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* owned_ref = NULL;
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int s1_is_unicode, s2_is_unicode;
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (s1 == s2) {
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        /* as done by PyObject_RichCompareBool(); also catches the (interned) empty string */
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto return_eq;
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    s1_is_unicode = PyUnicode_CheckExact(s1);
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    s2_is_unicode = PyUnicode_CheckExact(s2);
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        owned_ref = PyUnicode_FromObject(s2);
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(!owned_ref))
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        s2 = owned_ref;
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        s2_is_unicode = 1;
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        owned_ref = PyUnicode_FromObject(s1);
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(!owned_ref))
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        s1 = owned_ref;
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        s1_is_unicode = 1;
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return __Pyx_PyBytes_Equals(s1, s2, equals);
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (s1_is_unicode & s2_is_unicode) {
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t length;
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        int kind;
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        void *data1, *data2;
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #if CYTHON_PEP393_ENABLED
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0))
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #endif
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        length = __Pyx_PyUnicode_GET_LENGTH(s1);
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto return_ne;
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        // len(s1) == len(s2) >= 1  (empty string is interned, and "s1 is not s2")
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        kind = __Pyx_PyUnicode_KIND(s1);
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (kind != __Pyx_PyUnicode_KIND(s2)) {
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto return_ne;
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        data1 = __Pyx_PyUnicode_DATA(s1);
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        data2 = __Pyx_PyUnicode_DATA(s2);
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto return_ne;
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else if (length == 1) {
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto return_eq;
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            int result = memcmp(data1, data2, (size_t)(length * kind));
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            #if PY_MAJOR_VERSION < 3
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_XDECREF(owned_ref);
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            #endif
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return (equals == Py_EQ) ? (result == 0) : (result != 0);
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if ((s1 == Py_None) & s2_is_unicode) {
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto return_ne;
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if ((s2 == Py_None) & s1_is_unicode) {
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto return_ne;
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        int result;
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!py_result)
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        result = __Pyx_PyObject_IsTrue(py_result);
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_DECREF(py_result);
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return result;
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)return_eq:
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #if PY_MAJOR_VERSION < 3
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(owned_ref);
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #endif
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return (equals == Py_EQ);
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)return_ne:
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #if PY_MAJOR_VERSION < 3
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(owned_ref);
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #endif
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return (equals == Py_NE);
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// BytesEquals.proto ////////////////////
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// BytesEquals ////////////////////
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: IncludeStringH
2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY
2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyObject_RichCompareBool(s1, s2, equals);
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (s1 == s2) {
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        /* as done by PyObject_RichCompareBool(); also catches the (interned) empty string */
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return (equals == Py_EQ);
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        const char *ps1, *ps2;
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t length = PyBytes_GET_SIZE(s1);
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (length != PyBytes_GET_SIZE(s2))
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return (equals == Py_NE);
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        // len(s1) == len(s2) >= 1  (empty string is interned, and "s1 is not s2")
2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        ps1 = PyBytes_AS_STRING(s1);
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        ps2 = PyBytes_AS_STRING(s2);
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (ps1[0] != ps2[0]) {
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return (equals == Py_NE);
2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else if (length == 1) {
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return (equals == Py_EQ);
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            int result = memcmp(ps1, ps2, (size_t)length);
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return (equals == Py_EQ) ? (result == 0) : (result != 0);
2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return (equals == Py_NE);
2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return (equals == Py_NE);
2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        int result;
2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!py_result)
2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        result = __Pyx_PyObject_IsTrue(py_result);
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_DECREF(py_result);
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return result;
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetItemIntByteArray.proto ////////////////////
2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_GetItemInt_ByteArray(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_GetItemInt_ByteArray_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (PyErr_SetString(PyExc_IndexError, "bytearray index out of range"), -1))
2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_GetItemInt_ByteArray_Fast(PyObject* string, Py_ssize_t i,
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                         int wraparound, int boundscheck);
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetItemIntByteArray ////////////////////
2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_GetItemInt_ByteArray_Fast(PyObject* string, Py_ssize_t i,
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                         int wraparound, int boundscheck) {
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t length;
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (wraparound | boundscheck) {
2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        length = PyByteArray_GET_SIZE(string);
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (wraparound & unlikely(i < 0)) i += length;
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if ((!boundscheck) || likely((0 <= i) & (i < length))) {
2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return (unsigned char) (PyByteArray_AS_STRING(string)[i]);
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_SetString(PyExc_IndexError, "bytearray index out of range");
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return (unsigned char) (PyByteArray_AS_STRING(string)[i]);
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// SetItemIntByteArray.proto ////////////////////
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_SetItemInt_ByteArray(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_SetItemInt_ByteArray_Fast(o, (Py_ssize_t)i, v, wraparound, boundscheck) : \
3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (PyErr_SetString(PyExc_IndexError, "bytearray index out of range"), -1))
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_SetItemInt_ByteArray_Fast(PyObject* string, Py_ssize_t i, unsigned char v,
3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                         int wraparound, int boundscheck);
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// SetItemIntByteArray ////////////////////
3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_SetItemInt_ByteArray_Fast(PyObject* string, Py_ssize_t i, unsigned char v,
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                         int wraparound, int boundscheck) {
3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t length;
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (wraparound | boundscheck) {
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        length = PyByteArray_GET_SIZE(string);
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (wraparound & unlikely(i < 0)) i += length;
3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if ((!boundscheck) || likely((0 <= i) & (i < length))) {
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyByteArray_AS_STRING(string)[i] = (char) v;
3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return 0;
3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_SetString(PyExc_IndexError, "bytearray index out of range");
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyByteArray_AS_STRING(string)[i] = (char) v;
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return 0;
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetItemIntUnicode.proto ////////////////////
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_GetItemInt_Unicode(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_GetItemInt_Unicode_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (PyErr_SetString(PyExc_IndexError, "string index out of range"), (Py_UCS4)-1))
3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE Py_UCS4 __Pyx_GetItemInt_Unicode_Fast(PyObject* ustring, Py_ssize_t i,
3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                           int wraparound, int boundscheck);
3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetItemIntUnicode ////////////////////
3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE Py_UCS4 __Pyx_GetItemInt_Unicode_Fast(PyObject* ustring, Py_ssize_t i,
3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                           int wraparound, int boundscheck) {
3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t length;
3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_PEP393_ENABLED
3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(__Pyx_PyUnicode_READY(ustring) < 0)) return (Py_UCS4)-1;
3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (wraparound | boundscheck) {
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        length = __Pyx_PyUnicode_GET_LENGTH(ustring);
3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (wraparound & unlikely(i < 0)) i += length;
3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if ((!boundscheck) || likely((0 <= i) & (i < length))) {
3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return __Pyx_PyUnicode_READ_CHAR(ustring, i);
3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_SetString(PyExc_IndexError, "string index out of range");
3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return (Py_UCS4)-1;
3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return __Pyx_PyUnicode_READ_CHAR(ustring, i);
3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_cpp_string.proto ///////////////
3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: IncludeCppStringH
3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: decode_c_bytes
3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_cpp_string(
3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         std::string cppstring, Py_ssize_t start, Py_ssize_t stop,
3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* encoding, const char* errors,
3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return __Pyx_decode_c_bytes(
3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        cppstring.data(), cppstring.size(), start, stop, encoding, errors, decode_func);
3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_c_string.proto ///////////////
3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* cstring, Py_ssize_t start, Py_ssize_t stop,
3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* encoding, const char* errors,
3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));
3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_c_string ///////////////
3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: IncludeStringH
3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* duplicate code to avoid calling strlen() if start >= 0 and stop >= 0 */
3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* cstring, Py_ssize_t start, Py_ssize_t stop,
3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* encoding, const char* errors,
3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t length;
3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely((start < 0) | (stop < 0))) {
3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        length = strlen(cstring);
3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (start < 0) {
3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            start += length;
4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (start < 0)
4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                start = 0;
4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (stop < 0)
4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            stop += length;
4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    length = stop - start;
4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(length <= 0))
4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyUnicode_FromUnicode(NULL, 0);
4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    cstring += start;
4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (decode_func) {
4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return decode_func(cstring, length, errors);
4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyUnicode_Decode(cstring, length, encoding, errors);
4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_c_bytes.proto ///////////////
4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* encoding, const char* errors,
4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));
4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_c_bytes ///////////////
4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* encoding, const char* errors,
4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely((start < 0) | (stop < 0))) {
4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (start < 0) {
4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            start += length;
4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (start < 0)
4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                start = 0;
4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (stop < 0)
4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            stop += length;
4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (stop > length)
4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        stop = length;
4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    length = stop - start;
4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(length <= 0))
4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyUnicode_FromUnicode(NULL, 0);
4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    cstring += start;
4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (decode_func) {
4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return decode_func(cstring, length, errors);
4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyUnicode_Decode(cstring, length, encoding, errors);
4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_bytes.proto ///////////////
4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: decode_c_bytes
4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_bytes(
4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* string, Py_ssize_t start, Py_ssize_t stop,
4575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* encoding, const char* errors,
4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return __Pyx_decode_c_bytes(
4605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyBytes_AS_STRING(string), PyBytes_GET_SIZE(string),
4615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        start, stop, encoding, errors, decode_func);
4625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_bytearray.proto ///////////////
4655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: decode_c_bytes
4665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_bytearray(
4685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* string, Py_ssize_t start, Py_ssize_t stop,
4695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         const char* encoding, const char* errors,
4705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
4715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return __Pyx_decode_c_bytes(
4725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyByteArray_AS_STRING(string), PyByteArray_GET_SIZE(string),
4735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        start, stop, encoding, errors, decode_func);
4745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyUnicode_Substring.proto ///////////////
4775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring(
4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyObject* text, Py_ssize_t start, Py_ssize_t stop);
4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyUnicode_Substring ///////////////
4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring(
4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyObject* text, Py_ssize_t start, Py_ssize_t stop) {
4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t length;
4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_PEP393_ENABLED
4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(PyUnicode_READY(text) == -1)) return NULL;
4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    length = PyUnicode_GET_LENGTH(text);
4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    length = PyUnicode_GET_SIZE(text);
4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (start < 0) {
4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        start += length;
4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (start < 0)
4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            start = 0;
4965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (stop < 0)
4985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        stop += length;
4995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else if (stop > length)
5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        stop = length;
5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    length = stop - start;
5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (length <= 0)
5035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyUnicode_FromUnicode(NULL, 0);
5045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_PEP393_ENABLED
5055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyUnicode_FromKindAndData(PyUnicode_KIND(text),
5065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyUnicode_1BYTE_DATA(text) + start*PyUnicode_KIND(text), stop-start);
5075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
5085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(text)+start, stop-start);
5095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
5115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// py_unicode_istitle.proto ///////////////
5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Py_UNICODE_ISTITLE() doesn't match unicode.istitle() as the latter
5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// additionally allows character that comply with Py_UNICODE_ISUPPER()
5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX < 0x030200A2
5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_Py_UNICODE_ISTITLE(Py_UNICODE uchar)
5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
5215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_Py_UNICODE_ISTITLE(Py_UCS4 uchar)
5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return Py_UNICODE_ISTITLE(uchar) || Py_UNICODE_ISUPPER(uchar);
5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// unicode_tailmatch.proto ///////////////
5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Python's unicode.startswith() and unicode.endswith() support a
5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// tuple of prefixes/suffixes, whereas it's much more common to
5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// test for a single unicode string.
5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_PyUnicode_Tailmatch(PyObject* s, PyObject* substr,
5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                     Py_ssize_t start, Py_ssize_t end, int direction) {
5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(PyTuple_Check(substr))) {
5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t i, count = PyTuple_GET_SIZE(substr);
5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        for (i = 0; i < count; i++) {
5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            int result;
5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON
5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result = PyUnicode_Tailmatch(s, PyTuple_GET_ITEM(substr, i),
5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                         start, end, direction);
5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyObject* sub = PySequence_GetItem(substr, i);
5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (unlikely(!sub)) return -1;
5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result = PyUnicode_Tailmatch(s, sub, start, end, direction);
5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_DECREF(sub);
5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (result) {
5505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                return result;
5515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            }
5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return 0;
5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
5555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyUnicode_Tailmatch(s, substr, start, end, direction);
5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// bytes_tailmatch.proto ///////////////
5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_PyBytes_SingleTailmatch(PyObject* self, PyObject* arg, Py_ssize_t start,
5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                         Py_ssize_t end, int direction)
5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const char* self_ptr = PyBytes_AS_STRING(self);
5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t self_len = PyBytes_GET_SIZE(self);
5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const char* sub_ptr;
5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t sub_len;
5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int retval;
5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02060000
5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_buffer view;
5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    view.obj = NULL;
5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if ( PyBytes_Check(arg) ) {
5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sub_ptr = PyBytes_AS_STRING(arg);
5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sub_len = PyBytes_GET_SIZE(arg);
5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3
5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Python 2.x allows mixing unicode and str
5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else if ( PyUnicode_Check(arg) ) {
5825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyUnicode_Tailmatch(self, arg, start, end, direction);
5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else {
5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX < 0x02060000
5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(PyObject_AsCharBuffer(arg, &sub_ptr, &sub_len)))
5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(PyObject_GetBuffer(self, &view, PyBUF_SIMPLE) == -1))
5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sub_ptr = (const char*) view.buf;
5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sub_len = view.len;
5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (end > self_len)
5985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        end = self_len;
5995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else if (end < 0)
6005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        end += self_len;
6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (end < 0)
6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        end = 0;
6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (start < 0)
6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        start += self_len;
6055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (start < 0)
6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        start = 0;
6075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (direction > 0) {
6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        /* endswith */
6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (end-sub_len > start)
6115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            start = end - sub_len;
6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (start + sub_len <= end)
6155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        retval = !memcmp(self_ptr+start, sub_ptr, (size_t)sub_len);
6165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else
6175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        retval = 0;
6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02060000
6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (view.obj)
6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyBuffer_Release(&view);
6225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
6235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return retval;
6255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
6265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr, Py_ssize_t start,
6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                   Py_ssize_t end, int direction)
6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(PyTuple_Check(substr))) {
6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t i, count = PyTuple_GET_SIZE(substr);
6325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        for (i = 0; i < count; i++) {
6335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            int result;
6345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON
6355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result = __Pyx_PyBytes_SingleTailmatch(self, PyTuple_GET_ITEM(substr, i),
6365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                   start, end, direction);
6375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
6385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyObject* sub = PySequence_GetItem(substr, i);
6395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (unlikely(!sub)) return -1;
6405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result = __Pyx_PyBytes_SingleTailmatch(self, sub, start, end, direction);
6415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_DECREF(sub);
6425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
6435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (result) {
6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                return result;
6455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            }
6465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
6475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return 0;
6485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
6495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return __Pyx_PyBytes_SingleTailmatch(self, substr, start, end, direction);
6515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
6525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// str_tailmatch.proto ///////////////
6555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyStr_Tailmatch(PyObject* self, PyObject* arg, Py_ssize_t start,
6575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                               Py_ssize_t end, int direction);
6585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// str_tailmatch ///////////////
6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: bytes_tailmatch
6615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: unicode_tailmatch
6625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyStr_Tailmatch(PyObject* self, PyObject* arg, Py_ssize_t start,
6645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                               Py_ssize_t end, int direction)
6655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
6665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // We do not use a C compiler macro here to avoid "unused function"
6675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // warnings for the *_Tailmatch() function that is not being used in
6685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // the specific CPython version.  The C compiler will generate the same
6695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // code anyway, and will usually just remove the unused function.
6705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (PY_MAJOR_VERSION < 3)
6715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return __Pyx_PyBytes_Tailmatch(self, arg, start, end, direction);
6725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else
6735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return __Pyx_PyUnicode_Tailmatch(self, arg, start, end, direction);
6745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
6755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// bytes_index.proto ///////////////
6785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE char __Pyx_PyBytes_GetItemInt(PyObject* bytes, Py_ssize_t index, int check_bounds) {
6805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (check_bounds) {
6815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t size = PyBytes_GET_SIZE(bytes);
6825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(index >= size) | ((index < 0) & unlikely(index < -size))) {
6835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_SetString(PyExc_IndexError, "string index out of range");
6845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
6855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
6865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
6875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (index < 0)
6885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        index += PyBytes_GET_SIZE(bytes);
6895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyBytes_AS_STRING(bytes)[index];
6905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
6915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// StringJoin.proto ////////////////////
6945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3
6965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyString_Join __Pyx_PyBytes_Join
6975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyBaseString_Join(s, v) (PyUnicode_CheckExact(s) ? PyUnicode_Join(s, v) : __Pyx_PyBytes_Join(s, v))
6985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
6995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyString_Join PyUnicode_Join
7005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyBaseString_Join PyUnicode_Join
7015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
7025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON
7045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #if PY_MAJOR_VERSION < 3
7055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #define __Pyx_PyBytes_Join _PyString_Join
7065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #else
7075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #define __Pyx_PyBytes_Join _PyBytes_Join
7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #endif
7095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
7105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values); /*proto*/
7115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
7125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// StringJoin ////////////////////
7155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if !CYTHON_COMPILING_IN_CPYTHON
7175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values) {
7185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyObject_CallMethodObjArgs(sep, PYIDENT("join"), values, NULL);
7195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
7215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ByteArrayAppendObject.proto ////////////////////
7245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyByteArray_AppendObject(PyObject* bytearray, PyObject* value);
7265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ByteArrayAppendObject ////////////////////
7285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ByteArrayAppend
7295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyByteArray_AppendObject(PyObject* bytearray, PyObject* value) {
7315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t ival;
7325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3
7335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(PyString_Check(value))) {
7345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(PyString_GET_SIZE(value) != 1)) {
7355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_SetString(PyExc_ValueError, "string must be of size 1");
7365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
7375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
7385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        ival = (unsigned char) (PyString_AS_STRING(value)[0]);
7395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else
7405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
7415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {
7425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        // CPython calls PyNumber_Index() internally
7435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        ival = __Pyx_PyIndex_AsSsize_t(value);
7445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely((ival < 0) | (ival > 255))) {
7455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (ival == -1 && PyErr_Occurred())
7465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                return -1;
7475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)");
7485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return -1;
7495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
7505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
7515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return __Pyx_PyByteArray_Append(bytearray, ival);
7525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ByteArrayAppend.proto ////////////////////
7555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyByteArray_Append(PyObject* bytearray, int value);
7575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ByteArrayAppend ////////////////////
7595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ObjectHandling.c::PyObjectCallMethod
7605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyByteArray_Append(PyObject* bytearray, int value) {
7625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *pyval, *retval;
7635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON
7645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (likely((value >= 0) & (value <= 255))) {
7655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t n = Py_SIZE(bytearray);
7665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (likely(n != PY_SSIZE_T_MAX)) {
7675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (unlikely(PyByteArray_Resize(bytearray, n + 1) < 0))
7685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                return -1;
7695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyByteArray_AS_STRING(bytearray)[n] = value;
7705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return 0;
7715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
7725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
7735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)");
7745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
7755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
7765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
7775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    pyval = PyInt_FromLong(value);
7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!pyval))
7795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    retval = __Pyx_PyObject_CallMethod1(bytearray, PYIDENT("append"), pyval);
7815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(pyval);
7825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!retval))
7835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
7845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(retval);
7855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
7865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
787