summaryrefslogtreecommitdiff
path: root/vendor/github.com/buger/jsonparser/bytes.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/buger/jsonparser/bytes.go')
-rw-r--r--vendor/github.com/buger/jsonparser/bytes.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/vendor/github.com/buger/jsonparser/bytes.go b/vendor/github.com/buger/jsonparser/bytes.go
new file mode 100644
index 000000000..0bb0ff395
--- /dev/null
+++ b/vendor/github.com/buger/jsonparser/bytes.go
@@ -0,0 +1,47 @@
+package jsonparser
+
+import (
+ bio "bytes"
+)
+
+// minInt64 '-9223372036854775808' is the smallest representable number in int64
+const minInt64 = `9223372036854775808`
+
+// About 2x faster then strconv.ParseInt because it only supports base 10, which is enough for JSON
+func parseInt(bytes []byte) (v int64, ok bool, overflow bool) {
+ if len(bytes) == 0 {
+ return 0, false, false
+ }
+
+ var neg bool = false
+ if bytes[0] == '-' {
+ neg = true
+ bytes = bytes[1:]
+ }
+
+ var b int64 = 0
+ for _, c := range bytes {
+ if c >= '0' && c <= '9' {
+ b = (10 * v) + int64(c-'0')
+ } else {
+ return 0, false, false
+ }
+ if overflow = (b < v); overflow {
+ break
+ }
+ v = b
+ }
+
+ if overflow {
+ if neg && bio.Equal(bytes, []byte(minInt64)) {
+ return b, true, false
+ }
+ return 0, false, true
+ }
+
+ if neg {
+ return -v, true, false
+ } else {
+ return v, true, false
+ }
+}