| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686 |
- //
- // NumberFormatter.h
- //
- // $Id: //poco/1.4/Foundation/include/Poco/NumberFormatter.h#1 $
- //
- // Library: Foundation
- // Package: Core
- // Module: NumberFormatter
- //
- // Definition of the NumberFormatter class.
- //
- // Copyright (c) 2004-2008, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #ifndef Foundation_NumberFormatter_INCLUDED
- #define Foundation_NumberFormatter_INCLUDED
- #include "Poco/Foundation.h"
- #include "Poco/NumericString.h"
- namespace Poco {
- class Foundation_API NumberFormatter
- /// The NumberFormatter class provides static methods
- /// for formatting numeric values into strings.
- ///
- /// There are two kind of static member functions:
- /// * format* functions return a std::string containing
- /// the formatted value.
- /// * append* functions append the formatted value to
- /// an existing string.
- {
- public:
- enum BoolFormat
- {
- FMT_TRUE_FALSE,
- FMT_YES_NO,
- FMT_ON_OFF
- };
- static const unsigned NF_MAX_INT_STRING_LEN = 32; // increase for 64-bit binary formatting support
- static const unsigned NF_MAX_FLT_STRING_LEN = POCO_MAX_FLT_STRING_LEN;
- static std::string format(int value);
- /// Formats an integer value in decimal notation.
- static std::string format(int value, int width);
- /// Formats an integer value in decimal notation,
- /// right justified in a field having at least
- /// the specified width.
- static std::string format0(int value, int width);
- /// Formats an integer value in decimal notation,
- /// right justified and zero-padded in a field
- /// having at least the specified width.
- static std::string formatHex(int value, bool prefix = false);
- /// Formats an int value in hexadecimal notation.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- /// The value is treated as unsigned.
- static std::string formatHex(int value, int width, bool prefix = false);
- /// Formats a int value in hexadecimal notation,
- /// right justified and zero-padded in
- /// a field having at least the specified width.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- /// The value is treated as unsigned.
- static std::string format(unsigned value);
- /// Formats an unsigned int value in decimal notation.
- static std::string format(unsigned value, int width);
- /// Formats an unsigned long int in decimal notation,
- /// right justified in a field having at least the
- /// specified width.
- static std::string format0(unsigned int value, int width);
- /// Formats an unsigned int value in decimal notation,
- /// right justified and zero-padded in a field having at
- /// least the specified width.
- static std::string formatHex(unsigned value, bool prefix = false);
- /// Formats an unsigned int value in hexadecimal notation.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- static std::string formatHex(unsigned value, int width, bool prefix = false);
- /// Formats a int value in hexadecimal notation,
- /// right justified and zero-padded in
- /// a field having at least the specified width.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- static std::string format(long value);
- /// Formats a long value in decimal notation.
- static std::string format(long value, int width);
- /// Formats a long value in decimal notation,
- /// right justified in a field having at least the
- /// specified width.
- static std::string format0(long value, int width);
- /// Formats a long value in decimal notation,
- /// right justified and zero-padded in a field
- /// having at least the specified width.
- static std::string formatHex(long value, bool prefix = false);
- /// Formats an unsigned long value in hexadecimal notation.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- /// The value is treated as unsigned.
- static std::string formatHex(long value, int width, bool prefix = false);
- /// Formats an unsigned long value in hexadecimal notation,
- /// right justified and zero-padded in a field having at least the
- /// specified width.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- /// The value is treated as unsigned.
- static std::string format(unsigned long value);
- /// Formats an unsigned long value in decimal notation.
- static std::string format(unsigned long value, int width);
- /// Formats an unsigned long value in decimal notation,
- /// right justified in a field having at least the specified
- /// width.
- static std::string format0(unsigned long value, int width);
- /// Formats an unsigned long value in decimal notation,
- /// right justified and zero-padded
- /// in a field having at least the specified width.
- static std::string formatHex(unsigned long value, bool prefix = false);
- /// Formats an unsigned long value in hexadecimal notation.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- static std::string formatHex(unsigned long value, int width, bool prefix = false);
- /// Formats an unsigned long value in hexadecimal notation,
- /// right justified and zero-padded in a field having at least the
- /// specified width.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- #if defined(POCO_HAVE_INT64) && !defined(POCO_LONG_IS_64_BIT)
- static std::string format(Int64 value);
- /// Formats a 64-bit integer value in decimal notation.
- static std::string format(Int64 value, int width);
- /// Formats a 64-bit integer value in decimal notation,
- /// right justified in a field having at least the specified width.
- static std::string format0(Int64 value, int width);
- /// Formats a 64-bit integer value in decimal notation,
- /// right justified and zero-padded in a field having at least
- /// the specified width.
- static std::string formatHex(Int64 value, bool prefix = false);
- /// Formats a 64-bit integer value in hexadecimal notation.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- /// The value is treated as unsigned.
- static std::string formatHex(Int64 value, int width, bool prefix = false);
- /// Formats a 64-bit integer value in hexadecimal notation,
- /// right justified and zero-padded in a field having at least
- /// the specified width.
- /// The value is treated as unsigned.
- /// If prefix is true, "0x" prefix is prepended to the resulting string.
- static std::string format(UInt64 value);
- /// Formats an unsigned 64-bit integer value in decimal notation.
- static std::string format(UInt64 value, int width);
- /// Formats an unsigned 64-bit integer value in decimal notation,
- /// right justified in a field having at least the specified width.
- static std::string format0(UInt64 value, int width);
- /// Formats an unsigned 64-bit integer value in decimal notation,
- /// right justified and zero-padded in a field having at least the
- /// specified width.
- static std::string formatHex(UInt64 value, bool prefix = false);
- /// Formats a 64-bit integer value in hexadecimal notation.
- /// If prefix is true, "0x" prefix is prepended to the
- /// resulting string.
- static std::string formatHex(UInt64 value, int width, bool prefix = false);
- /// Formats a 64-bit integer value in hexadecimal notation,
- /// right justified and zero-padded in a field having at least
- /// the specified width. If prefix is true, "0x" prefix is
- /// prepended to the resulting string.
- #endif // defined(POCO_HAVE_INT64) && !defined(POCO_LONG_IS_64_BIT)
- static std::string format(float value);
- /// Formats a float value in decimal floating-point notation,
- /// according to std::printf's %g format with a precision of 8 fractional digits.
- static std::string format(double value);
- /// Formats a double value in decimal floating-point notation,
- /// according to std::printf's %g format with a precision of 16 fractional digits.
- static std::string format(double value, int precision);
- /// Formats a double value in decimal floating-point notation,
- /// according to std::printf's %f format with the given precision.
- static std::string format(double value, int width, int precision);
- /// Formats a double value in decimal floating-point notation,
- /// right justified in a field of the specified width,
- /// with the number of fractional digits given in precision.
- static std::string format(const void* ptr);
- /// Formats a pointer in an eight (32-bit architectures) or
- /// sixteen (64-bit architectures) characters wide
- /// field in hexadecimal notation.
- static std::string format(bool value, BoolFormat format = FMT_TRUE_FALSE);
- /// Formats a bool value in decimal/text notation,
- /// according to format parameter.
- static void append(std::string& str, int value);
- /// Formats an integer value in decimal notation.
- static void append(std::string& str, int value, int width);
- /// Formats an integer value in decimal notation,
- /// right justified in a field having at least
- /// the specified width.
- static void append0(std::string& str, int value, int width);
- /// Formats an integer value in decimal notation,
- /// right justified and zero-padded in a field
- /// having at least the specified width.
- static void appendHex(std::string& str, int value);
- /// Formats an int value in hexadecimal notation.
- /// The value is treated as unsigned.
- static void appendHex(std::string& str, int value, int width);
- /// Formats a int value in hexadecimal notation,
- /// right justified and zero-padded in
- /// a field having at least the specified width.
- /// The value is treated as unsigned.
- static void append(std::string& str, unsigned value);
- /// Formats an unsigned int value in decimal notation.
- static void append(std::string& str, unsigned value, int width);
- /// Formats an unsigned long int in decimal notation,
- /// right justified in a field having at least the
- /// specified width.
- static void append0(std::string& str, unsigned int value, int width);
- /// Formats an unsigned int value in decimal notation,
- /// right justified and zero-padded in a field having at
- /// least the specified width.
- static void appendHex(std::string& str, unsigned value);
- /// Formats an unsigned int value in hexadecimal notation.
- static void appendHex(std::string& str, unsigned value, int width);
- /// Formats a int value in hexadecimal notation,
- /// right justified and zero-padded in
- /// a field having at least the specified width.
- static void append(std::string& str, long value);
- /// Formats a long value in decimal notation.
- static void append(std::string& str, long value, int width);
- /// Formats a long value in decimal notation,
- /// right justified in a field having at least the
- /// specified width.
- static void append0(std::string& str, long value, int width);
- /// Formats a long value in decimal notation,
- /// right justified and zero-padded in a field
- /// having at least the specified width.
- static void appendHex(std::string& str, long value);
- /// Formats an unsigned long value in hexadecimal notation.
- /// The value is treated as unsigned.
- static void appendHex(std::string& str, long value, int width);
- /// Formats an unsigned long value in hexadecimal notation,
- /// right justified and zero-padded in a field having at least the
- /// specified width.
- /// The value is treated as unsigned.
- static void append(std::string& str, unsigned long value);
- /// Formats an unsigned long value in decimal notation.
- static void append(std::string& str, unsigned long value, int width);
- /// Formats an unsigned long value in decimal notation,
- /// right justified in a field having at least the specified
- /// width.
- static void append0(std::string& str, unsigned long value, int width);
- /// Formats an unsigned long value in decimal notation,
- /// right justified and zero-padded
- /// in a field having at least the specified width.
- static void appendHex(std::string& str, unsigned long value);
- /// Formats an unsigned long value in hexadecimal notation.
- static void appendHex(std::string& str, unsigned long value, int width);
- /// Formats an unsigned long value in hexadecimal notation,
- /// right justified and zero-padded in a field having at least the
- /// specified width.
- #if defined(POCO_HAVE_INT64) && !defined(POCO_LONG_IS_64_BIT)
- static void append(std::string& str, Int64 value);
- /// Formats a 64-bit integer value in decimal notation.
- static void append(std::string& str, Int64 value, int width);
- /// Formats a 64-bit integer value in decimal notation,
- /// right justified in a field having at least the specified width.
- static void append0(std::string& str, Int64 value, int width);
- /// Formats a 64-bit integer value in decimal notation,
- /// right justified and zero-padded in a field having at least
- /// the specified width.
- static void appendHex(std::string& str, Int64 value);
- /// Formats a 64-bit integer value in hexadecimal notation.
- /// The value is treated as unsigned.
- static void appendHex(std::string& str, Int64 value, int width);
- /// Formats a 64-bit integer value in hexadecimal notation,
- /// right justified and zero-padded in a field having at least
- /// the specified width.
- /// The value is treated as unsigned.
- static void append(std::string& str, UInt64 value);
- /// Formats an unsigned 64-bit integer value in decimal notation.
- static void append(std::string& str, UInt64 value, int width);
- /// Formats an unsigned 64-bit integer value in decimal notation,
- /// right justified in a field having at least the specified width.
- static void append0(std::string& str, UInt64 value, int width);
- /// Formats an unsigned 64-bit integer value in decimal notation,
- /// right justified and zero-padded in a field having at least the
- /// specified width.
- static void appendHex(std::string& str, UInt64 value);
- /// Formats a 64-bit integer value in hexadecimal notation.
- static void appendHex(std::string& str, UInt64 value, int width);
- /// Formats a 64-bit integer value in hexadecimal notation,
- /// right justified and zero-padded in a field having at least
- /// the specified width.
- #endif // defined(POCO_HAVE_INT64) && !defined(POCO_LONG_IS_64_BIT)
- static void append(std::string& str, float value);
- /// Formats a float value in decimal floating-point notation,
- /// according to std::printf's %g format with a precision of 8 fractional digits.
- static void append(std::string& str, double value);
- /// Formats a double value in decimal floating-point notation,
- /// according to std::printf's %g format with a precision of 16 fractional digits.
- static void append(std::string& str, double value, int precision);
- /// Formats a double value in decimal floating-point notation,
- /// according to std::printf's %f format with the given precision.
- static void append(std::string& str, double value, int width, int precision);
- /// Formats a double value in decimal floating-point notation,
- /// right justified in a field of the specified width,
- /// with the number of fractional digits given in precision.
- static void append(std::string& str, const void* ptr);
- /// Formats a pointer in an eight (32-bit architectures) or
- /// sixteen (64-bit architectures) characters wide
- /// field in hexadecimal notation.
- private:
- };
- //
- // inlines
- //
- inline std::string NumberFormatter::format(int value)
- {
- std::string result;
- intToStr(value, 10, result);
- return result;
- }
- inline std::string NumberFormatter::format(int value, int width)
- {
- std::string result;
- intToStr(value, 10, result, false, width, ' ');
- return result;
- }
- inline std::string NumberFormatter::format0(int value, int width)
- {
- std::string result;
- intToStr(value, 10, result, false, width, '0');
- return result;
- }
- inline std::string NumberFormatter::formatHex(int value, bool prefix)
- {
- std::string result;
- uIntToStr(static_cast<unsigned int>(value), 0x10, result, prefix);
- return result;
- }
- inline std::string NumberFormatter::formatHex(int value, int width, bool prefix)
- {
- std::string result;
- uIntToStr(static_cast<unsigned int>(value), 0x10, result, prefix, width, '0');
- return result;
- }
- inline std::string NumberFormatter::format(unsigned value)
- {
- std::string result;
- uIntToStr(value, 10, result);
- return result;
- }
- inline std::string NumberFormatter::format(unsigned value, int width)
- {
- std::string result;
- uIntToStr(value, 10, result, false, width, ' ');
- return result;
- }
- inline std::string NumberFormatter::format0(unsigned int value, int width)
- {
- std::string result;
- uIntToStr(value, 10, result, false, width, '0');
- return result;
- }
- inline std::string NumberFormatter::formatHex(unsigned value, bool prefix)
- {
- std::string result;
- uIntToStr(value, 0x10, result, prefix);
- return result;
- }
- inline std::string NumberFormatter::formatHex(unsigned value, int width, bool prefix)
- {
- std::string result;
- uIntToStr(value, 0x10, result, prefix, width, '0');
- return result;
- }
- inline std::string NumberFormatter::format(long value)
- {
- std::string result;
- intToStr(value, 10, result);
- return result;
- }
- inline std::string NumberFormatter::format(long value, int width)
- {
- std::string result;
- intToStr(value, 10, result, false, width, ' ');
- return result;
- }
- inline std::string NumberFormatter::format0(long value, int width)
- {
- std::string result;
- intToStr(value, 10, result, false, width, '0');
- return result;
- }
- inline std::string NumberFormatter::formatHex(long value, bool prefix)
- {
- std::string result;
- uIntToStr(static_cast<unsigned long>(value), 0x10, result, prefix);
- return result;
- }
- inline std::string NumberFormatter::formatHex(long value, int width, bool prefix)
- {
- std::string result;
- uIntToStr(static_cast<unsigned long>(value), 0x10, result, prefix, width, '0');
- return result;
- }
- inline std::string NumberFormatter::format(unsigned long value)
- {
- std::string result;
- uIntToStr(value, 10, result);
- return result;
- }
- inline std::string NumberFormatter::format(unsigned long value, int width)
- {
- std::string result;
- uIntToStr(value, 10, result, false, width, ' ');
- return result;
- }
- inline std::string NumberFormatter::format0(unsigned long value, int width)
- {
- std::string result;
- uIntToStr(value, 10, result, false, width, '0');
- return result;
- }
- inline std::string NumberFormatter::formatHex(unsigned long value, bool prefix)
- {
- std::string result;
- uIntToStr(value, 0x10, result, prefix);
- return result;
- }
- inline std::string NumberFormatter::formatHex(unsigned long value, int width, bool prefix)
- {
- std::string result;
- uIntToStr(value, 0x10, result, prefix, width, '0');
- return result;
- }
- #if defined(POCO_HAVE_INT64) && !defined(POCO_LONG_IS_64_BIT)
- inline std::string NumberFormatter::format(Int64 value)
- {
- std::string result;
- intToStr(value, 10, result);
- return result;
- }
- inline std::string NumberFormatter::format(Int64 value, int width)
- {
- std::string result;
- intToStr(value, 10, result, false, width, ' ');
- return result;
- }
- inline std::string NumberFormatter::format0(Int64 value, int width)
- {
- std::string result;
- intToStr(value, 10, result, false, width, '0');
- return result;
- }
- inline std::string NumberFormatter::formatHex(Int64 value, bool prefix)
- {
- std::string result;
- uIntToStr(static_cast<UInt64>(value), 0x10, result, prefix);
- return result;
- }
- inline std::string NumberFormatter::formatHex(Int64 value, int width, bool prefix)
- {
- std::string result;
- uIntToStr(static_cast<UInt64>(value), 0x10, result, prefix, width, '0');
- return result;
- }
- inline std::string NumberFormatter::format(UInt64 value)
- {
- std::string result;
- uIntToStr(value, 10, result);
- return result;
- }
- inline std::string NumberFormatter::format(UInt64 value, int width)
- {
- std::string result;
- uIntToStr(value, 10, result, false, width, ' ');
- return result;
- }
- inline std::string NumberFormatter::format0(UInt64 value, int width)
- {
- std::string result;
- uIntToStr(value, 10, result, false, width, '0');
- return result;
- }
- inline std::string NumberFormatter::formatHex(UInt64 value, bool prefix)
- {
- std::string result;
- uIntToStr(value, 0x10, result, prefix);
- return result;
- }
- inline std::string NumberFormatter::formatHex(UInt64 value, int width, bool prefix)
- {
- std::string result;
- uIntToStr(value, 0x10, result, prefix, width, '0');
- return result;
- }
- #endif // defined(POCO_HAVE_INT64) && !defined(POCO_LONG_IS_64_BIT)
- inline std::string NumberFormatter::format(float value)
- {
- std::string result;
- floatToStr(result, value);
- return result;
- }
- inline std::string NumberFormatter::format(double value)
- {
- std::string result;
- doubleToStr(result, value);
- return result;
- }
- inline std::string NumberFormatter::format(double value, int precision)
- {
- std::string result;
- doubleToStr(result, value, precision);
- return result;
- }
- inline std::string NumberFormatter::format(double value, int width, int precision)
- {
- std::string result;
- doubleToStr(result, value, precision, width);
- return result;
- }
- inline std::string NumberFormatter::format(const void* ptr)
- {
- std::string result;
- append(result, ptr);
- return result;
- }
- } // namespace Poco
- #endif // Foundation_NumberFormatter_INCLUDED
|