#ifndef Py_INTERNAL_BYTESOBJECT_H #define Py_INTERNAL_BYTESOBJECT_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_BUILD_CORE # error "this header requires Py_BUILD_CORE define" #endif extern PyObject* _PyBytes_FormatEx( const char *format, Py_ssize_t format_len, PyObject *args, int use_bytearray); extern PyObject* _PyBytes_FromHex( PyObject *string, int use_bytearray); // Helper for PyBytes_DecodeEscape that detects invalid escape chars. // Export for test_peg_generator. PyAPI_FUNC(PyObject*) _PyBytes_DecodeEscape2(const char *, Py_ssize_t, const char *, int *, const char **); // Substring Search. // // Returns the index of the first occurrence of // a substring ("needle") in a larger text ("haystack"). // If the needle is not found, return -1. // If the needle is found, add offset to the index. // // Export for 'mmap' shared extension. PyAPI_FUNC(Py_ssize_t) _PyBytes_Find(const char *haystack, Py_ssize_t len_haystack, const char *needle, Py_ssize_t len_needle, Py_ssize_t offset); // Same as above, but search right-to-left. // Export for 'mmap' shared extension. PyAPI_FUNC(Py_ssize_t) _PyBytes_ReverseFind(const char *haystack, Py_ssize_t len_haystack, const char *needle, Py_ssize_t len_needle, Py_ssize_t offset); // Helper function to implement the repeat and inplace repeat methods on a // buffer. // // len_dest is assumed to be an integer multiple of len_src. // If src equals dest, then assume the operation is inplace. // // This method repeately doubles the number of bytes copied to reduce // the number of invocations of memcpy. // // Export for 'array' shared extension. PyAPI_FUNC(void) _PyBytes_Repeat(char* dest, Py_ssize_t len_dest, const char* src, Py_ssize_t len_src); /* --- PyBytesWriter ------------------------------------------------------ */ struct PyBytesWriter { char small_buffer[256]; PyObject *obj; Py_ssize_t size; int use_bytearray; int overallocate; }; // Export for '_testcapi' shared extension PyAPI_FUNC(PyBytesWriter*) _PyBytesWriter_CreateByteArray(Py_ssize_t size); static inline Py_ssize_t _PyBytesWriter_GetSize(PyBytesWriter *writer) { return writer->size; } static inline char* _PyBytesWriter_GetData(PyBytesWriter *writer) { if (writer->obj == NULL) { return writer->small_buffer; } else if (writer->use_bytearray) { return PyByteArray_AS_STRING(writer->obj); } else { return PyBytes_AS_STRING(writer->obj); } } #ifdef __cplusplus } #endif #endif /* !Py_INTERNAL_BYTESOBJECT_H */