stringobject.h 6.08 KB
Newer Older
1

Guido van Rossum's avatar
Guido van Rossum committed
2 3
/* String object interface */

4 5 6 7 8 9
#ifndef Py_STRINGOBJECT_H
#define Py_STRINGOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

10 11
#include <stdarg.h>

Guido van Rossum's avatar
Guido van Rossum committed
12
/*
13
Type PyStringObject represents a character string.  An extra zero byte is
Guido van Rossum's avatar
Guido van Rossum committed
14 15 16 17 18 19 20 21 22 23 24 25 26
reserved at the end to ensure it is zero-terminated, but a size is
present so strings with null bytes in them can be represented.  This
is an immutable object type.

There are functions to create new string objects, to test
an object for string-ness, and to get the
string value.  The latter function returns a null pointer
if the object is not of the proper type.
There is a variant that takes an explicit size as well as a
variant that assumes a zero-terminated string.  Note that none of the
functions should be applied to nil objects.
*/

27 28 29 30 31 32 33 34 35
/* Two speedup hacks.  Caching the hash saves recalculation of a
   string's hash value.  Interning strings (which requires hash
   caching) tries to ensure that only one string object with a given
   value exists, so equality tests are one pointer comparison.
   Together, these can speed the interpreter up by as much as 20%.
   Each costs the size of a long or pointer per string object.  In
   addition, interned strings live until the end of times.  If you are
   concerned about memory footprint, simply comment the #define out
   here (and rebuild everything!). */
36
#define CACHE_HASH
37 38 39
#ifdef CACHE_HASH
#define INTERN_STRINGS
#endif
40

Guido van Rossum's avatar
Guido van Rossum committed
41
typedef struct {
42
    PyObject_VAR_HEAD
43
#ifdef CACHE_HASH
44
    long ob_shash;
45 46
#endif
#ifdef INTERN_STRINGS
47
    PyObject *ob_sinterned;
48
#endif
49
    char ob_sval[1];
50
} PyStringObject;
Guido van Rossum's avatar
Guido van Rossum committed
51

52
extern DL_IMPORT(PyTypeObject) PyString_Type;
Guido van Rossum's avatar
Guido van Rossum committed
53

54
#define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type)
55
#define PyString_CheckExact(op) ((op)->ob_type == &PyString_Type)
Guido van Rossum's avatar
Guido van Rossum committed
56

57 58
extern DL_IMPORT(PyObject *) PyString_FromStringAndSize(const char *, int);
extern DL_IMPORT(PyObject *) PyString_FromString(const char *);
59 60 61 62
extern DL_IMPORT(PyObject *) PyString_FromFormatV(const char*, va_list)
				__attribute__((format(printf, 1, 0)));
extern DL_IMPORT(PyObject *) PyString_FromFormat(const char*, ...)
				__attribute__((format(printf, 1, 2)));
63 64 65 66 67
extern DL_IMPORT(int) PyString_Size(PyObject *);
extern DL_IMPORT(char *) PyString_AsString(PyObject *);
extern DL_IMPORT(void) PyString_Concat(PyObject **, PyObject *);
extern DL_IMPORT(void) PyString_ConcatAndDel(PyObject **, PyObject *);
extern DL_IMPORT(int) _PyString_Resize(PyObject **, int);
68
extern DL_IMPORT(int) _PyString_Eq(PyObject *, PyObject*);
69
extern DL_IMPORT(PyObject *) PyString_Format(PyObject *, PyObject *);
70 71
extern DL_IMPORT(PyObject *) _PyString_FormatLong(PyObject*, int, int,
						  int, char**, int*);
Guido van Rossum's avatar
Guido van Rossum committed
72

73
#ifdef INTERN_STRINGS
74 75
extern DL_IMPORT(void) PyString_InternInPlace(PyObject **);
extern DL_IMPORT(PyObject *) PyString_InternFromString(const char *);
76
extern DL_IMPORT(void) _Py_ReleaseInternedStrings(void);
77 78 79
#else
#define PyString_InternInPlace(p)
#define PyString_InternFromString(cp) PyString_FromString(cp)
80
#define _Py_ReleaseInternedStrings()
81 82
#endif

Guido van Rossum's avatar
Guido van Rossum committed
83
/* Macro, trading safety for speed */
84 85
#define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval)
#define PyString_GET_SIZE(op)  (((PyStringObject *)(op))->ob_size)
86

87 88 89 90
/* _PyString_Join(sep, x) is like sep.join(x).  sep must be PyStringObject*,
   x must be an iterable object. */
extern DL_IMPORT(PyObject *) _PyString_Join(PyObject *sep, PyObject *x);

91 92
/* --- Generic Codecs ----------------------------------------------------- */

93
/* Create an object by decoding the encoded string s of the
94 95 96 97 98 99 100 101 102 103
   given size. */

extern DL_IMPORT(PyObject*) PyString_Decode(
    const char *s,              /* encoded string */
    int size,                   /* size of buffer */
    const char *encoding,       /* encoding */
    const char *errors          /* error handling */
    );

/* Encodes a char buffer of the given size and returns a 
104
   Python object. */
105 106 107 108 109 110 111 112

extern DL_IMPORT(PyObject*) PyString_Encode(
    const char *s,              /* string char buffer */
    int size,                   /* number of chars to encode */
    const char *encoding,       /* encoding */
    const char *errors          /* error handling */
    );

113
/* Encodes a string object and returns the result as Python 
114 115
   object. */

116 117 118 119 120 121 122 123 124 125 126 127 128 129
extern DL_IMPORT(PyObject*) PyString_AsEncodedObject(
    PyObject *str,	 	/* string object */
    const char *encoding,	/* encoding */
    const char *errors		/* error handling */
    );

/* Encodes a string object and returns the result as Python string
   object.   
   
   If the codec returns an Unicode object, the object is converted
   back to a string using the default encoding.

   DEPRECATED - use PyString_AsEncodedObject() instead. */

130 131 132 133 134 135
extern DL_IMPORT(PyObject*) PyString_AsEncodedString(
    PyObject *str,	 	/* string object */
    const char *encoding,	/* encoding */
    const char *errors		/* error handling */
    );

136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
/* Decodes a string object and returns the result as Python 
   object. */

extern DL_IMPORT(PyObject*) PyString_AsDecodedObject(
    PyObject *str,	 	/* string object */
    const char *encoding,	/* encoding */
    const char *errors		/* error handling */
    );

/* Decodes a string object and returns the result as Python string
   object.  
   
   If the codec returns an Unicode object, the object is converted
   back to a string using the default encoding.

   DEPRECATED - use PyString_AsDecodedObject() instead. */

extern DL_IMPORT(PyObject*) PyString_AsDecodedString(
    PyObject *str,	 	/* string object */
    const char *encoding,	/* encoding */
    const char *errors		/* error handling */
    );

159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
/* Provides access to the internal data buffer and size of a string
   object or the default encoded version of an Unicode object. Passing
   NULL as *len parameter will force the string buffer to be
   0-terminated (passing a string with embedded NULL characters will
   cause an exception).  */

extern DL_IMPORT(int) PyString_AsStringAndSize(
    register PyObject *obj,	/* string or Unicode object */
    register char **s,		/* pointer to buffer variable */
    register int *len		/* pointer to length variable or NULL
				   (only possible for 0-terminated
				   strings) */
    );
    

174 175 176 177
#ifdef __cplusplus
}
#endif
#endif /* !Py_STRINGOBJECT_H */