aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/NumberParser.h
blob: c58ed4f359517da6f256e9aa593b675001e8718a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//
// NumberParser.h
//
// Library: Foundation
// Package: Core
// Module:  NumberParser
//
// Definition of the NumberParser class.
//
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
//


#ifndef Foundation_NumberParser_INCLUDED
#define Foundation_NumberParser_INCLUDED


#include "Poco/Foundation.h"
#include <string>
#undef min
#undef max
#include <limits>


namespace Poco {


class Foundation_API NumberParser
	/// The NumberParser class provides static methods
	/// for parsing numbers out of strings.
	///
	/// Note that leading or trailing whitespace is not allowed
	/// in the string. Poco::trim() or Poco::trimInPlace()
	/// can be used to remove leading or trailing whitespace.
{
public:
	static const unsigned short NUM_BASE_OCT = 010;
	static const unsigned short NUM_BASE_DEC = 10;
	static const unsigned short NUM_BASE_HEX = 0x10;

	static int parse(const std::string& s, char thousandSeparator = ',');
		/// Parses an integer value in decimal notation from the given string.
		/// Throws a SyntaxException if the string does not hold a number in decimal notation.
	
	static bool tryParse(const std::string& s, int& value, char thousandSeparator = ',');
		/// Parses an integer value in decimal notation from the given string.
		/// Returns true if a valid integer has been found, false otherwise. 
		/// If parsing was not successful, value is undefined.
	
	static unsigned parseUnsigned(const std::string& s, char thousandSeparator = ',');
		/// Parses an unsigned integer value in decimal notation from the given string.
		/// Throws a SyntaxException if the string does not hold a number in decimal notation.

	static bool tryParseUnsigned(const std::string& s, unsigned& value, char thousandSeparator = ',');
		/// Parses an unsigned integer value in decimal notation from the given string.
		/// Returns true if a valid integer has been found, false otherwise. 
		/// If parsing was not successful, value is undefined.

	static unsigned parseHex(const std::string& s);
		/// Parses an integer value in hexadecimal notation from the given string.
		/// Throws a SyntaxException if the string does not hold a number in
		/// hexadecimal notation.

	static bool tryParseHex(const std::string& s, unsigned& value);
		/// Parses an unsigned integer value in hexadecimal notation from the given string.
		/// Returns true if a valid integer has been found, false otherwise. 
		/// If parsing was not successful, value is undefined.

	static unsigned parseOct(const std::string& s);
		/// Parses an integer value in octal notation from the given string.
		/// Throws a SyntaxException if the string does not hold a number in
		/// hexadecimal notation.

	static bool tryParseOct(const std::string& s, unsigned& value);
		/// Parses an unsigned integer value in octal notation from the given string.
		/// Returns true if a valid integer has been found, false otherwise. 
		/// If parsing was not successful, value is undefined.

#if defined(POCO_HAVE_INT64)

	static Int64 parse64(const std::string& s, char thousandSeparator = ',');
		/// Parses a 64-bit integer value in decimal notation from the given string.
		/// Throws a SyntaxException if the string does not hold a number in decimal notation.

	static bool tryParse64(const std::string& s, Int64& value, char thousandSeparator = ',');
		/// Parses a 64-bit integer value in decimal notation from the given string.
		/// Returns true if a valid integer has been found, false otherwise. 
		/// If parsing was not successful, value is undefined.

	static UInt64 parseUnsigned64(const std::string& s, char thousandSeparator = ',');
		/// Parses an unsigned 64-bit integer value in decimal notation from the given string.
		/// Throws a SyntaxException if the string does not hold a number in decimal notation.

	static bool tryParseUnsigned64(const std::string& s, UInt64& value, char thousandSeparator = ',');
		/// Parses an unsigned 64-bit integer value in decimal notation from the given string.
		/// Returns true if a valid integer has been found, false otherwise. 
		/// If parsing was not successful, value is undefined.

	static UInt64 parseHex64(const std::string& s);
		/// Parses a 64 bit-integer value in hexadecimal notation from the given string.
		/// Throws a SyntaxException if the string does not hold a number in hexadecimal notation.

	static bool tryParseHex64(const std::string& s, UInt64& value);
		/// Parses an unsigned 64-bit integer value in hexadecimal notation from the given string.
		/// Returns true if a valid integer has been found, false otherwise. 
		/// If parsing was not successful, value is undefined.

	static UInt64 parseOct64(const std::string& s);
		/// Parses a 64 bit-integer value in octal notation from the given string.
		/// Throws a SyntaxException if the string does not hold a number in hexadecimal notation.

	static bool tryParseOct64(const std::string& s, UInt64& value);
		/// Parses an unsigned 64-bit integer value in octal notation from the given string.
		/// Returns true if a valid integer has been found, false otherwise. 
		/// If parsing was not successful, value is undefined.

#endif // defined(POCO_HAVE_INT64)

	static double parseFloat(const std::string& s, char decimalSeparator = '.', char thousandSeparator = ',');
		/// Parses a double value in decimal floating point notation
		/// from the given string.
		/// Throws a SyntaxException if the string does not hold a floating-point 
		/// number in decimal notation.
		
	static bool tryParseFloat(const std::string& s, double& value, char decimalSeparator = '.', char thousandSeparator = ',');
		/// Parses a double value in decimal floating point notation
		/// from the given string.
		/// Returns true if a valid floating point number has been found,
		/// false otherwise.
		/// If parsing was not successful, value is undefined.

	static bool parseBool(const std::string& s);
		/// Parses a bool value in decimal or string notation
		/// from the given string.
		/// Valid forms are: "0", "1", "true", "on", false", "yes", "no", "off".
		/// String forms are NOT case sensitive.
		/// Throws a SyntaxException if the string does not hold a valid bool number

	static bool tryParseBool(const std::string& s, bool& value);
		/// Parses a bool value in decimal or string notation
		/// from the given string.
		/// Valid forms are: "0", "1", "true", "on", false", "yes", "no", "off".
		/// String forms are NOT case sensitive.
		/// Returns true if a valid bool number has been found,
		/// false otherwise.
		/// If parsing was not successful, value is undefined.
};


} // namespace Poco


#endif // Foundation_NumberParser_INCLUDED