mirror of
https://github.com/python/cpython.git
synced 2025-07-25 12:14:38 +00:00

This change is strictly renames and moving code around. It helps in the following ways: * ensures type-related init functions focus strictly on one of the three aspects (state, objects, types) * passes in PyInterpreterState * to all those functions, simplifying work on moving types/objects/state to the interpreter * consistent naming conventions help make what's going on more clear * keeping API related to a type in the corresponding header file makes it more obvious where to look for it https://bugs.python.org/issue46008
58 lines
1.4 KiB
C
58 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 */
|