package yu_strconv

// ParseInt32
//
//	@Description: 解析 s 字符串对应的 i 值，s 可以是 "-" 开头
func ParseInt32(s string) (i int32) {
	var j_neg bool
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= '0' && s[j_i] <= '9' {
			i = i*10 + int32(s[j_i]) - 48
		} else if j_i == 0 && s[j_i] == '-' {
			j_neg = true
		} else {
			break
		}
	}
	if j_neg {
		i = -i
	}
	return
}

// ParseUint32
//
//	@Description: 解析 s 字符串对应的 i 值
func ParseUint32(s string) (i uint32) {
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= '0' && s[j_i] <= '9' {
			i = i*10 + uint32(s[j_i]) - 48
		} else {
			break
		}
	}
	return
}

// ParseInt64
//
//	@Description: 解析 s 字符串对应的 i 值，s 可以是 "-" 开头
func ParseInt64(s string) (i int64) {
	var j_neg bool
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= '0' && s[j_i] <= '9' {
			i = i*10 + int64(s[j_i]) - 48
		} else if j_i == 0 && s[j_i] == '-' {
			j_neg = true
		} else {
			break
		}
	}
	if j_neg {
		i = -i
	}
	return
}

// ParseUint64
//
//	@Description: 解析 s 字符串对应的 i 值
func ParseUint64(s string) (i uint64) {
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= '0' && s[j_i] <= '9' {
			i = i*10 + uint64(s[j_i]) - 48
		} else {
			break
		}
	}
	return
}

// ParseInt
//
//	@Description: 解析 s 字符串对应的 i 值，s 可以是 "-" 开头
func ParseInt(s string) (i int) {
	var j_neg bool
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= '0' && s[j_i] <= '9' {
			i = i*10 + int(s[j_i]) - 48
		} else if j_i == 0 && s[j_i] == '-' {
			j_neg = true
		} else {
			break
		}
	}
	if j_neg {
		i = -i
	}
	return
}

// ParseUint
//
//	@Description: 解析 s 字符串对应的 i 值
func ParseUint(s string) (i uint) {
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= '0' && s[j_i] <= '9' {
			i = i*10 + uint(s[j_i]) - 48
		} else {
			break
		}
	}
	return
}

// ParseUintptr
//
//	@Description: 解析 s 字符串对应的 i 值
func ParseUintptr(s string) (i uintptr) {
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= '0' && s[j_i] <= '9' {
			i = i*10 + uintptr(s[j_i]) - 48
		} else {
			break
		}
	}
	return
}

var formatDigits = []uint8{
	'9', '8', '7', '6', '5', '4', '3', '2', '1',
	'0',
	'1', '2', '3', '4', '5', '6', '7', '8', '9',
}

// FormatByte
//
//	@Description: 编码 i 值对应的字符串
func FormatByte(i byte) string {
	if i == 0 {
		return "0"
	}
	j_s := make([]byte, 3)
	j_si := 2
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	j_si++
	return string(j_s[j_si:])
}

// FormatInt8
//
//	@Description: 编码 i 值对应的字符串
func FormatInt8(i int8) string {
	if i == 0 {
		return "0"
	}
	j_neg := i < 0
	j_s := make([]byte, 4)
	j_si := 3
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	if j_neg {
		j_s[j_si] = '-'
	} else {
		j_si++
	}
	return string(j_s[j_si:])
}

// FormatUint8
//
//	@Description: 编码 i 值对应的字符串
func FormatUint8(i uint8) string {
	if i == 0 {
		return "0"
	}
	j_s := make([]byte, 3)
	j_si := 2
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	j_si++
	return string(j_s[j_si:])
}

// FormatInt16
//
//	@Description: 编码 i 值对应的字符串
func FormatInt16(i int16) string {
	if i == 0 {
		return "0"
	}
	j_neg := i < 0
	j_s := make([]byte, 6)
	j_si := 5
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	if j_neg {
		j_s[j_si] = '-'
	} else {
		j_si++
	}
	return string(j_s[j_si:])
}

// FormatUint16
//
//	@Description: 编码 i 值对应的字符串
func FormatUint16(i uint16) string {
	if i == 0 {
		return "0"
	}
	j_s := make([]byte, 5)
	j_si := 4
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	j_si++
	return string(j_s[j_si:])
}

// FormatInt32
//
//	@Description: 编码 i 值对应的字符串
func FormatInt32(i int32) string {
	if i == 0 {
		return "0"
	}
	j_neg := i < 0
	j_s := make([]byte, 11)
	j_si := 10
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	if j_neg {
		j_s[j_si] = '-'
	} else {
		j_si++
	}
	return string(j_s[j_si:])
}

// FormatUint32
//
//	@Description: 编码 i 值对应的字符串
func FormatUint32(i uint32) string {
	if i == 0 {
		return "0"
	}
	j_s := make([]byte, 10)
	j_si := 9
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	j_si++
	return string(j_s[j_si:])
}

// FormatInt64
//
//	@Description: 编码 i 值对应的字符串
func FormatInt64(i int64) string {
	if i == 0 {
		return "0"
	}
	j_neg := i < 0
	j_s := make([]byte, 20)
	j_si := 19
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	if j_neg {
		j_s[j_si] = '-'
	} else {
		j_si++
	}
	return string(j_s[j_si:])
}

// FormatUint64
//
//	@Description: 编码 i 值对应的字符串
func FormatUint64(i uint64) string {
	if i == 0 {
		return "0"
	}
	j_s := make([]byte, 20)
	j_si := 19
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	j_si++
	return string(j_s[j_si:])
}

// FormatInt
//
//	@Description: 编码 i 值对应的字符串
func FormatInt(i int) string {
	if i == 0 {
		return "0"
	}
	j_neg := i < 0
	j_s := make([]byte, 20)
	j_si := 19
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	if j_neg {
		j_s[j_si] = '-'
	} else {
		j_si++
	}
	return string(j_s[j_si:])
}

// FormatUint
//
//	@Description: 编码 i 值对应的字符串
func FormatUint(i uint) string {
	if i == 0 {
		return "0"
	}
	j_s := make([]byte, 20)
	j_si := 19
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	j_si++
	return string(j_s[j_si:])
}

// FormatUintptr
//
//	@Description: 编码 i 值对应的字符串
func FormatUintptr(i uintptr) string {
	if i == 0 {
		return "0"
	}
	j_s := make([]byte, 20)
	j_si := 19
	for ; i != 0; i /= 10 {
		j_s[j_si] = formatDigits[9-i%10]
		j_si--
	}
	j_si++
	return string(j_s[j_si:])
}

// ParseBool
//
//	@Description: 返回由字符串表示的布尔值。它接受 1、t、T、true、TRUE、True、0、f、F、false、FALSE、False 。
func ParseBool(str string) bool {
	switch str {
	case "1", "t", "T", "true", "TRUE", "True":
		return true
	case "0", "f", "F", "false", "FALSE", "False":
		return false
	}
	return false
}

// FormatBool
//
//	@Description: 根据b的值返回“true”或“false”。
func FormatBool(b bool) string {
	if b {
		return "true"
	}
	return "false"
}
