package jsoniter
import (
"fmt"
"strconv"
)
type stringAny struct {
baseAny
val string
}
func (any *stringAny ) Get (path ...interface {}) Any {
if len (path ) == 0 {
return any
}
return &invalidAny {baseAny {}, fmt .Errorf ("GetIndex %v from simple value" , path )}
}
func (any *stringAny ) Parse () *Iterator {
return nil
}
func (any *stringAny ) ValueType () ValueType {
return StringValue
}
func (any *stringAny ) MustBeValid () Any {
return any
}
func (any *stringAny ) LastError () error {
return nil
}
func (any *stringAny ) ToBool () bool {
str := any .ToString ()
if str == "0" {
return false
}
for _ , c := range str {
switch c {
case ' ' , '\n' , '\r' , '\t' :
default :
return true
}
}
return false
}
func (any *stringAny ) ToInt () int {
return int (any .ToInt64 ())
}
func (any *stringAny ) ToInt32 () int32 {
return int32 (any .ToInt64 ())
}
func (any *stringAny ) ToInt64 () int64 {
if any .val == "" {
return 0
}
flag := 1
startPos := 0
if any .val [0 ] == '+' || any .val [0 ] == '-' {
startPos = 1
}
if any .val [0 ] == '-' {
flag = -1
}
endPos := startPos
for i := startPos ; i < len (any .val ); i ++ {
if any .val [i ] >= '0' && any .val [i ] <= '9' {
endPos = i + 1
} else {
break
}
}
parsed , _ := strconv .ParseInt (any .val [startPos :endPos ], 10 , 64 )
return int64 (flag ) * parsed
}
func (any *stringAny ) ToUint () uint {
return uint (any .ToUint64 ())
}
func (any *stringAny ) ToUint32 () uint32 {
return uint32 (any .ToUint64 ())
}
func (any *stringAny ) ToUint64 () uint64 {
if any .val == "" {
return 0
}
startPos := 0
if any .val [0 ] == '-' {
return 0
}
if any .val [0 ] == '+' {
startPos = 1
}
endPos := startPos
for i := startPos ; i < len (any .val ); i ++ {
if any .val [i ] >= '0' && any .val [i ] <= '9' {
endPos = i + 1
} else {
break
}
}
parsed , _ := strconv .ParseUint (any .val [startPos :endPos ], 10 , 64 )
return parsed
}
func (any *stringAny ) ToFloat32 () float32 {
return float32 (any .ToFloat64 ())
}
func (any *stringAny ) ToFloat64 () float64 {
if len (any .val ) == 0 {
return 0
}
if any .val [0 ] != '+' && any .val [0 ] != '-' && (any .val [0 ] > '9' || any .val [0 ] < '0' ) {
return 0
}
endPos := 1
for i := 1 ; i < len (any .val ); i ++ {
if any .val [i ] == '.' || any .val [i ] == 'e' || any .val [i ] == 'E' || any .val [i ] == '+' || any .val [i ] == '-' {
endPos = i + 1
continue
}
if any .val [i ] >= '0' && any .val [i ] <= '9' {
endPos = i + 1
} else {
endPos = i
break
}
}
parsed , _ := strconv .ParseFloat (any .val [:endPos ], 64 )
return parsed
}
func (any *stringAny ) ToString () string {
return any .val
}
func (any *stringAny ) WriteTo (stream *Stream ) {
stream .WriteString (any .val )
}
func (any *stringAny ) GetInterface () interface {} {
return any .val
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .