gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

iter_array.go (1402B)


      1 package jsoniter
      2 
      3 // ReadArray read array element, tells if the array has more element to read.
      4 func (iter *Iterator) ReadArray() (ret bool) {
      5 	c := iter.nextToken()
      6 	switch c {
      7 	case 'n':
      8 		iter.skipThreeBytes('u', 'l', 'l')
      9 		return false // null
     10 	case '[':
     11 		c = iter.nextToken()
     12 		if c != ']' {
     13 			iter.unreadByte()
     14 			return true
     15 		}
     16 		return false
     17 	case ']':
     18 		return false
     19 	case ',':
     20 		return true
     21 	default:
     22 		iter.ReportError("ReadArray", "expect [ or , or ] or n, but found "+string([]byte{c}))
     23 		return
     24 	}
     25 }
     26 
     27 // ReadArrayCB read array with callback
     28 func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) {
     29 	c := iter.nextToken()
     30 	if c == '[' {
     31 		if !iter.incrementDepth() {
     32 			return false
     33 		}
     34 		c = iter.nextToken()
     35 		if c != ']' {
     36 			iter.unreadByte()
     37 			if !callback(iter) {
     38 				iter.decrementDepth()
     39 				return false
     40 			}
     41 			c = iter.nextToken()
     42 			for c == ',' {
     43 				if !callback(iter) {
     44 					iter.decrementDepth()
     45 					return false
     46 				}
     47 				c = iter.nextToken()
     48 			}
     49 			if c != ']' {
     50 				iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c}))
     51 				iter.decrementDepth()
     52 				return false
     53 			}
     54 			return iter.decrementDepth()
     55 		}
     56 		return iter.decrementDepth()
     57 	}
     58 	if c == 'n' {
     59 		iter.skipThreeBytes('u', 'l', 'l')
     60 		return true // null
     61 	}
     62 	iter.ReportError("ReadArrayCB", "expect [ or n, but found "+string([]byte{c}))
     63 	return false
     64 }