PATH:
opt
/
alt
/
python311
/
include
/
python3.11
/
internal
#ifndef Py_INTERNAL_LONG_H #define Py_INTERNAL_LONG_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_BUILD_CORE # error "this header requires Py_BUILD_CORE define" #endif #include "pycore_global_objects.h" // _PY_NSMALLNEGINTS #include "pycore_runtime.h" // _PyRuntime /* * Default int base conversion size limitation: Denial of Service prevention. * * Chosen such that this isn't wildly slow on modern hardware and so that * everyone's existing deployed numpy test suite passes before * https://github.com/numpy/numpy/issues/22098 is widely available. * * $ python -m timeit -s 's = "1"*4300' 'int(s)' * 2000 loops, best of 5: 125 usec per loop * $ python -m timeit -s 's = "1"*4300; v = int(s)' 'str(v)' * 1000 loops, best of 5: 311 usec per loop * (zen2 cloud VM) * * 4300 decimal digits fits a ~14284 bit number. */ #define _PY_LONG_DEFAULT_MAX_STR_DIGITS 4300 /* * Threshold for max digits check. For performance reasons int() and * int.__str__() don't checks values that are smaller than this * threshold. Acts as a guaranteed minimum size limit for bignums that * applications can expect from CPython. * * % python -m timeit -s 's = "1"*640; v = int(s)' 'str(int(s))' * 20000 loops, best of 5: 12 usec per loop * * "640 digits should be enough for anyone." - gps * fits a ~2126 bit decimal number. */ #define _PY_LONG_MAX_STR_DIGITS_THRESHOLD 640 #if ((_PY_LONG_DEFAULT_MAX_STR_DIGITS != 0) && \ (_PY_LONG_DEFAULT_MAX_STR_DIGITS < _PY_LONG_MAX_STR_DIGITS_THRESHOLD)) # error "_PY_LONG_DEFAULT_MAX_STR_DIGITS smaller than threshold." #endif /* runtime lifecycle */ extern PyStatus _PyLong_InitTypes(PyInterpreterState *); extern void _PyLong_FiniTypes(PyInterpreterState *interp); /* other API */ #define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints) // _PyLong_GetZero() and _PyLong_GetOne() must always be available // _PyLong_FromUnsignedChar must always be available #if _PY_NSMALLPOSINTS < 257 # error "_PY_NSMALLPOSINTS must be greater than or equal to 257" #endif // Return a borrowed reference to the zero singleton. // The function cannot return NULL. static inline PyObject* _PyLong_GetZero(void) { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; } // Return a borrowed reference to the one singleton. // The function cannot return NULL. static inline PyObject* _PyLong_GetOne(void) { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; } static inline PyObject* _PyLong_FromUnsignedChar(unsigned char i) { return Py_NewRef((PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+i]); } PyObject *_PyLong_Add(PyLongObject *left, PyLongObject *right); PyObject *_PyLong_Multiply(PyLongObject *left, PyLongObject *right); PyObject *_PyLong_Subtract(PyLongObject *left, PyLongObject *right); /* Used by Python/mystrtoul.c, _PyBytes_FromHex(), _PyBytes_DecodeEscape(), etc. */ PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; /* Format the object based on the format_spec, as defined in PEP 3101 (Advanced String Formatting). */ PyAPI_FUNC(int) _PyLong_FormatAdvancedWriter( _PyUnicodeWriter *writer, PyObject *obj, PyObject *format_spec, Py_ssize_t start, Py_ssize_t end); PyAPI_FUNC(int) _PyLong_FormatWriter( _PyUnicodeWriter *writer, PyObject *obj, int base, int alternate); PyAPI_FUNC(char*) _PyLong_FormatBytesWriter( _PyBytesWriter *writer, char *str, PyObject *obj, int base, int alternate); #ifdef __cplusplus } #endif #endif /* !Py_INTERNAL_LONG_H */
[+]
..
[-] pycore_runtime.h
[edit]
[-] pycore_call.h
[edit]
[-] pycore_symtable.h
[edit]
[-] pycore_bytes_methods.h
[edit]
[-] pycore_floatobject.h
[edit]
[-] pycore_pystate.h
[edit]
[-] pycore_pymath.h
[edit]
[-] pycore_unionobject.h
[edit]
[-] pycore_ast_state.h
[edit]
[-] pycore_tuple.h
[edit]
[-] pycore_emscripten_signal.h
[edit]
[-] pycore_sysmodule.h
[edit]
[-] pycore_frame.h
[edit]
[-] pycore_hashtable.h
[edit]
[-] pycore_strhex.h
[edit]
[-] pycore_interp.h
[edit]
[-] pycore_dict.h
[edit]
[-] pycore_runtime_init.h
[edit]
[-] pycore_gil.h
[edit]
[-] pycore_global_strings.h
[edit]
[-] pycore_interpreteridobject.h
[edit]
[-] pycore_atomic.h
[edit]
[-] pycore_initconfig.h
[edit]
[-] pycore_context.h
[edit]
[-] pycore_pymem.h
[edit]
[-] pycore_compile.h
[edit]
[-] pycore_parser.h
[edit]
[-] pycore_function.h
[edit]
[-] pycore_getopt.h
[edit]
[-] pycore_global_objects.h
[edit]
[-] pycore_typeobject.h
[edit]
[-] pycore_gc.h
[edit]
[-] pycore_pyarena.h
[edit]
[-] pycore_bytesobject.h
[edit]
[-] pycore_dtoa.h
[edit]
[-] pycore_pathconfig.h
[edit]
[-] pycore_format.h
[edit]
[-] pycore_structseq.h
[edit]
[-] pycore_object.h
[edit]
[-] pycore_import.h
[edit]
[-] pycore_pyhash.h
[edit]
[-] pycore_fileutils.h
[edit]
[-] pycore_code.h
[edit]
[-] pycore_pyerrors.h
[edit]
[-] pycore_list.h
[edit]
[-] pycore_unicodeobject.h
[edit]
[-] pycore_sliceobject.h
[edit]
[-] pycore_namespace.h
[edit]
[-] pycore_warnings.h
[edit]
[-] pycore_bitutils.h
[edit]
[-] pycore_asdl.h
[edit]
[-] pycore_abstract.h
[edit]
[-] pycore_blocks_output_buffer.h
[edit]
[-] pycore_exceptions.h
[edit]
[-] pycore_traceback.h
[edit]
[-] pycore_opcode.h
[edit]
[-] pycore_ucnhash.h
[edit]
[-] pycore_moduleobject.h
[edit]
[-] pycore_pylifecycle.h
[edit]
[-] pycore_atomic_funcs.h
[edit]
[-] pycore_ceval.h
[edit]
[-] pycore_accu.h
[edit]
[-] pycore_signal.h
[edit]
[-] pycore_condvar.h
[edit]
[-] pycore_hamt.h
[edit]
[-] pycore_long.h
[edit]
[-] pycore_ast.h
[edit]
[-] pycore_genobject.h
[edit]