package jsoniter

import (
	
	
)

type stringAny struct {
	baseAny
	val string
}

func ( *stringAny) ( ...interface{}) Any {
	if len() == 0 {
		return 
	}
	return &invalidAny{baseAny{}, fmt.Errorf("GetIndex %v from simple value", )}
}

func ( *stringAny) () *Iterator {
	return nil
}

func ( *stringAny) () ValueType {
	return StringValue
}

func ( *stringAny) () Any {
	return 
}

func ( *stringAny) () error {
	return nil
}

func ( *stringAny) () bool {
	 := .ToString()
	if  == "0" {
		return false
	}
	for ,  := range  {
		switch  {
		case ' ', '\n', '\r', '\t':
		default:
			return true
		}
	}
	return false
}

func ( *stringAny) () int {
	return int(.ToInt64())

}

func ( *stringAny) () int32 {
	return int32(.ToInt64())
}

func ( *stringAny) () int64 {
	if .val == "" {
		return 0
	}

	 := 1
	 := 0
	if .val[0] == '+' || .val[0] == '-' {
		 = 1
	}

	if .val[0] == '-' {
		 = -1
	}

	 := 
	for  := ;  < len(.val); ++ {
		if .val[] >= '0' && .val[] <= '9' {
			 =  + 1
		} else {
			break
		}
	}
	,  := strconv.ParseInt(.val[:], 10, 64)
	return int64() * 
}

func ( *stringAny) () uint {
	return uint(.ToUint64())
}

func ( *stringAny) () uint32 {
	return uint32(.ToUint64())
}

func ( *stringAny) () uint64 {
	if .val == "" {
		return 0
	}

	 := 0

	if .val[0] == '-' {
		return 0
	}
	if .val[0] == '+' {
		 = 1
	}

	 := 
	for  := ;  < len(.val); ++ {
		if .val[] >= '0' && .val[] <= '9' {
			 =  + 1
		} else {
			break
		}
	}
	,  := strconv.ParseUint(.val[:], 10, 64)
	return 
}

func ( *stringAny) () float32 {
	return float32(.ToFloat64())
}

func ( *stringAny) () float64 {
	if len(.val) == 0 {
		return 0
	}

	// first char invalid
	if .val[0] != '+' && .val[0] != '-' && (.val[0] > '9' || .val[0] < '0') {
		return 0
	}

	// extract valid num expression from string
	// eg 123true => 123, -12.12xxa => -12.12
	 := 1
	for  := 1;  < len(.val); ++ {
		if .val[] == '.' || .val[] == 'e' || .val[] == 'E' || .val[] == '+' || .val[] == '-' {
			 =  + 1
			continue
		}

		// end position is the first char which is not digit
		if .val[] >= '0' && .val[] <= '9' {
			 =  + 1
		} else {
			 = 
			break
		}
	}
	,  := strconv.ParseFloat(.val[:], 64)
	return 
}

func ( *stringAny) () string {
	return .val
}

func ( *stringAny) ( *Stream) {
	.WriteString(.val)
}

func ( *stringAny) () interface{} {
	return .val
}