diff options
-rw-r--r-- | Doc/api.tex | 1241 | ||||
-rw-r--r-- | Doc/api/api.tex | 1241 |
2 files changed, 1234 insertions, 1248 deletions
diff --git a/Doc/api.tex b/Doc/api.tex index 780034a..b13a097 100644 --- a/Doc/api.tex +++ b/Doc/api.tex @@ -523,34 +523,40 @@ initialized state. More information about these functions is given in a later chapter. -\chapter{Basic Utilities} +\chapter{The Very High Level Layer} -XXX These utilities should be moved to some other section... +The functions in this chapter will let you execute Python source code +given in a file or a buffer, but they will not let you interact in a +more detailed way with the interpreter. -\begin{cfuncdesc}{void}{Py_FatalError}{char *message} -Print a fatal error message and kill the process. No cleanup is -performed. This function should only be invoked when a condition is -detected that would make it dangerous to continue using the Python -interpreter; e.g., when the object administration appears to be -corrupted. On \UNIX{}, the standard \C{} library function \code{abort()} is -called which will attempt to produce a \file{core} file. +\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *} \end{cfuncdesc} -\begin{cfuncdesc}{void}{Py_Exit}{int status} -Exit the current process. This calls \code{Py_Finalize()} and then -calls the standard \C{} library function \code{exit(\var{status})}. +\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *} \end{cfuncdesc} -\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()} -Register a cleanup function to be called by \cfunction{Py_Finalize()}. -The cleanup function will be called with no arguments and should -return no value. At most 32 cleanup functions can be registered. -When the registration is successful, \cfunction{Py_AtExit()} returns -\code{0}; on failure, it returns \code{-1}. The cleanup function -registered last is called first. Each cleanup function will be called -at most once. Since Python's internal finallization will have -completed before the cleanup function, no Python APIs should be called -by \var{func}. +\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *} +\end{cfuncdesc} + +\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int} +\end{cfuncdesc} + +\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int} \end{cfuncdesc} @@ -849,7 +855,36 @@ the standard \C{} library function \code{time()}. \end{cfuncdesc} -\section{Importing modules} +\section{Process Control} + +\begin{cfuncdesc}{void}{Py_FatalError}{char *message} +Print a fatal error message and kill the process. No cleanup is +performed. This function should only be invoked when a condition is +detected that would make it dangerous to continue using the Python +interpreter; e.g., when the object administration appears to be +corrupted. On \UNIX{}, the standard \C{} library function \code{abort()} is +called which will attempt to produce a \file{core} file. +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{Py_Exit}{int status} +Exit the current process. This calls \code{Py_Finalize()} and then +calls the standard \C{} library function \code{exit(\var{status})}. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()} +Register a cleanup function to be called by \cfunction{Py_Finalize()}. +The cleanup function will be called with no arguments and should +return no value. At most 32 cleanup functions can be registered. +When the registration is successful, \cfunction{Py_AtExit()} returns +\code{0}; on failure, it returns \code{-1}. The cleanup function +registered last is called first. Each cleanup function will be called +at most once. Since Python's internal finallization will have +completed before the cleanup function, no Python APIs should be called +by \var{func}. +\end{cfuncdesc} + + +\section{Importing Modules} \begin{cfuncdesc}{PyObject *}{PyImport_ImportModule}{char *name} This is a simplified interface to \code{PyImport_ImportModuleEx} @@ -978,48 +1013,6 @@ dynamically created collection of frozen modules. \end{cvardesc} -\chapter{Debugging} - -XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG. - - -\chapter{The Very High Level Layer} - -The functions in this chapter will let you execute Python source code -given in a file or a buffer, but they will not let you interact in a -more detailed way with the interpreter. - -\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int} -\end{cfuncdesc} - -\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int} -\end{cfuncdesc} - - \chapter{Abstract Objects Layer} The functions in this chapter interact with Python objects regardless @@ -1609,23 +1602,569 @@ types. Passing them an object of the wrong type is not a good idea; if you receive an object from a Python program and you are not sure that it has the right type, you must perform a type check first; e.g. to check that an object is a dictionary, use -\code{PyDict_Check()}. +\cfunction{PyDict_Check()}. The chapter is structured like the +``family tree'' of Python object types. -\chapter{Defining New Object Types} +\section{Fundamental Objects} + +This section describes Python type objects and the singleton object +\code{None}. + + +\subsection{Type Objects} + +\begin{ctypedesc}{PyTypeObject} + +\end{ctypedesc} + +\begin{cvardesc}{PyObject *}{PyType_Type} + +\end{cvardesc} + + +\subsection{The None Object} + +\begin{cvardesc}{PyObject *}{Py_None} +XXX macro +\end{cvardesc} + + +\section{Sequence Objects} + +Generic operations on sequence objects were discussed in the previous +chapter; this section deals with the specific kinds of sequence +objects that are intrinsic to the Python language. + + +\subsection{String Objects} + +\begin{ctypedesc}{PyStringObject} +This subtype of \code{PyObject} represents a Python string object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyString_Type} +This instance of \code{PyTypeObject} represents the Python string type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyString_Check}{PyObject *o} -\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type} \end{cfuncdesc} -\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size} +\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int} + \end{cfuncdesc} -\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *} +\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *} + \end{cfuncdesc} -\begin{cfuncdesc}{TYPE}{_PyObject_NEW_VAR}{TYPE, PyTypeObject *, int size} +\begin{cfuncdesc}{int}{PyString_Size}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *} + +\end{cfuncdesc} + + +\subsection{Tuple Objects} + +\begin{ctypedesc}{PyTupleObject} +This subtype of \code{PyObject} represents a Python tuple object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyTuple_Type} +This instance of \code{PyTypeObject} represents the Python tuple type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyTuple_Check}{PyObject *p} +Return true if the argument is a tuple object. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s} +Return a new tuple object of size \code{s} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyTuple_Size}{PyTupleObject *p} +akes a pointer to a tuple object, and returns the size +of that tuple. \end{cfuncdesc} +\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos} +returns the object at position \code{pos} in the tuple pointed +to by \code{p}. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos} +does the same, but does no checking of it's +arguments. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p, + int low, + int high} +takes a slice of the tuple pointed to by \code{p} from +\code{low} to \code{high} and returns it as a new tuple. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyTuple_SetItem}{PyTupleObject *p, + int pos, + PyObject *o} +inserts a reference to object \code{o} at position \code{pos} of +the tuple pointed to by \code{p}. It returns 0 on success. +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyTuple_SET_ITEM}{PyTupleObject *p, + int pos, + PyObject *o} + +does the same, but does no error checking, and +should \emph{only} be used to fill in brand new tuples. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p, + int new, + int last_is_sticky} +can be used to resize a tuple. Because tuples are +\emph{supposed} to be immutable, this should only be used if there is only +one module referencing the object. Do \emph{not} use this if the tuple may +already be known to some other part of the code. \code{last_is_sticky} is +a flag - if set, the tuple will grow or shrink at the front, otherwise +it will grow or shrink at the end. Think of this as destroying the old +tuple and creating a new one, only more efficiently. +\end{cfuncdesc} + + +\subsection{List Objects} + +\begin{ctypedesc}{PyListObject} +This subtype of \code{PyObject} represents a Python list object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyList_Type} +This instance of \code{PyTypeObject} represents the Python list type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyList_Check}{PyObject *p} +returns true if it's argument is a \code{PyListObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_New}{int size} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Size}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list} + +\end{cfuncdesc} + + +\section{Mapping Objects} + +\subsection{Dictionary Objects} + +\begin{ctypedesc}{PyDictObject} +This subtype of \code{PyObject} represents a Python dictionary object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyDict_Type} +This instance of \code{PyTypeObject} represents the Python dictionary type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyDict_Check}{PyObject *p} +returns true if it's argument is a PyDictObject +\end{cfuncdesc} + +\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{} +returns a new empty dictionary. +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyDict_Clear}{PyDictObject *p} +empties an existing dictionary and deletes it. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_SetItem}{PyDictObject *p, + PyObject *key, + PyObject *val} +inserts \code{value} into the dictionary with a key of +\code{key}. Both \code{key} and \code{value} should be PyObjects, and \code{key} should +be hashable. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_SetItemString}{PyDictObject *p, + char *key, + PyObject *val} +inserts \code{value} into the dictionary using \code{key} +as a key. \code{key} should be a char * +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_DelItem}{PyDictObject *p, PyObject *key} +removes the entry in dictionary \code{p} with key \code{key}. +\code{key} is a PyObject. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_DelItemString}{PyDictObject *p, char *key} +removes the entry in dictionary \code{p} which has a key +specified by the \code{char *}\code{key}. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key} +returns the object from dictionary \code{p} which has a key +\code{key}. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key} +does the same, but \code{key} is specified as a +\code{char *}, rather than a \code{PyObject *}. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p} +returns a PyListObject containing all the items +from the dictionary, as in the mapping method \code{items()} (see the Reference +Guide) +\end{cfuncdesc} + +\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p} +returns a PyListObject containing all the keys +from the dictionary, as in the mapping method \code{keys()} (see the Reference Guide) +\end{cfuncdesc} + +\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p} +returns a PyListObject containing all the values +from the dictionary, as in the mapping method \code{values()} (see the Reference Guide) +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_Size}{PyDictObject *p} +returns the number of items in the dictionary. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p, + int ppos, + PyObject **pkey, + PyObject **pvalue} + +\end{cfuncdesc} + + +\section{Numeric Objects} + +\subsection{Plain Integer Objects} + +\begin{ctypedesc}{PyIntObject} +This subtype of \code{PyObject} represents a Python integer object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyInt_Type} +This instance of \code{PyTypeObject} represents the Python plain +integer type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyInt_Check}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival} +creates a new integer object with a value of \code{ival}. + +The current implementation keeps an array of integer objects for all +integers between -1 and 100, when you create an int in that range you +actually just get back a reference to the existing object. So it should +be possible to change the value of 1. I suspect the behaviour of python +in this case is undefined. :-) +\end{cfuncdesc} + +\begin{cfuncdesc}{long}{PyInt_AS_LONG}{PyIntObject *io} +returns the value of the object \code{io}. +\end{cfuncdesc} + +\begin{cfuncdesc}{long}{PyInt_AsLong}{PyObject *io} +will first attempt to cast the object to a PyIntObject, if +it is not already one, and the return it's value. +\end{cfuncdesc} + +\begin{cfuncdesc}{long}{PyInt_GetMax}{} +returns the systems idea of the largest int it can handle +(LONG_MAX, as defined in the system header files) +\end{cfuncdesc} + + +\subsection{Long Integer Objects} + +\begin{ctypedesc}{PyLongObject} +This subtype of \code{PyObject} represents a Python long integer object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyLong_Type} +This instance of \code{PyTypeObject} represents the Python long integer type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyLong_Check}{PyObject *p} +returns true if it's argument is a \code{PyLongObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double} + +\end{cfuncdesc} + +\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject } + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int} + +\end{cfuncdesc} + + +\subsection{Floating Point Objects} + +\begin{ctypedesc}{PyFloatObject} +This subtype of \code{PyObject} represents a Python floating point object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyFloat_Type} +This instance of \code{PyTypeObject} represents the Python floating +point type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyFloat_Check}{PyObject *p} +returns true if it's argument is a \code{PyFloatObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double} + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *} + +\end{cfuncdesc} + + +\subsection{Complex Number Objects} + +\begin{ctypedesc}{Py_complex} +typedef struct { + double real; + double imag; +} +\end{ctypedesc} + +\begin{ctypedesc}{PyComplexObject} +This subtype of \code{PyObject} represents a Python complex number object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyComplex_Type} +This instance of \code{PyTypeObject} represents the Python complex +number type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyComplex_Check}{PyObject *p} +returns true if it's argument is a \code{PyComplexObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag} + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op} + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op} + +\end{cfuncdesc} + + + +\section{Other Objects} + +\subsection{File Objects} + +\begin{ctypedesc}{PyFileObject} +This subtype of \code{PyObject} represents a Python file object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyFile_Type} +This instance of \code{PyTypeObject} represents the Python file type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyFile_Check}{PyObject *p} +returns true if it's argument is a \code{PyFileObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode} +creates a new PyFileObject pointing to the file +specified in \code{name} with the mode specified in \code{mode} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp, + char *name, char *mode, int (*close}) +creates a new PyFileObject from the already-open \code{fp}. +The function \code{close} will be called when the file should be closed. +\end{cfuncdesc} + +\begin{cfuncdesc}{FILE *}{PyFile_AsFile}{PyFileObject *p} +returns the file object associated with \code{p} as a \code{FILE *} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n} +undocumented as yet +\end{cfuncdesc} + +\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p} +returns the name of the file specified by \code{p} as a +PyStringObject +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyFile_SetBufSize}{PyFileObject *p, int n} +on systems with \code{setvbuf} only +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag} +same as the file object method \code{softspace} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p} +writes object \code{obj} to file object \code{p} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p} +writes string \code{s} to file object \code{p} +\end{cfuncdesc} + + +\subsection{CObjects} + +XXX + + \chapter{Initialization, Finalization, and Threads} \begin{cfuncdesc}{void}{Py_Initialize}{} @@ -2265,570 +2804,24 @@ _PyObject_New, _PyObject_NewVar PyObject_NEW, PyObject_NEW_VAR -\chapter{Specific Data Types} - -This chapter describes the functions that deal with specific types of -Python objects. It is structured like the ``family tree'' of Python -object types. - - -\section{Fundamental Objects} - -This section describes Python type objects and the singleton object -\code{None}. - - -\subsection{Type Objects} - -\begin{ctypedesc}{PyTypeObject} - -\end{ctypedesc} - -\begin{cvardesc}{PyObject *}{PyType_Type} - -\end{cvardesc} - - -\subsection{The None Object} - -\begin{cvardesc}{PyObject *}{Py_None} -XXX macro -\end{cvardesc} - - -\section{Sequence Objects} - -Generic operations on sequence objects were discussed in the previous -chapter; this section deals with the specific kinds of sequence -objects that are intrinsic to the Python language. - - -\subsection{String Objects} - -\begin{ctypedesc}{PyStringObject} -This subtype of \code{PyObject} represents a Python string object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyString_Type} -This instance of \code{PyTypeObject} represents the Python string type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyString_Check}{PyObject *o} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyString_Size}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *} - -\end{cfuncdesc} - - -\subsection{Tuple Objects} - -\begin{ctypedesc}{PyTupleObject} -This subtype of \code{PyObject} represents a Python tuple object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyTuple_Type} -This instance of \code{PyTypeObject} represents the Python tuple type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyTuple_Check}{PyObject *p} -Return true if the argument is a tuple object. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s} -Return a new tuple object of size \code{s} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyTuple_Size}{PyTupleObject *p} -akes a pointer to a tuple object, and returns the size -of that tuple. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos} -returns the object at position \code{pos} in the tuple pointed -to by \code{p}. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos} -does the same, but does no checking of it's -arguments. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p, - int low, - int high} -takes a slice of the tuple pointed to by \code{p} from -\code{low} to \code{high} and returns it as a new tuple. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyTuple_SetItem}{PyTupleObject *p, - int pos, - PyObject *o} -inserts a reference to object \code{o} at position \code{pos} of -the tuple pointed to by \code{p}. It returns 0 on success. -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyTuple_SET_ITEM}{PyTupleObject *p, - int pos, - PyObject *o} - -does the same, but does no error checking, and -should \emph{only} be used to fill in brand new tuples. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p, - int new, - int last_is_sticky} -can be used to resize a tuple. Because tuples are -\emph{supposed} to be immutable, this should only be used if there is only -one module referencing the object. Do \emph{not} use this if the tuple may -already be known to some other part of the code. \code{last_is_sticky} is -a flag - if set, the tuple will grow or shrink at the front, otherwise -it will grow or shrink at the end. Think of this as destroying the old -tuple and creating a new one, only more efficiently. -\end{cfuncdesc} - - -\subsection{List Objects} - -\begin{ctypedesc}{PyListObject} -This subtype of \code{PyObject} represents a Python list object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyList_Type} -This instance of \code{PyTypeObject} represents the Python list type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyList_Check}{PyObject *p} -returns true if it's argument is a \code{PyListObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_New}{int size} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Size}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list} - -\end{cfuncdesc} - - -\section{Mapping Objects} - -\subsection{Dictionary Objects} - -\begin{ctypedesc}{PyDictObject} -This subtype of \code{PyObject} represents a Python dictionary object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyDict_Type} -This instance of \code{PyTypeObject} represents the Python dictionary type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyDict_Check}{PyObject *p} -returns true if it's argument is a PyDictObject -\end{cfuncdesc} - -\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{} -returns a new empty dictionary. -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyDict_Clear}{PyDictObject *p} -empties an existing dictionary and deletes it. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_SetItem}{PyDictObject *p, - PyObject *key, - PyObject *val} -inserts \code{value} into the dictionary with a key of -\code{key}. Both \code{key} and \code{value} should be PyObjects, and \code{key} should -be hashable. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_SetItemString}{PyDictObject *p, - char *key, - PyObject *val} -inserts \code{value} into the dictionary using \code{key} -as a key. \code{key} should be a char * -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_DelItem}{PyDictObject *p, PyObject *key} -removes the entry in dictionary \code{p} with key \code{key}. -\code{key} is a PyObject. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_DelItemString}{PyDictObject *p, char *key} -removes the entry in dictionary \code{p} which has a key -specified by the \code{char *}\code{key}. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key} -returns the object from dictionary \code{p} which has a key -\code{key}. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key} -does the same, but \code{key} is specified as a -\code{char *}, rather than a \code{PyObject *}. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p} -returns a PyListObject containing all the items -from the dictionary, as in the mapping method \code{items()} (see the Reference -Guide) -\end{cfuncdesc} - -\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p} -returns a PyListObject containing all the keys -from the dictionary, as in the mapping method \code{keys()} (see the Reference Guide) -\end{cfuncdesc} - -\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p} -returns a PyListObject containing all the values -from the dictionary, as in the mapping method \code{values()} (see the Reference Guide) -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_Size}{PyDictObject *p} -returns the number of items in the dictionary. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p, - int ppos, - PyObject **pkey, - PyObject **pvalue} - -\end{cfuncdesc} - - -\section{Numeric Objects} - -\subsection{Plain Integer Objects} - -\begin{ctypedesc}{PyIntObject} -This subtype of \code{PyObject} represents a Python integer object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyInt_Type} -This instance of \code{PyTypeObject} represents the Python plain -integer type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyInt_Check}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival} -creates a new integer object with a value of \code{ival}. - -The current implementation keeps an array of integer objects for all -integers between -1 and 100, when you create an int in that range you -actually just get back a reference to the existing object. So it should -be possible to change the value of 1. I suspect the behaviour of python -in this case is undefined. :-) -\end{cfuncdesc} - -\begin{cfuncdesc}{long}{PyInt_AS_LONG}{PyIntObject *io} -returns the value of the object \code{io}. -\end{cfuncdesc} - -\begin{cfuncdesc}{long}{PyInt_AsLong}{PyObject *io} -will first attempt to cast the object to a PyIntObject, if -it is not already one, and the return it's value. -\end{cfuncdesc} - -\begin{cfuncdesc}{long}{PyInt_GetMax}{} -returns the systems idea of the largest int it can handle -(LONG_MAX, as defined in the system header files) -\end{cfuncdesc} - - -\subsection{Long Integer Objects} - -\begin{ctypedesc}{PyLongObject} -This subtype of \code{PyObject} represents a Python long integer object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyLong_Type} -This instance of \code{PyTypeObject} represents the Python long integer type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyLong_Check}{PyObject *p} -returns true if it's argument is a \code{PyLongObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double} - -\end{cfuncdesc} - -\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject } - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int} - -\end{cfuncdesc} - - -\subsection{Floating Point Objects} - -\begin{ctypedesc}{PyFloatObject} -This subtype of \code{PyObject} represents a Python floating point object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyFloat_Type} -This instance of \code{PyTypeObject} represents the Python floating -point type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyFloat_Check}{PyObject *p} -returns true if it's argument is a \code{PyFloatObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double} - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *} - -\end{cfuncdesc} - - -\subsection{Complex Number Objects} - -\begin{ctypedesc}{Py_complex} -typedef struct { - double real; - double imag; -} -\end{ctypedesc} - -\begin{ctypedesc}{PyComplexObject} -This subtype of \code{PyObject} represents a Python complex number object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyComplex_Type} -This instance of \code{PyTypeObject} represents the Python complex -number type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyComplex_Check}{PyObject *p} -returns true if it's argument is a \code{PyComplexObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag} - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op} - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op} - -\end{cfuncdesc} - - - -\section{Other Objects} - -\subsection{File Objects} - -\begin{ctypedesc}{PyFileObject} -This subtype of \code{PyObject} represents a Python file object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyFile_Type} -This instance of \code{PyTypeObject} represents the Python file type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyFile_Check}{PyObject *p} -returns true if it's argument is a \code{PyFileObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode} -creates a new PyFileObject pointing to the file -specified in \code{name} with the mode specified in \code{mode} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp, - char *name, char *mode, int (*close}) -creates a new PyFileObject from the already-open \code{fp}. -The function \code{close} will be called when the file should be closed. -\end{cfuncdesc} - -\begin{cfuncdesc}{FILE *}{PyFile_AsFile}{PyFileObject *p} -returns the file object associated with \code{p} as a \code{FILE *} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n} -undocumented as yet -\end{cfuncdesc} - -\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p} -returns the name of the file specified by \code{p} as a -PyStringObject -\end{cfuncdesc} +\chapter{Defining New Object Types} -\begin{cfuncdesc}{void}{PyFile_SetBufSize}{PyFileObject *p, int n} -on systems with \code{setvbuf} only +\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type} \end{cfuncdesc} -\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag} -same as the file object method \code{softspace} +\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size} \end{cfuncdesc} -\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p} -writes object \code{obj} to file object \code{p} +\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *} \end{cfuncdesc} -\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p} -writes string \code{s} to file object \code{p} +\begin{cfuncdesc}{TYPE}{_PyObject_NEW_VAR}{TYPE, PyTypeObject *, int size} \end{cfuncdesc} -\subsection{CObjects} +\chapter{Debugging} -XXX +XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG. \input{api.ind} % Index -- must be last diff --git a/Doc/api/api.tex b/Doc/api/api.tex index 780034a..b13a097 100644 --- a/Doc/api/api.tex +++ b/Doc/api/api.tex @@ -523,34 +523,40 @@ initialized state. More information about these functions is given in a later chapter. -\chapter{Basic Utilities} +\chapter{The Very High Level Layer} -XXX These utilities should be moved to some other section... +The functions in this chapter will let you execute Python source code +given in a file or a buffer, but they will not let you interact in a +more detailed way with the interpreter. -\begin{cfuncdesc}{void}{Py_FatalError}{char *message} -Print a fatal error message and kill the process. No cleanup is -performed. This function should only be invoked when a condition is -detected that would make it dangerous to continue using the Python -interpreter; e.g., when the object administration appears to be -corrupted. On \UNIX{}, the standard \C{} library function \code{abort()} is -called which will attempt to produce a \file{core} file. +\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *} \end{cfuncdesc} -\begin{cfuncdesc}{void}{Py_Exit}{int status} -Exit the current process. This calls \code{Py_Finalize()} and then -calls the standard \C{} library function \code{exit(\var{status})}. +\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *} \end{cfuncdesc} -\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()} -Register a cleanup function to be called by \cfunction{Py_Finalize()}. -The cleanup function will be called with no arguments and should -return no value. At most 32 cleanup functions can be registered. -When the registration is successful, \cfunction{Py_AtExit()} returns -\code{0}; on failure, it returns \code{-1}. The cleanup function -registered last is called first. Each cleanup function will be called -at most once. Since Python's internal finallization will have -completed before the cleanup function, no Python APIs should be called -by \var{func}. +\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *} +\end{cfuncdesc} + +\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int} +\end{cfuncdesc} + +\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int} \end{cfuncdesc} @@ -849,7 +855,36 @@ the standard \C{} library function \code{time()}. \end{cfuncdesc} -\section{Importing modules} +\section{Process Control} + +\begin{cfuncdesc}{void}{Py_FatalError}{char *message} +Print a fatal error message and kill the process. No cleanup is +performed. This function should only be invoked when a condition is +detected that would make it dangerous to continue using the Python +interpreter; e.g., when the object administration appears to be +corrupted. On \UNIX{}, the standard \C{} library function \code{abort()} is +called which will attempt to produce a \file{core} file. +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{Py_Exit}{int status} +Exit the current process. This calls \code{Py_Finalize()} and then +calls the standard \C{} library function \code{exit(\var{status})}. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()} +Register a cleanup function to be called by \cfunction{Py_Finalize()}. +The cleanup function will be called with no arguments and should +return no value. At most 32 cleanup functions can be registered. +When the registration is successful, \cfunction{Py_AtExit()} returns +\code{0}; on failure, it returns \code{-1}. The cleanup function +registered last is called first. Each cleanup function will be called +at most once. Since Python's internal finallization will have +completed before the cleanup function, no Python APIs should be called +by \var{func}. +\end{cfuncdesc} + + +\section{Importing Modules} \begin{cfuncdesc}{PyObject *}{PyImport_ImportModule}{char *name} This is a simplified interface to \code{PyImport_ImportModuleEx} @@ -978,48 +1013,6 @@ dynamically created collection of frozen modules. \end{cvardesc} -\chapter{Debugging} - -XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG. - - -\chapter{The Very High Level Layer} - -The functions in this chapter will let you execute Python source code -given in a file or a buffer, but they will not let you interact in a -more detailed way with the interpreter. - -\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *} -\end{cfuncdesc} - -\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int} -\end{cfuncdesc} - -\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int} -\end{cfuncdesc} - - \chapter{Abstract Objects Layer} The functions in this chapter interact with Python objects regardless @@ -1609,23 +1602,569 @@ types. Passing them an object of the wrong type is not a good idea; if you receive an object from a Python program and you are not sure that it has the right type, you must perform a type check first; e.g. to check that an object is a dictionary, use -\code{PyDict_Check()}. +\cfunction{PyDict_Check()}. The chapter is structured like the +``family tree'' of Python object types. -\chapter{Defining New Object Types} +\section{Fundamental Objects} + +This section describes Python type objects and the singleton object +\code{None}. + + +\subsection{Type Objects} + +\begin{ctypedesc}{PyTypeObject} + +\end{ctypedesc} + +\begin{cvardesc}{PyObject *}{PyType_Type} + +\end{cvardesc} + + +\subsection{The None Object} + +\begin{cvardesc}{PyObject *}{Py_None} +XXX macro +\end{cvardesc} + + +\section{Sequence Objects} + +Generic operations on sequence objects were discussed in the previous +chapter; this section deals with the specific kinds of sequence +objects that are intrinsic to the Python language. + + +\subsection{String Objects} + +\begin{ctypedesc}{PyStringObject} +This subtype of \code{PyObject} represents a Python string object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyString_Type} +This instance of \code{PyTypeObject} represents the Python string type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyString_Check}{PyObject *o} -\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type} \end{cfuncdesc} -\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size} +\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int} + \end{cfuncdesc} -\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *} +\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *} + \end{cfuncdesc} -\begin{cfuncdesc}{TYPE}{_PyObject_NEW_VAR}{TYPE, PyTypeObject *, int size} +\begin{cfuncdesc}{int}{PyString_Size}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *} + +\end{cfuncdesc} + + +\subsection{Tuple Objects} + +\begin{ctypedesc}{PyTupleObject} +This subtype of \code{PyObject} represents a Python tuple object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyTuple_Type} +This instance of \code{PyTypeObject} represents the Python tuple type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyTuple_Check}{PyObject *p} +Return true if the argument is a tuple object. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s} +Return a new tuple object of size \code{s} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyTuple_Size}{PyTupleObject *p} +akes a pointer to a tuple object, and returns the size +of that tuple. \end{cfuncdesc} +\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos} +returns the object at position \code{pos} in the tuple pointed +to by \code{p}. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos} +does the same, but does no checking of it's +arguments. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p, + int low, + int high} +takes a slice of the tuple pointed to by \code{p} from +\code{low} to \code{high} and returns it as a new tuple. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyTuple_SetItem}{PyTupleObject *p, + int pos, + PyObject *o} +inserts a reference to object \code{o} at position \code{pos} of +the tuple pointed to by \code{p}. It returns 0 on success. +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyTuple_SET_ITEM}{PyTupleObject *p, + int pos, + PyObject *o} + +does the same, but does no error checking, and +should \emph{only} be used to fill in brand new tuples. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p, + int new, + int last_is_sticky} +can be used to resize a tuple. Because tuples are +\emph{supposed} to be immutable, this should only be used if there is only +one module referencing the object. Do \emph{not} use this if the tuple may +already be known to some other part of the code. \code{last_is_sticky} is +a flag - if set, the tuple will grow or shrink at the front, otherwise +it will grow or shrink at the end. Think of this as destroying the old +tuple and creating a new one, only more efficiently. +\end{cfuncdesc} + + +\subsection{List Objects} + +\begin{ctypedesc}{PyListObject} +This subtype of \code{PyObject} represents a Python list object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyList_Type} +This instance of \code{PyTypeObject} represents the Python list type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyList_Check}{PyObject *p} +returns true if it's argument is a \code{PyListObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_New}{int size} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Size}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i} + +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list} + +\end{cfuncdesc} + + +\section{Mapping Objects} + +\subsection{Dictionary Objects} + +\begin{ctypedesc}{PyDictObject} +This subtype of \code{PyObject} represents a Python dictionary object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyDict_Type} +This instance of \code{PyTypeObject} represents the Python dictionary type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyDict_Check}{PyObject *p} +returns true if it's argument is a PyDictObject +\end{cfuncdesc} + +\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{} +returns a new empty dictionary. +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyDict_Clear}{PyDictObject *p} +empties an existing dictionary and deletes it. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_SetItem}{PyDictObject *p, + PyObject *key, + PyObject *val} +inserts \code{value} into the dictionary with a key of +\code{key}. Both \code{key} and \code{value} should be PyObjects, and \code{key} should +be hashable. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_SetItemString}{PyDictObject *p, + char *key, + PyObject *val} +inserts \code{value} into the dictionary using \code{key} +as a key. \code{key} should be a char * +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_DelItem}{PyDictObject *p, PyObject *key} +removes the entry in dictionary \code{p} with key \code{key}. +\code{key} is a PyObject. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_DelItemString}{PyDictObject *p, char *key} +removes the entry in dictionary \code{p} which has a key +specified by the \code{char *}\code{key}. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key} +returns the object from dictionary \code{p} which has a key +\code{key}. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key} +does the same, but \code{key} is specified as a +\code{char *}, rather than a \code{PyObject *}. +\end{cfuncdesc} + +\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p} +returns a PyListObject containing all the items +from the dictionary, as in the mapping method \code{items()} (see the Reference +Guide) +\end{cfuncdesc} + +\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p} +returns a PyListObject containing all the keys +from the dictionary, as in the mapping method \code{keys()} (see the Reference Guide) +\end{cfuncdesc} + +\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p} +returns a PyListObject containing all the values +from the dictionary, as in the mapping method \code{values()} (see the Reference Guide) +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_Size}{PyDictObject *p} +returns the number of items in the dictionary. +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p, + int ppos, + PyObject **pkey, + PyObject **pvalue} + +\end{cfuncdesc} + + +\section{Numeric Objects} + +\subsection{Plain Integer Objects} + +\begin{ctypedesc}{PyIntObject} +This subtype of \code{PyObject} represents a Python integer object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyInt_Type} +This instance of \code{PyTypeObject} represents the Python plain +integer type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyInt_Check}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival} +creates a new integer object with a value of \code{ival}. + +The current implementation keeps an array of integer objects for all +integers between -1 and 100, when you create an int in that range you +actually just get back a reference to the existing object. So it should +be possible to change the value of 1. I suspect the behaviour of python +in this case is undefined. :-) +\end{cfuncdesc} + +\begin{cfuncdesc}{long}{PyInt_AS_LONG}{PyIntObject *io} +returns the value of the object \code{io}. +\end{cfuncdesc} + +\begin{cfuncdesc}{long}{PyInt_AsLong}{PyObject *io} +will first attempt to cast the object to a PyIntObject, if +it is not already one, and the return it's value. +\end{cfuncdesc} + +\begin{cfuncdesc}{long}{PyInt_GetMax}{} +returns the systems idea of the largest int it can handle +(LONG_MAX, as defined in the system header files) +\end{cfuncdesc} + + +\subsection{Long Integer Objects} + +\begin{ctypedesc}{PyLongObject} +This subtype of \code{PyObject} represents a Python long integer object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyLong_Type} +This instance of \code{PyTypeObject} represents the Python long integer type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyLong_Check}{PyObject *p} +returns true if it's argument is a \code{PyLongObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double} + +\end{cfuncdesc} + +\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject } + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int} + +\end{cfuncdesc} + + +\subsection{Floating Point Objects} + +\begin{ctypedesc}{PyFloatObject} +This subtype of \code{PyObject} represents a Python floating point object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyFloat_Type} +This instance of \code{PyTypeObject} represents the Python floating +point type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyFloat_Check}{PyObject *p} +returns true if it's argument is a \code{PyFloatObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double} + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *} + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *} + +\end{cfuncdesc} + + +\subsection{Complex Number Objects} + +\begin{ctypedesc}{Py_complex} +typedef struct { + double real; + double imag; +} +\end{ctypedesc} + +\begin{ctypedesc}{PyComplexObject} +This subtype of \code{PyObject} represents a Python complex number object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyComplex_Type} +This instance of \code{PyTypeObject} represents the Python complex +number type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyComplex_Check}{PyObject *p} +returns true if it's argument is a \code{PyComplexObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex} + +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag} + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op} + +\end{cfuncdesc} + +\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op} + +\end{cfuncdesc} + +\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op} + +\end{cfuncdesc} + + + +\section{Other Objects} + +\subsection{File Objects} + +\begin{ctypedesc}{PyFileObject} +This subtype of \code{PyObject} represents a Python file object. +\end{ctypedesc} + +\begin{cvardesc}{PyTypeObject}{PyFile_Type} +This instance of \code{PyTypeObject} represents the Python file type. +\end{cvardesc} + +\begin{cfuncdesc}{int}{PyFile_Check}{PyObject *p} +returns true if it's argument is a \code{PyFileObject} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode} +creates a new PyFileObject pointing to the file +specified in \code{name} with the mode specified in \code{mode} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp, + char *name, char *mode, int (*close}) +creates a new PyFileObject from the already-open \code{fp}. +The function \code{close} will be called when the file should be closed. +\end{cfuncdesc} + +\begin{cfuncdesc}{FILE *}{PyFile_AsFile}{PyFileObject *p} +returns the file object associated with \code{p} as a \code{FILE *} +\end{cfuncdesc} + +\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n} +undocumented as yet +\end{cfuncdesc} + +\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p} +returns the name of the file specified by \code{p} as a +PyStringObject +\end{cfuncdesc} + +\begin{cfuncdesc}{void}{PyFile_SetBufSize}{PyFileObject *p, int n} +on systems with \code{setvbuf} only +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag} +same as the file object method \code{softspace} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p} +writes object \code{obj} to file object \code{p} +\end{cfuncdesc} + +\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p} +writes string \code{s} to file object \code{p} +\end{cfuncdesc} + + +\subsection{CObjects} + +XXX + + \chapter{Initialization, Finalization, and Threads} \begin{cfuncdesc}{void}{Py_Initialize}{} @@ -2265,570 +2804,24 @@ _PyObject_New, _PyObject_NewVar PyObject_NEW, PyObject_NEW_VAR -\chapter{Specific Data Types} - -This chapter describes the functions that deal with specific types of -Python objects. It is structured like the ``family tree'' of Python -object types. - - -\section{Fundamental Objects} - -This section describes Python type objects and the singleton object -\code{None}. - - -\subsection{Type Objects} - -\begin{ctypedesc}{PyTypeObject} - -\end{ctypedesc} - -\begin{cvardesc}{PyObject *}{PyType_Type} - -\end{cvardesc} - - -\subsection{The None Object} - -\begin{cvardesc}{PyObject *}{Py_None} -XXX macro -\end{cvardesc} - - -\section{Sequence Objects} - -Generic operations on sequence objects were discussed in the previous -chapter; this section deals with the specific kinds of sequence -objects that are intrinsic to the Python language. - - -\subsection{String Objects} - -\begin{ctypedesc}{PyStringObject} -This subtype of \code{PyObject} represents a Python string object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyString_Type} -This instance of \code{PyTypeObject} represents the Python string type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyString_Check}{PyObject *o} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyString_Size}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *} - -\end{cfuncdesc} - - -\subsection{Tuple Objects} - -\begin{ctypedesc}{PyTupleObject} -This subtype of \code{PyObject} represents a Python tuple object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyTuple_Type} -This instance of \code{PyTypeObject} represents the Python tuple type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyTuple_Check}{PyObject *p} -Return true if the argument is a tuple object. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s} -Return a new tuple object of size \code{s} -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyTuple_Size}{PyTupleObject *p} -akes a pointer to a tuple object, and returns the size -of that tuple. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos} -returns the object at position \code{pos} in the tuple pointed -to by \code{p}. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos} -does the same, but does no checking of it's -arguments. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p, - int low, - int high} -takes a slice of the tuple pointed to by \code{p} from -\code{low} to \code{high} and returns it as a new tuple. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyTuple_SetItem}{PyTupleObject *p, - int pos, - PyObject *o} -inserts a reference to object \code{o} at position \code{pos} of -the tuple pointed to by \code{p}. It returns 0 on success. -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyTuple_SET_ITEM}{PyTupleObject *p, - int pos, - PyObject *o} - -does the same, but does no error checking, and -should \emph{only} be used to fill in brand new tuples. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p, - int new, - int last_is_sticky} -can be used to resize a tuple. Because tuples are -\emph{supposed} to be immutable, this should only be used if there is only -one module referencing the object. Do \emph{not} use this if the tuple may -already be known to some other part of the code. \code{last_is_sticky} is -a flag - if set, the tuple will grow or shrink at the front, otherwise -it will grow or shrink at the end. Think of this as destroying the old -tuple and creating a new one, only more efficiently. -\end{cfuncdesc} - - -\subsection{List Objects} - -\begin{ctypedesc}{PyListObject} -This subtype of \code{PyObject} represents a Python list object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyList_Type} -This instance of \code{PyTypeObject} represents the Python list type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyList_Check}{PyObject *p} -returns true if it's argument is a \code{PyListObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_New}{int size} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Size}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i} - -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list} - -\end{cfuncdesc} - - -\section{Mapping Objects} - -\subsection{Dictionary Objects} - -\begin{ctypedesc}{PyDictObject} -This subtype of \code{PyObject} represents a Python dictionary object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyDict_Type} -This instance of \code{PyTypeObject} represents the Python dictionary type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyDict_Check}{PyObject *p} -returns true if it's argument is a PyDictObject -\end{cfuncdesc} - -\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{} -returns a new empty dictionary. -\end{cfuncdesc} - -\begin{cfuncdesc}{void}{PyDict_Clear}{PyDictObject *p} -empties an existing dictionary and deletes it. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_SetItem}{PyDictObject *p, - PyObject *key, - PyObject *val} -inserts \code{value} into the dictionary with a key of -\code{key}. Both \code{key} and \code{value} should be PyObjects, and \code{key} should -be hashable. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_SetItemString}{PyDictObject *p, - char *key, - PyObject *val} -inserts \code{value} into the dictionary using \code{key} -as a key. \code{key} should be a char * -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_DelItem}{PyDictObject *p, PyObject *key} -removes the entry in dictionary \code{p} with key \code{key}. -\code{key} is a PyObject. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_DelItemString}{PyDictObject *p, char *key} -removes the entry in dictionary \code{p} which has a key -specified by the \code{char *}\code{key}. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key} -returns the object from dictionary \code{p} which has a key -\code{key}. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key} -does the same, but \code{key} is specified as a -\code{char *}, rather than a \code{PyObject *}. -\end{cfuncdesc} - -\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p} -returns a PyListObject containing all the items -from the dictionary, as in the mapping method \code{items()} (see the Reference -Guide) -\end{cfuncdesc} - -\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p} -returns a PyListObject containing all the keys -from the dictionary, as in the mapping method \code{keys()} (see the Reference Guide) -\end{cfuncdesc} - -\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p} -returns a PyListObject containing all the values -from the dictionary, as in the mapping method \code{values()} (see the Reference Guide) -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_Size}{PyDictObject *p} -returns the number of items in the dictionary. -\end{cfuncdesc} - -\begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p, - int ppos, - PyObject **pkey, - PyObject **pvalue} - -\end{cfuncdesc} - - -\section{Numeric Objects} - -\subsection{Plain Integer Objects} - -\begin{ctypedesc}{PyIntObject} -This subtype of \code{PyObject} represents a Python integer object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyInt_Type} -This instance of \code{PyTypeObject} represents the Python plain -integer type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyInt_Check}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival} -creates a new integer object with a value of \code{ival}. - -The current implementation keeps an array of integer objects for all -integers between -1 and 100, when you create an int in that range you -actually just get back a reference to the existing object. So it should -be possible to change the value of 1. I suspect the behaviour of python -in this case is undefined. :-) -\end{cfuncdesc} - -\begin{cfuncdesc}{long}{PyInt_AS_LONG}{PyIntObject *io} -returns the value of the object \code{io}. -\end{cfuncdesc} - -\begin{cfuncdesc}{long}{PyInt_AsLong}{PyObject *io} -will first attempt to cast the object to a PyIntObject, if -it is not already one, and the return it's value. -\end{cfuncdesc} - -\begin{cfuncdesc}{long}{PyInt_GetMax}{} -returns the systems idea of the largest int it can handle -(LONG_MAX, as defined in the system header files) -\end{cfuncdesc} - - -\subsection{Long Integer Objects} - -\begin{ctypedesc}{PyLongObject} -This subtype of \code{PyObject} represents a Python long integer object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyLong_Type} -This instance of \code{PyTypeObject} represents the Python long integer type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyLong_Check}{PyObject *p} -returns true if it's argument is a \code{PyLongObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double} - -\end{cfuncdesc} - -\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject } - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int} - -\end{cfuncdesc} - - -\subsection{Floating Point Objects} - -\begin{ctypedesc}{PyFloatObject} -This subtype of \code{PyObject} represents a Python floating point object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyFloat_Type} -This instance of \code{PyTypeObject} represents the Python floating -point type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyFloat_Check}{PyObject *p} -returns true if it's argument is a \code{PyFloatObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double} - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *} - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *} - -\end{cfuncdesc} - - -\subsection{Complex Number Objects} - -\begin{ctypedesc}{Py_complex} -typedef struct { - double real; - double imag; -} -\end{ctypedesc} - -\begin{ctypedesc}{PyComplexObject} -This subtype of \code{PyObject} represents a Python complex number object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyComplex_Type} -This instance of \code{PyTypeObject} represents the Python complex -number type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyComplex_Check}{PyObject *p} -returns true if it's argument is a \code{PyComplexObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex} - -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag} - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op} - -\end{cfuncdesc} - -\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op} - -\end{cfuncdesc} - -\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op} - -\end{cfuncdesc} - - - -\section{Other Objects} - -\subsection{File Objects} - -\begin{ctypedesc}{PyFileObject} -This subtype of \code{PyObject} represents a Python file object. -\end{ctypedesc} - -\begin{cvardesc}{PyTypeObject}{PyFile_Type} -This instance of \code{PyTypeObject} represents the Python file type. -\end{cvardesc} - -\begin{cfuncdesc}{int}{PyFile_Check}{PyObject *p} -returns true if it's argument is a \code{PyFileObject} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode} -creates a new PyFileObject pointing to the file -specified in \code{name} with the mode specified in \code{mode} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp, - char *name, char *mode, int (*close}) -creates a new PyFileObject from the already-open \code{fp}. -The function \code{close} will be called when the file should be closed. -\end{cfuncdesc} - -\begin{cfuncdesc}{FILE *}{PyFile_AsFile}{PyFileObject *p} -returns the file object associated with \code{p} as a \code{FILE *} -\end{cfuncdesc} - -\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n} -undocumented as yet -\end{cfuncdesc} - -\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p} -returns the name of the file specified by \code{p} as a -PyStringObject -\end{cfuncdesc} +\chapter{Defining New Object Types} -\begin{cfuncdesc}{void}{PyFile_SetBufSize}{PyFileObject *p, int n} -on systems with \code{setvbuf} only +\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type} \end{cfuncdesc} -\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag} -same as the file object method \code{softspace} +\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size} \end{cfuncdesc} -\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p} -writes object \code{obj} to file object \code{p} +\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *} \end{cfuncdesc} -\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p} -writes string \code{s} to file object \code{p} +\begin{cfuncdesc}{TYPE}{_PyObject_NEW_VAR}{TYPE, PyTypeObject *, int size} \end{cfuncdesc} -\subsection{CObjects} +\chapter{Debugging} -XXX +XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG. \input{api.ind} % Index -- must be last |