Tao Wen 9 rokov pred
rodič
commit
c5576a8a31
1 zmenil súbory, kde vykonal 31 pridanie a 28 odobranie
  1. 31 28
      jsoniter.go

+ 31 - 28
jsoniter.go

@@ -88,6 +88,23 @@ func (iter *Iterator) skipWhitespaces() {
 	}
 }
 
+func (iter *Iterator) nextToken() byte {
+	for {
+		for i := iter.head; i < iter.tail; i++ {
+			c := iter.buf[i]
+			switch c {
+			case ' ', '\n', '\t', 'r':
+				continue
+			}
+			iter.head = i+1
+			return c
+		}
+		if !iter.loadMore() {
+			return 0
+		}
+	}
+}
+
 func (iter *Iterator) ReportError(operation string, msg string) {
 	if iter.Error != nil {
 		return
@@ -483,8 +500,7 @@ func appendRune(p []byte, r rune) []byte {
 }
 
 func (iter *Iterator) ReadArray() (ret bool) {
-	iter.skipWhitespaces()
-	c := iter.readByte()
+	c := iter.nextToken()
 	if iter.Error != nil {
 		return
 	}
@@ -494,8 +510,7 @@ func (iter *Iterator) ReadArray() (ret bool) {
 		return false // null
 	}
 	case '[': {
-		iter.skipWhitespaces()
-		c = iter.readByte()
+		c = iter.nextToken()
 		if iter.Error != nil {
 			return
 		}
@@ -517,8 +532,7 @@ func (iter *Iterator) ReadArray() (ret bool) {
 }
 
 func (iter *Iterator) ReadArrayCB(cb func()) {
-	iter.skipWhitespaces()
-	c := iter.readByte()
+	c := iter.nextToken()
 	if c == 'n' {
 		iter.skipNull()
 		return // null
@@ -527,8 +541,7 @@ func (iter *Iterator) ReadArrayCB(cb func()) {
 		iter.ReportError("ReadArray", "expect [ or n")
 		return
 	}
-	iter.skipWhitespaces()
-	c = iter.readByte()
+	c = iter.nextToken()
 	if c == ']' {
 		return // []
 	} else {
@@ -539,8 +552,7 @@ func (iter *Iterator) ReadArrayCB(cb func()) {
 			return
 		}
 		cb()
-		iter.skipWhitespaces()
-		c = iter.readByte()
+		c = iter.nextToken()
 		if c == ']' {
 			return
 		}
@@ -553,8 +565,7 @@ func (iter *Iterator) ReadArrayCB(cb func()) {
 }
 
 func (iter *Iterator) ReadObject() (ret string) {
-	iter.skipWhitespaces()
-	c := iter.readByte()
+	c := iter.nextToken()
 	if iter.Error != nil {
 		return
 	}
@@ -567,8 +578,7 @@ func (iter *Iterator) ReadObject() (ret string) {
 		return "" // null
 	}
 	case '{': {
-		iter.skipWhitespaces()
-		c = iter.readByte()
+		c = iter.nextToken()
 		if iter.Error != nil {
 			return
 		}
@@ -600,8 +610,7 @@ func (iter *Iterator) readObjectField() (ret string) {
 	if iter.Error != nil {
 		return
 	}
-	iter.skipWhitespaces()
-	c := iter.readByte()
+	c := iter.nextToken()
 	if iter.Error != nil {
 		return
 	}
@@ -803,8 +812,7 @@ func (iter *Iterator) skipNumber() {
 
 func (iter *Iterator) skipArray() {
 	for {
-		iter.skipWhitespaces()
-		c := iter.readByte()
+		c := iter.nextToken()
 		if iter.Error != nil {
 			return
 		}
@@ -813,8 +821,7 @@ func (iter *Iterator) skipArray() {
 		}
 		iter.unreadByte()
 		iter.Skip()
-		iter.skipWhitespaces()
-		c = iter.readByte()
+		c = iter.nextToken()
 		switch c {
 		case ',':
 			iter.skipWhitespaces()
@@ -829,8 +836,7 @@ func (iter *Iterator) skipArray() {
 }
 
 func (iter *Iterator) skipObject() {
-	iter.skipWhitespaces()
-	c := iter.readByte()
+	c := iter.nextToken()
 	if iter.Error != nil {
 		return
 	}
@@ -840,23 +846,20 @@ func (iter *Iterator) skipObject() {
 		iter.unreadByte()
 	}
 	for {
-		iter.skipWhitespaces()
-		c := iter.readByte()
+		c = iter.nextToken()
 		if c != '"' {
 			iter.ReportError("skipObject", `expects "`)
 			return
 		}
 		iter.skipString()
-		iter.skipWhitespaces()
-		c = iter.readByte()
+		c = iter.nextToken()
 		if c != ':' {
 			iter.ReportError("skipObject", `expects :`)
 			return
 		}
 		iter.skipWhitespaces()
 		iter.Skip()
-		iter.skipWhitespaces()
-		c = iter.readByte()
+		c = iter.nextToken()
 		switch c {
 		case ',':
 			iter.skipWhitespaces()