blob: 0f0bf9f369df4fa82e3d14945913fd9fbeaefb8a [file] [log] [blame]
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001
Georg Brandl0c77a822008-06-10 16:37:50 +00002/* Bytes (String) object interface */
Christian Heimes2c9c7a52008-05-26 13:42:13 +00003
Georg Brandl0c77a822008-06-10 16:37:50 +00004#ifndef Py_BYTESOBJECT_H
5#define Py_BYTESOBJECT_H
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00006#ifdef __cplusplus
7extern "C" {
8#endif
9
10#include <stdarg.h>
11
Christian Heimes2c9c7a52008-05-26 13:42:13 +000012/*
13Type PyBytesObject represents a character string. An extra zero byte is
14reserved at the end to ensure it is zero-terminated, but a size is
15present so strings with null bytes in them can be represented. This
16is an immutable object type.
Guido van Rossum4dfe8a12006-04-22 23:28:04 +000017
Christian Heimes2c9c7a52008-05-26 13:42:13 +000018There are functions to create new string objects, to test
19an object for string-ness, and to get the
20string value. The latter function returns a null pointer
21if the object is not of the proper type.
22There is a variant that takes an explicit size as well as a
23variant that assumes a zero-terminated string. Note that none of the
24functions 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
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000030#ifndef Py_LIMITED_API
Guido van Rossum4dfe8a12006-04-22 23:28:04 +000031typedef struct {
32 PyObject_VAR_HEAD
Benjamin Peterson8f67d082010-10-17 20:54:53 +000033 Py_hash_t ob_shash;
Christian Heimes2c9c7a52008-05-26 13:42:13 +000034 char ob_sval[1];
Guido van Rossum4dfe8a12006-04-22 23:28:04 +000035
Christian Heimes2c9c7a52008-05-26 13:42:13 +000036 /* 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;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000042#endif
Guido van Rossum4dfe8a12006-04-22 23:28:04 +000043
Christian Heimes2c9c7a52008-05-26 13:42:13 +000044PyAPI_DATA(PyTypeObject) PyBytes_Type;
45PyAPI_DATA(PyTypeObject) PyBytesIter_Type;
Guido van Rossum4dfe8a12006-04-22 23:28:04 +000046
Christian Heimes2c9c7a52008-05-26 13:42:13 +000047#define PyBytes_Check(op) \
48 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
49#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type)
Guido van Rossum4dfe8a12006-04-22 23:28:04 +000050
Christian Heimes2c9c7a52008-05-26 13:42:13 +000051PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
52PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
Benjamin Petersonc15a0732008-08-26 16:46:47 +000053PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *);
Christian Heimes2c9c7a52008-05-26 13:42:13 +000054PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list)
55 Py_GCC_ATTRIBUTE((format(printf, 1, 0)));
56PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...)
57 Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
58PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *);
59PyAPI_FUNC(char *) PyBytes_AsString(PyObject *);
60PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int);
61PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *);
62PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000063#ifndef Py_LIMITED_API
Christian Heimes2c9c7a52008-05-26 13:42:13 +000064PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
Victor Stinner772b2b02015-10-14 09:56:53 +020065PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
66 const char *format,
67 Py_ssize_t format_len,
68 PyObject *args,
69 int use_bytearray);
Victor Stinner2bf89932015-10-14 11:25:33 +020070PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
71 PyObject *string,
72 int use_bytearray);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000073#endif
Christian Heimes2c9c7a52008-05-26 13:42:13 +000074PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,
75 const char *, Py_ssize_t,
76 const char *);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +020077#ifndef Py_LIMITED_API
Eric V. Smith56466482016-10-31 14:46:26 -040078/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
79PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
80 const char *, Py_ssize_t,
81 const char *,
82 const char **);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +020083#endif
Christian Heimes2c9c7a52008-05-26 13:42:13 +000084
85/* Macro, trading safety for speed */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000086#ifndef Py_LIMITED_API
Christian Heimes2c9c7a52008-05-26 13:42:13 +000087#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))
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000090#endif
Christian Heimes2c9c7a52008-05-26 13:42:13 +000091
92/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*,
93 x must be an iterable object. */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000094#ifndef Py_LIMITED_API
Christian Heimes2c9c7a52008-05-26 13:42:13 +000095PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000096#endif
Christian Heimes2c9c7a52008-05-26 13:42:13 +000097
98/* Provides access to the internal data buffer and size of a string
Martin Panter6245cb32016-04-15 02:14:19 +000099 object or the default encoded version of a Unicode object. Passing
Christian Heimes2c9c7a52008-05-26 13:42:13 +0000100 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). */
103PyAPI_FUNC(int) PyBytes_AsStringAndSize(
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200104 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) */
Christian Heimes2c9c7a52008-05-26 13:42:13 +0000109 );
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 */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000114#ifndef Py_LIMITED_API
Eric Smith0923d1d2009-04-16 20:16:10 +0000115PyAPI_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);
Christian Heimes2c9c7a52008-05-26 13:42:13 +0000120
Eric Smitha3b1ac82009-04-03 14:45:06 +0000121/* 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 */
Eric Smith0923d1d2009-04-16 20:16:10 +0000124PyAPI_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);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000131#endif
Eric Smitha3b1ac82009-04-03 14:45:06 +0000132
Christian Heimes2c9c7a52008-05-26 13:42:13 +0000133/* 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)
Guido van Rossum4dfe8a12006-04-22 23:28:04 +0000139
Victor Stinner00165072015-10-09 01:53:21 +0200140#ifndef Py_LIMITED_API
Raymond Hettinger15f44ab2016-08-30 10:47:49 -0700141/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
Victor Stinner00165072015-10-09 01:53:21 +0200142 A _PyBytesWriter variable must be declared at the end of variables in a
143 function to optimize the memory allocation on the stack. */
144typedef struct {
Victor Stinner661aacc2015-10-14 09:41:48 +0200145 /* bytes, bytearray or NULL (when the small buffer is used) */
Victor Stinner00165072015-10-09 01:53:21 +0200146 PyObject *buffer;
147
Victor Stinner661aacc2015-10-14 09:41:48 +0200148 /* Number of allocated size. */
Victor Stinner00165072015-10-09 01:53:21 +0200149 Py_ssize_t allocated;
150
Victor Stinner53926a12015-10-09 12:37:03 +0200151 /* Minimum number of allocated bytes,
152 incremented by _PyBytesWriter_Prepare() */
153 Py_ssize_t min_size;
Victor Stinner00165072015-10-09 01:53:21 +0200154
Victor Stinner661aacc2015-10-14 09:41:48 +0200155 /* 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. */
Victor Stinner00165072015-10-09 01:53:21 +0200160 int overallocate;
161
162 /* Stack buffer */
Victor Stinnerb3653a32015-10-09 03:38:24 +0200163 int use_small_buffer;
164 char small_buffer[512];
Victor Stinner00165072015-10-09 01:53:21 +0200165} _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. */
171PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
172
173/* Get the buffer content and reset the writer.
Victor Stinner661aacc2015-10-14 09:41:48 +0200174 Return a bytes object, or a bytearray object if use_bytearray is non-zero.
Victor Stinner00165072015-10-09 01:53:21 +0200175 Raise an exception and return NULL on error. */
176PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
Victor Stinnerc29e29b2015-10-12 13:12:54 +0200177 void *str);
Victor Stinner00165072015-10-09 01:53:21 +0200178
179/* Deallocate memory of a writer (clear its internal buffer). */
180PyAPI_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. */
Victor Stinnerc29e29b2015-10-12 13:12:54 +0200185PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
Victor Stinner00165072015-10-09 01:53:21 +0200186 Py_ssize_t size);
187
Victor Stinnerc5c3ba42015-10-14 13:56:47 +0200188/* Ensure that the buffer is large enough to write *size* bytes.
189 Add size to the writer minimum size (min_size attribute).
190
Victor Stinner00165072015-10-09 01:53:21 +0200191 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. */
Victor Stinnerc29e29b2015-10-12 13:12:54 +0200194PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
195 void *str,
Victor Stinner00165072015-10-09 01:53:21 +0200196 Py_ssize_t size);
Victor Stinnerce179bf2015-10-09 12:57:22 +0200197
Victor Stinnerc5c3ba42015-10-14 13:56:47 +0200198/* 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 */
209PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
210 void *str,
211 Py_ssize_t size);
212
Victor Stinnerce179bf2015-10-09 12:57:22 +0200213/* Write bytes.
214 Raise an exception and return NULL on error. */
Victor Stinnerc29e29b2015-10-12 13:12:54 +0200215PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
216 void *str,
217 const void *bytes,
Victor Stinnerce179bf2015-10-09 12:57:22 +0200218 Py_ssize_t size);
Victor Stinner00165072015-10-09 01:53:21 +0200219#endif /* Py_LIMITED_API */
220
Guido van Rossum4dfe8a12006-04-22 23:28:04 +0000221#ifdef __cplusplus
222}
223#endif
Georg Brandl0c77a822008-06-10 16:37:50 +0000224#endif /* !Py_BYTESOBJECT_H */