blob: 4578069df5824c0755ab8a5afe13ef4e053c98a6 [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 *);
77
78/* Macro, trading safety for speed */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000079#ifndef Py_LIMITED_API
Christian Heimes2c9c7a52008-05-26 13:42:13 +000080#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
81 (((PyBytesObject *)(op))->ob_sval))
82#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op))
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000083#endif
Christian Heimes2c9c7a52008-05-26 13:42:13 +000084
85/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*,
86 x must be an iterable object. */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000087#ifndef Py_LIMITED_API
Christian Heimes2c9c7a52008-05-26 13:42:13 +000088PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000089#endif
Christian Heimes2c9c7a52008-05-26 13:42:13 +000090
91/* Provides access to the internal data buffer and size of a string
Martin Panter6245cb32016-04-15 02:14:19 +000092 object or the default encoded version of a Unicode object. Passing
Christian Heimes2c9c7a52008-05-26 13:42:13 +000093 NULL as *len parameter will force the string buffer to be
94 0-terminated (passing a string with embedded NULL characters will
95 cause an exception). */
96PyAPI_FUNC(int) PyBytes_AsStringAndSize(
Antoine Pitrou9ed5f272013-08-13 20:18:52 +020097 PyObject *obj, /* string or Unicode object */
98 char **s, /* pointer to buffer variable */
99 Py_ssize_t *len /* pointer to length variable or NULL
100 (only possible for 0-terminated
101 strings) */
Christian Heimes2c9c7a52008-05-26 13:42:13 +0000102 );
103
104/* Using the current locale, insert the thousands grouping
105 into the string pointed to by buffer. For the argument descriptions,
106 see Objects/stringlib/localeutil.h */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000107#ifndef Py_LIMITED_API
Eric Smith0923d1d2009-04-16 20:16:10 +0000108PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer,
109 Py_ssize_t n_buffer,
110 char *digits,
111 Py_ssize_t n_digits,
112 Py_ssize_t min_width);
Christian Heimes2c9c7a52008-05-26 13:42:13 +0000113
Eric Smitha3b1ac82009-04-03 14:45:06 +0000114/* Using explicit passed-in values, insert the thousands grouping
115 into the string pointed to by buffer. For the argument descriptions,
116 see Objects/stringlib/localeutil.h */
Eric Smith0923d1d2009-04-16 20:16:10 +0000117PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
118 Py_ssize_t n_buffer,
119 char *digits,
120 Py_ssize_t n_digits,
121 Py_ssize_t min_width,
122 const char *grouping,
123 const char *thousands_sep);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000124#endif
Eric Smitha3b1ac82009-04-03 14:45:06 +0000125
Christian Heimes2c9c7a52008-05-26 13:42:13 +0000126/* Flags used by string formatting */
127#define F_LJUST (1<<0)
128#define F_SIGN (1<<1)
129#define F_BLANK (1<<2)
130#define F_ALT (1<<3)
131#define F_ZERO (1<<4)
Guido van Rossum4dfe8a12006-04-22 23:28:04 +0000132
Victor Stinner00165072015-10-09 01:53:21 +0200133#ifndef Py_LIMITED_API
134/* The _PyBytesWriter structure is big: it contains an embeded "stack buffer".
135 A _PyBytesWriter variable must be declared at the end of variables in a
136 function to optimize the memory allocation on the stack. */
137typedef struct {
Victor Stinner661aacc2015-10-14 09:41:48 +0200138 /* bytes, bytearray or NULL (when the small buffer is used) */
Victor Stinner00165072015-10-09 01:53:21 +0200139 PyObject *buffer;
140
Victor Stinner661aacc2015-10-14 09:41:48 +0200141 /* Number of allocated size. */
Victor Stinner00165072015-10-09 01:53:21 +0200142 Py_ssize_t allocated;
143
Victor Stinner53926a12015-10-09 12:37:03 +0200144 /* Minimum number of allocated bytes,
145 incremented by _PyBytesWriter_Prepare() */
146 Py_ssize_t min_size;
Victor Stinner00165072015-10-09 01:53:21 +0200147
Victor Stinner661aacc2015-10-14 09:41:48 +0200148 /* If non-zero, use a bytearray instead of a bytes object for buffer. */
149 int use_bytearray;
150
151 /* If non-zero, overallocate the buffer (default: 0).
152 This flag must be zero if use_bytearray is non-zero. */
Victor Stinner00165072015-10-09 01:53:21 +0200153 int overallocate;
154
155 /* Stack buffer */
Victor Stinnerb3653a32015-10-09 03:38:24 +0200156 int use_small_buffer;
157 char small_buffer[512];
Victor Stinner00165072015-10-09 01:53:21 +0200158} _PyBytesWriter;
159
160/* Initialize a bytes writer
161
162 By default, the overallocation is disabled. Set the overallocate attribute
163 to control the allocation of the buffer. */
164PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
165
166/* Get the buffer content and reset the writer.
Victor Stinner661aacc2015-10-14 09:41:48 +0200167 Return a bytes object, or a bytearray object if use_bytearray is non-zero.
Victor Stinner00165072015-10-09 01:53:21 +0200168 Raise an exception and return NULL on error. */
169PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
Victor Stinnerc29e29b2015-10-12 13:12:54 +0200170 void *str);
Victor Stinner00165072015-10-09 01:53:21 +0200171
172/* Deallocate memory of a writer (clear its internal buffer). */
173PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
174
175/* Allocate the buffer to write size bytes.
176 Return the pointer to the beginning of buffer data.
177 Raise an exception and return NULL on error. */
Victor Stinnerc29e29b2015-10-12 13:12:54 +0200178PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
Victor Stinner00165072015-10-09 01:53:21 +0200179 Py_ssize_t size);
180
Victor Stinnerc5c3ba42015-10-14 13:56:47 +0200181/* Ensure that the buffer is large enough to write *size* bytes.
182 Add size to the writer minimum size (min_size attribute).
183
Victor Stinner00165072015-10-09 01:53:21 +0200184 str is the current pointer inside the buffer.
185 Return the updated current pointer inside the buffer.
186 Raise an exception and return NULL on error. */
Victor Stinnerc29e29b2015-10-12 13:12:54 +0200187PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
188 void *str,
Victor Stinner00165072015-10-09 01:53:21 +0200189 Py_ssize_t size);
Victor Stinnerce179bf2015-10-09 12:57:22 +0200190
Victor Stinnerc5c3ba42015-10-14 13:56:47 +0200191/* Resize the buffer to make it larger.
192 The new buffer may be larger than size bytes because of overallocation.
193 Return the updated current pointer inside the buffer.
194 Raise an exception and return NULL on error.
195
196 Note: size must be greater than the number of allocated bytes in the writer.
197
198 This function doesn't use the writer minimum size (min_size attribute).
199
200 See also _PyBytesWriter_Prepare().
201 */
202PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
203 void *str,
204 Py_ssize_t size);
205
Victor Stinnerce179bf2015-10-09 12:57:22 +0200206/* Write bytes.
207 Raise an exception and return NULL on error. */
Victor Stinnerc29e29b2015-10-12 13:12:54 +0200208PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
209 void *str,
210 const void *bytes,
Victor Stinnerce179bf2015-10-09 12:57:22 +0200211 Py_ssize_t size);
Victor Stinner00165072015-10-09 01:53:21 +0200212#endif /* Py_LIMITED_API */
213
Guido van Rossum4dfe8a12006-04-22 23:28:04 +0000214#ifdef __cplusplus
215}
216#endif
Georg Brandl0c77a822008-06-10 16:37:50 +0000217#endif /* !Py_BYTESOBJECT_H */