| #ifndef Py_INTERNAL_DTOA_H |
| #define Py_INTERNAL_DTOA_H |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #ifndef Py_BUILD_CORE |
| # error "this header requires Py_BUILD_CORE define" |
| #endif |
| |
| #include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR |
| |
| |
| #if _PY_SHORT_FLOAT_REPR == 1 |
| |
| typedef uint32_t ULong; |
| |
| struct |
| Bigint { |
| struct Bigint *next; |
| int k, maxwds, sign, wds; |
| ULong x[1]; |
| }; |
| |
| #ifdef Py_USING_MEMORY_DEBUGGER |
| |
| struct _dtoa_state { |
| int _not_used; |
| }; |
| #define _dtoa_interp_state_INIT(INTERP) \ |
| {0} |
| |
| #else // !Py_USING_MEMORY_DEBUGGER |
| |
| /* The size of the Bigint freelist */ |
| #define Bigint_Kmax 7 |
| |
| #ifndef PRIVATE_MEM |
| #define PRIVATE_MEM 2304 |
| #endif |
| #define Bigint_PREALLOC_SIZE \ |
| ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) |
| |
| struct _dtoa_state { |
| /* p5s is a linked list of powers of 5 of the form 5**(2**i), i >= 2 */ |
| // XXX This should be freed during runtime fini. |
| struct Bigint *p5s; |
| struct Bigint *freelist[Bigint_Kmax+1]; |
| double preallocated[Bigint_PREALLOC_SIZE]; |
| double *preallocated_next; |
| }; |
| #define _dtoa_state_INIT(INTERP) \ |
| { \ |
| .preallocated_next = (INTERP)->dtoa.preallocated, \ |
| } |
| |
| #endif // !Py_USING_MEMORY_DEBUGGER |
| |
| |
| /* These functions are used by modules compiled as C extension like math: |
| they must be exported. */ |
| |
| extern double _Py_dg_strtod(const char *str, char **ptr); |
| extern char* _Py_dg_dtoa(double d, int mode, int ndigits, |
| int *decpt, int *sign, char **rve); |
| extern void _Py_dg_freedtoa(char *s); |
| |
| #endif // _PY_SHORT_FLOAT_REPR == 1 |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #endif /* !Py_INTERNAL_DTOA_H */ |