diff options
| author | Taras Madan <tarasmadan@google.com> | 2024-06-17 11:50:19 +0200 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-06-20 09:22:00 +0000 |
| commit | c576ee0969cd731f1a1543712b62a4933480136e (patch) | |
| tree | 9a44d2537287b0519470c9fe6d242963fdedd7f7 /vendor/github.com/json-iterator/go/iter_array.go | |
| parent | 41b7e219b69c98529757e036f4b8fb1e9fa77040 (diff) | |
vendor: spanner
Diffstat (limited to 'vendor/github.com/json-iterator/go/iter_array.go')
| -rw-r--r-- | vendor/github.com/json-iterator/go/iter_array.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/vendor/github.com/json-iterator/go/iter_array.go b/vendor/github.com/json-iterator/go/iter_array.go new file mode 100644 index 000000000..204fe0e09 --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_array.go @@ -0,0 +1,64 @@ +package jsoniter + +// ReadArray read array element, tells if the array has more element to read. +func (iter *Iterator) ReadArray() (ret bool) { + c := iter.nextToken() + switch c { + case 'n': + iter.skipThreeBytes('u', 'l', 'l') + return false // null + case '[': + c = iter.nextToken() + if c != ']' { + iter.unreadByte() + return true + } + return false + case ']': + return false + case ',': + return true + default: + iter.ReportError("ReadArray", "expect [ or , or ] or n, but found "+string([]byte{c})) + return + } +} + +// ReadArrayCB read array with callback +func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) { + c := iter.nextToken() + if c == '[' { + if !iter.incrementDepth() { + return false + } + c = iter.nextToken() + if c != ']' { + iter.unreadByte() + if !callback(iter) { + iter.decrementDepth() + return false + } + c = iter.nextToken() + for c == ',' { + if !callback(iter) { + iter.decrementDepth() + return false + } + c = iter.nextToken() + } + if c != ']' { + iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c})) + iter.decrementDepth() + return false + } + return iter.decrementDepth() + } + return iter.decrementDepth() + } + if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + return true // null + } + iter.ReportError("ReadArrayCB", "expect [ or n, but found "+string([]byte{c})) + return false +} |
