summaryrefslogtreecommitdiff
path: root/include/lib/ArduinoJson/Polyfills/parseInteger.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/lib/ArduinoJson/Polyfills/parseInteger.hpp')
-rw-r--r--include/lib/ArduinoJson/Polyfills/parseInteger.hpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/include/lib/ArduinoJson/Polyfills/parseInteger.hpp b/include/lib/ArduinoJson/Polyfills/parseInteger.hpp
new file mode 100644
index 0000000..e8f1974
--- /dev/null
+++ b/include/lib/ArduinoJson/Polyfills/parseInteger.hpp
@@ -0,0 +1,41 @@
+// ArduinoJson - arduinojson.org
+// Copyright Benoit Blanchon 2014-2018
+// MIT License
+
+#pragma once
+
+#include <stdlib.h>
+
+#include "../Configuration.hpp"
+#include "./ctype.hpp"
+
+namespace ArduinoJson {
+namespace Internals {
+template <typename T>
+T parseInteger(const char *s) {
+ if (!s) return 0; // NULL
+
+ if (*s == 't') return 1; // "true"
+
+ T result = 0;
+ bool negative_result = false;
+
+ switch (*s) {
+ case '-':
+ negative_result = true;
+ s++;
+ break;
+ case '+':
+ s++;
+ break;
+ }
+
+ while (isdigit(*s)) {
+ result = T(result * 10 + T(*s - '0'));
+ s++;
+ }
+
+ return negative_result ? T(~result + 1) : result;
+}
+}
+}