1 | |
2 | /* String (str/bytes) object interface */ |
3 | |
4 | #ifndef Py_STRINGOBJECT_H |
5 | #define Py_STRINGOBJECT_H |
6 | #ifdef __cplusplus |
7 | extern "C" { |
8 | #endif |
9 | |
10 | #include <stdarg.h> |
11 | |
12 | /* |
13 | Type PyStringObject 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 | Interning strings (ob_sstate) tries to ensure that only one string |
29 | object with a given value exists, so equality tests can be one pointer |
30 | comparison. This is generally restricted to strings that "look like" |
31 | Python identifiers, although the intern() builtin can be used to force |
32 | interning of any string. |
33 | Together, these sped the interpreter by up to 20%. */ |
34 | |
35 | typedef struct { |
36 | PyObject_VAR_HEAD |
37 | long ob_shash; |
38 | int ob_sstate; |
39 | char ob_sval[1]; |
40 | |
41 | /* Invariants: |
42 | * ob_sval contains space for 'ob_size+1' elements. |
43 | * ob_sval[ob_size] == 0. |
44 | * ob_shash is the hash of the string or -1 if not computed yet. |
45 | * ob_sstate != 0 iff the string object is in stringobject.c's |
46 | * 'interned' dictionary; in this case the two references |
47 | * from 'interned' to this object are *not counted* in ob_refcnt. |
48 | */ |
49 | } PyStringObject; |
50 | |
51 | #define SSTATE_NOT_INTERNED 0 |
52 | #define SSTATE_INTERNED_MORTAL 1 |
53 | #define SSTATE_INTERNED_IMMORTAL 2 |
54 | |
55 | PyAPI_DATA(PyTypeObject) PyBaseString_Type; |
56 | PyAPI_DATA(PyTypeObject) PyString_Type; |
57 | |
58 | #define PyString_Check(op) \ |
59 | PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_STRING_SUBCLASS) |
60 | #define PyString_CheckExact(op) (Py_TYPE(op) == &PyString_Type) |
61 | |
62 | PyAPI_FUNC(PyObject *) PyString_FromStringAndSize(const char *, Py_ssize_t); |
63 | PyAPI_FUNC(PyObject *) PyString_FromString(const char *); |
64 | PyAPI_FUNC(PyObject *) PyString_FromFormatV(const char*, va_list) |
65 | Py_GCC_ATTRIBUTE((format(printf, 1, 0))); |
66 | PyAPI_FUNC(PyObject *) PyString_FromFormat(const char*, ...) |
67 | Py_GCC_ATTRIBUTE((format(printf, 1, 2))); |
68 | PyAPI_FUNC(Py_ssize_t) PyString_Size(PyObject *); |
69 | PyAPI_FUNC(char *) PyString_AsString(PyObject *); |
70 | PyAPI_FUNC(PyObject *) PyString_Repr(PyObject *, int); |
71 | PyAPI_FUNC(void) PyString_Concat(PyObject **, PyObject *); |
72 | PyAPI_FUNC(void) PyString_ConcatAndDel(PyObject **, PyObject *); |
73 | PyAPI_FUNC(int) _PyString_Resize(PyObject **, Py_ssize_t); |
74 | PyAPI_FUNC(int) _PyString_Eq(PyObject *, PyObject*); |
75 | PyAPI_FUNC(PyObject *) PyString_Format(PyObject *, PyObject *); |
76 | PyAPI_FUNC(PyObject *) _PyString_FormatLong(PyObject*, int, int, |
77 | int, char**, int*); |
78 | PyAPI_FUNC(PyObject *) PyString_DecodeEscape(const char *, Py_ssize_t, |
79 | const char *, Py_ssize_t, |
80 | const char *); |
81 | |
82 | PyAPI_FUNC(void) PyString_InternInPlace(PyObject **); |
83 | PyAPI_FUNC(void) PyString_InternImmortal(PyObject **); |
84 | PyAPI_FUNC(PyObject *) PyString_InternFromString(const char *); |
85 | PyAPI_FUNC(void) _Py_ReleaseInternedStrings(void); |
86 | |
87 | /* Use only if you know it's a string */ |
88 | #define PyString_CHECK_INTERNED(op) (((PyStringObject *)(op))->ob_sstate) |
89 | |
90 | /* Macro, trading safety for speed */ |
91 | #define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) |
92 | #define PyString_GET_SIZE(op) Py_SIZE(op) |
93 | |
94 | /* _PyString_Join(sep, x) is like sep.join(x). sep must be PyStringObject*, |
95 | x must be an iterable object. */ |
96 | PyAPI_FUNC(PyObject *) _PyString_Join(PyObject *sep, PyObject *x); |
97 | |
98 | /* --- Generic Codecs ----------------------------------------------------- */ |
99 | |
100 | /* Create an object by decoding the encoded string s of the |
101 | given size. */ |
102 | |
103 | PyAPI_FUNC(PyObject*) PyString_Decode( |
104 | const char *s, /* encoded string */ |
105 | Py_ssize_t size, /* size of buffer */ |
106 | const char *encoding, /* encoding */ |
107 | const char *errors /* error handling */ |
108 | ); |
109 | |
110 | /* Encodes a char buffer of the given size and returns a |
111 | Python object. */ |
112 | |
113 | PyAPI_FUNC(PyObject*) PyString_Encode( |
114 | const char *s, /* string char buffer */ |
115 | Py_ssize_t size, /* number of chars to encode */ |
116 | const char *encoding, /* encoding */ |
117 | const char *errors /* error handling */ |
118 | ); |
119 | |
120 | /* Encodes a string object and returns the result as Python |
121 | object. */ |
122 | |
123 | PyAPI_FUNC(PyObject*) PyString_AsEncodedObject( |
124 | PyObject *str, /* string object */ |
125 | const char *encoding, /* encoding */ |
126 | const char *errors /* error handling */ |
127 | ); |
128 | |
129 | /* Encodes a string object and returns the result as Python string |
130 | object. |
131 | |
132 | If the codec returns a Unicode object, the object is converted |
133 | back to a string using the default encoding. |
134 | |
135 | DEPRECATED - use PyString_AsEncodedObject() instead. */ |
136 | |
137 | PyAPI_FUNC(PyObject*) PyString_AsEncodedString( |
138 | PyObject *str, /* string object */ |
139 | const char *encoding, /* encoding */ |
140 | const char *errors /* error handling */ |
141 | ); |
142 | |
143 | /* Decodes a string object and returns the result as Python |
144 | object. */ |
145 | |
146 | PyAPI_FUNC(PyObject*) PyString_AsDecodedObject( |
147 | PyObject *str, /* string object */ |
148 | const char *encoding, /* encoding */ |
149 | const char *errors /* error handling */ |
150 | ); |
151 | |
152 | /* Decodes a string object and returns the result as Python string |
153 | object. |
154 | |
155 | If the codec returns a Unicode object, the object is converted |
156 | back to a string using the default encoding. |
157 | |
158 | DEPRECATED - use PyString_AsDecodedObject() instead. */ |
159 | |
160 | PyAPI_FUNC(PyObject*) PyString_AsDecodedString( |
161 | PyObject *str, /* string object */ |
162 | const char *encoding, /* encoding */ |
163 | const char *errors /* error handling */ |
164 | ); |
165 | |
166 | /* Provides access to the internal data buffer and size of a string |
167 | object or the default encoded version of a Unicode object. Passing |
168 | NULL as *len parameter will force the string buffer to be |
169 | 0-terminated (passing a string with embedded NULL characters will |
170 | cause an exception). */ |
171 | |
172 | PyAPI_FUNC(int) PyString_AsStringAndSize( |
173 | register PyObject *obj, /* string or Unicode object */ |
174 | register char **s, /* pointer to buffer variable */ |
175 | register Py_ssize_t *len /* pointer to length variable or NULL |
176 | (only possible for 0-terminated |
177 | strings) */ |
178 | ); |
179 | |
180 | |
181 | /* Using the current locale, insert the thousands grouping |
182 | into the string pointed to by buffer. For the argument descriptions, |
183 | see Objects/stringlib/localeutil.h */ |
184 | PyAPI_FUNC(Py_ssize_t) _PyString_InsertThousandsGroupingLocale(char *buffer, |
185 | Py_ssize_t n_buffer, |
186 | char *digits, |
187 | Py_ssize_t n_digits, |
188 | Py_ssize_t min_width); |
189 | |
190 | /* Using explicit passed-in values, insert the thousands grouping |
191 | into the string pointed to by buffer. For the argument descriptions, |
192 | see Objects/stringlib/localeutil.h */ |
193 | PyAPI_FUNC(Py_ssize_t) _PyString_InsertThousandsGrouping(char *buffer, |
194 | Py_ssize_t n_buffer, |
195 | char *digits, |
196 | Py_ssize_t n_digits, |
197 | Py_ssize_t min_width, |
198 | const char *grouping, |
199 | const char *thousands_sep); |
200 | |
201 | /* Format the object based on the format_spec, as defined in PEP 3101 |
202 | (Advanced String Formatting). */ |
203 | PyAPI_FUNC(PyObject *) _PyBytes_FormatAdvanced(PyObject *obj, |
204 | char *format_spec, |
205 | Py_ssize_t format_spec_len); |
206 | |
207 | #ifdef __cplusplus |
208 | } |
209 | #endif |
210 | #endif /* !Py_STRINGOBJECT_H */ |
211 | |