2006-04-22 20:28:04 -03:00
|
|
|
/* Bytes object interface */
|
|
|
|
|
|
|
|
#ifndef Py_BYTESOBJECT_H
|
|
|
|
#define Py_BYTESOBJECT_H
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
/* Type PyBytesObject represents a mutable array of bytes.
|
|
|
|
* The Python API is that of a sequence;
|
|
|
|
* the bytes are mapped to ints in [0, 256).
|
|
|
|
* Bytes are not characters; they may be used to encode characters.
|
|
|
|
* The only way to go between bytes and str/unicode is via encoding
|
|
|
|
* and decoding.
|
2007-08-25 02:22:02 -03:00
|
|
|
* For the convenience of C programmers, the bytes type is considered
|
2006-04-22 20:28:04 -03:00
|
|
|
* to contain a char pointer, not an unsigned char pointer.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Object layout */
|
|
|
|
typedef struct {
|
|
|
|
PyObject_VAR_HEAD
|
2007-08-19 01:23:20 -03:00
|
|
|
/* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
|
2007-08-18 08:21:56 -03:00
|
|
|
int ob_exports; /* how many buffer exports */
|
2006-05-05 01:34:18 -03:00
|
|
|
Py_ssize_t ob_alloc; /* How many bytes allocated */
|
2006-04-24 10:47:05 -03:00
|
|
|
char *ob_bytes;
|
2006-04-22 20:28:04 -03:00
|
|
|
} PyBytesObject;
|
|
|
|
|
|
|
|
/* Type object */
|
|
|
|
PyAPI_DATA(PyTypeObject) PyBytes_Type;
|
|
|
|
|
|
|
|
/* Type check macros */
|
|
|
|
#define PyBytes_Check(self) PyObject_TypeCheck(self, &PyBytes_Type)
|
Merged revisions 56467-56482 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
................
r56477 | martin.v.loewis | 2007-07-21 09:04:38 +0200 (Sa, 21 Jul 2007) | 11 lines
Merged revisions 56466-56476 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r56476 | martin.v.loewis | 2007-07-21 08:55:02 +0200 (Sa, 21 Jul 2007) | 4 lines
PEP 3123: Provide forward compatibility with Python 3.0, while keeping
backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and
PyVarObject_HEAD_INIT.
........
................
r56478 | martin.v.loewis | 2007-07-21 09:47:23 +0200 (Sa, 21 Jul 2007) | 2 lines
PEP 3123: Use proper C inheritance for PyObject.
................
r56479 | martin.v.loewis | 2007-07-21 10:06:55 +0200 (Sa, 21 Jul 2007) | 3 lines
Add longintrepr.h to Python.h, so that the compiler can
see that PyFalse is really some kind of PyObject*.
................
r56480 | martin.v.loewis | 2007-07-21 10:47:18 +0200 (Sa, 21 Jul 2007) | 2 lines
Qualify SHIFT, MASK, BASE.
................
r56482 | martin.v.loewis | 2007-07-21 19:10:57 +0200 (Sa, 21 Jul 2007) | 2 lines
Correctly refer to _ob_next.
................
2007-07-21 14:22:18 -03:00
|
|
|
#define PyBytes_CheckExact(self) (Py_Type(self) == &PyBytes_Type)
|
2006-04-22 20:28:04 -03:00
|
|
|
|
|
|
|
/* Direct API functions */
|
2006-04-24 10:47:05 -03:00
|
|
|
PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *);
|
2007-04-12 22:39:34 -03:00
|
|
|
PyAPI_FUNC(PyObject *) PyBytes_Concat(PyObject *, PyObject *);
|
2006-04-22 20:28:04 -03:00
|
|
|
PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
|
|
|
|
PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *);
|
|
|
|
PyAPI_FUNC(char *) PyBytes_AsString(PyObject *);
|
|
|
|
PyAPI_FUNC(int) PyBytes_Resize(PyObject *, Py_ssize_t);
|
|
|
|
|
|
|
|
/* Macros, trading safety for speed */
|
2007-06-13 21:31:21 -03:00
|
|
|
#define PyBytes_AS_STRING(self) (assert(PyBytes_Check(self)),((PyBytesObject *)(self))->ob_bytes)
|
2007-07-21 15:47:48 -03:00
|
|
|
#define PyBytes_GET_SIZE(self) (assert(PyBytes_Check(self)),Py_Size(self))
|
2006-04-22 20:28:04 -03:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif /* !Py_BYTESOBJECT_H */
|