Home | History | Annotate | Download | only in Include
      1 
      2 /* Bytes (String) object interface */
      3 
      4 #ifndef Py_BYTESOBJECT_H
      5 #define Py_BYTESOBJECT_H
      6 #ifdef __cplusplus
      7 extern "C" {
      8 #endif
      9 
     10 #include <stdarg.h>
     11 
     12 /*
     13 Type PyBytesObject represents a character string.  An extra zero byte is
     14 reserved at the end to ensure it is zero-terminated, but a size is
     15 present so strings with null bytes in them can be represented.  This
     16 is an immutable object type.
     17 
     18 There are functions to create new string objects, to test
     19 an object for string-ness, and to get the
     20 string value.  The latter function returns a null pointer
     21 if the object is not of the proper type.
     22 There is a variant that takes an explicit size as well as a
     23 variant that assumes a zero-terminated string.  Note that none of the
     24 functions should be applied to nil objects.
     25 */
     26 
     27 /* Caching the hash (ob_shash) saves recalculation of a string's hash value.
     28    This significantly speeds up dict lookups. */
     29 
     30 #ifndef Py_LIMITED_API
     31 typedef struct {
     32     PyObject_VAR_HEAD
     33     Py_hash_t ob_shash;
     34     char ob_sval[1];
     35 
     36     /* Invariants:
     37      *     ob_sval contains space for 'ob_size+1' elements.
     38      *     ob_sval[ob_size] == 0.
     39      *     ob_shash is the hash of the string or -1 if not computed yet.
     40      */
     41 } PyBytesObject;
     42 #endif
     43 
     44 PyAPI_DATA(PyTypeObject) PyBytes_Type;
     45 PyAPI_DATA(PyTypeObject) PyBytesIter_Type;
     46 
     47 #define PyBytes_Check(op) \
     48                  PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
     49 #define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type)
     50 
     51 PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
     52 PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
     53 PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *);
     54 PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list)
     55 				Py_GCC_ATTRIBUTE((format(printf, 1, 0)));
     56 PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...)
     57 				Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
     58 PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *);
     59 PyAPI_FUNC(char *) PyBytes_AsString(PyObject *);
     60 PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int);
     61 PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *);
     62 PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *);
     63 #ifndef Py_LIMITED_API
     64 PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
     65 PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
     66     const char *format,
     67     Py_ssize_t format_len,
     68     PyObject *args,
     69     int use_bytearray);
     70 PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
     71     PyObject *string,
     72     int use_bytearray);
     73 #endif
     74 PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,
     75 						   const char *, Py_ssize_t,
     76 						   const char *);
     77 #ifndef Py_LIMITED_API
     78 /* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
     79 PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
     80                                              const char *, Py_ssize_t,
     81                                              const char *,
     82                                              const char **);
     83 #endif
     84 
     85 /* Macro, trading safety for speed */
     86 #ifndef Py_LIMITED_API
     87 #define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
     88                                 (((PyBytesObject *)(op))->ob_sval))
     89 #define PyBytes_GET_SIZE(op)  (assert(PyBytes_Check(op)),Py_SIZE(op))
     90 #endif
     91 
     92 /* _PyBytes_Join(sep, x) is like sep.join(x).  sep must be PyBytesObject*,
     93    x must be an iterable object. */
     94 #ifndef Py_LIMITED_API
     95 PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
     96 #endif
     97 
     98 /* Provides access to the internal data buffer and size of a string
     99    object or the default encoded version of a Unicode object. Passing
    100    NULL as *len parameter will force the string buffer to be
    101    0-terminated (passing a string with embedded NULL characters will
    102    cause an exception).  */
    103 PyAPI_FUNC(int) PyBytes_AsStringAndSize(
    104     PyObject *obj,      /* string or Unicode object */
    105     char **s,           /* pointer to buffer variable */
    106     Py_ssize_t *len     /* pointer to length variable or NULL
    107                            (only possible for 0-terminated
    108                            strings) */
    109     );
    110 
    111 /* Using the current locale, insert the thousands grouping
    112    into the string pointed to by buffer.  For the argument descriptions,
    113    see Objects/stringlib/localeutil.h */
    114 #ifndef Py_LIMITED_API
    115 PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer,
    116                                                    Py_ssize_t n_buffer,
    117                                                    char *digits,
    118                                                    Py_ssize_t n_digits,
    119                                                    Py_ssize_t min_width);
    120 
    121 /* Using explicit passed-in values, insert the thousands grouping
    122    into the string pointed to by buffer.  For the argument descriptions,
    123    see Objects/stringlib/localeutil.h */
    124 PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
    125                                                    Py_ssize_t n_buffer,
    126                                                    char *digits,
    127                                                    Py_ssize_t n_digits,
    128                                                    Py_ssize_t min_width,
    129                                                    const char *grouping,
    130                                                    const char *thousands_sep);
    131 #endif
    132 
    133 /* Flags used by string formatting */
    134 #define F_LJUST (1<<0)
    135 #define F_SIGN	(1<<1)
    136 #define F_BLANK (1<<2)
    137 #define F_ALT	(1<<3)
    138 #define F_ZERO	(1<<4)
    139 
    140 #ifndef Py_LIMITED_API
    141 /* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
    142    A _PyBytesWriter variable must be declared at the end of variables in a
    143    function to optimize the memory allocation on the stack. */
    144 typedef struct {
    145     /* bytes, bytearray or NULL (when the small buffer is used) */
    146     PyObject *buffer;
    147 
    148     /* Number of allocated size. */
    149     Py_ssize_t allocated;
    150 
    151     /* Minimum number of allocated bytes,
    152        incremented by _PyBytesWriter_Prepare() */
    153     Py_ssize_t min_size;
    154 
    155     /* If non-zero, use a bytearray instead of a bytes object for buffer. */
    156     int use_bytearray;
    157 
    158     /* If non-zero, overallocate the buffer (default: 0).
    159        This flag must be zero if use_bytearray is non-zero. */
    160     int overallocate;
    161 
    162     /* Stack buffer */
    163     int use_small_buffer;
    164     char small_buffer[512];
    165 } _PyBytesWriter;
    166 
    167 /* Initialize a bytes writer
    168 
    169    By default, the overallocation is disabled. Set the overallocate attribute
    170    to control the allocation of the buffer. */
    171 PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
    172 
    173 /* Get the buffer content and reset the writer.
    174    Return a bytes object, or a bytearray object if use_bytearray is non-zero.
    175    Raise an exception and return NULL on error. */
    176 PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
    177     void *str);
    178 
    179 /* Deallocate memory of a writer (clear its internal buffer). */
    180 PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
    181 
    182 /* Allocate the buffer to write size bytes.
    183    Return the pointer to the beginning of buffer data.
    184    Raise an exception and return NULL on error. */
    185 PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
    186     Py_ssize_t size);
    187 
    188 /* Ensure that the buffer is large enough to write *size* bytes.
    189    Add size to the writer minimum size (min_size attribute).
    190 
    191    str is the current pointer inside the buffer.
    192    Return the updated current pointer inside the buffer.
    193    Raise an exception and return NULL on error. */
    194 PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
    195     void *str,
    196     Py_ssize_t size);
    197 
    198 /* Resize the buffer to make it larger.
    199    The new buffer may be larger than size bytes because of overallocation.
    200    Return the updated current pointer inside the buffer.
    201    Raise an exception and return NULL on error.
    202 
    203    Note: size must be greater than the number of allocated bytes in the writer.
    204 
    205    This function doesn't use the writer minimum size (min_size attribute).
    206 
    207    See also _PyBytesWriter_Prepare().
    208    */
    209 PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
    210     void *str,
    211     Py_ssize_t size);
    212 
    213 /* Write bytes.
    214    Raise an exception and return NULL on error. */
    215 PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
    216     void *str,
    217     const void *bytes,
    218     Py_ssize_t size);
    219 #endif   /* Py_LIMITED_API */
    220 
    221 #ifdef __cplusplus
    222 }
    223 #endif
    224 #endif /* !Py_BYTESOBJECT_H */
    225