Mercurial > code
annotate cpp/is_number/is_number.hpp @ 645:2968cc4edd4c
to_int: use trailing return syntax
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 01 Aug 2018 14:06:59 +0200 |
parents | b327391f6a62 |
children | cba9782e10a7 |
rev | line source |
---|---|
622
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * is_number.hpp -- check if string is a number |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
628
b327391f6a62
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
622
diff
changeset
|
4 * Copyright (c) 2016-2018 David Demelier <markand@malikania.fr> |
622
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef IS_NUMBER_HPP |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define IS_NUMBER_HPP |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <cstdlib> |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <string> |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 /** |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 * Check if the string is an integer. |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 * |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 * \param value the input |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 * \param base the optional base |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 * \return true if integer |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 */ |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 inline bool is_int(const std::string& str, int base = 10) noexcept |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 { |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 if (str.empty()) |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 return false; |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 char* ptr; |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 std::strtol(str.c_str(), &ptr, base); |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 return *ptr == 0; |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 } |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 /** |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 * Check if the string is real. |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 * |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 * \param value the value |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 * \return true if real |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 */ |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 inline bool is_real(const std::string &str) noexcept |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 { |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 if (str.empty()) |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 return false; |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 char* ptr; |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 std::strtod(str.c_str(), &ptr); |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 return *ptr == 0; |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 } |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 /** |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 * Check if the string is a number. |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 * |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * \param value the value |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * \return true if it is a number |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 */ |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 inline bool is_number(const std::string& str) noexcept |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 { |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 return is_int(str) || is_real(str); |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 } |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
4baec6555b02
is_number: initial import, closes #718
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 #endif // !IS_NUMBER_HPP |