Branch data Line data Source code
1 : : #ifndef Py_INTERNAL_LONG_H 2 : : #define Py_INTERNAL_LONG_H 3 : : #ifdef __cplusplus 4 : : extern "C" { 5 : : #endif 6 : : 7 : : #ifndef Py_BUILD_CORE 8 : : # error "this header requires Py_BUILD_CORE define" 9 : : #endif 10 : : 11 : : #include "pycore_global_objects.h" // _PY_NSMALLNEGINTS 12 : : #include "pycore_runtime.h" // _PyRuntime 13 : : 14 : : 15 : : /* runtime lifecycle */ 16 : : 17 : : extern PyStatus _PyLong_InitTypes(PyInterpreterState *); 18 : : extern void _PyLong_FiniTypes(PyInterpreterState *interp); 19 : : 20 : : 21 : : /* other API */ 22 : : 23 : : #define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints) 24 : : 25 : : // _PyLong_GetZero() and _PyLong_GetOne() must always be available 26 : : // _PyLong_FromUnsignedChar must always be available 27 : : #if _PY_NSMALLPOSINTS < 257 28 : : # error "_PY_NSMALLPOSINTS must be greater than or equal to 257" 29 : : #endif 30 : : 31 : : // Return a borrowed reference to the zero singleton. 32 : : // The function cannot return NULL. 33 : 3979799 : static inline PyObject* _PyLong_GetZero(void) 34 : 3979799 : { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; } 35 : : 36 : : // Return a borrowed reference to the one singleton. 37 : : // The function cannot return NULL. 38 : 5209224 : static inline PyObject* _PyLong_GetOne(void) 39 : 5209224 : { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; } 40 : : 41 : 6727508 : static inline PyObject* _PyLong_FromUnsignedChar(unsigned char i) 42 : : { 43 : 6727508 : return Py_NewRef((PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+i]); 44 : : } 45 : : 46 : : PyObject *_PyLong_Add(PyLongObject *left, PyLongObject *right); 47 : : PyObject *_PyLong_Multiply(PyLongObject *left, PyLongObject *right); 48 : : PyObject *_PyLong_Subtract(PyLongObject *left, PyLongObject *right); 49 : : 50 : : int _PyLong_AssignValue(PyObject **target, Py_ssize_t value); 51 : : 52 : : /* Used by Python/mystrtoul.c, _PyBytes_FromHex(), 53 : : _PyBytes_DecodeEscape(), etc. */ 54 : : PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; 55 : : 56 : : /* Format the object based on the format_spec, as defined in PEP 3101 57 : : (Advanced String Formatting). */ 58 : : PyAPI_FUNC(int) _PyLong_FormatAdvancedWriter( 59 : : _PyUnicodeWriter *writer, 60 : : PyObject *obj, 61 : : PyObject *format_spec, 62 : : Py_ssize_t start, 63 : : Py_ssize_t end); 64 : : 65 : : PyAPI_FUNC(int) _PyLong_FormatWriter( 66 : : _PyUnicodeWriter *writer, 67 : : PyObject *obj, 68 : : int base, 69 : : int alternate); 70 : : 71 : : PyAPI_FUNC(char*) _PyLong_FormatBytesWriter( 72 : : _PyBytesWriter *writer, 73 : : char *str, 74 : : PyObject *obj, 75 : : int base, 76 : : int alternate); 77 : : 78 : : #ifdef __cplusplus 79 : : } 80 : : #endif 81 : : #endif /* !Py_INTERNAL_LONG_H */