comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/python3.8/bytesobject.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
comparison
equal deleted inserted replaced
67:0e9998148a16 69:33d812a61356
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 */