summaryrefslogtreecommitdiff
path: root/src/mongo/base/parse_number.h
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@10gen.com>2012-09-21 14:52:49 -0400
committerAndy Schwerin <schwerin@10gen.com>2012-09-25 15:05:32 -0400
commit801992d49afe770bc2f240735028e161da11c532 (patch)
tree0a1b85c8f7758d6c55a1c04811732011fae34c82 /src/mongo/base/parse_number.h
parent3aa13e9159d839760b54419fd54636cd11ae5e8b (diff)
downloadmongo-801992d49afe770bc2f240735028e161da11c532.tar.gz
parseNumberFromString* functions
A uniform interface for parsing numbers out of strings, with implementations for the standard integer types. Extension to double should be straightforward. Tests included.
Diffstat (limited to 'src/mongo/base/parse_number.h')
-rw-r--r--src/mongo/base/parse_number.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/mongo/base/parse_number.h b/src/mongo/base/parse_number.h
new file mode 100644
index 00000000000..490e163ada2
--- /dev/null
+++ b/src/mongo/base/parse_number.h
@@ -0,0 +1,74 @@
+/* Copyright 2012 10gen Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Utility functions for parsing numbers from strings.
+ */
+
+#pragma once
+
+#include <string>
+
+#include "mongo/base/status.h"
+
+namespace mongo {
+
+ /**
+ * Parse a number out of a string.
+ *
+ * Parses "stringValue", interpreting it as a number of the given "base". On success, stores
+ * the parsed value into "*result" and returns Status::OK().
+ *
+ * Valid values for "base" are 2-36, with 0 meaning "choose the base by inspecting the prefix
+ * on the number", as in strtol. Returns Status::BadValue if an illegal value is supplied for
+ * "base".
+ *
+ * The entirety of the string must consist of digits in the given base, except optionally the
+ * first character may be "+" or "-", and hexadecimal numbers may begin "0x". Same as strtol,
+ * without the property of stripping whitespace at the beginning, and fails to parse if there
+ * are non-digit characters at the end of the string.
+ *
+ * See parse_number.cpp for the available instantiations, and add any new instantiations there.
+ */
+ template <typename NumberType>
+ Status parseNumberFromStringWithBase(const char* stringValue, int base, NumberType* result);
+
+ /**
+ * Equivalent to parseNumberFromStringWithBase(stringValue, 0, result);
+ */
+ template <typename NumberType>
+ static inline Status parseNumberFromString(const char* stringValue, NumberType* result) {
+ return parseNumberFromStringWithBase(stringValue, 0, result);
+ }
+
+ /**
+ * Same as parseNumberFromStringWithBase, above, but taking a std::string instead of a c-style
+ * string.
+ */
+ template <typename NumberType>
+ static inline Status parseNumberFromStringWithBase(
+ const std::string& stringValue, int base, NumberType* result) {
+ return parseNumberFromStringWithBase(stringValue.c_str(), base, result);
+ }
+
+ /**
+ * Same as parseNumberFromString, above, but taking a std::string instead of a c-style string.
+ */
+ template <typename NumberType>
+ static inline Status parseNumberFromString(const std::string& stringValue, NumberType* result) {
+ return parseNumberFromString(stringValue.c_str(), result);
+ }
+
+} // namespace mongo