mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 19:12:25 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			862 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			862 B
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						|
	}
 | 
						|
}
 |