// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package strconv

// Uitob64 returns the string representation of i in the given base.
func Uitob64(u uint64, base uint) string {
	if u == 0 {
		return "0"
	}

	// Assemble decimal in reverse order.
	var buf [32]byte;
	j := len(buf);
	b := uint64(base);
	for u > 0 {
		j--;
		buf[j] = "0123456789abcdefghijklmnopqrstuvwxyz"[u%b];
		u /= b;
	}

	return string(buf[j:len(buf)])
}

// Itob64 returns the string representation of i in the given base.
func Itob64(i int64, base uint) string {
	if i == 0 {
		return "0"
	}

	if i < 0 {
		return "-" + Uitob64(-uint64(i), base);
	}
	return Uitob64(uint64(i), base);
}

// Itoa64 returns the decimal string representation of i.
func Itoa64(i int64) string {
	return Itob64(i, 10);
}

// Uitoa64 returns the decimal string representation of i.
func Uitoa64(i uint64) string {
	return Uitob64(i, 10);
}

// Uitob returns the string representation of i in the given base.
func Uitob(i uint, base uint) string {
	return Uitob64(uint64(i), base);
}

// Itob returns the string representation of i in the given base.
func Itob(i int, base uint) string {
	return Itob64(int64(i), base);
}

// Itoa returns the decimal string representation of i.
func Itoa(i int) string {
	return Itob64(int64(i), 10);
}

// Uitoa returns the decimal string representation of i.
func Uitoa(i uint) string {
	return Uitob64(uint64(i), 10);
}
