diff options
author | Eric Smith <eric@trueblade.com> | 2009-04-22 13:29:05 (GMT) |
---|---|---|
committer | Eric Smith <eric@trueblade.com> | 2009-04-22 13:29:05 (GMT) |
commit | aca19e6a740c424aec243a4721b18d12e9129aa7 (patch) | |
tree | 89b7a3d0e2b7246f483baba919002a24e95bb1d2 /Include | |
parent | cbb530872354fb4eb3b8b5bbaa36db38a0d9a64a (diff) | |
download | cpython-aca19e6a740c424aec243a4721b18d12e9129aa7.zip cpython-aca19e6a740c424aec243a4721b18d12e9129aa7.tar.gz cpython-aca19e6a740c424aec243a4721b18d12e9129aa7.tar.bz2 |
Backport of some of the work in r71665 to trunk. This reworks much of
int, long, and float __format__(), and it keeps their implementation
in sync with py3k.
Also added PyOS_double_to_string. This is the "fallback" version
that's also available in trunk, and should be kept in sync with that
code. I'll add an issue to document PyOS_double_to_string in the C
API.
There are many internal cleanups. Externally visible changes include:
- Implement PEP 378, Format Specifier for Thousands Separator, for
floats, ints, and longs.
- Issue #5515: 'n' formatting for ints, longs, and floats handles
leading zero formatting poorly.
- Issue #5772: For float.__format__, don't add a trailing ".0" if
we're using no type code and we have an exponent.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/pystrtod.h | 19 | ||||
-rw-r--r-- | Include/stringobject.h | 22 |
2 files changed, 35 insertions, 6 deletions
diff --git a/Include/pystrtod.h b/Include/pystrtod.h index c6921da..1caa7ae 100644 --- a/Include/pystrtod.h +++ b/Include/pystrtod.h @@ -10,6 +10,25 @@ PyAPI_FUNC(double) PyOS_ascii_strtod(const char *str, char **ptr); PyAPI_FUNC(double) PyOS_ascii_atof(const char *str); PyAPI_FUNC(char *) PyOS_ascii_formatd(char *buffer, size_t buf_len, const char *format, double d); +/* The caller is responsible for calling PyMem_Free to free the buffer + that's is returned. */ +PyAPI_FUNC(char *) PyOS_double_to_string(double val, + char format_code, + int precision, + int flags, + int *type); + + +/* PyOS_double_to_string's "flags" parameter can be set to 0 or more of: */ +#define Py_DTSF_SIGN 0x01 /* always add the sign */ +#define Py_DTSF_ADD_DOT_0 0x02 /* if the result is an integer add ".0" */ +#define Py_DTSF_ALT 0x04 /* "alternate" formatting. it's format_code + specific */ + +/* PyOS_double_to_string's "type", if non-NULL, will be set to one of: */ +#define Py_DTST_FINITE 0 +#define Py_DTST_INFINITE 1 +#define Py_DTST_NAN 2 #ifdef __cplusplus } diff --git a/Include/stringobject.h b/Include/stringobject.h index d9f1840..18b5b41 100644 --- a/Include/stringobject.h +++ b/Include/stringobject.h @@ -177,16 +177,26 @@ PyAPI_FUNC(int) PyString_AsStringAndSize( strings) */ ); + /* Using the current locale, insert the thousands grouping into the string pointed to by buffer. For the argument descriptions, see Objects/stringlib/localeutil.h */ +PyAPI_FUNC(Py_ssize_t) _PyString_InsertThousandsGroupingLocale(char *buffer, + Py_ssize_t n_buffer, + char *digits, + Py_ssize_t n_digits, + Py_ssize_t min_width); -PyAPI_FUNC(int) _PyString_InsertThousandsGrouping(char *buffer, - Py_ssize_t n_buffer, - Py_ssize_t n_digits, - Py_ssize_t buf_size, - Py_ssize_t *count, - int append_zero_char); +/* Using explicit passed-in values, insert the thousands grouping + into the string pointed to by buffer. For the argument descriptions, + see Objects/stringlib/localeutil.h */ +PyAPI_FUNC(Py_ssize_t) _PyString_InsertThousandsGrouping(char *buffer, + Py_ssize_t n_buffer, + char *digits, + Py_ssize_t n_digits, + Py_ssize_t min_width, + const char *grouping, + const char *thousands_sep); /* Format the object based on the format_spec, as defined in PEP 3101 (Advanced String Formatting). */ |