mirror of https://github.com/python/cpython
59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
#ifndef Py_INTERNAL_TUPLE_H
|
|
#define Py_INTERNAL_TUPLE_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef Py_BUILD_CORE
|
|
# error "this header requires Py_BUILD_CORE define"
|
|
#endif
|
|
|
|
#include "tupleobject.h" /* _PyTuple_CAST() */
|
|
|
|
|
|
/* runtime lifecycle */
|
|
|
|
extern PyStatus _PyTuple_InitGlobalObjects(PyInterpreterState *);
|
|
extern PyStatus _PyTuple_InitTypes(PyInterpreterState *);
|
|
extern void _PyTuple_Fini(PyInterpreterState *);
|
|
|
|
|
|
/* other API */
|
|
|
|
#ifndef WITH_FREELISTS
|
|
// without freelists
|
|
// for tuples only store empty tuple singleton
|
|
# define PyTuple_MAXSAVESIZE 1
|
|
# define PyTuple_MAXFREELIST 1
|
|
#endif
|
|
|
|
/* Speed optimization to avoid frequent malloc/free of small tuples */
|
|
#ifndef PyTuple_MAXSAVESIZE
|
|
// Largest tuple to save on free list
|
|
# define PyTuple_MAXSAVESIZE 20
|
|
#endif
|
|
#ifndef PyTuple_MAXFREELIST
|
|
// Maximum number of tuples of each size to save
|
|
# define PyTuple_MAXFREELIST 2000
|
|
#endif
|
|
|
|
struct _Py_tuple_state {
|
|
#if PyTuple_MAXSAVESIZE > 0
|
|
/* Entries 1 up to PyTuple_MAXSAVESIZE are free lists,
|
|
entry 0 is the empty tuple () of which at most one instance
|
|
will be allocated. */
|
|
PyTupleObject *free_list[PyTuple_MAXSAVESIZE];
|
|
int numfree[PyTuple_MAXSAVESIZE];
|
|
#endif
|
|
};
|
|
|
|
#define _PyTuple_ITEMS(op) (_PyTuple_CAST(op)->ob_item)
|
|
|
|
extern PyObject *_PyTuple_FromArray(PyObject *const *, Py_ssize_t);
|
|
extern PyObject *_PyTuple_FromArraySteal(PyObject *const *, Py_ssize_t);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_INTERNAL_TUPLE_H */
|