| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  | #ifndef Py_INTERNAL_DTOA_H
 | 
					
						
							|  |  |  | #define Py_INTERNAL_DTOA_H
 | 
					
						
							| 
									
										
										
										
											2009-04-16 19:52:09 +00:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-12 22:54:42 +01:00
										 |  |  | #ifndef Py_BUILD_CORE
 | 
					
						
							|  |  |  | #  error "this header requires Py_BUILD_CORE define"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-23 18:16:23 +01:00
										 |  |  | #include "pycore_pymath.h"        // _PY_SHORT_FLOAT_REPR
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if _PY_SHORT_FLOAT_REPR == 1
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  | typedef uint32_t ULong; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct | 
					
						
							|  |  |  | Bigint { | 
					
						
							|  |  |  |     struct Bigint *next; | 
					
						
							|  |  |  |     int k, maxwds, sign, wds; | 
					
						
							|  |  |  |     ULong x[1]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef Py_USING_MEMORY_DEBUGGER
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-28 13:14:40 -07:00
										 |  |  | struct _dtoa_state { | 
					
						
							| 
									
										
										
										
											2022-12-07 15:56:31 -07:00
										 |  |  |     int _not_used; | 
					
						
							| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2023-02-28 13:14:40 -07:00
										 |  |  | #define _dtoa_interp_state_INIT(INTERP) \
 | 
					
						
							|  |  |  |     {0} | 
					
						
							| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #else  // !Py_USING_MEMORY_DEBUGGER
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* The size of the Bigint freelist */ | 
					
						
							|  |  |  | #define Bigint_Kmax 7
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-07 08:47:55 -05:00
										 |  |  | /* The size of the cached powers of 5 array */ | 
					
						
							|  |  |  | #define Bigint_Pow5size 8
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  | #ifndef PRIVATE_MEM
 | 
					
						
							|  |  |  | #define PRIVATE_MEM 2304
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #define Bigint_PREALLOC_SIZE \
 | 
					
						
							|  |  |  |     ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-28 13:14:40 -07:00
										 |  |  | struct _dtoa_state { | 
					
						
							| 
									
										
										
										
											2023-12-07 08:47:55 -05:00
										 |  |  |     // p5s is an array of powers of 5 of the form:
 | 
					
						
							|  |  |  |     // 5**(2**(i+2)) for 0 <= i < Bigint_Pow5size
 | 
					
						
							|  |  |  |     struct Bigint *p5s[Bigint_Pow5size]; | 
					
						
							| 
									
										
										
										
											2022-12-07 15:56:31 -07:00
										 |  |  |     // XXX This should be freed during runtime fini.
 | 
					
						
							|  |  |  |     struct Bigint *freelist[Bigint_Kmax+1]; | 
					
						
							|  |  |  |     double preallocated[Bigint_PREALLOC_SIZE]; | 
					
						
							|  |  |  |     double *preallocated_next; | 
					
						
							| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2023-02-28 13:14:40 -07:00
										 |  |  | #define _dtoa_state_INIT(INTERP) \
 | 
					
						
							| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  |     { \ | 
					
						
							| 
									
										
										
										
											2023-02-28 13:14:40 -07:00
										 |  |  |         .preallocated_next = (INTERP)->dtoa.preallocated, \ | 
					
						
							| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif  // !Py_USING_MEMORY_DEBUGGER
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-25 03:44:11 +02:00
										 |  |  | 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); | 
					
						
							| 
									
										
										
										
											2009-04-16 19:52:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-23 18:16:23 +01:00
										 |  |  | #endif // _PY_SHORT_FLOAT_REPR == 1
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-07 08:47:55 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern PyStatus _PyDtoa_Init(PyInterpreterState *interp); | 
					
						
							|  |  |  | extern void _PyDtoa_Fini(PyInterpreterState *interp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-16 19:52:09 +00:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2022-11-15 09:45:11 -07:00
										 |  |  | #endif /* !Py_INTERNAL_DTOA_H */
 |