mirror of
https://github.com/golang/go
synced 2024-11-22 02:34:40 -07:00
delete export
TBR=r OCL=23121 CL=23127
This commit is contained in:
parent
0183baaf44
commit
839a68469b
@ -9,7 +9,7 @@ import (
|
|||||||
"syscall";
|
"syscall";
|
||||||
)
|
)
|
||||||
|
|
||||||
export type FD struct {
|
type FD struct {
|
||||||
fildes int64; // file descriptor number
|
fildes int64; // file descriptor number
|
||||||
name string; // file name at Open time
|
name string; // file name at Open time
|
||||||
}
|
}
|
||||||
@ -21,13 +21,13 @@ func newFD(fd int64, name string) *FD {
|
|||||||
return &FD{fd, name}
|
return &FD{fd, name}
|
||||||
}
|
}
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
Stdin = newFD(0, "/dev/stdin");
|
Stdin = newFD(0, "/dev/stdin");
|
||||||
Stdout = newFD(1, "/dev/stdout");
|
Stdout = newFD(1, "/dev/stdout");
|
||||||
Stderr = newFD(2, "/dev/stderr");
|
Stderr = newFD(2, "/dev/stderr");
|
||||||
)
|
)
|
||||||
|
|
||||||
export func Open(name string, mode int64, perm int64) (fd *FD, err *os.Error) {
|
func Open(name string, mode int64, perm int64) (fd *FD, err *os.Error) {
|
||||||
r, e := syscall.Open(name, mode, perm);
|
r, e := syscall.Open(name, mode, perm);
|
||||||
return newFD(r, name), os.ErrnoToError(e)
|
return newFD(r, name), os.ErrnoToError(e)
|
||||||
}
|
}
|
||||||
|
@ -4,13 +4,13 @@
|
|||||||
|
|
||||||
package sort
|
package sort
|
||||||
|
|
||||||
export type SortInterface interface {
|
type SortInterface interface {
|
||||||
Len() int;
|
Len() int;
|
||||||
Less(i, j int) bool;
|
Less(i, j int) bool;
|
||||||
Swap(i, j int);
|
Swap(i, j int);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Sort(data SortInterface) {
|
func Sort(data SortInterface) {
|
||||||
for i := 1; i < data.Len(); i++ {
|
for i := 1; i < data.Len(); i++ {
|
||||||
for j := i; j > 0 && data.Less(j, j-1); j-- {
|
for j := i; j > 0 && data.Less(j, j-1); j-- {
|
||||||
data.Swap(j, j-1);
|
data.Swap(j, j-1);
|
||||||
@ -18,7 +18,7 @@ export func Sort(data SortInterface) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func IsSorted(data SortInterface) bool {
|
func IsSorted(data SortInterface) bool {
|
||||||
n := data.Len();
|
n := data.Len();
|
||||||
for i := n - 1; i > 0; i-- {
|
for i := n - 1; i > 0; i-- {
|
||||||
if data.Less(i, i - 1) {
|
if data.Less(i, i - 1) {
|
||||||
@ -30,21 +30,21 @@ export func IsSorted(data SortInterface) bool {
|
|||||||
|
|
||||||
// Convenience types for common cases
|
// Convenience types for common cases
|
||||||
|
|
||||||
export type IntArray []int
|
type IntArray []int
|
||||||
|
|
||||||
func (p IntArray) Len() int { return len(p); }
|
func (p IntArray) Len() int { return len(p); }
|
||||||
func (p IntArray) Less(i, j int) bool { return p[i] < p[j]; }
|
func (p IntArray) Less(i, j int) bool { return p[i] < p[j]; }
|
||||||
func (p IntArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
func (p IntArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
||||||
|
|
||||||
|
|
||||||
export type FloatArray []float
|
type FloatArray []float
|
||||||
|
|
||||||
func (p FloatArray) Len() int { return len(p); }
|
func (p FloatArray) Len() int { return len(p); }
|
||||||
func (p FloatArray) Less(i, j int) bool { return p[i] < p[j]; }
|
func (p FloatArray) Less(i, j int) bool { return p[i] < p[j]; }
|
||||||
func (p FloatArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
func (p FloatArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
||||||
|
|
||||||
|
|
||||||
export type StringArray []string
|
type StringArray []string
|
||||||
|
|
||||||
func (p StringArray) Len() int { return len(p); }
|
func (p StringArray) Len() int { return len(p); }
|
||||||
func (p StringArray) Less(i, j int) bool { return p[i] < p[j]; }
|
func (p StringArray) Less(i, j int) bool { return p[i] < p[j]; }
|
||||||
@ -53,11 +53,11 @@ func (p StringArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
|||||||
|
|
||||||
// Convenience wrappers for common cases
|
// Convenience wrappers for common cases
|
||||||
|
|
||||||
export func SortInts(a []int) { Sort(IntArray(a)); }
|
func SortInts(a []int) { Sort(IntArray(a)); }
|
||||||
export func SortFloats(a []float) { Sort(FloatArray(a)); }
|
func SortFloats(a []float) { Sort(FloatArray(a)); }
|
||||||
export func SortStrings(a []string) { Sort(StringArray(a)); }
|
func SortStrings(a []string) { Sort(StringArray(a)); }
|
||||||
|
|
||||||
|
|
||||||
export func IntsAreSorted(a []int) bool { return IsSorted(IntArray(a)); }
|
func IntsAreSorted(a []int) bool { return IsSorted(IntArray(a)); }
|
||||||
export func FloatsAreSorted(a []float) bool { return IsSorted(FloatArray(a)); }
|
func FloatsAreSorted(a []float) bool { return IsSorted(FloatArray(a)); }
|
||||||
export func StringsAreSorted(a []string) bool { return IsSorted(StringArray(a)); }
|
func StringsAreSorted(a []string) bool { return IsSorted(StringArray(a)); }
|
||||||
|
@ -69,35 +69,35 @@ func arrays2d(old *any, nel int) (ary []any);
|
|||||||
|
|
||||||
// used by go programs
|
// used by go programs
|
||||||
|
|
||||||
export func Breakpoint();
|
func Breakpoint();
|
||||||
|
|
||||||
export func Reflect(i interface { }) (uint64, string, bool);
|
func Reflect(i interface { }) (uint64, string, bool);
|
||||||
export func Unreflect(uint64, string, bool) (ret interface { });
|
func Unreflect(uint64, string, bool) (ret interface { });
|
||||||
|
|
||||||
export var Args []string;
|
var Args []string;
|
||||||
export var Envs []string;
|
var Envs []string;
|
||||||
|
|
||||||
export func Frexp(float64) (float64, int); // break fp into exp,fract
|
func Frexp(float64) (float64, int); // break fp into exp,fract
|
||||||
export func Ldexp(float64, int) float64; // make fp from exp,fract
|
func Ldexp(float64, int) float64; // make fp from exp,fract
|
||||||
export func Modf(float64) (float64, float64); // break fp into double.double
|
func Modf(float64) (float64, float64); // break fp into double.double
|
||||||
export func IsInf(float64, int) bool; // test for infinity
|
func IsInf(float64, int) bool; // test for infinity
|
||||||
export func IsNaN(float64) bool; // test for not-a-number
|
func IsNaN(float64) bool; // test for not-a-number
|
||||||
export func Inf(int) float64; // return signed Inf
|
func Inf(int) float64; // return signed Inf
|
||||||
export func NaN() float64; // return a NaN
|
func NaN() float64; // return a NaN
|
||||||
export func Float32bits(float32) uint32; // raw bits
|
func Float32bits(float32) uint32; // raw bits
|
||||||
export func Float64bits(float64) uint64; // raw bits
|
func Float64bits(float64) uint64; // raw bits
|
||||||
export func Float32frombits(uint32) float32; // raw bits
|
func Float32frombits(uint32) float32; // raw bits
|
||||||
export func Float64frombits(uint64) float64; // raw bits
|
func Float64frombits(uint64) float64; // raw bits
|
||||||
|
|
||||||
export func Gosched();
|
func Gosched();
|
||||||
export func Goexit();
|
func Goexit();
|
||||||
|
|
||||||
export func BytesToRune(*byte, int, int) (int, int); // convert bytes to runes
|
func BytesToRune(*byte, int, int) (int, int); // convert bytes to runes
|
||||||
export func StringToRune(string, int) (int, int); // convert bytes to runes
|
func StringToRune(string, int) (int, int); // convert bytes to runes
|
||||||
|
|
||||||
export func Exit(int);
|
func Exit(int);
|
||||||
|
|
||||||
export func Caller(n int) (pc uint64, file string, line int, ok bool);
|
func Caller(n int) (pc uint64, file string, line int, ok bool);
|
||||||
|
|
||||||
export func SemAcquire(sema *int32);
|
func SemAcquire(sema *int32);
|
||||||
export func SemRelease(sema *int32);
|
func SemRelease(sema *int32);
|
||||||
|
@ -52,7 +52,7 @@ import "fmt"
|
|||||||
// results are packed again. For faster unpacking/packing, the base size
|
// results are packed again. For faster unpacking/packing, the base size
|
||||||
// in bits must be even.
|
// in bits must be even.
|
||||||
|
|
||||||
export type (
|
type (
|
||||||
Digit uint64;
|
Digit uint64;
|
||||||
Digit2 uint32; // half-digits for division
|
Digit2 uint32; // half-digits for division
|
||||||
)
|
)
|
||||||
@ -91,7 +91,7 @@ func isSmall(x Digit) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func Dump(x []Digit) {
|
func Dump(x []Digit) {
|
||||||
print("[", len(x), "]");
|
print("[", len(x), "]");
|
||||||
for i := len(x) - 1; i >= 0; i-- {
|
for i := len(x) - 1; i >= 0; i-- {
|
||||||
print(" ", x[i]);
|
print(" ", x[i]);
|
||||||
@ -111,7 +111,7 @@ export func Dump(x []Digit) {
|
|||||||
// n, m len(x), len(y)
|
// n, m len(x), len(y)
|
||||||
|
|
||||||
|
|
||||||
export type Natural []Digit;
|
type Natural []Digit;
|
||||||
|
|
||||||
var (
|
var (
|
||||||
natZero Natural = Natural{};
|
natZero Natural = Natural{};
|
||||||
@ -123,7 +123,7 @@ var (
|
|||||||
|
|
||||||
// Creation
|
// Creation
|
||||||
|
|
||||||
export func Nat(x uint) Natural {
|
func Nat(x uint) Natural {
|
||||||
switch x {
|
switch x {
|
||||||
case 0: return natZero;
|
case 0: return natZero;
|
||||||
case 1: return natOne;
|
case 1: return natOne;
|
||||||
@ -696,7 +696,7 @@ func muladd1(x Natural, d, c Digit) Natural {
|
|||||||
|
|
||||||
// Determines base (octal, decimal, hexadecimal) if base == 0.
|
// Determines base (octal, decimal, hexadecimal) if base == 0.
|
||||||
// Returns the number and base.
|
// Returns the number and base.
|
||||||
export func NatFromString(s string, base uint, slen *int) (Natural, uint) {
|
func NatFromString(s string, base uint, slen *int) (Natural, uint) {
|
||||||
// determine base if necessary
|
// determine base if necessary
|
||||||
i, n := 0, len(s);
|
i, n := 0, len(s);
|
||||||
if base == 0 {
|
if base == 0 {
|
||||||
@ -766,7 +766,7 @@ func (xp Natural) Pow(n uint) Natural {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func MulRange(a, b uint) Natural {
|
func MulRange(a, b uint) Natural {
|
||||||
switch {
|
switch {
|
||||||
case a > b: return Nat(1);
|
case a > b: return Nat(1);
|
||||||
case a == b: return Nat(a);
|
case a == b: return Nat(a);
|
||||||
@ -778,14 +778,14 @@ export func MulRange(a, b uint) Natural {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func Fact(n uint) Natural {
|
func Fact(n uint) Natural {
|
||||||
// Using MulRange() instead of the basic for-loop
|
// Using MulRange() instead of the basic for-loop
|
||||||
// lead to faster factorial computation.
|
// lead to faster factorial computation.
|
||||||
return MulRange(2, n);
|
return MulRange(2, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func Binomial(n, k uint) Natural {
|
func Binomial(n, k uint) Natural {
|
||||||
return MulRange(n-k+1, n).Div(MulRange(1, k));
|
return MulRange(n-k+1, n).Div(MulRange(1, k));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -806,7 +806,7 @@ func (xp Natural) Gcd(y Natural) Natural {
|
|||||||
// Integers are normalized if the mantissa is normalized and the sign is
|
// Integers are normalized if the mantissa is normalized and the sign is
|
||||||
// false for mant == 0. Use MakeInt to create normalized Integers.
|
// false for mant == 0. Use MakeInt to create normalized Integers.
|
||||||
|
|
||||||
export type Integer struct {
|
type Integer struct {
|
||||||
sign bool;
|
sign bool;
|
||||||
mant Natural;
|
mant Natural;
|
||||||
}
|
}
|
||||||
@ -814,7 +814,7 @@ export type Integer struct {
|
|||||||
|
|
||||||
// Creation
|
// Creation
|
||||||
|
|
||||||
export func MakeInt(sign bool, mant Natural) *Integer {
|
func MakeInt(sign bool, mant Natural) *Integer {
|
||||||
if mant.IsZero() {
|
if mant.IsZero() {
|
||||||
sign = false; // normalize
|
sign = false; // normalize
|
||||||
}
|
}
|
||||||
@ -822,7 +822,7 @@ export func MakeInt(sign bool, mant Natural) *Integer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func Int(x int) *Integer {
|
func Int(x int) *Integer {
|
||||||
sign := false;
|
sign := false;
|
||||||
var ux uint;
|
var ux uint;
|
||||||
if x < 0 {
|
if x < 0 {
|
||||||
@ -1103,7 +1103,7 @@ func (x *Integer) Format(h fmt.Formatter, c int) {
|
|||||||
|
|
||||||
// Determines base (octal, decimal, hexadecimal) if base == 0.
|
// Determines base (octal, decimal, hexadecimal) if base == 0.
|
||||||
// Returns the number and base.
|
// Returns the number and base.
|
||||||
export func IntFromString(s string, base uint, slen *int) (*Integer, uint) {
|
func IntFromString(s string, base uint, slen *int) (*Integer, uint) {
|
||||||
// get sign, if any
|
// get sign, if any
|
||||||
sign := false;
|
sign := false;
|
||||||
if len(s) > 0 && (s[0] == '-' || s[0] == '+') {
|
if len(s) > 0 && (s[0] == '-' || s[0] == '+') {
|
||||||
@ -1126,7 +1126,7 @@ export func IntFromString(s string, base uint, slen *int) (*Integer, uint) {
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Rational numbers
|
// Rational numbers
|
||||||
|
|
||||||
export type Rational struct {
|
type Rational struct {
|
||||||
a *Integer; // numerator
|
a *Integer; // numerator
|
||||||
b Natural; // denominator
|
b Natural; // denominator
|
||||||
}
|
}
|
||||||
@ -1134,7 +1134,7 @@ export type Rational struct {
|
|||||||
|
|
||||||
// Creation
|
// Creation
|
||||||
|
|
||||||
export func MakeRat(a *Integer, b Natural) *Rational {
|
func MakeRat(a *Integer, b Natural) *Rational {
|
||||||
f := a.mant.Gcd(b); // f > 0
|
f := a.mant.Gcd(b); // f > 0
|
||||||
if f.Cmp(Nat(1)) != 0 {
|
if f.Cmp(Nat(1)) != 0 {
|
||||||
a = MakeInt(a.sign, a.mant.Div(f));
|
a = MakeInt(a.sign, a.mant.Div(f));
|
||||||
@ -1144,7 +1144,7 @@ export func MakeRat(a *Integer, b Natural) *Rational {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func Rat(a0 int, b0 int) *Rational {
|
func Rat(a0 int, b0 int) *Rational {
|
||||||
a, b := Int(a0), Int(b0);
|
a, b := Int(a0), Int(b0);
|
||||||
if b.sign {
|
if b.sign {
|
||||||
a = a.Neg();
|
a = a.Neg();
|
||||||
@ -1233,7 +1233,7 @@ func (x *Rational) Format(h fmt.Formatter, c int) {
|
|||||||
|
|
||||||
// Determines base (octal, decimal, hexadecimal) if base == 0.
|
// Determines base (octal, decimal, hexadecimal) if base == 0.
|
||||||
// Returns the number and base of the nominator.
|
// Returns the number and base of the nominator.
|
||||||
export func RatFromString(s string, base uint, slen *int) (*Rational, uint) {
|
func RatFromString(s string, base uint, slen *int) (*Rational, uint) {
|
||||||
// read nominator
|
// read nominator
|
||||||
var alen, blen int;
|
var alen, blen int;
|
||||||
a, abase := IntFromString(s, base, &alen);
|
a, abase := IntFromString(s, base, &alen);
|
||||||
|
@ -90,7 +90,7 @@ func rat_eq(n uint, x, y *bignum.Rational) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestNatConv(t *testing.T) {
|
func TestNatConv(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatConvA";
|
test_msg = "NatConvA";
|
||||||
nat_eq(0, a, bignum.Nat(991));
|
nat_eq(0, a, bignum.Nat(991));
|
||||||
@ -122,7 +122,7 @@ export func TestNatConv(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestIntConv(t *testing.T) {
|
func TestIntConv(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "IntConv";
|
test_msg = "IntConv";
|
||||||
var slen int;
|
var slen int;
|
||||||
@ -140,7 +140,7 @@ export func TestIntConv(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestRatConv(t *testing.T) {
|
func TestRatConv(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "RatConv";
|
test_msg = "RatConv";
|
||||||
var slen int;
|
var slen int;
|
||||||
@ -176,7 +176,7 @@ func sum(n uint, scale bignum.Natural) bignum.Natural {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatAdd(t *testing.T) {
|
func TestNatAdd(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatAddA";
|
test_msg = "NatAddA";
|
||||||
nat_eq(0, add(nat_zero, nat_zero), nat_zero);
|
nat_eq(0, add(nat_zero, nat_zero), nat_zero);
|
||||||
@ -206,7 +206,7 @@ func mul(x, y bignum.Natural) bignum.Natural {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatSub(t *testing.T) {
|
func TestNatSub(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatSubA";
|
test_msg = "NatSubA";
|
||||||
nat_eq(0, nat_zero.Sub(nat_zero), nat_zero);
|
nat_eq(0, nat_zero.Sub(nat_zero), nat_zero);
|
||||||
@ -223,7 +223,7 @@ export func TestNatSub(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatMul(t *testing.T) {
|
func TestNatMul(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatMulA";
|
test_msg = "NatMulA";
|
||||||
nat_eq(0, mul(c, nat_zero), nat_zero);
|
nat_eq(0, mul(c, nat_zero), nat_zero);
|
||||||
@ -242,7 +242,7 @@ export func TestNatMul(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatDiv(t *testing.T) {
|
func TestNatDiv(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatDivA";
|
test_msg = "NatDivA";
|
||||||
nat_eq(0, c.Div(nat_one), c);
|
nat_eq(0, c.Div(nat_one), c);
|
||||||
@ -260,7 +260,7 @@ export func TestNatDiv(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestIntQuoRem(t *testing.T) {
|
func TestIntQuoRem(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "IntQuoRem";
|
test_msg = "IntQuoRem";
|
||||||
type T struct { x, y, q, r int };
|
type T struct { x, y, q, r int };
|
||||||
@ -287,7 +287,7 @@ export func TestIntQuoRem(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestIntDivMod(t *testing.T) {
|
func TestIntDivMod(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "IntDivMod";
|
test_msg = "IntDivMod";
|
||||||
type T struct { x, y, q, r int };
|
type T struct { x, y, q, r int };
|
||||||
@ -314,7 +314,7 @@ export func TestIntDivMod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatMod(t *testing.T) {
|
func TestNatMod(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatModA";
|
test_msg = "NatModA";
|
||||||
for i := uint(0); ; i++ {
|
for i := uint(0); ; i++ {
|
||||||
@ -330,7 +330,7 @@ export func TestNatMod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatShift(t *testing.T) {
|
func TestNatShift(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatShift1L";
|
test_msg = "NatShift1L";
|
||||||
test(0, b.Shl(0).Cmp(b) == 0);
|
test(0, b.Shl(0).Cmp(b) == 0);
|
||||||
@ -365,7 +365,7 @@ export func TestNatShift(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestIntShift(t *testing.T) {
|
func TestIntShift(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "IntShift1L";
|
test_msg = "IntShift1L";
|
||||||
test(0, ip.Shl(0).Cmp(ip) == 0);
|
test(0, ip.Shl(0).Cmp(ip) == 0);
|
||||||
@ -404,7 +404,7 @@ export func TestIntShift(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatCmp(t *testing.T) {
|
func TestNatCmp(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatCmp";
|
test_msg = "NatCmp";
|
||||||
test(0, a.Cmp(a) == 0);
|
test(0, a.Cmp(a) == 0);
|
||||||
@ -417,7 +417,7 @@ export func TestNatCmp(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatLog2(t *testing.T) {
|
func TestNatLog2(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatLog2A";
|
test_msg = "NatLog2A";
|
||||||
test(0, nat_one.Log2() == 0);
|
test(0, nat_one.Log2() == 0);
|
||||||
@ -432,7 +432,7 @@ export func TestNatLog2(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatGcd(t *testing.T) {
|
func TestNatGcd(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatGcdA";
|
test_msg = "NatGcdA";
|
||||||
f := bignum.Nat(99991);
|
f := bignum.Nat(99991);
|
||||||
@ -440,7 +440,7 @@ export func TestNatGcd(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatPow(t *testing.T) {
|
func TestNatPow(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatPowA";
|
test_msg = "NatPowA";
|
||||||
nat_eq(0, nat_two.Pow(0), nat_one);
|
nat_eq(0, nat_two.Pow(0), nat_one);
|
||||||
@ -452,7 +452,7 @@ export func TestNatPow(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNatPop(t *testing.T) {
|
func TestNatPop(t *testing.T) {
|
||||||
tester = t;
|
tester = t;
|
||||||
test_msg = "NatPopA";
|
test_msg = "NatPopA";
|
||||||
test(0, nat_zero.Pop() == 0);
|
test(0, nat_zero.Pop() == 0);
|
||||||
|
@ -21,7 +21,7 @@ const (
|
|||||||
defaultBufSize = 4096
|
defaultBufSize = 4096
|
||||||
)
|
)
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
EndOfFile = os.NewError("end of file");
|
EndOfFile = os.NewError("end of file");
|
||||||
PhaseError = os.NewError("phase error");
|
PhaseError = os.NewError("phase error");
|
||||||
BufferFull = os.NewError("buffer full");
|
BufferFull = os.NewError("buffer full");
|
||||||
@ -39,14 +39,14 @@ func copySlice(dst []byte, src []byte) {
|
|||||||
|
|
||||||
// Buffered input.
|
// Buffered input.
|
||||||
|
|
||||||
export type BufRead struct {
|
type BufRead struct {
|
||||||
buf []byte;
|
buf []byte;
|
||||||
rd io.Read;
|
rd io.Read;
|
||||||
r, w int;
|
r, w int;
|
||||||
err *os.Error;
|
err *os.Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewBufReadSize(rd io.Read, size int) (b *BufRead, err *os.Error) {
|
func NewBufReadSize(rd io.Read, size int) (b *BufRead, err *os.Error) {
|
||||||
if size <= 0 {
|
if size <= 0 {
|
||||||
return nil, BadBufSize
|
return nil, BadBufSize
|
||||||
}
|
}
|
||||||
@ -56,7 +56,7 @@ export func NewBufReadSize(rd io.Read, size int) (b *BufRead, err *os.Error) {
|
|||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewBufRead(rd io.Read) (b *BufRead, err *os.Error) {
|
func NewBufRead(rd io.Read) (b *BufRead, err *os.Error) {
|
||||||
return NewBufReadSize(rd, defaultBufSize);
|
return NewBufReadSize(rd, defaultBufSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,14 +326,14 @@ func (b *BufRead) ReadLineString(delim byte, savedelim bool) (line string, err *
|
|||||||
|
|
||||||
// buffered output
|
// buffered output
|
||||||
|
|
||||||
export type BufWrite struct {
|
type BufWrite struct {
|
||||||
err *os.Error;
|
err *os.Error;
|
||||||
buf []byte;
|
buf []byte;
|
||||||
n int;
|
n int;
|
||||||
wr io.Write;
|
wr io.Write;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewBufWriteSize(wr io.Write, size int) (b *BufWrite, err *os.Error) {
|
func NewBufWriteSize(wr io.Write, size int) (b *BufWrite, err *os.Error) {
|
||||||
if size <= 0 {
|
if size <= 0 {
|
||||||
return nil, BadBufSize
|
return nil, BadBufSize
|
||||||
}
|
}
|
||||||
@ -343,7 +343,7 @@ export func NewBufWriteSize(wr io.Write, size int) (b *BufWrite, err *os.Error)
|
|||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewBufWrite(wr io.Write) (b *BufWrite, err *os.Error) {
|
func NewBufWrite(wr io.Write) (b *BufWrite, err *os.Error) {
|
||||||
return NewBufWriteSize(wr, defaultBufSize);
|
return NewBufWriteSize(wr, defaultBufSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ var bufsizes = []int {
|
|||||||
23, 32, 46, 64, 93, 128, 1024, 4096
|
23, 32, 46, 64, 93, 128, 1024, 4096
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestBufReadSimple(t *testing.T) {
|
func TestBufReadSimple(t *testing.T) {
|
||||||
b, e := NewBufRead(newByteReader(io.StringBytes("hello world")));
|
b, e := NewBufRead(newByteReader(io.StringBytes("hello world")));
|
||||||
if s := readBytes(b); s != "hello world" {
|
if s := readBytes(b); s != "hello world" {
|
||||||
t.Errorf("simple hello world test failed: got %q", s);
|
t.Errorf("simple hello world test failed: got %q", s);
|
||||||
@ -185,7 +185,7 @@ export func TestBufReadSimple(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestBufRead(t *testing.T) {
|
func TestBufRead(t *testing.T) {
|
||||||
var texts [31]string;
|
var texts [31]string;
|
||||||
str := "";
|
str := "";
|
||||||
all := "";
|
all := "";
|
||||||
@ -278,7 +278,7 @@ type writeMaker struct {
|
|||||||
name string;
|
name string;
|
||||||
fn *()writeBuffer;
|
fn *()writeBuffer;
|
||||||
}
|
}
|
||||||
export func TestBufWrite(t *testing.T) {
|
func TestBufWrite(t *testing.T) {
|
||||||
var data [8192]byte;
|
var data [8192]byte;
|
||||||
|
|
||||||
var writers = []writeMaker {
|
var writers = []writeMaker {
|
||||||
|
@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
package array
|
package array
|
||||||
|
|
||||||
export type Element interface {
|
type Element interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export type Array struct {
|
type Array struct {
|
||||||
// TODO do not export field
|
// TODO do not export field
|
||||||
a []Element
|
a []Element
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ func (p *Array) Init(initial_len int) *Array {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func New(len int) *Array {
|
func New(len int) *Array {
|
||||||
return new(Array).Init(len)
|
return new(Array).Init(len)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ func (p *Array) Pop() Element {
|
|||||||
|
|
||||||
// Partial SortInterface support
|
// Partial SortInterface support
|
||||||
|
|
||||||
export type LessInterface interface {
|
type LessInterface interface {
|
||||||
Less(y Element) bool
|
Less(y Element) bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ import "testing"
|
|||||||
import "sort"
|
import "sort"
|
||||||
|
|
||||||
|
|
||||||
export func TestInit(t *testing.T) {
|
func TestInit(t *testing.T) {
|
||||||
var a array.Array;
|
var a array.Array;
|
||||||
if a.Init(0).Len() != 0 { t.Error("A") }
|
if a.Init(0).Len() != 0 { t.Error("A") }
|
||||||
if a.Init(1).Len() != 1 { t.Error("B") }
|
if a.Init(1).Len() != 1 { t.Error("B") }
|
||||||
@ -17,19 +17,19 @@ export func TestInit(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestNew(t *testing.T) {
|
func TestNew(t *testing.T) {
|
||||||
if array.New(0).Len() != 0 { t.Error("A") }
|
if array.New(0).Len() != 0 { t.Error("A") }
|
||||||
if array.New(1).Len() != 1 { t.Error("B") }
|
if array.New(1).Len() != 1 { t.Error("B") }
|
||||||
if array.New(10).Len() != 10 { t.Error("C") }
|
if array.New(10).Len() != 10 { t.Error("C") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func Val(i int) int {
|
func Val(i int) int {
|
||||||
return i*991 - 1234
|
return i*991 - 1234
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestAccess(t *testing.T) {
|
func TestAccess(t *testing.T) {
|
||||||
const n = 100;
|
const n = 100;
|
||||||
var a array.Array;
|
var a array.Array;
|
||||||
a.Init(n);
|
a.Init(n);
|
||||||
@ -42,7 +42,7 @@ export func TestAccess(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func TestInsertRemoveClear(t *testing.T) {
|
func TestInsertRemoveClear(t *testing.T) {
|
||||||
const n = 100;
|
const n = 100;
|
||||||
a := array.New(0);
|
a := array.New(0);
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ export func TestInsertRemoveClear(t *testing.T) {
|
|||||||
|
|
||||||
|
|
||||||
/* currently doesn't compile due to linker bug
|
/* currently doesn't compile due to linker bug
|
||||||
export func TestSorting(t *testing.T) {
|
func TestSorting(t *testing.T) {
|
||||||
const n = 100;
|
const n = 100;
|
||||||
a := array.NewIntArray(n);
|
a := array.NewIntArray(n);
|
||||||
for i := n-1; i >= 0; i-- {
|
for i := n-1; i >= 0; i-- {
|
||||||
|
@ -6,7 +6,7 @@ package array
|
|||||||
|
|
||||||
import "array"
|
import "array"
|
||||||
|
|
||||||
export type IntArray struct {
|
type IntArray struct {
|
||||||
// TODO do not export field
|
// TODO do not export field
|
||||||
array.Array;
|
array.Array;
|
||||||
}
|
}
|
||||||
@ -18,7 +18,7 @@ func (p *IntArray) Init(len int) *IntArray {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func NewIntArray(len int) *IntArray {
|
func NewIntArray(len int) *IntArray {
|
||||||
return new(IntArray).Init(len)
|
return new(IntArray).Init(len)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ type _Value interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -- Flag structure (internal)
|
// -- Flag structure (internal)
|
||||||
export type Flag struct {
|
type Flag struct {
|
||||||
name string;
|
name string;
|
||||||
usage string;
|
usage string;
|
||||||
value _Value;
|
value _Value;
|
||||||
@ -232,13 +232,13 @@ type allFlags struct {
|
|||||||
|
|
||||||
var flags *allFlags = &allFlags{make(map[string] *Flag), make(map[string] *Flag), 1}
|
var flags *allFlags = &allFlags{make(map[string] *Flag), make(map[string] *Flag), 1}
|
||||||
|
|
||||||
export func PrintDefaults() {
|
func PrintDefaults() {
|
||||||
for k, f := range flags.formal {
|
for k, f := range flags.formal {
|
||||||
print(" -", f.name, "=", f.value.str(), ": ", f.usage, "\n");
|
print(" -", f.name, "=", f.value.str(), ": ", f.usage, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Usage() {
|
func Usage() {
|
||||||
if len(sys.Args) > 0 {
|
if len(sys.Args) > 0 {
|
||||||
print("Usage of ", sys.Args[0], ": \n");
|
print("Usage of ", sys.Args[0], ": \n");
|
||||||
} else {
|
} else {
|
||||||
@ -248,11 +248,11 @@ export func Usage() {
|
|||||||
sys.Exit(1);
|
sys.Exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NFlag() int {
|
func NFlag() int {
|
||||||
return len(flags.actual)
|
return len(flags.actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Arg(i int) string {
|
func Arg(i int) string {
|
||||||
i += flags.first_arg;
|
i += flags.first_arg;
|
||||||
if i < 0 || i >= len(sys.Args) {
|
if i < 0 || i >= len(sys.Args) {
|
||||||
return "";
|
return "";
|
||||||
@ -260,7 +260,7 @@ export func Arg(i int) string {
|
|||||||
return sys.Args[i]
|
return sys.Args[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NArg() int {
|
func NArg() int {
|
||||||
return len(sys.Args) - flags.first_arg
|
return len(sys.Args) - flags.first_arg
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,63 +277,63 @@ func add(name string, value _Value, usage string) {
|
|||||||
flags.formal[name] = f;
|
flags.formal[name] = f;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Bool(name string, value bool, usage string) *bool {
|
func Bool(name string, value bool, usage string) *bool {
|
||||||
p := new(bool);
|
p := new(bool);
|
||||||
add(name, newBoolValue(value, p), usage);
|
add(name, newBoolValue(value, p), usage);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func BoolVar(p *bool, name string, value bool, usage string) {
|
func BoolVar(p *bool, name string, value bool, usage string) {
|
||||||
add(name, newBoolValue(value, p), usage);
|
add(name, newBoolValue(value, p), usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Int(name string, value int, usage string) *int {
|
func Int(name string, value int, usage string) *int {
|
||||||
p := new(int);
|
p := new(int);
|
||||||
add(name, newIntValue(value, p), usage);
|
add(name, newIntValue(value, p), usage);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func IntVar(p *int, name string, value int, usage string) {
|
func IntVar(p *int, name string, value int, usage string) {
|
||||||
add(name, newIntValue(value, p), usage);
|
add(name, newIntValue(value, p), usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Int64(name string, value int64, usage string) *int64 {
|
func Int64(name string, value int64, usage string) *int64 {
|
||||||
p := new(int64);
|
p := new(int64);
|
||||||
add(name, newInt64Value(value, p), usage);
|
add(name, newInt64Value(value, p), usage);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Int64Var(p *int64, name string, value int64, usage string) {
|
func Int64Var(p *int64, name string, value int64, usage string) {
|
||||||
add(name, newInt64Value(value, p), usage);
|
add(name, newInt64Value(value, p), usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Uint(name string, value uint, usage string) *uint {
|
func Uint(name string, value uint, usage string) *uint {
|
||||||
p := new(uint);
|
p := new(uint);
|
||||||
add(name, newUintValue(value, p), usage);
|
add(name, newUintValue(value, p), usage);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func UintVar(p *uint, name string, value uint, usage string) {
|
func UintVar(p *uint, name string, value uint, usage string) {
|
||||||
add(name, newUintValue(value, p), usage);
|
add(name, newUintValue(value, p), usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Uint64(name string, value uint64, usage string) *uint64 {
|
func Uint64(name string, value uint64, usage string) *uint64 {
|
||||||
p := new(uint64);
|
p := new(uint64);
|
||||||
add(name, newUint64Value(value, p), usage);
|
add(name, newUint64Value(value, p), usage);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Uint64Var(p *uint64, name string, value uint64, usage string) {
|
func Uint64Var(p *uint64, name string, value uint64, usage string) {
|
||||||
add(name, newUint64Value(value, p), usage);
|
add(name, newUint64Value(value, p), usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func String(name, value string, usage string) *string {
|
func String(name, value string, usage string) *string {
|
||||||
p := new(string);
|
p := new(string);
|
||||||
add(name, newStringValue(value, p), usage);
|
add(name, newStringValue(value, p), usage);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func StringVar(p *string, name, value string, usage string) {
|
func StringVar(p *string, name, value string, usage string) {
|
||||||
add(name, newStringValue(value, p), usage);
|
add(name, newStringValue(value, p), usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,7 +432,7 @@ func (f *allFlags) ParseOne(index int) (ok bool, next int)
|
|||||||
return true, index + 1
|
return true, index + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Parse() {
|
func Parse() {
|
||||||
for i := 1; i < len(sys.Args); {
|
for i := 1; i < len(sys.Args); {
|
||||||
ok, next := flags.ParseOne(i);
|
ok, next := flags.ParseOne(i);
|
||||||
if next > 0 {
|
if next > 0 {
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"testing";
|
"testing";
|
||||||
)
|
)
|
||||||
|
|
||||||
export func TestFmtInterface(t *testing.T) {
|
func TestFmtInterface(t *testing.T) {
|
||||||
var i1 interface{};
|
var i1 interface{};
|
||||||
i1 = "abc";
|
i1 = "abc";
|
||||||
s := fmt.Sprintf("%s", i1);
|
s := fmt.Sprintf("%s", i1);
|
||||||
@ -150,7 +150,7 @@ var fmttests = []fmtTest{
|
|||||||
fmtTest{ "%20g", sys.NaN(), " NaN" },
|
fmtTest{ "%20g", sys.NaN(), " NaN" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSprintf(t *testing.T) {
|
func TestSprintf(t *testing.T) {
|
||||||
for i := 0; i < len(fmttests); i++ {
|
for i := 0; i < len(fmttests); i++ {
|
||||||
tt := fmttests[i];
|
tt := fmttests[i];
|
||||||
s := fmt.Sprintf(tt.fmt, tt.val);
|
s := fmt.Sprintf(tt.fmt, tt.val);
|
||||||
@ -204,7 +204,7 @@ var flagtests = []flagTest {
|
|||||||
flagTest{ "%-1.2abc", "[%-1.2a]bc" },
|
flagTest{ "%-1.2abc", "[%-1.2a]bc" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestFlagParser(t *testing.T) {
|
func TestFlagParser(t *testing.T) {
|
||||||
var flagprinter flagPrinter;
|
var flagprinter flagPrinter;
|
||||||
for i := 0; i < len(flagtests); i++ {
|
for i := 0; i < len(flagtests); i++ {
|
||||||
tt := flagtests[i];
|
tt := flagtests[i];
|
||||||
@ -215,7 +215,7 @@ export func TestFlagParser(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestStructPrinter(t *testing.T) {
|
func TestStructPrinter(t *testing.T) {
|
||||||
var s struct {
|
var s struct {
|
||||||
a string;
|
a string;
|
||||||
b string;
|
b string;
|
||||||
@ -241,7 +241,7 @@ export func TestStructPrinter(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestArrayPrinter(t *testing.T) {
|
func TestArrayPrinter(t *testing.T) {
|
||||||
a := []int{1, 2, 3, 4, 5};
|
a := []int{1, 2, 3, 4, 5};
|
||||||
want := "[1 2 3 4 5]";
|
want := "[1 2 3 4 5]";
|
||||||
out := fmt.Sprintf("%v", a);
|
out := fmt.Sprintf("%v", a);
|
||||||
|
@ -33,7 +33,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Fmt struct {
|
type Fmt struct {
|
||||||
buf string;
|
buf string;
|
||||||
wid int;
|
wid int;
|
||||||
wid_present bool;
|
wid_present bool;
|
||||||
@ -68,7 +68,7 @@ func (f *Fmt) init() {
|
|||||||
f.clearflags();
|
f.clearflags();
|
||||||
}
|
}
|
||||||
|
|
||||||
export func New() *Fmt {
|
func New() *Fmt {
|
||||||
f := new(Fmt);
|
f := new(Fmt);
|
||||||
f.init();
|
f.init();
|
||||||
return f;
|
return f;
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
// Representation of printer state passed to custom formatters.
|
// Representation of printer state passed to custom formatters.
|
||||||
// Provides access to the io.Write interface plus information about
|
// Provides access to the io.Write interface plus information about
|
||||||
// the active formatting verb.
|
// the active formatting verb.
|
||||||
export type Formatter interface {
|
type Formatter interface {
|
||||||
Write(b []byte) (ret int, err *os.Error);
|
Write(b []byte) (ret int, err *os.Error);
|
||||||
Width() (wid int, ok bool);
|
Width() (wid int, ok bool);
|
||||||
Precision() (prec int, ok bool);
|
Precision() (prec int, ok bool);
|
||||||
@ -29,11 +29,11 @@ export type Formatter interface {
|
|||||||
Flag(int) bool;
|
Flag(int) bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Format interface {
|
type Format interface {
|
||||||
Format(f Formatter, c int);
|
Format(f Formatter, c int);
|
||||||
}
|
}
|
||||||
|
|
||||||
export type String interface {
|
type String interface {
|
||||||
String() string
|
String() string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ func (p *pp) doprint(v reflect.StructValue, addspace, addnewline bool);
|
|||||||
|
|
||||||
// These routines end in 'f' and take a format string.
|
// These routines end in 'f' and take a format string.
|
||||||
|
|
||||||
export func Fprintf(w io.Write, format string, a ...) (n int, error *os.Error) {
|
func Fprintf(w io.Write, format string, a ...) (n int, error *os.Error) {
|
||||||
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
||||||
p := newPrinter();
|
p := newPrinter();
|
||||||
p.doprintf(format, v);
|
p.doprintf(format, v);
|
||||||
@ -137,12 +137,12 @@ export func Fprintf(w io.Write, format string, a ...) (n int, error *os.Error) {
|
|||||||
return n, error;
|
return n, error;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Printf(format string, v ...) (n int, errno *os.Error) {
|
func Printf(format string, v ...) (n int, errno *os.Error) {
|
||||||
n, errno = Fprintf(os.Stdout, format, v);
|
n, errno = Fprintf(os.Stdout, format, v);
|
||||||
return n, errno;
|
return n, errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Sprintf(format string, a ...) string {
|
func Sprintf(format string, a ...) string {
|
||||||
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
||||||
p := newPrinter();
|
p := newPrinter();
|
||||||
p.doprintf(format, v);
|
p.doprintf(format, v);
|
||||||
@ -153,7 +153,7 @@ export func Sprintf(format string, a ...) string {
|
|||||||
// These routines do not take a format string and add spaces only
|
// These routines do not take a format string and add spaces only
|
||||||
// when the operand on neither side is a string.
|
// when the operand on neither side is a string.
|
||||||
|
|
||||||
export func Fprint(w io.Write, a ...) (n int, error *os.Error) {
|
func Fprint(w io.Write, a ...) (n int, error *os.Error) {
|
||||||
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
||||||
p := newPrinter();
|
p := newPrinter();
|
||||||
p.doprint(v, false, false);
|
p.doprint(v, false, false);
|
||||||
@ -161,12 +161,12 @@ export func Fprint(w io.Write, a ...) (n int, error *os.Error) {
|
|||||||
return n, error;
|
return n, error;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Print(v ...) (n int, errno *os.Error) {
|
func Print(v ...) (n int, errno *os.Error) {
|
||||||
n, errno = Fprint(os.Stdout, v);
|
n, errno = Fprint(os.Stdout, v);
|
||||||
return n, errno;
|
return n, errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Sprint(a ...) string {
|
func Sprint(a ...) string {
|
||||||
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
||||||
p := newPrinter();
|
p := newPrinter();
|
||||||
p.doprint(v, false, false);
|
p.doprint(v, false, false);
|
||||||
@ -178,7 +178,7 @@ export func Sprint(a ...) string {
|
|||||||
// always add spaces between operands, and add a newline
|
// always add spaces between operands, and add a newline
|
||||||
// after the last operand.
|
// after the last operand.
|
||||||
|
|
||||||
export func Fprintln(w io.Write, a ...) (n int, error *os.Error) {
|
func Fprintln(w io.Write, a ...) (n int, error *os.Error) {
|
||||||
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
||||||
p := newPrinter();
|
p := newPrinter();
|
||||||
p.doprint(v, true, true);
|
p.doprint(v, true, true);
|
||||||
@ -186,12 +186,12 @@ export func Fprintln(w io.Write, a ...) (n int, error *os.Error) {
|
|||||||
return n, error;
|
return n, error;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Println(v ...) (n int, errno *os.Error) {
|
func Println(v ...) (n int, errno *os.Error) {
|
||||||
n, errno = Fprintln(os.Stdout, v);
|
n, errno = Fprintln(os.Stdout, v);
|
||||||
return n, errno;
|
return n, errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Sprintln(a ...) string {
|
func Sprintln(a ...) string {
|
||||||
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
|
||||||
p := newPrinter();
|
p := newPrinter();
|
||||||
p.doprint(v, true, true);
|
p.doprint(v, true, true);
|
||||||
|
@ -14,7 +14,7 @@ package adler32
|
|||||||
|
|
||||||
import "os"
|
import "os"
|
||||||
|
|
||||||
export type Digest struct {
|
type Digest struct {
|
||||||
a, b uint32;
|
a, b uint32;
|
||||||
n int;
|
n int;
|
||||||
}
|
}
|
||||||
@ -24,7 +24,7 @@ const (
|
|||||||
_MaxIter = 5552; // max mod-free iterations before would overflow uint32
|
_MaxIter = 5552; // max mod-free iterations before would overflow uint32
|
||||||
)
|
)
|
||||||
|
|
||||||
export func NewDigest() *Digest {
|
func NewDigest() *Digest {
|
||||||
return &Digest{1, 0, 0};
|
return &Digest{1, 0, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ var golden = []_Adler32Test {
|
|||||||
_Adler32Test{ 0x2e5d1316, "How can you write a big system without C++? -Paul Glick" },
|
_Adler32Test{ 0x2e5d1316, "How can you write a big system without C++? -Paul Glick" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestGolden(t *testing.T) {
|
func TestGolden(t *testing.T) {
|
||||||
for i := 0; i < len(golden); i++ {
|
for i := 0; i < len(golden); i++ {
|
||||||
g := golden[i];
|
g := golden[i];
|
||||||
c := NewDigest();
|
c := NewDigest();
|
||||||
|
@ -9,7 +9,7 @@ package crc32
|
|||||||
|
|
||||||
import "os"
|
import "os"
|
||||||
|
|
||||||
export const (
|
const (
|
||||||
// Far and away the most common CRC-32 polynomial.
|
// Far and away the most common CRC-32 polynomial.
|
||||||
// Used by ethernet (IEEE 802.3), v.42, fddi, gzip, zip, png, mpeg-2, ...
|
// Used by ethernet (IEEE 802.3), v.42, fddi, gzip, zip, png, mpeg-2, ...
|
||||||
IEEE = 0xedb88320;
|
IEEE = 0xedb88320;
|
||||||
@ -26,9 +26,9 @@ export const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// TODO(rsc): Change to [256]uint32 once 6g can handle it.
|
// TODO(rsc): Change to [256]uint32 once 6g can handle it.
|
||||||
export type Table []uint32
|
type Table []uint32
|
||||||
|
|
||||||
export func MakeTable(poly uint32) Table {
|
func MakeTable(poly uint32) Table {
|
||||||
t := make(Table, 256);
|
t := make(Table, 256);
|
||||||
for i := 0; i < 256; i++ {
|
for i := 0; i < 256; i++ {
|
||||||
crc := uint32(i);
|
crc := uint32(i);
|
||||||
@ -44,18 +44,18 @@ export func MakeTable(poly uint32) Table {
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
export var IEEETable = MakeTable(IEEE);
|
var IEEETable = MakeTable(IEEE);
|
||||||
|
|
||||||
export type Digest struct {
|
type Digest struct {
|
||||||
crc uint32;
|
crc uint32;
|
||||||
tab Table;
|
tab Table;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewDigest(tab Table) *Digest {
|
func NewDigest(tab Table) *Digest {
|
||||||
return &Digest{0, tab};
|
return &Digest{0, tab};
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewIEEEDigest() *Digest {
|
func NewIEEEDigest() *Digest {
|
||||||
return NewDigest(IEEETable);
|
return NewDigest(IEEETable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ var golden = []_Crc32Test {
|
|||||||
_Crc32Test{ 0x8e0bb443, "How can you write a big system without C++? -Paul Glick" },
|
_Crc32Test{ 0x8e0bb443, "How can you write a big system without C++? -Paul Glick" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestGolden(t *testing.T) {
|
func TestGolden(t *testing.T) {
|
||||||
for i := 0; i < len(golden); i++ {
|
for i := 0; i < len(golden); i++ {
|
||||||
g := golden[i];
|
g := golden[i];
|
||||||
c := NewIEEEDigest();
|
c := NewIEEEDigest();
|
||||||
|
@ -17,14 +17,14 @@ const (
|
|||||||
_Init3 = 0x10325476;
|
_Init3 = 0x10325476;
|
||||||
)
|
)
|
||||||
|
|
||||||
export type Digest struct {
|
type Digest struct {
|
||||||
s [4]uint32;
|
s [4]uint32;
|
||||||
x [_Chunk]byte;
|
x [_Chunk]byte;
|
||||||
nx int;
|
nx int;
|
||||||
len uint64;
|
len uint64;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewDigest() *Digest {
|
func NewDigest() *Digest {
|
||||||
d := new(Digest);
|
d := new(Digest);
|
||||||
d.s[0] = _Init0;
|
d.s[0] = _Init0;
|
||||||
d.s[1] = _Init1;
|
d.s[1] = _Init1;
|
||||||
|
@ -50,7 +50,7 @@ var golden = []md5Test {
|
|||||||
md5Test{ "132f7619d33b523b1d9e5bd8e0928355", "How can you write a big system without C++? -Paul Glick" },
|
md5Test{ "132f7619d33b523b1d9e5bd8e0928355", "How can you write a big system without C++? -Paul Glick" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestGolden(t *testing.T) {
|
func TestGolden(t *testing.T) {
|
||||||
for i := 0; i < len(golden); i++ {
|
for i := 0; i < len(golden); i++ {
|
||||||
g := golden[i];
|
g := golden[i];
|
||||||
c := NewDigest();
|
c := NewDigest();
|
||||||
|
@ -18,14 +18,14 @@ const (
|
|||||||
_Init4 = 0xC3D2E1F0;
|
_Init4 = 0xC3D2E1F0;
|
||||||
)
|
)
|
||||||
|
|
||||||
export type Digest struct {
|
type Digest struct {
|
||||||
h [5]uint32;
|
h [5]uint32;
|
||||||
x [_Chunk]byte;
|
x [_Chunk]byte;
|
||||||
nx int;
|
nx int;
|
||||||
len uint64;
|
len uint64;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewDigest() *Digest {
|
func NewDigest() *Digest {
|
||||||
d := new(Digest);
|
d := new(Digest);
|
||||||
d.h[0] = _Init0;
|
d.h[0] = _Init0;
|
||||||
d.h[1] = _Init1;
|
d.h[1] = _Init1;
|
||||||
|
@ -52,7 +52,7 @@ var golden = []sha1Test {
|
|||||||
sha1Test{ "6627d6904d71420b0bf3886ab629623538689f45", "How can you write a big system without C++? -Paul Glick" },
|
sha1Test{ "6627d6904d71420b0bf3886ab629623538689f45", "How can you write a big system without C++? -Paul Glick" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestGolden(t *testing.T) {
|
func TestGolden(t *testing.T) {
|
||||||
for i := 0; i < len(golden); i++ {
|
for i := 0; i < len(golden); i++ {
|
||||||
g := golden[i];
|
g := golden[i];
|
||||||
c := NewDigest();
|
c := NewDigest();
|
||||||
|
@ -12,7 +12,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Active HTTP connection (server side).
|
// Active HTTP connection (server side).
|
||||||
export type Conn struct {
|
type Conn struct {
|
||||||
rwc io.ReadWriteClose;
|
rwc io.ReadWriteClose;
|
||||||
br *bufio.BufRead;
|
br *bufio.BufRead;
|
||||||
bw *bufio.BufWrite;
|
bw *bufio.BufWrite;
|
||||||
@ -21,7 +21,7 @@ export type Conn struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create new connection from rwc.
|
// Create new connection from rwc.
|
||||||
export func NewConn(rwc io.ReadWriteClose) (c *Conn, err *os.Error) {
|
func NewConn(rwc io.ReadWriteClose) (c *Conn, err *os.Error) {
|
||||||
c = new(Conn);
|
c = new(Conn);
|
||||||
c.rwc = rwc;
|
c.rwc = rwc;
|
||||||
if c.br, err = bufio.NewBufRead(rwc); err != nil {
|
if c.br, err = bufio.NewBufRead(rwc); err != nil {
|
||||||
|
@ -19,7 +19,7 @@ const (
|
|||||||
_MaxHeaderLines = 1024;
|
_MaxHeaderLines = 1024;
|
||||||
)
|
)
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
LineTooLong = os.NewError("http header line too long");
|
LineTooLong = os.NewError("http header line too long");
|
||||||
ValueTooLong = os.NewError("http header value too long");
|
ValueTooLong = os.NewError("http header value too long");
|
||||||
HeaderTooLong = os.NewError("http header too long");
|
HeaderTooLong = os.NewError("http header too long");
|
||||||
@ -29,7 +29,7 @@ export var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// HTTP Request
|
// HTTP Request
|
||||||
export type Request struct {
|
type Request struct {
|
||||||
method string; // GET, PUT,etc.
|
method string; // GET, PUT,etc.
|
||||||
rawurl string;
|
rawurl string;
|
||||||
url *URL; // URI after GET, PUT etc.
|
url *URL; // URI after GET, PUT etc.
|
||||||
@ -180,7 +180,7 @@ func parseHTTPVersion(vers string) (int, int, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Read and parse a request from b.
|
// Read and parse a request from b.
|
||||||
export func ReadRequest(b *bufio.BufRead) (req *Request, err *os.Error) {
|
func ReadRequest(b *bufio.BufRead) (req *Request, err *os.Error) {
|
||||||
req = new(Request);
|
req = new(Request);
|
||||||
|
|
||||||
// First line: GET /index.html HTTP/1.0
|
// First line: GET /index.html HTTP/1.0
|
||||||
|
@ -36,7 +36,7 @@ func serveConnection(fd net.Conn, raddr string, f *(*Conn, *Request)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Web server: already listening on l, call f for each request.
|
// Web server: already listening on l, call f for each request.
|
||||||
export func Serve(l net.Listener, f *(*Conn, *Request)) *os.Error {
|
func Serve(l net.Listener, f *(*Conn, *Request)) *os.Error {
|
||||||
// TODO: Make this unnecessary
|
// TODO: Make this unnecessary
|
||||||
s, e := os.Getenv("GOMAXPROCS");
|
s, e := os.Getenv("GOMAXPROCS");
|
||||||
if n, ok := strconv.Atoi(s); n < 3 {
|
if n, ok := strconv.Atoi(s); n < 3 {
|
||||||
@ -54,7 +54,7 @@ export func Serve(l net.Listener, f *(*Conn, *Request)) *os.Error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Web server: listen on address, call f for each request.
|
// Web server: listen on address, call f for each request.
|
||||||
export func ListenAndServe(addr string, f *(*Conn, *Request)) *os.Error {
|
func ListenAndServe(addr string, f *(*Conn, *Request)) *os.Error {
|
||||||
l, e := net.Listen("tcp", addr);
|
l, e := net.Listen("tcp", addr);
|
||||||
if e != nil {
|
if e != nil {
|
||||||
return e
|
return e
|
||||||
|
@ -12,7 +12,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
BadURL = os.NewError("bad url syntax")
|
BadURL = os.NewError("bad url syntax")
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ func unhex(c byte) byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Unescape %xx into hex.
|
// Unescape %xx into hex.
|
||||||
export func URLUnescape(s string) (string, *os.Error) {
|
func URLUnescape(s string) (string, *os.Error) {
|
||||||
// Count %, check that they're well-formed.
|
// Count %, check that they're well-formed.
|
||||||
n := 0;
|
n := 0;
|
||||||
for i := 0; i < len(s); {
|
for i := 0; i < len(s); {
|
||||||
@ -76,7 +76,7 @@ export func URLUnescape(s string) (string, *os.Error) {
|
|||||||
return string(t), nil;
|
return string(t), nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type URL struct {
|
type URL struct {
|
||||||
raw string;
|
raw string;
|
||||||
scheme string;
|
scheme string;
|
||||||
rawpath string;
|
rawpath string;
|
||||||
@ -127,7 +127,7 @@ func split(s string, c byte, cutc bool) (string, string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parse rawurl into a URL structure.
|
// Parse rawurl into a URL structure.
|
||||||
export func ParseURL(rawurl string) (url *URL, err *os.Error) {
|
func ParseURL(rawurl string) (url *URL, err *os.Error) {
|
||||||
if rawurl == "" {
|
if rawurl == "" {
|
||||||
return nil, BadURL
|
return nil, BadURL
|
||||||
}
|
}
|
||||||
@ -172,7 +172,7 @@ export func ParseURL(rawurl string) (url *URL, err *os.Error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// A URL reference is a URL with #frag potentially added. Parse it.
|
// A URL reference is a URL with #frag potentially added. Parse it.
|
||||||
export func ParseURLReference(rawurlref string) (url *URL, err *os.Error) {
|
func ParseURLReference(rawurlref string) (url *URL, err *os.Error) {
|
||||||
// Cut off #frag.
|
// Cut off #frag.
|
||||||
rawurl, frag := split(rawurlref, '#', true);
|
rawurl, frag := split(rawurlref, '#', true);
|
||||||
if url, err = ParseURL(rawurl); err != nil {
|
if url, err = ParseURL(rawurl); err != nil {
|
||||||
|
@ -24,7 +24,7 @@ func bytecopy(dst []byte, doff int, src []byte, soff int, count int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ByteBuffer struct {
|
type ByteBuffer struct {
|
||||||
buf []byte;
|
buf []byte;
|
||||||
off int; // Read from here
|
off int; // Read from here
|
||||||
len int; // Write to here
|
len int; // Write to here
|
||||||
@ -87,8 +87,7 @@ func (b *ByteBuffer) AllData() []byte {
|
|||||||
return b.buf[0:b.len]
|
return b.buf[0:b.len]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewByteBufferFromArray(buf []byte) *ByteBuffer {
|
||||||
export func NewByteBufferFromArray(buf []byte) *ByteBuffer {
|
|
||||||
b := new(ByteBuffer);
|
b := new(ByteBuffer);
|
||||||
b.buf = buf;
|
b.buf = buf;
|
||||||
b.off = 0;
|
b.off = 0;
|
||||||
|
@ -9,28 +9,28 @@ import (
|
|||||||
"syscall";
|
"syscall";
|
||||||
)
|
)
|
||||||
|
|
||||||
export var ErrEOF = os.NewError("EOF")
|
var ErrEOF = os.NewError("EOF")
|
||||||
|
|
||||||
export type Read interface {
|
type Read interface {
|
||||||
Read(p []byte) (n int, err *os.Error);
|
Read(p []byte) (n int, err *os.Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Write interface {
|
type Write interface {
|
||||||
Write(p []byte) (n int, err *os.Error);
|
Write(p []byte) (n int, err *os.Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ReadWrite interface {
|
type ReadWrite interface {
|
||||||
Read(p []byte) (n int, err *os.Error);
|
Read(p []byte) (n int, err *os.Error);
|
||||||
Write(p []byte) (n int, err *os.Error);
|
Write(p []byte) (n int, err *os.Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ReadWriteClose interface {
|
type ReadWriteClose interface {
|
||||||
Read(p []byte) (n int, err *os.Error);
|
Read(p []byte) (n int, err *os.Error);
|
||||||
Write(p []byte) (n int, err *os.Error);
|
Write(p []byte) (n int, err *os.Error);
|
||||||
Close() *os.Error;
|
Close() *os.Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func WriteString(w Write, s string) (n int, err *os.Error) {
|
func WriteString(w Write, s string) (n int, err *os.Error) {
|
||||||
b := make([]byte, len(s)+1);
|
b := make([]byte, len(s)+1);
|
||||||
if !syscall.StringToBytes(b, s) {
|
if !syscall.StringToBytes(b, s) {
|
||||||
return -1, os.EINVAL
|
return -1, os.EINVAL
|
||||||
@ -41,7 +41,7 @@ export func WriteString(w Write, s string) (n int, err *os.Error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Read until buffer is full, EOF, or error
|
// Read until buffer is full, EOF, or error
|
||||||
export func Readn(fd Read, buf []byte) (n int, err *os.Error) {
|
func Readn(fd Read, buf []byte) (n int, err *os.Error) {
|
||||||
n = 0;
|
n = 0;
|
||||||
for n < len(buf) {
|
for n < len(buf) {
|
||||||
nn, e := fd.Read(buf[n:len(buf)]);
|
nn, e := fd.Read(buf[n:len(buf)]);
|
||||||
@ -69,7 +69,7 @@ func (fd *_FullRead) Read(p []byte) (n int, err *os.Error) {
|
|||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Make_FullReader(fd Read) Read {
|
func Make_FullReader(fd Read) Read {
|
||||||
if fr, ok := fd.(*_FullRead); ok {
|
if fr, ok := fd.(*_FullRead); ok {
|
||||||
// already a _FullRead
|
// already a _FullRead
|
||||||
return fd
|
return fd
|
||||||
@ -79,7 +79,7 @@ export func Make_FullReader(fd Read) Read {
|
|||||||
|
|
||||||
// Copies n bytes (or until EOF is reached) from src to dst.
|
// Copies n bytes (or until EOF is reached) from src to dst.
|
||||||
// Returns the number of bytes copied and the error, if any.
|
// Returns the number of bytes copied and the error, if any.
|
||||||
export func Copyn(src Read, dst Write, n int64) (written int64, err *os.Error) {
|
func Copyn(src Read, dst Write, n int64) (written int64, err *os.Error) {
|
||||||
buf := make([]byte, 32*1024);
|
buf := make([]byte, 32*1024);
|
||||||
for written < n {
|
for written < n {
|
||||||
l := len(buf);
|
l := len(buf);
|
||||||
@ -115,7 +115,7 @@ export func Copyn(src Read, dst Write, n int64) (written int64, err *os.Error) {
|
|||||||
|
|
||||||
// Copies from src to dst until EOF is reached.
|
// Copies from src to dst until EOF is reached.
|
||||||
// Returns the number of bytes copied and the error, if any.
|
// Returns the number of bytes copied and the error, if any.
|
||||||
export func Copy(src Read, dst Write) (written int64, err *os.Error) {
|
func Copy(src Read, dst Write) (written int64, err *os.Error) {
|
||||||
buf := make([]byte, 32*1024);
|
buf := make([]byte, 32*1024);
|
||||||
for {
|
for {
|
||||||
nr, er := src.Read(buf);
|
nr, er := src.Read(buf);
|
||||||
@ -147,7 +147,7 @@ export func Copy(src Read, dst Write) (written int64, err *os.Error) {
|
|||||||
// Convert a string to an array of bytes for easy marshaling.
|
// Convert a string to an array of bytes for easy marshaling.
|
||||||
// Could fill with syscall.StringToBytes but it adds an unnecessary \000
|
// Could fill with syscall.StringToBytes but it adds an unnecessary \000
|
||||||
// so the length would be wrong.
|
// so the length would be wrong.
|
||||||
export func StringBytes(s string) []byte {
|
func StringBytes(s string) []byte {
|
||||||
b := make([]byte, len(s));
|
b := make([]byte, len(s));
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
b[i] = s[i];
|
b[i] = s[i];
|
||||||
|
@ -15,7 +15,7 @@ import (
|
|||||||
"strings";
|
"strings";
|
||||||
)
|
)
|
||||||
|
|
||||||
export const (
|
const (
|
||||||
StringKind = iota;
|
StringKind = iota;
|
||||||
NumberKind;
|
NumberKind;
|
||||||
MapKind; // JSON term is "Object", but in Go, it's a map
|
MapKind; // JSON term is "Object", but in Go, it's a map
|
||||||
@ -24,7 +24,7 @@ export const (
|
|||||||
NullKind;
|
NullKind;
|
||||||
)
|
)
|
||||||
|
|
||||||
export type Json interface {
|
type Json interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
String() string;
|
String() string;
|
||||||
Number() float64;
|
Number() float64;
|
||||||
@ -34,7 +34,7 @@ export type Json interface {
|
|||||||
Len() int;
|
Len() int;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func JsonToString(j Json) string {
|
func JsonToString(j Json) string {
|
||||||
if j == nil {
|
if j == nil {
|
||||||
return "null"
|
return "null"
|
||||||
}
|
}
|
||||||
@ -45,7 +45,7 @@ export func JsonToString(j Json) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type _Null struct { }
|
type _Null struct { }
|
||||||
export var Null Json = &_Null{}
|
var Null Json = &_Null{}
|
||||||
func (*_Null) Kind() int { return NullKind }
|
func (*_Null) Kind() int { return NullKind }
|
||||||
func (*_Null) String() string { return "null" }
|
func (*_Null) String() string { return "null" }
|
||||||
func (*_Null) Number() float64 { return 0 }
|
func (*_Null) Number() float64 { return 0 }
|
||||||
@ -128,7 +128,7 @@ func (j *_Map) String() string {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Walk(j Json, path string) Json {
|
func Walk(j Json, path string) Json {
|
||||||
for len(path) > 0 {
|
for len(path) > 0 {
|
||||||
var elem string;
|
var elem string;
|
||||||
if i := strings.Index(path, "/"); i >= 0 {
|
if i := strings.Index(path, "/"); i >= 0 {
|
||||||
@ -154,7 +154,7 @@ export func Walk(j Json, path string) Json {
|
|||||||
return j
|
return j
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Equal(a, b Json) bool {
|
func Equal(a, b Json) bool {
|
||||||
switch {
|
switch {
|
||||||
case a == nil && b == nil:
|
case a == nil && b == nil:
|
||||||
return true;
|
return true;
|
||||||
@ -290,7 +290,7 @@ func (b *_JsonBuilder) Key(k string) Builder {
|
|||||||
return bb
|
return bb
|
||||||
}
|
}
|
||||||
|
|
||||||
export func StringToJson(s string) (json Json, ok bool, errtok string) {
|
func StringToJson(s string) (json Json, ok bool, errtok string) {
|
||||||
var errindx int;
|
var errindx int;
|
||||||
var j Json;
|
var j Json;
|
||||||
b := new(_JsonBuilder);
|
b := new(_JsonBuilder);
|
||||||
|
@ -24,7 +24,7 @@ var jsontests = []string {
|
|||||||
`{"a":1}`,
|
`{"a":1}`,
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestJson(t *testing.T) {
|
func TestJson(t *testing.T) {
|
||||||
for i := 0; i < len(jsontests); i++ {
|
for i := 0; i < len(jsontests); i++ {
|
||||||
val, ok, errtok := StringToJson(jsontests[i]);
|
val, ok, errtok := StringToJson(jsontests[i]);
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -39,7 +39,7 @@ export func TestJson(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestJsonMap(t *testing.T) {
|
func TestJsonMap(t *testing.T) {
|
||||||
values := make(map[string]Json);
|
values := make(map[string]Json);
|
||||||
mapstr := "{";
|
mapstr := "{";
|
||||||
for i := 0; i < len(jsontests); i++ {
|
for i := 0; i < len(jsontests); i++ {
|
||||||
|
@ -44,7 +44,7 @@ func _UnHex(p string, r, l int) (v int, ok bool) {
|
|||||||
return v, true;
|
return v, true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Unquote(s string) (t string, ok bool) {
|
func Unquote(s string) (t string, ok bool) {
|
||||||
if len(s) < 2 || s[0] != '"' || s[len(s)-1] != '"' {
|
if len(s) < 2 || s[0] != '"' || s[len(s)-1] != '"' {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -117,7 +117,7 @@ export func Unquote(s string) (t string, ok bool) {
|
|||||||
return string(b[0:w]), true
|
return string(b[0:w]), true
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Quote(s string) string {
|
func Quote(s string) string {
|
||||||
chr := make([]byte, utf8.UTFMax);
|
chr := make([]byte, utf8.UTFMax);
|
||||||
chr0 := chr[0:1];
|
chr0 := chr[0:1];
|
||||||
b := new(io.ByteBuffer);
|
b := new(io.ByteBuffer);
|
||||||
@ -272,7 +272,7 @@ func (t *_Lexer) Next() {
|
|||||||
|
|
||||||
type _Value interface {}
|
type _Value interface {}
|
||||||
|
|
||||||
export type Builder interface {
|
type Builder interface {
|
||||||
// Set value
|
// Set value
|
||||||
Int64(i int64);
|
Int64(i int64);
|
||||||
Uint64(i uint64);
|
Uint64(i uint64);
|
||||||
@ -386,7 +386,7 @@ Switch:
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Parse(s string, build Builder) (ok bool, errindx int, errtok string) {
|
func Parse(s string, build Builder) (ok bool, errindx int, errtok string) {
|
||||||
lex := new(_Lexer);
|
lex := new(_Lexer);
|
||||||
lex.s = s;
|
lex.s = s;
|
||||||
lex.Next();
|
lex.Next();
|
||||||
|
@ -202,7 +202,7 @@ func (b *_StructBuilder) Key(k string) Builder {
|
|||||||
return nobuilder
|
return nobuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Unmarshal(s string, val interface{}) (ok bool, errtok string) {
|
func Unmarshal(s string, val interface{}) (ok bool, errtok string) {
|
||||||
var errindx int;
|
var errindx int;
|
||||||
var val1 interface{};
|
var val1 interface{};
|
||||||
b := &_StructBuilder{ reflect.NewValue(val) };
|
b := &_StructBuilder{ reflect.NewValue(val) };
|
||||||
|
@ -46,7 +46,7 @@ func _Check(t *testing.T, ok bool, name string, v interface{}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestUnmarshal(t *testing.T) {
|
func TestUnmarshal(t *testing.T) {
|
||||||
var m _MyStruct;
|
var m _MyStruct;
|
||||||
m.f = true;
|
m.f = true;
|
||||||
ok, errtok := Unmarshal(_Encoded, &m);
|
ok, errtok := Unmarshal(_Encoded, &m);
|
||||||
|
@ -8,12 +8,12 @@
|
|||||||
|
|
||||||
package malloc
|
package malloc
|
||||||
|
|
||||||
export type Stats struct {
|
type Stats struct {
|
||||||
Alloc uint64;
|
Alloc uint64;
|
||||||
Sys uint64;
|
Sys uint64;
|
||||||
};
|
};
|
||||||
|
|
||||||
export func Alloc(uint64) *byte;
|
func Alloc(uint64) *byte;
|
||||||
export func Free(*byte);
|
func Free(*byte);
|
||||||
export func GetStats() *Stats;
|
func GetStats() *Stats;
|
||||||
export func Lookup(*byte) (*byte, uintptr);
|
func Lookup(*byte) (*byte, uintptr);
|
||||||
|
@ -175,7 +175,7 @@ func veryclose(a,b float64) bool {
|
|||||||
return tolerance(a, b, 4e-16);
|
return tolerance(a, b, 4e-16);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestAsin(t *testing.T) {
|
func TestAsin(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Asin(vf[i]/10); !veryclose(asin[i], f) {
|
if f := math.Asin(vf[i]/10); !veryclose(asin[i], f) {
|
||||||
t.Errorf("math.Asin(%g) = %g, want %g\n", vf[i]/10, f, asin[i]);
|
t.Errorf("math.Asin(%g) = %g, want %g\n", vf[i]/10, f, asin[i]);
|
||||||
@ -183,7 +183,7 @@ export func TestAsin(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestAtan(t *testing.T) {
|
func TestAtan(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Atan(vf[i]); !veryclose(atan[i], f) {
|
if f := math.Atan(vf[i]); !veryclose(atan[i], f) {
|
||||||
t.Errorf("math.Atan(%g) = %g, want %g\n", vf[i], f, atan[i]);
|
t.Errorf("math.Atan(%g) = %g, want %g\n", vf[i], f, atan[i]);
|
||||||
@ -191,7 +191,7 @@ export func TestAtan(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestExp(t *testing.T) {
|
func TestExp(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Exp(vf[i]); !veryclose(exp[i], f) {
|
if f := math.Exp(vf[i]); !veryclose(exp[i], f) {
|
||||||
t.Errorf("math.Exp(%g) = %g, want %g\n", vf[i], f, exp[i]);
|
t.Errorf("math.Exp(%g) = %g, want %g\n", vf[i], f, exp[i]);
|
||||||
@ -199,7 +199,7 @@ export func TestExp(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestFloor(t *testing.T) {
|
func TestFloor(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Floor(vf[i]); floor[i] != f {
|
if f := math.Floor(vf[i]); floor[i] != f {
|
||||||
t.Errorf("math.Floor(%g) = %g, want %g\n", vf[i], f, floor[i]);
|
t.Errorf("math.Floor(%g) = %g, want %g\n", vf[i], f, floor[i]);
|
||||||
@ -207,7 +207,7 @@ export func TestFloor(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestLog(t *testing.T) {
|
func TestLog(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
a := math.Fabs(vf[i]);
|
a := math.Fabs(vf[i]);
|
||||||
if f := math.Log(a); log[i] != f {
|
if f := math.Log(a); log[i] != f {
|
||||||
@ -219,7 +219,7 @@ export func TestLog(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestPow(t *testing.T) {
|
func TestPow(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Pow(10, vf[i]); !close(pow[i], f) {
|
if f := math.Pow(10, vf[i]); !close(pow[i], f) {
|
||||||
t.Errorf("math.Pow(10, %.17g) = %.17g, want %.17g\n", vf[i], f, pow[i]);
|
t.Errorf("math.Pow(10, %.17g) = %.17g, want %.17g\n", vf[i], f, pow[i]);
|
||||||
@ -227,7 +227,7 @@ export func TestPow(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSin(t *testing.T) {
|
func TestSin(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Sin(vf[i]); !close(sin[i], f) {
|
if f := math.Sin(vf[i]); !close(sin[i], f) {
|
||||||
t.Errorf("math.Sin(%g) = %g, want %g\n", vf[i], f, sin[i]);
|
t.Errorf("math.Sin(%g) = %g, want %g\n", vf[i], f, sin[i]);
|
||||||
@ -235,7 +235,7 @@ export func TestSin(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSinh(t *testing.T) {
|
func TestSinh(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Sinh(vf[i]); !veryclose(sinh[i], f) {
|
if f := math.Sinh(vf[i]); !veryclose(sinh[i], f) {
|
||||||
t.Errorf("math.Sinh(%g) = %g, want %g\n", vf[i], f, sinh[i]);
|
t.Errorf("math.Sinh(%g) = %g, want %g\n", vf[i], f, sinh[i]);
|
||||||
@ -243,7 +243,7 @@ export func TestSinh(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSqrt(t *testing.T) {
|
func TestSqrt(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
a := math.Fabs(vf[i]);
|
a := math.Fabs(vf[i]);
|
||||||
if f := math.Sqrt(a); !veryclose(sqrt[i], f) {
|
if f := math.Sqrt(a); !veryclose(sqrt[i], f) {
|
||||||
@ -252,7 +252,7 @@ export func TestSqrt(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestTan(t *testing.T) {
|
func TestTan(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Tan(vf[i]); !close(tan[i], f) {
|
if f := math.Tan(vf[i]); !close(tan[i], f) {
|
||||||
t.Errorf("math.Tan(%g) = %g, want %g\n", vf[i], f, tan[i]);
|
t.Errorf("math.Tan(%g) = %g, want %g\n", vf[i], f, tan[i]);
|
||||||
@ -260,7 +260,7 @@ export func TestTan(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestTanh(t *testing.T) {
|
func TestTanh(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
if f := math.Tanh(vf[i]); !veryclose(tanh[i], f) {
|
if f := math.Tanh(vf[i]); !veryclose(tanh[i], f) {
|
||||||
t.Errorf("math.Tanh(%g) = %g, want %g\n", vf[i], f, tanh[i]);
|
t.Errorf("math.Tanh(%g) = %g, want %g\n", vf[i], f, tanh[i]);
|
||||||
@ -268,7 +268,7 @@ export func TestTanh(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestHypot(t *testing.T) {
|
func TestHypot(t *testing.T) {
|
||||||
for i := 0; i < len(vf); i++ {
|
for i := 0; i < len(vf); i++ {
|
||||||
a := math.Fabs(tanh[i]*math.Sqrt(2));
|
a := math.Fabs(tanh[i]*math.Sqrt(2));
|
||||||
if f := math.Hypot(tanh[i], tanh[i]); !veryclose(a, f) {
|
if f := math.Hypot(tanh[i], tanh[i]); !veryclose(a, f) {
|
||||||
|
@ -13,7 +13,7 @@ import "math"
|
|||||||
* Arctan is called after appropriate range reduction.
|
* Arctan is called after appropriate range reduction.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export func Asin(arg float64) float64 {
|
func Asin(arg float64) float64 {
|
||||||
var temp, x float64;
|
var temp, x float64;
|
||||||
var sign bool;
|
var sign bool;
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ export func Asin(arg float64) float64 {
|
|||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Acos(arg float64) float64 {
|
func Acos(arg float64) float64 {
|
||||||
if arg > 1 || arg < -1 {
|
if arg > 1 || arg < -1 {
|
||||||
return sys.NaN();
|
return sys.NaN();
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ func satan(arg float64) float64 {
|
|||||||
* atan makes its argument positive and
|
* atan makes its argument positive and
|
||||||
* calls the inner routine satan.
|
* calls the inner routine satan.
|
||||||
*/
|
*/
|
||||||
export func Atan(arg float64) float64 {
|
func Atan(arg float64) float64 {
|
||||||
if arg > 0 {
|
if arg > 0 {
|
||||||
return satan(arg);
|
return satan(arg);
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ import "math"
|
|||||||
* atan2 discovers what quadrant the angle
|
* atan2 discovers what quadrant the angle
|
||||||
* is in and calls atan.
|
* is in and calls atan.
|
||||||
*/
|
*/
|
||||||
export func Atan2(arg1, arg2 float64) float64 {
|
func Atan2(arg1, arg2 float64) float64 {
|
||||||
if arg1+arg2 == arg1 {
|
if arg1+arg2 == arg1 {
|
||||||
if arg1 >= 0 {
|
if arg1 >= 0 {
|
||||||
return Pi/2;
|
return Pi/2;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package math
|
package math
|
||||||
|
|
||||||
export const (
|
const (
|
||||||
// Mathematical constants.
|
// Mathematical constants.
|
||||||
// Reference: http://www.research.att.com/~njas/sequences/Axxxxxx
|
// Reference: http://www.research.att.com/~njas/sequences/Axxxxxx
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ import "math"
|
|||||||
// compiler will convert from decimal to binary accurately enough
|
// compiler will convert from decimal to binary accurately enough
|
||||||
// to produce the hexadecimal values shown.
|
// to produce the hexadecimal values shown.
|
||||||
|
|
||||||
export func Exp(x float64) float64 {
|
func Exp(x float64) float64 {
|
||||||
const (
|
const (
|
||||||
Ln2Hi = 6.93147180369123816490e-01;
|
Ln2Hi = 6.93147180369123816490e-01;
|
||||||
Ln2Lo = 1.90821492927058770002e-10;
|
Ln2Lo = 1.90821492927058770002e-10;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package math
|
package math
|
||||||
|
|
||||||
export func Fabs(arg float64) float64 {
|
func Fabs(arg float64) float64 {
|
||||||
if arg < 0 {
|
if arg < 0 {
|
||||||
return -arg;
|
return -arg;
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ package math
|
|||||||
* (resp least >=)
|
* (resp least >=)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export func Floor(arg float64) float64 {
|
func Floor(arg float64) float64 {
|
||||||
if arg < 0 {
|
if arg < 0 {
|
||||||
d, fract := sys.Modf(-arg);
|
d, fract := sys.Modf(-arg);
|
||||||
if fract != 0.0 {
|
if fract != 0.0 {
|
||||||
@ -21,6 +21,6 @@ export func Floor(arg float64) float64 {
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Ceil(arg float64) float64 {
|
func Ceil(arg float64) float64 {
|
||||||
return -Floor(-arg);
|
return -Floor(-arg);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ package math
|
|||||||
* floating-point mod func without infinity or NaN checking
|
* floating-point mod func without infinity or NaN checking
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export func Fmod(x, y float64) float64 {
|
func Fmod(x, y float64) float64 {
|
||||||
if y == 0 {
|
if y == 0 {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ package math
|
|||||||
* Vol. 27, Number 6, pp. 577-581, Nov. 1983
|
* Vol. 27, Number 6, pp. 577-581, Nov. 1983
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export func Hypot(p, q float64) float64 {
|
func Hypot(p, q float64) float64 {
|
||||||
if p < 0 {
|
if p < 0 {
|
||||||
p = -p;
|
p = -p;
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ import "math"
|
|||||||
// compiler will convert from decimal to binary accurately enough
|
// compiler will convert from decimal to binary accurately enough
|
||||||
// to produce the hexadecimal values shown.
|
// to produce the hexadecimal values shown.
|
||||||
|
|
||||||
export func Log(x float64) float64 {
|
func Log(x float64) float64 {
|
||||||
const (
|
const (
|
||||||
Ln2Hi = 6.93147180369123816490e-01; /* 3fe62e42 fee00000 */
|
Ln2Hi = 6.93147180369123816490e-01; /* 3fe62e42 fee00000 */
|
||||||
Ln2Lo = 1.90821492927058770002e-10; /* 3dea39ef 35793c76 */
|
Ln2Lo = 1.90821492927058770002e-10; /* 3dea39ef 35793c76 */
|
||||||
@ -113,7 +113,7 @@ export func Log(x float64) float64 {
|
|||||||
return k*Ln2Hi - ((hfsq-(s*(hfsq+R)+k*Ln2Lo)) - f);
|
return k*Ln2Hi - ((hfsq-(s*(hfsq+R)+k*Ln2Lo)) - f);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Log10(arg float64) float64 {
|
func Log10(arg float64) float64 {
|
||||||
if arg <= 0 {
|
if arg <= 0 {
|
||||||
return sys.NaN();
|
return sys.NaN();
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ package math
|
|||||||
import "math"
|
import "math"
|
||||||
|
|
||||||
// x^y: exponentiation
|
// x^y: exponentiation
|
||||||
export func Pow(x, y float64) float64 {
|
func Pow(x, y float64) float64 {
|
||||||
// TODO: x or y NaN, ±Inf, maybe ±0.
|
// TODO: x or y NaN, ±Inf, maybe ±0.
|
||||||
switch {
|
switch {
|
||||||
case y == 0:
|
case y == 0:
|
||||||
|
@ -15,7 +15,7 @@ package math
|
|||||||
|
|
||||||
var pow10tab [70]float64;
|
var pow10tab [70]float64;
|
||||||
|
|
||||||
export func Pow10(e int) float64 {
|
func Pow10(e int) float64 {
|
||||||
if e < 0 {
|
if e < 0 {
|
||||||
return 1/Pow10(-e);
|
return 1/Pow10(-e);
|
||||||
}
|
}
|
||||||
|
@ -52,13 +52,13 @@ func sinus(arg float64, quad int) float64 {
|
|||||||
return temp1/temp2;
|
return temp1/temp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Cos(arg float64) float64 {
|
func Cos(arg float64) float64 {
|
||||||
if arg < 0 {
|
if arg < 0 {
|
||||||
arg = -arg;
|
arg = -arg;
|
||||||
}
|
}
|
||||||
return sinus(arg, 1);
|
return sinus(arg, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Sin(arg float64) float64 {
|
func Sin(arg float64) float64 {
|
||||||
return sinus(arg, 0);
|
return sinus(arg, 0);
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ import "math"
|
|||||||
* all arguments.
|
* all arguments.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export func Sinh(arg float64) float64 {
|
func Sinh(arg float64) float64 {
|
||||||
// The coefficients are #2029 from Hart & Cheney. (20.36D)
|
// The coefficients are #2029 from Hart & Cheney. (20.36D)
|
||||||
const
|
const
|
||||||
(
|
(
|
||||||
@ -58,7 +58,7 @@ export func Sinh(arg float64) float64 {
|
|||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Cosh(arg float64) float64 {
|
func Cosh(arg float64) float64 {
|
||||||
if arg < 0 {
|
if arg < 0 {
|
||||||
arg = - arg;
|
arg = - arg;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ package math
|
|||||||
* calls frexp
|
* calls frexp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export func Sqrt(arg float64) float64 {
|
func Sqrt(arg float64) float64 {
|
||||||
if sys.IsInf(arg, 1) {
|
if sys.IsInf(arg, 1) {
|
||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ import "math"
|
|||||||
* floating point tangent
|
* floating point tangent
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export func Tan(arg float64) float64 {
|
func Tan(arg float64) float64 {
|
||||||
// Coefficients are #4285 from Hart & Cheney. (19.74D)
|
// Coefficients are #4285 from Hart & Cheney. (19.74D)
|
||||||
const
|
const
|
||||||
(
|
(
|
||||||
|
@ -14,7 +14,7 @@ import "math"
|
|||||||
* would cause overflow improperly.
|
* would cause overflow improperly.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export func Tanh(arg float64) float64 {
|
func Tanh(arg float64) float64 {
|
||||||
if arg < 0 {
|
if arg < 0 {
|
||||||
arg = -arg;
|
arg = -arg;
|
||||||
if arg > 21 {
|
if arg > 21 {
|
||||||
|
@ -64,7 +64,7 @@ var googleaddrs = []string {
|
|||||||
"[2001:4860:0:2001::68]:80" // ipv6.google.com; removed if ipv6 flag not set
|
"[2001:4860:0:2001::68]:80" // ipv6.google.com; removed if ipv6 flag not set
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestDialGoogle(t *testing.T) {
|
func TestDialGoogle(t *testing.T) {
|
||||||
// If no ipv6 tunnel, don't try the last address.
|
// If no ipv6 tunnel, don't try the last address.
|
||||||
if !*ipv6 {
|
if !*ipv6 {
|
||||||
googleaddrs[len(googleaddrs)-1] = ""
|
googleaddrs[len(googleaddrs)-1] = ""
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
"strings";
|
"strings";
|
||||||
)
|
)
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
DNS_InternalError = os.NewError("internal dns error");
|
DNS_InternalError = os.NewError("internal dns error");
|
||||||
DNS_MissingConfig = os.NewError("no dns configuration");
|
DNS_MissingConfig = os.NewError("no dns configuration");
|
||||||
DNS_No_Answer = os.NewError("dns got no answer");
|
DNS_No_Answer = os.NewError("dns got no answer");
|
||||||
@ -171,7 +171,7 @@ func _LoadConfig() {
|
|||||||
cfg = DNS_ReadConfig();
|
cfg = DNS_ReadConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
export func LookupHost(name string) (name1 string, addrs []string, err *os.Error) {
|
func LookupHost(name string) (name1 string, addrs []string, err *os.Error) {
|
||||||
// TODO(rsc): Pick out obvious non-DNS names to avoid
|
// TODO(rsc): Pick out obvious non-DNS names to avoid
|
||||||
// sending stupid requests to the server?
|
// sending stupid requests to the server?
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
"strconv";
|
"strconv";
|
||||||
)
|
)
|
||||||
|
|
||||||
export type DNS_Config struct {
|
type DNS_Config struct {
|
||||||
servers []string; // servers to use
|
servers []string; // servers to use
|
||||||
search []string; // suffixes to append to local name
|
search []string; // suffixes to append to local name
|
||||||
ndots int; // number of dots in name to trigger absolute lookup
|
ndots int; // number of dots in name to trigger absolute lookup
|
||||||
@ -26,7 +26,7 @@ export type DNS_Config struct {
|
|||||||
// TODO(rsc): Supposed to call uname() and chop the beginning
|
// TODO(rsc): Supposed to call uname() and chop the beginning
|
||||||
// of the host name to get the default search domain.
|
// of the host name to get the default search domain.
|
||||||
// We assume it's in resolv.conf anyway.
|
// We assume it's in resolv.conf anyway.
|
||||||
export func DNS_ReadConfig() *DNS_Config {
|
func DNS_ReadConfig() *DNS_Config {
|
||||||
file := _Open("/etc/resolv.conf");
|
file := _Open("/etc/resolv.conf");
|
||||||
if file == nil {
|
if file == nil {
|
||||||
return nil
|
return nil
|
||||||
|
@ -32,7 +32,7 @@ import (
|
|||||||
// _Packet formats
|
// _Packet formats
|
||||||
|
|
||||||
// Wire constants.
|
// Wire constants.
|
||||||
export const (
|
const (
|
||||||
// valid DNS_RR_Header.rrtype and DNS_Question.qtype
|
// valid DNS_RR_Header.rrtype and DNS_Question.qtype
|
||||||
DNS_TypeA = 1;
|
DNS_TypeA = 1;
|
||||||
DNS_TypeNS = 2;
|
DNS_TypeNS = 2;
|
||||||
@ -90,7 +90,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// DNS queries.
|
// DNS queries.
|
||||||
export type DNS_Question struct {
|
type DNS_Question struct {
|
||||||
name string "domain-name"; // "domain-name" specifies encoding; see packers below
|
name string "domain-name"; // "domain-name" specifies encoding; see packers below
|
||||||
qtype uint16;
|
qtype uint16;
|
||||||
qclass uint16;
|
qclass uint16;
|
||||||
@ -99,7 +99,7 @@ export type DNS_Question struct {
|
|||||||
// DNS responses (resource records).
|
// DNS responses (resource records).
|
||||||
// There are many types of messages,
|
// There are many types of messages,
|
||||||
// but they all share the same header.
|
// but they all share the same header.
|
||||||
export type DNS_RR_Header struct {
|
type DNS_RR_Header struct {
|
||||||
name string "domain-name";
|
name string "domain-name";
|
||||||
rrtype uint16;
|
rrtype uint16;
|
||||||
class uint16;
|
class uint16;
|
||||||
@ -111,62 +111,62 @@ func (h *DNS_RR_Header) Header() *DNS_RR_Header {
|
|||||||
return h
|
return h
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR interface {
|
type DNS_RR interface {
|
||||||
Header() *DNS_RR_Header
|
Header() *DNS_RR_Header
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Specific DNS RR formats for each query type.
|
// Specific DNS RR formats for each query type.
|
||||||
|
|
||||||
export type DNS_RR_CNAME struct {
|
type DNS_RR_CNAME struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
cname string "domain-name";
|
cname string "domain-name";
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_HINFO struct {
|
type DNS_RR_HINFO struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
cpu string;
|
cpu string;
|
||||||
os string;
|
os string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_MB struct {
|
type DNS_RR_MB struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
mb string "domain-name";
|
mb string "domain-name";
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_MG struct {
|
type DNS_RR_MG struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
mg string "domain-name";
|
mg string "domain-name";
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_MINFO struct {
|
type DNS_RR_MINFO struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
rmail string "domain-name";
|
rmail string "domain-name";
|
||||||
email string "domain-name";
|
email string "domain-name";
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_MR struct {
|
type DNS_RR_MR struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
mr string "domain-name";
|
mr string "domain-name";
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_MX struct {
|
type DNS_RR_MX struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
pref uint16;
|
pref uint16;
|
||||||
mx string "domain-name";
|
mx string "domain-name";
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_NS struct {
|
type DNS_RR_NS struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
ns string "domain-name";
|
ns string "domain-name";
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_PTR struct {
|
type DNS_RR_PTR struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
ptr string "domain-name";
|
ptr string "domain-name";
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_SOA struct {
|
type DNS_RR_SOA struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
ns string "domain-name";
|
ns string "domain-name";
|
||||||
mbox string "domain-name";
|
mbox string "domain-name";
|
||||||
@ -177,12 +177,12 @@ export type DNS_RR_SOA struct {
|
|||||||
minttl uint32;
|
minttl uint32;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_TXT struct {
|
type DNS_RR_TXT struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
txt string; // not domain name
|
txt string; // not domain name
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_RR_A struct {
|
type DNS_RR_A struct {
|
||||||
DNS_RR_Header;
|
DNS_RR_Header;
|
||||||
a uint32 "ipv4";
|
a uint32 "ipv4";
|
||||||
}
|
}
|
||||||
@ -537,7 +537,7 @@ type _DNS_Msg_Top struct {
|
|||||||
rcode int;
|
rcode int;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DNS_Msg struct {
|
type DNS_Msg struct {
|
||||||
_DNS_Msg_Top;
|
_DNS_Msg_Top;
|
||||||
question []DNS_Question;
|
question []DNS_Question;
|
||||||
answer []DNS_RR;
|
answer []DNS_RR;
|
||||||
|
@ -15,7 +15,7 @@ import (
|
|||||||
|
|
||||||
// Network file descriptor. Only intended to be used internally,
|
// Network file descriptor. Only intended to be used internally,
|
||||||
// but have to export to make it available in other files implementing package net.
|
// but have to export to make it available in other files implementing package net.
|
||||||
export type FD struct {
|
type FD struct {
|
||||||
// immutable until Close
|
// immutable until Close
|
||||||
fd int64;
|
fd int64;
|
||||||
osfd *os.FD;
|
osfd *os.FD;
|
||||||
@ -207,7 +207,7 @@ func _StartServer() {
|
|||||||
pollserver = p
|
pollserver = p
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewFD(fd int64) (f *FD, err *os.Error) {
|
func NewFD(fd int64) (f *FD, err *os.Error) {
|
||||||
if pollserver == nil {
|
if pollserver == nil {
|
||||||
once.Do(&_StartServer);
|
once.Do(&_StartServer);
|
||||||
}
|
}
|
||||||
|
@ -12,13 +12,13 @@ import (
|
|||||||
"syscall";
|
"syscall";
|
||||||
)
|
)
|
||||||
|
|
||||||
export type Pollster struct {
|
type Pollster struct {
|
||||||
kq int64;
|
kq int64;
|
||||||
eventbuf [10]syscall.Kevent_t;
|
eventbuf [10]syscall.Kevent_t;
|
||||||
events []syscall.Kevent_t;
|
events []syscall.Kevent_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewPollster() (p *Pollster, err *os.Error) {
|
func NewPollster() (p *Pollster, err *os.Error) {
|
||||||
p = new(Pollster);
|
p = new(Pollster);
|
||||||
var e int64;
|
var e int64;
|
||||||
if p.kq, e = syscall.Kqueue(); e != 0 {
|
if p.kq, e = syscall.Kqueue(); e != 0 {
|
||||||
|
@ -17,14 +17,14 @@ const (
|
|||||||
writeFlags = syscall.EPOLLOUT
|
writeFlags = syscall.EPOLLOUT
|
||||||
)
|
)
|
||||||
|
|
||||||
export type Pollster struct {
|
type Pollster struct {
|
||||||
epfd int64;
|
epfd int64;
|
||||||
|
|
||||||
// Events we're already waiting for
|
// Events we're already waiting for
|
||||||
events map[int64] uint32;
|
events map[int64] uint32;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewPollster() (p *Pollster, err *os.Error) {
|
func NewPollster() (p *Pollster, err *os.Error) {
|
||||||
p = new(Pollster);
|
p = new(Pollster);
|
||||||
var e int64;
|
var e int64;
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
)
|
)
|
||||||
|
|
||||||
export const (
|
const (
|
||||||
IPv4len = 4;
|
IPv4len = 4;
|
||||||
IPv6len = 16
|
IPv6len = 16
|
||||||
)
|
)
|
||||||
@ -37,7 +37,7 @@ func _MakeIPv4(a, b, c, d byte) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Well-known IP addresses
|
// Well-known IP addresses
|
||||||
export var IPv4bcast, IPv4allsys, IPv4allrouter, IPv4prefix, IPallbits, IPnoaddr []byte
|
var IPv4bcast, IPv4allsys, IPv4allrouter, IPv4prefix, IPallbits, IPnoaddr []byte
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
IPv4bcast = _MakeIPv4(0xff, 0xff, 0xff, 0xff);
|
IPv4bcast = _MakeIPv4(0xff, 0xff, 0xff, 0xff);
|
||||||
@ -63,7 +63,7 @@ func _IsZeros(p []byte) bool {
|
|||||||
|
|
||||||
// Is p an IPv4 address (perhaps in IPv6 form)?
|
// Is p an IPv4 address (perhaps in IPv6 form)?
|
||||||
// If so, return the 4-byte V4 array.
|
// If so, return the 4-byte V4 array.
|
||||||
export func ToIPv4(p []byte) []byte {
|
func ToIPv4(p []byte) []byte {
|
||||||
if len(p) == IPv4len {
|
if len(p) == IPv4len {
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ export func ToIPv4(p []byte) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Convert p to IPv6 form.
|
// Convert p to IPv6 form.
|
||||||
export func ToIPv6(p []byte) []byte {
|
func ToIPv6(p []byte) []byte {
|
||||||
if len(p) == IPv4len {
|
if len(p) == IPv4len {
|
||||||
return _MakeIPv4(p[0], p[1], p[2], p[3])
|
return _MakeIPv4(p[0], p[1], p[2], p[3])
|
||||||
}
|
}
|
||||||
@ -88,13 +88,13 @@ export func ToIPv6(p []byte) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Default route masks for IPv4.
|
// Default route masks for IPv4.
|
||||||
export var (
|
var (
|
||||||
ClassAMask = _MakeIPv4(0xff, 0, 0, 0);
|
ClassAMask = _MakeIPv4(0xff, 0, 0, 0);
|
||||||
ClassBMask = _MakeIPv4(0xff, 0xff, 0, 0);
|
ClassBMask = _MakeIPv4(0xff, 0xff, 0, 0);
|
||||||
ClassCMask = _MakeIPv4(0xff, 0xff, 0xff, 0);
|
ClassCMask = _MakeIPv4(0xff, 0xff, 0xff, 0);
|
||||||
)
|
)
|
||||||
|
|
||||||
export func DefaultMask(p []byte) []byte {
|
func DefaultMask(p []byte) []byte {
|
||||||
if p = ToIPv4(p); p == nil {
|
if p = ToIPv4(p); p == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -110,7 +110,7 @@ export func DefaultMask(p []byte) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Apply mask to ip, returning new address.
|
// Apply mask to ip, returning new address.
|
||||||
export func Mask(ip []byte, mask []byte) []byte {
|
func Mask(ip []byte, mask []byte) []byte {
|
||||||
n := len(ip);
|
n := len(ip);
|
||||||
if n != len(mask) {
|
if n != len(mask) {
|
||||||
return nil
|
return nil
|
||||||
@ -159,7 +159,7 @@ func itox(i uint) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Convert IP address to string.
|
// Convert IP address to string.
|
||||||
export func IPToString(p []byte) string {
|
func IPToString(p []byte) string {
|
||||||
// If IPv4, use dotted notation.
|
// If IPv4, use dotted notation.
|
||||||
if p4 := ToIPv4(p); len(p4) == 4 {
|
if p4 := ToIPv4(p); len(p4) == 4 {
|
||||||
return itod(uint(p4[0]))+"."
|
return itod(uint(p4[0]))+"."
|
||||||
@ -228,7 +228,7 @@ func _SimpleMaskLength(mask []byte) int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
export func MaskToString(mask []byte) string {
|
func MaskToString(mask []byte) string {
|
||||||
switch len(mask) {
|
switch len(mask) {
|
||||||
case 4:
|
case 4:
|
||||||
n := _SimpleMaskLength(mask);
|
n := _SimpleMaskLength(mask);
|
||||||
@ -377,7 +377,7 @@ L: for j < IPv6len {
|
|||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
export func ParseIP(s string) []byte {
|
func ParseIP(s string) []byte {
|
||||||
p := _ParseIPv4(s);
|
p := _ParseIPv4(s);
|
||||||
if p != nil {
|
if p != nil {
|
||||||
return p
|
return p
|
||||||
|
@ -43,7 +43,7 @@ var parseiptests = []parseIPTest {
|
|||||||
parseIPTest{"::ffff:4a7d:1363", _IPv4(74, 125, 19, 99)},
|
parseIPTest{"::ffff:4a7d:1363", _IPv4(74, 125, 19, 99)},
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestParseIP(t *testing.T) {
|
func TestParseIP(t *testing.T) {
|
||||||
for i := 0; i < len(parseiptests); i++ {
|
for i := 0; i < len(parseiptests); i++ {
|
||||||
tt := parseiptests[i];
|
tt := parseiptests[i];
|
||||||
if out := ParseIP(tt.in); !isEqual(out, tt.out) {
|
if out := ParseIP(tt.in); !isEqual(out, tt.out) {
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"syscall";
|
"syscall";
|
||||||
)
|
)
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
BadAddress = os.NewError("malformed address");
|
BadAddress = os.NewError("malformed address");
|
||||||
MissingAddress = os.NewError("missing address");
|
MissingAddress = os.NewError("missing address");
|
||||||
UnknownNetwork = os.NewError("unknown network");
|
UnknownNetwork = os.NewError("unknown network");
|
||||||
@ -21,7 +21,7 @@ export var (
|
|||||||
Unknown_SocketFamily = os.NewError("unknown socket family");
|
Unknown_SocketFamily = os.NewError("unknown socket family");
|
||||||
)
|
)
|
||||||
|
|
||||||
export func LookupHost(name string) (name1 string, addrs []string, err *os.Error)
|
func LookupHost(name string) (name1 string, addrs []string, err *os.Error)
|
||||||
|
|
||||||
// Split "host:port" into "host" and "port".
|
// Split "host:port" into "host" and "port".
|
||||||
// Host cannot contain colons unless it is bracketed.
|
// Host cannot contain colons unless it is bracketed.
|
||||||
@ -358,7 +358,7 @@ func _InternetSocket(net, laddr, raddr string, proto int64, mode string) (fd *FD
|
|||||||
|
|
||||||
// TCP connections.
|
// TCP connections.
|
||||||
|
|
||||||
export type ConnTCP struct {
|
type ConnTCP struct {
|
||||||
_ConnBase
|
_ConnBase
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -377,7 +377,7 @@ func _NewConnTCP(fd *FD, raddr string) *ConnTCP {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
export func DialTCP(net, laddr, raddr string) (c *ConnTCP, err *os.Error) {
|
func DialTCP(net, laddr, raddr string) (c *ConnTCP, err *os.Error) {
|
||||||
if raddr == "" {
|
if raddr == "" {
|
||||||
return nil, MissingAddress
|
return nil, MissingAddress
|
||||||
}
|
}
|
||||||
@ -393,7 +393,7 @@ export func DialTCP(net, laddr, raddr string) (c *ConnTCP, err *os.Error) {
|
|||||||
|
|
||||||
// TODO(rsc): UDP headers mode
|
// TODO(rsc): UDP headers mode
|
||||||
|
|
||||||
export type ConnUDP struct {
|
type ConnUDP struct {
|
||||||
_ConnBase
|
_ConnBase
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,7 +404,7 @@ func _NewConnUDP(fd *FD, raddr string) *ConnUDP {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
export func DialUDP(net, laddr, raddr string) (c *ConnUDP, err *os.Error) {
|
func DialUDP(net, laddr, raddr string) (c *ConnUDP, err *os.Error) {
|
||||||
if raddr == "" {
|
if raddr == "" {
|
||||||
return nil, MissingAddress
|
return nil, MissingAddress
|
||||||
}
|
}
|
||||||
@ -422,7 +422,7 @@ export func DialUDP(net, laddr, raddr string) (c *ConnUDP, err *os.Error) {
|
|||||||
// TODO: raw ethernet connections
|
// TODO: raw ethernet connections
|
||||||
|
|
||||||
|
|
||||||
export type Conn interface {
|
type Conn interface {
|
||||||
Read(b []byte) (n int, err *os.Error);
|
Read(b []byte) (n int, err *os.Error);
|
||||||
Write(b []byte) (n int, err *os.Error);
|
Write(b []byte) (n int, err *os.Error);
|
||||||
ReadFrom(b []byte) (n int, addr string, err *os.Error);
|
ReadFrom(b []byte) (n int, addr string, err *os.Error);
|
||||||
@ -450,7 +450,7 @@ export type Conn interface {
|
|||||||
// Eventually, we plan to allow names in addition to IP addresses,
|
// Eventually, we plan to allow names in addition to IP addresses,
|
||||||
// but that requires writing a DNS library.
|
// but that requires writing a DNS library.
|
||||||
|
|
||||||
export func Dial(net, laddr, raddr string) (c Conn, err *os.Error) {
|
func Dial(net, laddr, raddr string) (c Conn, err *os.Error) {
|
||||||
switch net {
|
switch net {
|
||||||
case "tcp", "tcp4", "tcp6":
|
case "tcp", "tcp4", "tcp6":
|
||||||
c, err := DialTCP(net, laddr, raddr);
|
c, err := DialTCP(net, laddr, raddr);
|
||||||
@ -477,17 +477,17 @@ export func Dial(net, laddr, raddr string) (c Conn, err *os.Error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export type Listener interface {
|
type Listener interface {
|
||||||
Accept() (c Conn, raddr string, err *os.Error);
|
Accept() (c Conn, raddr string, err *os.Error);
|
||||||
Close() *os.Error;
|
Close() *os.Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ListenerTCP struct {
|
type ListenerTCP struct {
|
||||||
fd *FD;
|
fd *FD;
|
||||||
laddr string
|
laddr string
|
||||||
}
|
}
|
||||||
|
|
||||||
export func ListenTCP(net, laddr string) (l *ListenerTCP, err *os.Error) {
|
func ListenTCP(net, laddr string) (l *ListenerTCP, err *os.Error) {
|
||||||
fd, e := _InternetSocket(net, laddr, "", syscall.SOCK_STREAM, "listen");
|
fd, e := _InternetSocket(net, laddr, "", syscall.SOCK_STREAM, "listen");
|
||||||
if e != nil {
|
if e != nil {
|
||||||
return nil, e
|
return nil, e
|
||||||
@ -534,7 +534,7 @@ func (l *ListenerTCP) Close() *os.Error {
|
|||||||
return l.fd.Close()
|
return l.fd.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Listen(net, laddr string) (l Listener, err *os.Error) {
|
func Listen(net, laddr string) (l Listener, err *os.Error) {
|
||||||
switch net {
|
switch net {
|
||||||
case "tcp", "tcp4", "tcp6":
|
case "tcp", "tcp4", "tcp6":
|
||||||
l, err := ListenTCP(net, laddr);
|
l, err := ListenTCP(net, laddr);
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"unsafe";
|
"unsafe";
|
||||||
)
|
)
|
||||||
|
|
||||||
export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
|
func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
|
||||||
p = ToIPv4(p);
|
p = ToIPv4(p);
|
||||||
if p == nil || port < 0 || port > 0xFFFF {
|
if p == nil || port < 0 || port > 0xFFFF {
|
||||||
return nil, os.EINVAL
|
return nil, os.EINVAL
|
||||||
@ -24,10 +24,10 @@ export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
|
|||||||
for i := 0; i < IPv4len; i++ {
|
for i := 0; i < IPv4len; i++ {
|
||||||
sa.Addr[i] = p[i]
|
sa.Addr[i] = p[i]
|
||||||
}
|
}
|
||||||
return unsafe.pointer(sa).(*syscall.Sockaddr), nil
|
return unsafe.Pointer(sa).(*syscall.Sockaddr), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
|
func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
|
||||||
p = ToIPv6(p);
|
p = ToIPv6(p);
|
||||||
if p == nil || port < 0 || port > 0xFFFF {
|
if p == nil || port < 0 || port > 0xFFFF {
|
||||||
return nil, os.EINVAL
|
return nil, os.EINVAL
|
||||||
@ -40,21 +40,21 @@ export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
|
|||||||
for i := 0; i < IPv6len; i++ {
|
for i := 0; i < IPv6len; i++ {
|
||||||
sa.Addr[i] = p[i]
|
sa.Addr[i] = p[i]
|
||||||
}
|
}
|
||||||
return unsafe.pointer(sa).(*syscall.Sockaddr), nil
|
return unsafe.Pointer(sa).(*syscall.Sockaddr), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func SockaddrToIP(sa1 *syscall.Sockaddr) (p []byte, port int, err *os.Error) {
|
func SockaddrToIP(sa1 *syscall.Sockaddr) (p []byte, port int, err *os.Error) {
|
||||||
switch sa1.Family {
|
switch sa1.Family {
|
||||||
case syscall.AF_INET:
|
case syscall.AF_INET:
|
||||||
sa := unsafe.pointer(sa1).(*syscall.SockaddrInet4);
|
sa := unsafe.Pointer(sa1).(*syscall.SockaddrInet4);
|
||||||
a := ToIPv6(sa.Addr);
|
a := ToIPv6(sa.Addr);
|
||||||
if a == nil {
|
if a == nil {
|
||||||
return nil, 0, os.EINVAL
|
return nil, 0, os.EINVAL
|
||||||
}
|
}
|
||||||
return a, int(sa.Port[0])<<8 + int(sa.Port[1]), nil;
|
return a, int(sa.Port[0])<<8 + int(sa.Port[1]), nil;
|
||||||
case syscall.AF_INET6:
|
case syscall.AF_INET6:
|
||||||
sa := unsafe.pointer(sa1).(*syscall.SockaddrInet6);
|
sa := unsafe.Pointer(sa1).(*syscall.SockaddrInet6);
|
||||||
a := ToIPv6(sa.Addr);
|
a := ToIPv6(sa.Addr);
|
||||||
if a == nil {
|
if a == nil {
|
||||||
return nil, 0, os.EINVAL
|
return nil, 0, os.EINVAL
|
||||||
@ -66,7 +66,7 @@ export func SockaddrToIP(sa1 *syscall.Sockaddr) (p []byte, port int, err *os.Err
|
|||||||
return nil, 0, nil // not reached
|
return nil, 0, nil // not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
export func ListenBacklog() int64 {
|
func ListenBacklog() int64 {
|
||||||
return syscall.SOMAXCONN
|
return syscall.SOMAXCONN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"unsafe";
|
"unsafe";
|
||||||
)
|
)
|
||||||
|
|
||||||
export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
|
func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
|
||||||
p = ToIPv4(p);
|
p = ToIPv4(p);
|
||||||
if p == nil || port < 0 || port > 0xFFFF {
|
if p == nil || port < 0 || port > 0xFFFF {
|
||||||
return nil, os.EINVAL
|
return nil, os.EINVAL
|
||||||
@ -23,12 +23,12 @@ export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
|
|||||||
for i := 0; i < IPv4len; i++ {
|
for i := 0; i < IPv4len; i++ {
|
||||||
sa.Addr[i] = p[i]
|
sa.Addr[i] = p[i]
|
||||||
}
|
}
|
||||||
return unsafe.pointer(sa).(*syscall.Sockaddr), nil
|
return unsafe.Pointer(sa).(*syscall.Sockaddr), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var _IPv6zero [16]byte;
|
var _IPv6zero [16]byte;
|
||||||
|
|
||||||
export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
|
func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
|
||||||
p = ToIPv6(p);
|
p = ToIPv6(p);
|
||||||
if p == nil || port < 0 || port > 0xFFFF {
|
if p == nil || port < 0 || port > 0xFFFF {
|
||||||
return nil, os.EINVAL
|
return nil, os.EINVAL
|
||||||
@ -48,20 +48,20 @@ export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
|
|||||||
for i := 0; i < IPv6len; i++ {
|
for i := 0; i < IPv6len; i++ {
|
||||||
sa.Addr[i] = p[i]
|
sa.Addr[i] = p[i]
|
||||||
}
|
}
|
||||||
return unsafe.pointer(sa).(*syscall.Sockaddr), nil
|
return unsafe.Pointer(sa).(*syscall.Sockaddr), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
export func SockaddrToIP(sa1 *syscall.Sockaddr) (p []byte, port int, err *os.Error) {
|
func SockaddrToIP(sa1 *syscall.Sockaddr) (p []byte, port int, err *os.Error) {
|
||||||
switch sa1.Family {
|
switch sa1.Family {
|
||||||
case syscall.AF_INET:
|
case syscall.AF_INET:
|
||||||
sa := unsafe.pointer(sa1).(*syscall.SockaddrInet4);
|
sa := unsafe.Pointer(sa1).(*syscall.SockaddrInet4);
|
||||||
a := ToIPv6(sa.Addr);
|
a := ToIPv6(sa.Addr);
|
||||||
if a == nil {
|
if a == nil {
|
||||||
return nil, 0, os.EINVAL
|
return nil, 0, os.EINVAL
|
||||||
}
|
}
|
||||||
return a, int(sa.Port[0])<<8 + int(sa.Port[1]), nil;
|
return a, int(sa.Port[0])<<8 + int(sa.Port[1]), nil;
|
||||||
case syscall.AF_INET6:
|
case syscall.AF_INET6:
|
||||||
sa := unsafe.pointer(sa1).(*syscall.SockaddrInet6);
|
sa := unsafe.Pointer(sa1).(*syscall.SockaddrInet6);
|
||||||
a := ToIPv6(sa.Addr);
|
a := ToIPv6(sa.Addr);
|
||||||
if a == nil {
|
if a == nil {
|
||||||
return nil, 0, os.EINVAL
|
return nil, 0, os.EINVAL
|
||||||
@ -73,7 +73,7 @@ export func SockaddrToIP(sa1 *syscall.Sockaddr) (p []byte, port int, err *os.Err
|
|||||||
return nil, 0, nil // not reached
|
return nil, 0, nil // not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
export func ListenBacklog() int64 {
|
func ListenBacklog() int64 {
|
||||||
// TODO: Read the limit from /proc/sys/net/core/somaxconn,
|
// TODO: Read the limit from /proc/sys/net/core/somaxconn,
|
||||||
// to take advantage of kernels that have raised the limit.
|
// to take advantage of kernels that have raised the limit.
|
||||||
return syscall.SOMAXCONN
|
return syscall.SOMAXCONN
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"testing";
|
"testing";
|
||||||
)
|
)
|
||||||
|
|
||||||
export func TestReadLine(t *testing.T) {
|
func TestReadLine(t *testing.T) {
|
||||||
filename := "/etc/services"; // a nice big file
|
filename := "/etc/services"; // a nice big file
|
||||||
|
|
||||||
fd, err := os.Open(filename, os.O_RDONLY, 0);
|
fd, err := os.Open(filename, os.O_RDONLY, 0);
|
||||||
|
@ -48,7 +48,7 @@ func _ReadServices() {
|
|||||||
file.Close();
|
file.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
export func LookupPort(netw, name string) (port int, ok bool) {
|
func LookupPort(netw, name string) (port int, ok bool) {
|
||||||
once.Do(&_ReadServices);
|
once.Do(&_ReadServices);
|
||||||
|
|
||||||
switch netw {
|
switch netw {
|
||||||
|
@ -48,7 +48,7 @@ var porttests = []portTest {
|
|||||||
portTest{ "tcp", "--badport--", 0, false },
|
portTest{ "tcp", "--badport--", 0, false },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestLookupPort(t *testing.T) {
|
func TestLookupPort(t *testing.T) {
|
||||||
for i := 0; i < len(porttests); i++ {
|
for i := 0; i < len(porttests); i++ {
|
||||||
tt := porttests[i];
|
tt := porttests[i];
|
||||||
if port, ok := LookupPort(tt.netw, tt.name); port != tt.port || ok != tt.ok {
|
if port, ok := LookupPort(tt.netw, tt.name); port != tt.port || ok != tt.ok {
|
||||||
|
@ -75,7 +75,7 @@ func doTest(t *testing.T, network, listenaddr, dialaddr string) {
|
|||||||
<-done; // make sure server stopped
|
<-done; // make sure server stopped
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestTcpServer(t *testing.T) {
|
func TestTcpServer(t *testing.T) {
|
||||||
doTest(t, "tcp", "0.0.0.0:9997", "127.0.0.1:9997");
|
doTest(t, "tcp", "0.0.0.0:9997", "127.0.0.1:9997");
|
||||||
doTest(t, "tcp", "[::]:9997", "[::ffff:127.0.0.1]:9997");
|
doTest(t, "tcp", "[::]:9997", "[::ffff:127.0.0.1]:9997");
|
||||||
doTest(t, "tcp", "[::]:9997", "127.0.0.1:9997");
|
doTest(t, "tcp", "[::]:9997", "127.0.0.1:9997");
|
||||||
|
@ -42,7 +42,7 @@ func server() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Do(f *()) {
|
func Do(f *()) {
|
||||||
// Look for job in map (avoids channel communication).
|
// Look for job in map (avoids channel communication).
|
||||||
// If not there, ask map server to make one.
|
// If not there, ask map server to make one.
|
||||||
// TODO: Uncomment use of jobmap[f] once
|
// TODO: Uncomment use of jobmap[f] once
|
||||||
|
@ -14,7 +14,7 @@ func call() {
|
|||||||
ncall++
|
ncall++
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestOnce(t *testing.T) {
|
func TestOnce(t *testing.T) {
|
||||||
ncall = 0;
|
ncall = 0;
|
||||||
once.Do(&call);
|
once.Do(&call);
|
||||||
if ncall != 1 {
|
if ncall != 1 {
|
||||||
|
@ -9,11 +9,11 @@ package os
|
|||||||
|
|
||||||
import os "os"
|
import os "os"
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
ENOENV = NewError("no such environment variable");
|
ENOENV = NewError("no such environment variable");
|
||||||
)
|
)
|
||||||
|
|
||||||
export func Getenv(s string) (v string, err *Error) {
|
func Getenv(s string) (v string, err *Error) {
|
||||||
n := len(s);
|
n := len(s);
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
return "", EINVAL
|
return "", EINVAL
|
||||||
|
@ -8,7 +8,7 @@ import syscall "syscall"
|
|||||||
|
|
||||||
// Errors are singleton structures. Use the String() method to get their contents --
|
// Errors are singleton structures. Use the String() method to get their contents --
|
||||||
// it handles the nil (no error) case.
|
// it handles the nil (no error) case.
|
||||||
export type Error struct {
|
type Error struct {
|
||||||
s string
|
s string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ var errorStringTab = make(map[string] *Error);
|
|||||||
// errors simultaneously but the consequences are unimportant.
|
// errors simultaneously but the consequences are unimportant.
|
||||||
|
|
||||||
// Allocate an Error object, but if it's been seen before, share that one.
|
// Allocate an Error object, but if it's been seen before, share that one.
|
||||||
export func NewError(s string) *Error {
|
func NewError(s string) *Error {
|
||||||
if s == "" {
|
if s == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -39,7 +39,7 @@ export func NewError(s string) *Error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Allocate an Error objecct, but if it's been seen before, share that one.
|
// Allocate an Error objecct, but if it's been seen before, share that one.
|
||||||
export func ErrnoToError(errno int64) *Error {
|
func ErrnoToError(errno int64) *Error {
|
||||||
if errno == 0 {
|
if errno == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ export func ErrnoToError(errno int64) *Error {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
ENONE = ErrnoToError(syscall.ENONE);
|
ENONE = ErrnoToError(syscall.ENONE);
|
||||||
EPERM = ErrnoToError(syscall.EPERM);
|
EPERM = ErrnoToError(syscall.EPERM);
|
||||||
ENOENT = ErrnoToError(syscall.ENOENT);
|
ENOENT = ErrnoToError(syscall.ENOENT);
|
||||||
|
@ -8,24 +8,24 @@ import syscall "syscall"
|
|||||||
import os "os"
|
import os "os"
|
||||||
|
|
||||||
// FDs are wrappers for file descriptors
|
// FDs are wrappers for file descriptors
|
||||||
export type FD struct {
|
type FD struct {
|
||||||
fd int64
|
fd int64
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewFD(fd int64) *FD {
|
func NewFD(fd int64) *FD {
|
||||||
if fd < 0 {
|
if fd < 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return &FD{fd}
|
return &FD{fd}
|
||||||
}
|
}
|
||||||
|
|
||||||
export var (
|
var (
|
||||||
Stdin = NewFD(0);
|
Stdin = NewFD(0);
|
||||||
Stdout = NewFD(1);
|
Stdout = NewFD(1);
|
||||||
Stderr = NewFD(2);
|
Stderr = NewFD(2);
|
||||||
)
|
)
|
||||||
|
|
||||||
export const (
|
const (
|
||||||
O_RDONLY = syscall.O_RDONLY;
|
O_RDONLY = syscall.O_RDONLY;
|
||||||
O_WRONLY = syscall.O_WRONLY;
|
O_WRONLY = syscall.O_WRONLY;
|
||||||
O_RDWR = syscall.O_RDWR;
|
O_RDWR = syscall.O_RDWR;
|
||||||
@ -39,7 +39,7 @@ export const (
|
|||||||
O_TRUNC = syscall.O_TRUNC;
|
O_TRUNC = syscall.O_TRUNC;
|
||||||
)
|
)
|
||||||
|
|
||||||
export func Open(name string, mode int, flags int) (fd *FD, err *Error) {
|
func Open(name string, mode int, flags int) (fd *FD, err *Error) {
|
||||||
r, e := syscall.Open(name, int64(mode), int64(flags));
|
r, e := syscall.Open(name, int64(mode), int64(flags));
|
||||||
return NewFD(r), ErrnoToError(e)
|
return NewFD(r), ErrnoToError(e)
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ func (fd *FD) WriteString(s string) (ret int, err *Error) {
|
|||||||
return int(r), ErrnoToError(e)
|
return int(r), ErrnoToError(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Pipe() (fd1 *FD, fd2 *FD, err *Error) {
|
func Pipe() (fd1 *FD, fd2 *FD, err *Error) {
|
||||||
var p [2]int64;
|
var p [2]int64;
|
||||||
r, e := syscall.Pipe(&p);
|
r, e := syscall.Pipe(&p);
|
||||||
if e != 0 {
|
if e != 0 {
|
||||||
@ -105,7 +105,7 @@ export func Pipe() (fd1 *FD, fd2 *FD, err *Error) {
|
|||||||
return NewFD(p[0]), NewFD(p[1]), nil
|
return NewFD(p[0]), NewFD(p[1]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Mkdir(name string, perm int) *Error {
|
func Mkdir(name string, perm int) *Error {
|
||||||
r, e := syscall.Mkdir(name, int64(perm));
|
r, e := syscall.Mkdir(name, int64(perm));
|
||||||
return ErrnoToError(e)
|
return ErrnoToError(e)
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
)
|
)
|
||||||
|
|
||||||
export func Time() (sec int64, nsec int64, err *Error) {
|
func Time() (sec int64, nsec int64, err *Error) {
|
||||||
var errno int64;
|
var errno int64;
|
||||||
sec, nsec, errno = syscall.Gettimeofday();
|
sec, nsec, errno = syscall.Gettimeofday();
|
||||||
if errno != 0 {
|
if errno != 0 {
|
||||||
|
@ -44,7 +44,7 @@ func seedrand(x int32) int32 {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Seed(seed int32) {
|
func Seed(seed int32) {
|
||||||
rng_tap = 0;
|
rng_tap = 0;
|
||||||
rng_feed = _LEN-_TAP;
|
rng_feed = _LEN-_TAP;
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ export func Seed(seed int32) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Int63() int64 {
|
func Int63() int64 {
|
||||||
rng_tap--;
|
rng_tap--;
|
||||||
if rng_tap < 0 {
|
if rng_tap < 0 {
|
||||||
rng_tap += _LEN;
|
rng_tap += _LEN;
|
||||||
@ -88,20 +88,20 @@ export func Int63() int64 {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Uint32() uint32 {
|
func Uint32() uint32 {
|
||||||
return uint32(Int63() >> 31);
|
return uint32(Int63() >> 31);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Int31() int32 {
|
func Int31() int32 {
|
||||||
return int32(Int63() >> 32);
|
return int32(Int63() >> 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Int() int {
|
func Int() int {
|
||||||
u := uint(Int63());
|
u := uint(Int63());
|
||||||
return int(u << 1 >> 1); // clear sign bit if int == int32
|
return int(u << 1 >> 1); // clear sign bit if int == int32
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Int63n(n int64) int64 {
|
func Int63n(n int64) int64 {
|
||||||
if n <= 0 {
|
if n <= 0 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -113,15 +113,15 @@ export func Int63n(n int64) int64 {
|
|||||||
return v % n
|
return v % n
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Int31n(n int32) int32 {
|
func Int31n(n int32) int32 {
|
||||||
return int32(Int63n(int64(n)))
|
return int32(Int63n(int64(n)))
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Intn(n int) int {
|
func Intn(n int) int {
|
||||||
return int(Int63n(int64(n)))
|
return int(Int63n(int64(n)))
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Float64() float64 {
|
func Float64() float64 {
|
||||||
x := float64(Int63()) / float64(_MASK);
|
x := float64(Int63()) / float64(_MASK);
|
||||||
for x >= 1 {
|
for x >= 1 {
|
||||||
x = float64(Int63()) / float64(_MASK);
|
x = float64(Int63()) / float64(_MASK);
|
||||||
@ -129,16 +129,16 @@ export func Float64() float64 {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Float32() float32 {
|
func Float32() float32 {
|
||||||
return float32(Float64())
|
return float32(Float64())
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Float() float
|
func Float() float
|
||||||
{
|
{
|
||||||
return float(Float64())
|
return float(Float64())
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Perm(n int) []int {
|
func Perm(n int) []int {
|
||||||
m := make([]int, n);
|
m := make([]int, n);
|
||||||
for i:=0; i<n; i++ {
|
for i:=0; i<n; i++ {
|
||||||
m[i] = i;
|
m[i] = i;
|
||||||
|
@ -87,9 +87,9 @@ func valuedump(s, t string) {
|
|||||||
assert(reflect.ValueToString(v), t);
|
assert(reflect.ValueToString(v), t);
|
||||||
}
|
}
|
||||||
|
|
||||||
export type T struct { a int; b float64; c string; d *int }
|
type T struct { a int; b float64; c string; d *int }
|
||||||
|
|
||||||
export func TestAll(tt *testing.T) { // TODO(r): wrap up better
|
func TestAll(tt *testing.T) { // TODO(r): wrap up better
|
||||||
var s string;
|
var s string;
|
||||||
var t reflect.Type;
|
var t reflect.Type;
|
||||||
|
|
||||||
@ -285,7 +285,7 @@ export func TestAll(tt *testing.T) { // TODO(r): wrap up better
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestInterfaceGet(t *testing.T) {
|
func TestInterfaceGet(t *testing.T) {
|
||||||
var inter struct { e interface{ } };
|
var inter struct { e interface{ } };
|
||||||
inter.e = 123.456;
|
inter.e = 123.456;
|
||||||
v1 := reflect.NewValue(&inter);
|
v1 := reflect.NewValue(&inter);
|
||||||
@ -296,7 +296,7 @@ export func TestInterfaceGet(t *testing.T) {
|
|||||||
assert(v3.Type().String(), "float");
|
assert(v3.Type().String(), "float");
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestCopyArray(t *testing.T) {
|
func TestCopyArray(t *testing.T) {
|
||||||
a := []int{ 1, 2, 3, 4, 10, 9, 8, 7 };
|
a := []int{ 1, 2, 3, 4, 10, 9, 8, 7 };
|
||||||
b := []int{ 11, 22, 33, 44, 1010, 99, 88, 77, 66, 55, 44 };
|
b := []int{ 11, 22, 33, 44, 1010, 99, 88, 77, 66, 55, 44 };
|
||||||
c := []int{ 11, 22, 33, 44, 1010, 99, 88, 77, 66, 55, 44 };
|
c := []int{ 11, 22, 33, 44, 1010, 99, 88, 77, 66, 55, 44 };
|
||||||
@ -331,7 +331,7 @@ export func TestCopyArray(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestBigUnnamedStruct(t *testing.T) {
|
func TestBigUnnamedStruct(t *testing.T) {
|
||||||
b := struct{a,b,c,d int64}{1, 2, 3, 4};
|
b := struct{a,b,c,d int64}{1, 2, 3, 4};
|
||||||
v := NewValue(b);
|
v := NewValue(b);
|
||||||
b1 := v.Interface().(struct{a,b,c,d int64});
|
b1 := v.Interface().(struct{a,b,c,d int64});
|
||||||
@ -343,7 +343,7 @@ export func TestBigUnnamedStruct(t *testing.T) {
|
|||||||
type big struct {
|
type big struct {
|
||||||
a, b, c, d, e int64
|
a, b, c, d, e int64
|
||||||
}
|
}
|
||||||
export func TestBigStruct(t *testing.T) {
|
func TestBigStruct(t *testing.T) {
|
||||||
b := big{1, 2, 3, 4, 5};
|
b := big{1, 2, 3, 4, 5};
|
||||||
v := NewValue(b);
|
v := NewValue(b);
|
||||||
b1 := v.Interface().(big);
|
b1 := v.Interface().(big);
|
||||||
|
@ -12,8 +12,8 @@ import (
|
|||||||
"strconv";
|
"strconv";
|
||||||
)
|
)
|
||||||
|
|
||||||
export func TypeToString(typ Type, expand bool) string
|
func TypeToString(typ Type, expand bool) string
|
||||||
export func ValueToString(val Value) string
|
func ValueToString(val Value) string
|
||||||
|
|
||||||
func doubleQuote(s string) string {
|
func doubleQuote(s string) string {
|
||||||
out := "\"";
|
out := "\"";
|
||||||
@ -62,7 +62,7 @@ func typeFieldsToString(t hasFields, sep string) string {
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TypeToString(typ Type, expand bool) string {
|
func TypeToString(typ Type, expand bool) string {
|
||||||
var str string;
|
var str string;
|
||||||
if name := typ.Name(); !expand && name != "" {
|
if name := typ.Name(); !expand && name != "" {
|
||||||
return name
|
return name
|
||||||
@ -126,7 +126,7 @@ func integer(v int64) string {
|
|||||||
return strconv.Itoa64(v);
|
return strconv.Itoa64(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func ValueToString(val Value) string {
|
func ValueToString(val Value) string {
|
||||||
var str string;
|
var str string;
|
||||||
typ := val.Type();
|
typ := val.Type();
|
||||||
switch(val.Kind()) {
|
switch(val.Kind()) {
|
||||||
|
@ -12,13 +12,13 @@ import (
|
|||||||
"sync";
|
"sync";
|
||||||
)
|
)
|
||||||
|
|
||||||
export type Type interface
|
type Type interface
|
||||||
|
|
||||||
export func ExpandType(name string) Type
|
func ExpandType(name string) Type
|
||||||
|
|
||||||
func typestrings() string // implemented in C; declared here
|
func typestrings() string // implemented in C; declared here
|
||||||
|
|
||||||
export const (
|
const (
|
||||||
MissingKind = iota;
|
MissingKind = iota;
|
||||||
ArrayKind;
|
ArrayKind;
|
||||||
BoolKind;
|
BoolKind;
|
||||||
@ -54,7 +54,7 @@ var interfacesize int
|
|||||||
var missingString = "$missing$" // syntactic name for undefined type names
|
var missingString = "$missing$" // syntactic name for undefined type names
|
||||||
var dotDotDotString = "..."
|
var dotDotDotString = "..."
|
||||||
|
|
||||||
export type Type interface {
|
type Type interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Name() string;
|
Name() string;
|
||||||
String() string;
|
String() string;
|
||||||
@ -102,7 +102,7 @@ func newBasicType(name string, kind int, size int) Type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Prebuilt basic types
|
// Prebuilt basic types
|
||||||
export var (
|
var (
|
||||||
Missing = newBasicType(missingString, MissingKind, 1);
|
Missing = newBasicType(missingString, MissingKind, 1);
|
||||||
DotDotDot = newBasicType(dotDotDotString, DotDotDotKind, 16); // TODO(r): size of interface?
|
DotDotDot = newBasicType(dotDotDotString, DotDotDotKind, 16); // TODO(r): size of interface?
|
||||||
Bool = newBasicType("bool", BoolKind, 1); // TODO: need to know how big a bool is
|
Bool = newBasicType("bool", BoolKind, 1); // TODO: need to know how big a bool is
|
||||||
@ -145,7 +145,7 @@ func (t *stubType) Get() Type {
|
|||||||
|
|
||||||
// -- Pointer
|
// -- Pointer
|
||||||
|
|
||||||
export type PtrType interface {
|
type PtrType interface {
|
||||||
Sub() Type
|
Sub() Type
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,7 +164,7 @@ func (t *ptrTypeStruct) Sub() Type {
|
|||||||
|
|
||||||
// -- Array
|
// -- Array
|
||||||
|
|
||||||
export type ArrayType interface {
|
type ArrayType interface {
|
||||||
Open() bool;
|
Open() bool;
|
||||||
Len() int;
|
Len() int;
|
||||||
Elem() Type;
|
Elem() Type;
|
||||||
@ -203,7 +203,7 @@ func (t *arrayTypeStruct) Elem() Type {
|
|||||||
|
|
||||||
// -- Map
|
// -- Map
|
||||||
|
|
||||||
export type MapType interface {
|
type MapType interface {
|
||||||
Key() Type;
|
Key() Type;
|
||||||
Elem() Type;
|
Elem() Type;
|
||||||
}
|
}
|
||||||
@ -228,12 +228,12 @@ func (t *mapTypeStruct) Elem() Type {
|
|||||||
|
|
||||||
// -- Chan
|
// -- Chan
|
||||||
|
|
||||||
export type ChanType interface {
|
type ChanType interface {
|
||||||
Dir() int;
|
Dir() int;
|
||||||
Elem() Type;
|
Elem() Type;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ( // channel direction
|
const ( // channel direction
|
||||||
SendDir = 1 << iota;
|
SendDir = 1 << iota;
|
||||||
RecvDir;
|
RecvDir;
|
||||||
BothDir = SendDir | RecvDir;
|
BothDir = SendDir | RecvDir;
|
||||||
@ -259,7 +259,7 @@ func (t *chanTypeStruct) Elem() Type {
|
|||||||
|
|
||||||
// -- Struct
|
// -- Struct
|
||||||
|
|
||||||
export type StructType interface {
|
type StructType interface {
|
||||||
Field(int) (name string, typ Type, tag string, offset int);
|
Field(int) (name string, typ Type, tag string, offset int);
|
||||||
Len() int;
|
Len() int;
|
||||||
}
|
}
|
||||||
@ -319,7 +319,7 @@ func (t *structTypeStruct) Len() int {
|
|||||||
|
|
||||||
// -- Interface
|
// -- Interface
|
||||||
|
|
||||||
export type InterfaceType interface {
|
type InterfaceType interface {
|
||||||
Field(int) (name string, typ Type, tag string, offset int);
|
Field(int) (name string, typ Type, tag string, offset int);
|
||||||
Len() int;
|
Len() int;
|
||||||
}
|
}
|
||||||
@ -345,7 +345,7 @@ var nilInterface = newInterfaceTypeStruct("nil", "", make([]structField, 0));
|
|||||||
|
|
||||||
// -- Func
|
// -- Func
|
||||||
|
|
||||||
export type FuncType interface {
|
type FuncType interface {
|
||||||
In() StructType;
|
In() StructType;
|
||||||
Out() StructType;
|
Out() StructType;
|
||||||
}
|
}
|
||||||
@ -842,7 +842,7 @@ func (p *typeParser) Type(name string) *stubType {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func ParseTypeString(name, typestring string) Type {
|
func ParseTypeString(name, typestring string) Type {
|
||||||
if typestring == "" {
|
if typestring == "" {
|
||||||
// If the typestring is empty, it represents (the type of) a nil interface value
|
// If the typestring is empty, it represents (the type of) a nil interface value
|
||||||
return nilInterface
|
return nilInterface
|
||||||
@ -902,7 +902,7 @@ func typeNameToTypeString(name string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Type is known by name. Find (and create if necessary) its real type.
|
// Type is known by name. Find (and create if necessary) its real type.
|
||||||
export func ExpandType(name string) Type {
|
func ExpandType(name string) Type {
|
||||||
lock();
|
lock();
|
||||||
t, ok := types[name];
|
t, ok := types[name];
|
||||||
if ok {
|
if ok {
|
||||||
|
@ -12,13 +12,13 @@ import (
|
|||||||
"unsafe";
|
"unsafe";
|
||||||
)
|
)
|
||||||
|
|
||||||
export type Addr unsafe.pointer
|
type Addr unsafe.Pointer
|
||||||
|
|
||||||
func equalType(a, b Type) bool {
|
func equalType(a, b Type) bool {
|
||||||
return a.String() == b.String()
|
return a.String() == b.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Value interface {
|
type Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
Addr() Addr;
|
Addr() Addr;
|
||||||
@ -65,7 +65,7 @@ type creatorFn *(typ Type, addr Addr) Value
|
|||||||
|
|
||||||
// -- Missing
|
// -- Missing
|
||||||
|
|
||||||
export type MissingValue interface {
|
type MissingValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
Addr() Addr;
|
Addr() Addr;
|
||||||
@ -81,7 +81,7 @@ func missingCreator(typ Type, addr Addr) Value {
|
|||||||
|
|
||||||
// -- Int
|
// -- Int
|
||||||
|
|
||||||
export type IntValue interface {
|
type IntValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() int;
|
Get() int;
|
||||||
Set(int);
|
Set(int);
|
||||||
@ -106,7 +106,7 @@ func (v *intValueStruct) Set(i int) {
|
|||||||
|
|
||||||
// -- Int8
|
// -- Int8
|
||||||
|
|
||||||
export type Int8Value interface {
|
type Int8Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() int8;
|
Get() int8;
|
||||||
Set(int8);
|
Set(int8);
|
||||||
@ -131,7 +131,7 @@ func (v *int8ValueStruct) Set(i int8) {
|
|||||||
|
|
||||||
// -- Int16
|
// -- Int16
|
||||||
|
|
||||||
export type Int16Value interface {
|
type Int16Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() int16;
|
Get() int16;
|
||||||
Set(int16);
|
Set(int16);
|
||||||
@ -156,7 +156,7 @@ func (v *int16ValueStruct) Set(i int16) {
|
|||||||
|
|
||||||
// -- Int32
|
// -- Int32
|
||||||
|
|
||||||
export type Int32Value interface {
|
type Int32Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() int32;
|
Get() int32;
|
||||||
Set(int32);
|
Set(int32);
|
||||||
@ -181,7 +181,7 @@ func (v *int32ValueStruct) Set(i int32) {
|
|||||||
|
|
||||||
// -- Int64
|
// -- Int64
|
||||||
|
|
||||||
export type Int64Value interface {
|
type Int64Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() int64;
|
Get() int64;
|
||||||
Set(int64);
|
Set(int64);
|
||||||
@ -206,7 +206,7 @@ func (v *int64ValueStruct) Set(i int64) {
|
|||||||
|
|
||||||
// -- Uint
|
// -- Uint
|
||||||
|
|
||||||
export type UintValue interface {
|
type UintValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() uint;
|
Get() uint;
|
||||||
Set(uint);
|
Set(uint);
|
||||||
@ -231,7 +231,7 @@ func (v *uintValueStruct) Set(i uint) {
|
|||||||
|
|
||||||
// -- Uint8
|
// -- Uint8
|
||||||
|
|
||||||
export type Uint8Value interface {
|
type Uint8Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() uint8;
|
Get() uint8;
|
||||||
Set(uint8);
|
Set(uint8);
|
||||||
@ -256,7 +256,7 @@ func (v *uint8ValueStruct) Set(i uint8) {
|
|||||||
|
|
||||||
// -- Uint16
|
// -- Uint16
|
||||||
|
|
||||||
export type Uint16Value interface {
|
type Uint16Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() uint16;
|
Get() uint16;
|
||||||
Set(uint16);
|
Set(uint16);
|
||||||
@ -281,7 +281,7 @@ func (v *uint16ValueStruct) Set(i uint16) {
|
|||||||
|
|
||||||
// -- Uint32
|
// -- Uint32
|
||||||
|
|
||||||
export type Uint32Value interface {
|
type Uint32Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() uint32;
|
Get() uint32;
|
||||||
Set(uint32);
|
Set(uint32);
|
||||||
@ -306,7 +306,7 @@ func (v *uint32ValueStruct) Set(i uint32) {
|
|||||||
|
|
||||||
// -- Uint64
|
// -- Uint64
|
||||||
|
|
||||||
export type Uint64Value interface {
|
type Uint64Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() uint64;
|
Get() uint64;
|
||||||
Set(uint64);
|
Set(uint64);
|
||||||
@ -331,7 +331,7 @@ func (v *uint64ValueStruct) Set(i uint64) {
|
|||||||
|
|
||||||
// -- Uintptr
|
// -- Uintptr
|
||||||
|
|
||||||
export type UintptrValue interface {
|
type UintptrValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() uintptr;
|
Get() uintptr;
|
||||||
Set(uintptr);
|
Set(uintptr);
|
||||||
@ -356,7 +356,7 @@ func (v *uintptrValueStruct) Set(i uintptr) {
|
|||||||
|
|
||||||
// -- Float
|
// -- Float
|
||||||
|
|
||||||
export type FloatValue interface {
|
type FloatValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() float;
|
Get() float;
|
||||||
Set(float);
|
Set(float);
|
||||||
@ -381,7 +381,7 @@ func (v *floatValueStruct) Set(f float) {
|
|||||||
|
|
||||||
// -- Float32
|
// -- Float32
|
||||||
|
|
||||||
export type Float32Value interface {
|
type Float32Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() float32;
|
Get() float32;
|
||||||
Set(float32);
|
Set(float32);
|
||||||
@ -406,7 +406,7 @@ func (v *float32ValueStruct) Set(f float32) {
|
|||||||
|
|
||||||
// -- Float64
|
// -- Float64
|
||||||
|
|
||||||
export type Float64Value interface {
|
type Float64Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() float64;
|
Get() float64;
|
||||||
Set(float64);
|
Set(float64);
|
||||||
@ -431,7 +431,7 @@ func (v *float64ValueStruct) Set(f float64) {
|
|||||||
|
|
||||||
// -- Float80
|
// -- Float80
|
||||||
|
|
||||||
export type Float80Value interface {
|
type Float80Value interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() float80;
|
Get() float80;
|
||||||
Set(float80);
|
Set(float80);
|
||||||
@ -459,7 +459,7 @@ func (v *Float80ValueStruct) Set(f float80) {
|
|||||||
|
|
||||||
// -- String
|
// -- String
|
||||||
|
|
||||||
export type StringValue interface {
|
type StringValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() string;
|
Get() string;
|
||||||
Set(string);
|
Set(string);
|
||||||
@ -484,7 +484,7 @@ func (v *stringValueStruct) Set(s string) {
|
|||||||
|
|
||||||
// -- Bool
|
// -- Bool
|
||||||
|
|
||||||
export type BoolValue interface {
|
type BoolValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Get() bool;
|
Get() bool;
|
||||||
Set(bool);
|
Set(bool);
|
||||||
@ -509,7 +509,7 @@ func (v *boolValueStruct) Set(b bool) {
|
|||||||
|
|
||||||
// -- Pointer
|
// -- Pointer
|
||||||
|
|
||||||
export type PtrValue interface {
|
type PtrValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
Sub() Value;
|
Sub() Value;
|
||||||
@ -545,7 +545,7 @@ func ptrCreator(typ Type, addr Addr) Value {
|
|||||||
|
|
||||||
// -- Array
|
// -- Array
|
||||||
|
|
||||||
export type ArrayValue interface {
|
type ArrayValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
Open() bool;
|
Open() bool;
|
||||||
@ -652,7 +652,7 @@ func arrayCreator(typ Type, addr Addr) Value {
|
|||||||
|
|
||||||
// -- Map TODO: finish and test
|
// -- Map TODO: finish and test
|
||||||
|
|
||||||
export type MapValue interface {
|
type MapValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
Len() int;
|
Len() int;
|
||||||
@ -678,7 +678,7 @@ func (v *mapValueStruct) Elem(key Value) Value {
|
|||||||
|
|
||||||
// -- Chan
|
// -- Chan
|
||||||
|
|
||||||
export type ChanValue interface {
|
type ChanValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
}
|
}
|
||||||
@ -693,7 +693,7 @@ func chanCreator(typ Type, addr Addr) Value {
|
|||||||
|
|
||||||
// -- Struct
|
// -- Struct
|
||||||
|
|
||||||
export type StructValue interface {
|
type StructValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
Len() int;
|
Len() int;
|
||||||
@ -728,7 +728,7 @@ func structCreator(typ Type, addr Addr) Value {
|
|||||||
|
|
||||||
// -- Interface
|
// -- Interface
|
||||||
|
|
||||||
export type InterfaceValue interface {
|
type InterfaceValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
Get() interface {};
|
Get() interface {};
|
||||||
@ -748,7 +748,7 @@ func interfaceCreator(typ Type, addr Addr) Value {
|
|||||||
|
|
||||||
// -- Func
|
// -- Func
|
||||||
|
|
||||||
export type FuncValue interface {
|
type FuncValue interface {
|
||||||
Kind() int;
|
Kind() int;
|
||||||
Type() Type;
|
Type() Type;
|
||||||
}
|
}
|
||||||
@ -799,7 +799,7 @@ func newValueAddr(typ Type, addr Addr) Value {
|
|||||||
return c(typ, addr);
|
return c(typ, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func NewInitValue(typ Type) Value {
|
func NewInitValue(typ Type) Value {
|
||||||
// Some values cannot be made this way.
|
// Some values cannot be made this way.
|
||||||
switch typ.Kind() {
|
switch typ.Kind() {
|
||||||
case FuncKind: // must be pointers, at least for now (TODO?)
|
case FuncKind: // must be pointers, at least for now (TODO?)
|
||||||
@ -825,7 +825,7 @@ export func NewInitValue(typ Type) Value {
|
|||||||
uint32 cap; // allocated number of elements
|
uint32 cap; // allocated number of elements
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
export func NewOpenArrayValue(typ ArrayType, len, cap int) ArrayValue {
|
func NewOpenArrayValue(typ ArrayType, len, cap int) ArrayValue {
|
||||||
if !typ.Open() {
|
if !typ.Open() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -843,7 +843,7 @@ export func NewOpenArrayValue(typ ArrayType, len, cap int) ArrayValue {
|
|||||||
return newValueAddr(typ, Addr(array));
|
return newValueAddr(typ, Addr(array));
|
||||||
}
|
}
|
||||||
|
|
||||||
export func CopyArray(dst ArrayValue, src ArrayValue, n int) {
|
func CopyArray(dst ArrayValue, src ArrayValue, n int) {
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -875,7 +875,7 @@ export func CopyArray(dst ArrayValue, src ArrayValue, n int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func NewValue(e interface {}) Value {
|
func NewValue(e interface {}) Value {
|
||||||
value, typestring, indir := sys.Reflect(e);
|
value, typestring, indir := sys.Reflect(e);
|
||||||
typ, ok := typecache[typestring];
|
typ, ok := typecache[typestring];
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -155,19 +155,19 @@ func executeTest(t *testing.T, expr string, str string, match []int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestGoodCompile(t *testing.T) {
|
func TestGoodCompile(t *testing.T) {
|
||||||
for i := 0; i < len(good_re); i++ {
|
for i := 0; i < len(good_re); i++ {
|
||||||
compileTest(t, good_re[i], nil);
|
compileTest(t, good_re[i], nil);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestBadCompile(t *testing.T) {
|
func TestBadCompile(t *testing.T) {
|
||||||
for i := 0; i < len(bad_re); i++ {
|
for i := 0; i < len(bad_re); i++ {
|
||||||
compileTest(t, bad_re[i].re, bad_re[i].err)
|
compileTest(t, bad_re[i].re, bad_re[i].err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestExecute(t *testing.T) {
|
func TestExecute(t *testing.T) {
|
||||||
for i := 0; i < len(matches); i++ {
|
for i := 0; i < len(matches); i++ {
|
||||||
test := &matches[i];
|
test := &matches[i];
|
||||||
executeTest(t, test.re, test.text, test.match)
|
executeTest(t, test.re, test.text, test.match)
|
||||||
@ -185,7 +185,7 @@ func matchTest(t *testing.T, expr string, str string, match []int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestMatch(t *testing.T) {
|
func TestMatch(t *testing.T) {
|
||||||
for i := 0; i < len(matches); i++ {
|
for i := 0; i < len(matches); i++ {
|
||||||
test := &matches[i];
|
test := &matches[i];
|
||||||
matchTest(t, test.re, test.text, test.match)
|
matchTest(t, test.re, test.text, test.match)
|
||||||
@ -210,7 +210,7 @@ func matchStringsTest(t *testing.T, expr string, str string, match []int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestMatchStrings(t *testing.T) {
|
func TestMatchStrings(t *testing.T) {
|
||||||
for i := 0; i < len(matches); i++ {
|
for i := 0; i < len(matches); i++ {
|
||||||
test := &matches[i];
|
test := &matches[i];
|
||||||
matchTest(t, test.re, test.text, test.match)
|
matchTest(t, test.re, test.text, test.match)
|
||||||
@ -227,7 +227,7 @@ func matchFunctionTest(t *testing.T, expr string, str string, match []int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestMatchFunction(t *testing.T) {
|
func TestMatchFunction(t *testing.T) {
|
||||||
for i := 0; i < len(matches); i++ {
|
for i := 0; i < len(matches); i++ {
|
||||||
test := &matches[i];
|
test := &matches[i];
|
||||||
matchFunctionTest(t, test.re, test.text, test.match)
|
matchFunctionTest(t, test.re, test.text, test.match)
|
||||||
|
@ -15,16 +15,16 @@ import (
|
|||||||
var debug = false;
|
var debug = false;
|
||||||
|
|
||||||
|
|
||||||
export var ErrInternal = os.NewError("internal error");
|
var ErrInternal = os.NewError("internal error");
|
||||||
export var ErrUnmatchedLpar = os.NewError("unmatched '('");
|
var ErrUnmatchedLpar = os.NewError("unmatched '('");
|
||||||
export var ErrUnmatchedRpar = os.NewError("unmatched ')'");
|
var ErrUnmatchedRpar = os.NewError("unmatched ')'");
|
||||||
export var ErrUnmatchedLbkt = os.NewError("unmatched '['");
|
var ErrUnmatchedLbkt = os.NewError("unmatched '['");
|
||||||
export var ErrUnmatchedRbkt = os.NewError("unmatched ']'");
|
var ErrUnmatchedRbkt = os.NewError("unmatched ']'");
|
||||||
export var ErrBadRange = os.NewError("bad range in character class");
|
var ErrBadRange = os.NewError("bad range in character class");
|
||||||
export var ErrExtraneousBackslash = os.NewError("extraneous backslash");
|
var ErrExtraneousBackslash = os.NewError("extraneous backslash");
|
||||||
export var ErrBadClosure = os.NewError("repeated closure (**, ++, etc.)");
|
var ErrBadClosure = os.NewError("repeated closure (**, ++, etc.)");
|
||||||
export var ErrBareClosure = os.NewError("closure applies to nothing");
|
var ErrBareClosure = os.NewError("closure applies to nothing");
|
||||||
export var ErrBadBackslash = os.NewError("illegal backslash escape");
|
var ErrBadBackslash = os.NewError("illegal backslash escape");
|
||||||
|
|
||||||
// An instruction executed by the NFA
|
// An instruction executed by the NFA
|
||||||
type instr interface {
|
type instr interface {
|
||||||
@ -582,14 +582,14 @@ func compiler(str string, ch chan *_RE) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Public interface has only execute functionality
|
// Public interface has only execute functionality
|
||||||
export type Regexp interface {
|
type Regexp interface {
|
||||||
Execute(s string) []int;
|
Execute(s string) []int;
|
||||||
Match(s string) bool;
|
Match(s string) bool;
|
||||||
MatchStrings(s string) []string;
|
MatchStrings(s string) []string;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compile in separate goroutine; wait for result
|
// Compile in separate goroutine; wait for result
|
||||||
export func Compile(str string) (regexp Regexp, error *os.Error) {
|
func Compile(str string) (regexp Regexp, error *os.Error) {
|
||||||
ch := make(chan *_RE);
|
ch := make(chan *_RE);
|
||||||
go compiler(str, ch);
|
go compiler(str, ch);
|
||||||
re := <-ch;
|
re := <-ch;
|
||||||
@ -739,7 +739,7 @@ func (re *_RE) MatchStrings(s string) []string {
|
|||||||
|
|
||||||
// Exported function for simple boolean check. Anything more fancy
|
// Exported function for simple boolean check. Anything more fancy
|
||||||
// needs a call to Compile.
|
// needs a call to Compile.
|
||||||
export func Match(pattern string, s string) (matched bool, error *os.Error) {
|
func Match(pattern string, s string) (matched bool, error *os.Error) {
|
||||||
re, err := Compile(pattern);
|
re, err := Compile(pattern);
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package sort
|
package sort
|
||||||
|
|
||||||
export type SortInterface interface {
|
type SortInterface interface {
|
||||||
Len() int;
|
Len() int;
|
||||||
Less(i, j int) bool;
|
Less(i, j int) bool;
|
||||||
Swap(i, j int);
|
Swap(i, j int);
|
||||||
@ -116,12 +116,12 @@ func quickSort(data SortInterface, a, b int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Sort(data SortInterface) {
|
func Sort(data SortInterface) {
|
||||||
quickSort(data, 0, data.Len());
|
quickSort(data, 0, data.Len());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func IsSorted(data SortInterface) bool {
|
func IsSorted(data SortInterface) bool {
|
||||||
n := data.Len();
|
n := data.Len();
|
||||||
for i := n - 1; i > 0; i-- {
|
for i := n - 1; i > 0; i-- {
|
||||||
if data.Less(i, i - 1) {
|
if data.Less(i, i - 1) {
|
||||||
@ -134,21 +134,21 @@ export func IsSorted(data SortInterface) bool {
|
|||||||
|
|
||||||
// Convenience types for common cases
|
// Convenience types for common cases
|
||||||
|
|
||||||
export type IntArray []int
|
type IntArray []int
|
||||||
|
|
||||||
func (p IntArray) Len() int { return len(p); }
|
func (p IntArray) Len() int { return len(p); }
|
||||||
func (p IntArray) Less(i, j int) bool { return p[i] < p[j]; }
|
func (p IntArray) Less(i, j int) bool { return p[i] < p[j]; }
|
||||||
func (p IntArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
func (p IntArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
||||||
|
|
||||||
|
|
||||||
export type FloatArray []float
|
type FloatArray []float
|
||||||
|
|
||||||
func (p FloatArray) Len() int { return len(p); }
|
func (p FloatArray) Len() int { return len(p); }
|
||||||
func (p FloatArray) Less(i, j int) bool { return p[i] < p[j]; }
|
func (p FloatArray) Less(i, j int) bool { return p[i] < p[j]; }
|
||||||
func (p FloatArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
func (p FloatArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
||||||
|
|
||||||
|
|
||||||
export type StringArray []string
|
type StringArray []string
|
||||||
|
|
||||||
func (p StringArray) Len() int { return len(p); }
|
func (p StringArray) Len() int { return len(p); }
|
||||||
func (p StringArray) Less(i, j int) bool { return p[i] < p[j]; }
|
func (p StringArray) Less(i, j int) bool { return p[i] < p[j]; }
|
||||||
@ -157,11 +157,11 @@ func (p StringArray) Swap(i, j int) { p[i], p[j] = p[j], p[i]; }
|
|||||||
|
|
||||||
// Convenience wrappers for common cases
|
// Convenience wrappers for common cases
|
||||||
|
|
||||||
export func SortInts(a []int) { Sort(IntArray(a)); }
|
func SortInts(a []int) { Sort(IntArray(a)); }
|
||||||
export func SortFloats(a []float) { Sort(FloatArray(a)); }
|
func SortFloats(a []float) { Sort(FloatArray(a)); }
|
||||||
export func SortStrings(a []string) { Sort(StringArray(a)); }
|
func SortStrings(a []string) { Sort(StringArray(a)); }
|
||||||
|
|
||||||
|
|
||||||
export func IntsAreSorted(a []int) bool { return IsSorted(IntArray(a)); }
|
func IntsAreSorted(a []int) bool { return IsSorted(IntArray(a)); }
|
||||||
export func FloatsAreSorted(a []float) bool { return IsSorted(FloatArray(a)); }
|
func FloatsAreSorted(a []float) bool { return IsSorted(FloatArray(a)); }
|
||||||
export func StringsAreSorted(a []string) bool { return IsSorted(StringArray(a)); }
|
func StringsAreSorted(a []string) bool { return IsSorted(StringArray(a)); }
|
||||||
|
@ -16,7 +16,7 @@ var ints = [...]int{74, 59, 238, -784, 9845, 959, 905, 0, 0, 42, 7586, -5467984,
|
|||||||
var floats = [...]float{74.3, 59.0, 238.2, -784.0, 2.3, 9845.768, -959.7485, 905, 7.8, 7.8}
|
var floats = [...]float{74.3, 59.0, 238.2, -784.0, 2.3, 9845.768, -959.7485, 905, 7.8, 7.8}
|
||||||
var strings = [...]string{"", "Hello", "foo", "bar", "foo", "f00", "%*&^*&^&", "***"}
|
var strings = [...]string{"", "Hello", "foo", "bar", "foo", "f00", "%*&^*&^&", "***"}
|
||||||
|
|
||||||
export func TestSortIntArray(t *testing.T) {
|
func TestSortIntArray(t *testing.T) {
|
||||||
data := ints;
|
data := ints;
|
||||||
a := IntArray(data);
|
a := IntArray(data);
|
||||||
sort.Sort(a);
|
sort.Sort(a);
|
||||||
@ -26,7 +26,7 @@ export func TestSortIntArray(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSortFloatArray(t *testing.T) {
|
func TestSortFloatArray(t *testing.T) {
|
||||||
data := floats;
|
data := floats;
|
||||||
a := FloatArray(data);
|
a := FloatArray(data);
|
||||||
sort.Sort(a);
|
sort.Sort(a);
|
||||||
@ -36,7 +36,7 @@ export func TestSortFloatArray(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSortStringArray(t *testing.T) {
|
func TestSortStringArray(t *testing.T) {
|
||||||
data := strings;
|
data := strings;
|
||||||
a := StringArray(data);
|
a := StringArray(data);
|
||||||
sort.Sort(a);
|
sort.Sort(a);
|
||||||
@ -46,7 +46,7 @@ export func TestSortStringArray(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSortInts(t *testing.T) {
|
func TestSortInts(t *testing.T) {
|
||||||
data := ints;
|
data := ints;
|
||||||
sort.SortInts(data);
|
sort.SortInts(data);
|
||||||
if !sort.IntsAreSorted(data) {
|
if !sort.IntsAreSorted(data) {
|
||||||
@ -55,7 +55,7 @@ export func TestSortInts(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSortFloats(t *testing.T) {
|
func TestSortFloats(t *testing.T) {
|
||||||
data := floats;
|
data := floats;
|
||||||
sort.SortFloats(data);
|
sort.SortFloats(data);
|
||||||
if !sort.FloatsAreSorted(data) {
|
if !sort.FloatsAreSorted(data) {
|
||||||
@ -64,7 +64,7 @@ export func TestSortFloats(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSortStrings(t *testing.T) {
|
func TestSortStrings(t *testing.T) {
|
||||||
data := strings;
|
data := strings;
|
||||||
sort.SortStrings(data);
|
sort.SortStrings(data);
|
||||||
if !sort.StringsAreSorted(data) {
|
if !sort.StringsAreSorted(data) {
|
||||||
@ -73,7 +73,7 @@ export func TestSortStrings(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSortLarge_Random(t *testing.T) {
|
func TestSortLarge_Random(t *testing.T) {
|
||||||
data := make([]int, 1000000);
|
data := make([]int, 1000000);
|
||||||
for i := 0; i < len(data); i++ {
|
for i := 0; i < len(data); i++ {
|
||||||
data[i] = rand.Intn(100);
|
data[i] = rand.Intn(100);
|
||||||
@ -133,7 +133,7 @@ func lg(n int) int {
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestBentleyMcIlroy(t *testing.T) {
|
func TestBentleyMcIlroy(t *testing.T) {
|
||||||
sizes := []int{100, 1023, 1024, 1025};
|
sizes := []int{100, 1023, 1024, 1025};
|
||||||
dists := []string{"sawtooth", "rand", "stagger", "plateau", "shuffle"};
|
dists := []string{"sawtooth", "rand", "stagger", "plateau", "shuffle"};
|
||||||
modes := []string{"copy", "reverse", "reverse1", "reverse2", "sort", "dither"};
|
modes := []string{"copy", "reverse", "reverse1", "reverse2", "sort", "dither"};
|
||||||
|
@ -318,7 +318,7 @@ func decimalAtof32(neg bool, d *decimal, trunc bool) (f float32, ok bool) {
|
|||||||
// If s is syntactically well-formed but is more than 1/2 ULP
|
// If s is syntactically well-formed but is more than 1/2 ULP
|
||||||
// away from the largest floating point number of the given size,
|
// away from the largest floating point number of the given size,
|
||||||
// returns f = ±Inf, err = os.ERANGE.
|
// returns f = ±Inf, err = os.ERANGE.
|
||||||
export func Atof64(s string) (f float64, err *os.Error) {
|
func Atof64(s string) (f float64, err *os.Error) {
|
||||||
neg, d, trunc, ok := stringToDecimal(s);
|
neg, d, trunc, ok := stringToDecimal(s);
|
||||||
if !ok {
|
if !ok {
|
||||||
return 0, os.EINVAL;
|
return 0, os.EINVAL;
|
||||||
@ -336,7 +336,7 @@ export func Atof64(s string) (f float64, err *os.Error) {
|
|||||||
return f, err
|
return f, err
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Atof32(s string) (f float32, err *os.Error) {
|
func Atof32(s string) (f float32, err *os.Error) {
|
||||||
neg, d, trunc, ok := stringToDecimal(s);
|
neg, d, trunc, ok := stringToDecimal(s);
|
||||||
if !ok {
|
if !ok {
|
||||||
return 0, os.EINVAL;
|
return 0, os.EINVAL;
|
||||||
@ -354,7 +354,7 @@ export func Atof32(s string) (f float32, err *os.Error) {
|
|||||||
return f, err
|
return f, err
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Atof(s string) (f float, err *os.Error) {
|
func Atof(s string) (f float, err *os.Error) {
|
||||||
if FloatSize == 32 {
|
if FloatSize == 32 {
|
||||||
f1, err1 := Atof32(s);
|
f1, err1 := Atof32(s);
|
||||||
return float(f1), err1;
|
return float(f1), err1;
|
||||||
|
@ -124,10 +124,10 @@ func testAtof(t *testing.T, opt bool) {
|
|||||||
strconv.optimize = oldopt;
|
strconv.optimize = oldopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestAtof(t *testing.T) {
|
func TestAtof(t *testing.T) {
|
||||||
testAtof(t, true);
|
testAtof(t, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestAtofSlow(t *testing.T) {
|
func TestAtofSlow(t *testing.T) {
|
||||||
testAtof(t, false);
|
testAtof(t, false);
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ func computeIntsize() uint {
|
|||||||
var intsize = computeIntsize();
|
var intsize = computeIntsize();
|
||||||
|
|
||||||
// Convert decimal string to unsigned integer.
|
// Convert decimal string to unsigned integer.
|
||||||
export func Atoui64(s string) (i uint64, err *os.Error) {
|
func Atoui64(s string) (i uint64, err *os.Error) {
|
||||||
// empty string bad
|
// empty string bad
|
||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return 0, os.EINVAL
|
return 0, os.EINVAL
|
||||||
@ -52,7 +52,7 @@ export func Atoui64(s string) (i uint64, err *os.Error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Convert decimal string to integer.
|
// Convert decimal string to integer.
|
||||||
export func Atoi64(s string) (i int64, err *os.Error) {
|
func Atoi64(s string) (i int64, err *os.Error) {
|
||||||
// empty string bad
|
// empty string bad
|
||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return 0, os.EINVAL
|
return 0, os.EINVAL
|
||||||
@ -85,7 +85,7 @@ export func Atoi64(s string) (i int64, err *os.Error) {
|
|||||||
return n, nil
|
return n, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Atoui(s string) (i uint, err *os.Error) {
|
func Atoui(s string) (i uint, err *os.Error) {
|
||||||
i1, e1 := Atoui64(s);
|
i1, e1 := Atoui64(s);
|
||||||
if e1 != nil && e1 != os.ERANGE {
|
if e1 != nil && e1 != os.ERANGE {
|
||||||
return 0, e1
|
return 0, e1
|
||||||
@ -99,7 +99,7 @@ export func Atoui(s string) (i uint, err *os.Error) {
|
|||||||
return i, nil
|
return i, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Atoi(s string) (i int, err *os.Error) {
|
func Atoi(s string) (i int, err *os.Error) {
|
||||||
i1, e1 := Atoi64(s);
|
i1, e1 := Atoi64(s);
|
||||||
if e1 != nil && e1 != os.ERANGE {
|
if e1 != nil && e1 != os.ERANGE {
|
||||||
return 0, e1
|
return 0, e1
|
||||||
|
@ -103,7 +103,7 @@ var atoi32tests = []atoi32Test {
|
|||||||
atoi32Test{ "-2147483649", -1<<31, os.ERANGE },
|
atoi32Test{ "-2147483649", -1<<31, os.ERANGE },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestAtoui64(t *testing.T) {
|
func TestAtoui64(t *testing.T) {
|
||||||
for i := 0; i < len(atoui64tests); i++ {
|
for i := 0; i < len(atoui64tests); i++ {
|
||||||
test := &atoui64tests[i];
|
test := &atoui64tests[i];
|
||||||
out, err := strconv.Atoui64(test.in);
|
out, err := strconv.Atoui64(test.in);
|
||||||
@ -114,7 +114,7 @@ export func TestAtoui64(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestAtoi64(t *testing.T) {
|
func TestAtoi64(t *testing.T) {
|
||||||
for i := 0; i < len(atoi64test); i++ {
|
for i := 0; i < len(atoi64test); i++ {
|
||||||
test := &atoi64test[i];
|
test := &atoi64test[i];
|
||||||
out, err := strconv.Atoi64(test.in);
|
out, err := strconv.Atoi64(test.in);
|
||||||
@ -125,7 +125,7 @@ export func TestAtoi64(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestAtoui(t *testing.T) {
|
func TestAtoui(t *testing.T) {
|
||||||
switch intsize {
|
switch intsize {
|
||||||
case 32:
|
case 32:
|
||||||
for i := 0; i < len(atoui32tests); i++ {
|
for i := 0; i < len(atoui32tests); i++ {
|
||||||
@ -148,7 +148,7 @@ export func TestAtoui(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestAtoi(t *testing.T) {
|
func TestAtoi(t *testing.T) {
|
||||||
switch intsize {
|
switch intsize {
|
||||||
case 32:
|
case 32:
|
||||||
for i := 0; i < len(atoi32tests); i++ {
|
for i := 0; i < len(atoi32tests); i++ {
|
||||||
|
@ -29,7 +29,7 @@ var shifttests = []shiftTest {
|
|||||||
shiftTest{ 1953125, 9, "1000000000" },
|
shiftTest{ 1953125, 9, "1000000000" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestDecimalShift(t *testing.T) {
|
func TestDecimalShift(t *testing.T) {
|
||||||
ok := true;
|
ok := true;
|
||||||
for i := 0; i < len(shifttests); i++ {
|
for i := 0; i < len(shifttests); i++ {
|
||||||
test := &shifttests[i];
|
test := &shifttests[i];
|
||||||
@ -66,7 +66,7 @@ var roundtests = []roundTest {
|
|||||||
roundTest{ 12999999, 4, "12990000", "13000000", "13000000", 13000000 },
|
roundTest{ 12999999, 4, "12990000", "13000000", "13000000", 13000000 },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestDecimalRound(t *testing.T) {
|
func TestDecimalRound(t *testing.T) {
|
||||||
for i := 0; i < len(roundtests); i++ {
|
for i := 0; i < len(roundtests); i++ {
|
||||||
test := &roundtests[i];
|
test := &roundtests[i];
|
||||||
s := strconv.newDecimal(test.i).RoundDown(test.nd).String();
|
s := strconv.newDecimal(test.i).RoundDown(test.nd).String();
|
||||||
@ -106,7 +106,7 @@ var roundinttests = []roundIntTest {
|
|||||||
roundIntTest{ 1000, 0, 1000 },
|
roundIntTest{ 1000, 0, 1000 },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestDecimalRoundedInteger(t *testing.T) {
|
func TestDecimalRoundedInteger(t *testing.T) {
|
||||||
for i := 0; i < len(roundinttests); i++ {
|
for i := 0; i < len(roundinttests); i++ {
|
||||||
test := roundinttests[i];
|
test := roundinttests[i];
|
||||||
// TODO: should be able to use int := here.
|
// TODO: should be able to use int := here.
|
||||||
|
@ -92,7 +92,7 @@ func myatof32(s string) (f float32, ok bool) {
|
|||||||
return f1, true;
|
return f1, true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestFp(t *testing.T) {
|
func TestFp(t *testing.T) {
|
||||||
fd, err := os.Open("testfp.txt", os.O_RDONLY, 0);
|
fd, err := os.Open("testfp.txt", os.O_RDONLY, 0);
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panicln("testfp: open testfp.txt:", err.String());
|
panicln("testfp: open testfp.txt:", err.String());
|
||||||
|
@ -38,17 +38,17 @@ func floatsize() int {
|
|||||||
}
|
}
|
||||||
return 64;
|
return 64;
|
||||||
}
|
}
|
||||||
export var FloatSize = floatsize()
|
var FloatSize = floatsize()
|
||||||
|
|
||||||
export func Ftoa32(f float32, fmt byte, prec int) string {
|
func Ftoa32(f float32, fmt byte, prec int) string {
|
||||||
return genericFtoa(uint64(sys.Float32bits(f)), fmt, prec, &float32info);
|
return genericFtoa(uint64(sys.Float32bits(f)), fmt, prec, &float32info);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Ftoa64(f float64, fmt byte, prec int) string {
|
func Ftoa64(f float64, fmt byte, prec int) string {
|
||||||
return genericFtoa(sys.Float64bits(f), fmt, prec, &float64info);
|
return genericFtoa(sys.Float64bits(f), fmt, prec, &float64info);
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Ftoa(f float, fmt byte, prec int) string {
|
func Ftoa(f float, fmt byte, prec int) string {
|
||||||
if FloatSize == 32 {
|
if FloatSize == 32 {
|
||||||
return Ftoa32(float32(f), fmt, prec);
|
return Ftoa32(float32(f), fmt, prec);
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ var ftoatests = []ftoaTest {
|
|||||||
ftoaTest{ -1, 'b', -1, "-4503599627370496p-52" },
|
ftoaTest{ -1, 'b', -1, "-4503599627370496p-52" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestFtoa(t *testing.T) {
|
func TestFtoa(t *testing.T) {
|
||||||
if strconv.FloatSize != 32 {
|
if strconv.FloatSize != 32 {
|
||||||
panic("floatsize: ", strconv.FloatSize);
|
panic("floatsize: ", strconv.FloatSize);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package strconv
|
package strconv
|
||||||
|
|
||||||
export func Itoa64(i int64) string {
|
func Itoa64(i int64) string {
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
return "0"
|
return "0"
|
||||||
}
|
}
|
||||||
@ -31,7 +31,7 @@ export func Itoa64(i int64) string {
|
|||||||
return string(b[bp:len(b)])
|
return string(b[bp:len(b)])
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Itoa(i int) string {
|
func Itoa(i int) string {
|
||||||
return Itoa64(int64(i));
|
return Itoa64(int64(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ var itoa64tests = []itoa64Test {
|
|||||||
itoa64Test{ -1<<63, "-9223372036854775808" },
|
itoa64Test{ -1<<63, "-9223372036854775808" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestItoa(t *testing.T) {
|
func TestItoa(t *testing.T) {
|
||||||
for i := 0; i < len(itoa64tests); i++ {
|
for i := 0; i < len(itoa64tests); i++ {
|
||||||
test := itoa64tests[i];
|
test := itoa64tests[i];
|
||||||
s := strconv.Itoa64(test.in);
|
s := strconv.Itoa64(test.in);
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
|
|
||||||
const lowerhex = "0123456789abcdef"
|
const lowerhex = "0123456789abcdef"
|
||||||
|
|
||||||
export func Quote(s string) string {
|
func Quote(s string) string {
|
||||||
t := `"`;
|
t := `"`;
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
switch {
|
switch {
|
||||||
@ -67,7 +67,7 @@ export func Quote(s string) string {
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func CanBackquote(s string) bool {
|
func CanBackquote(s string) bool {
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
if s[i] < ' ' || s[i] == '`' {
|
if s[i] < ' ' || s[i] == '`' {
|
||||||
return false;
|
return false;
|
||||||
|
@ -23,7 +23,7 @@ var quotetests = []quoteTest {
|
|||||||
quoteTest{ "\x04", `"\x04"` },
|
quoteTest{ "\x04", `"\x04"` },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestQuote(t *testing.T) {
|
func TestQuote(t *testing.T) {
|
||||||
for i := 0; i < len(quotetests); i++ {
|
for i := 0; i < len(quotetests); i++ {
|
||||||
tt := quotetests[i];
|
tt := quotetests[i];
|
||||||
if out := Quote(tt.in); out != tt.out {
|
if out := Quote(tt.in); out != tt.out {
|
||||||
@ -78,7 +78,7 @@ var canbackquotetests = []canBackquoteTest {
|
|||||||
canBackquoteTest{ `☺`, true },
|
canBackquoteTest{ `☺`, true },
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestCanBackquote(t *testing.T) {
|
func TestCanBackquote(t *testing.T) {
|
||||||
for i := 0; i < len(canbackquotetests); i++ {
|
for i := 0; i < len(canbackquotetests); i++ {
|
||||||
tt := canbackquotetests[i];
|
tt := canbackquotetests[i];
|
||||||
if out := CanBackquote(tt.in); out != tt.out {
|
if out := CanBackquote(tt.in); out != tt.out {
|
||||||
|
@ -7,7 +7,7 @@ package strings
|
|||||||
import "utf8"
|
import "utf8"
|
||||||
|
|
||||||
// Split string into array of UTF-8 sequences (still strings)
|
// Split string into array of UTF-8 sequences (still strings)
|
||||||
export func Explode(s string) []string {
|
func Explode(s string) []string {
|
||||||
a := make([]string, utf8.RuneCountInString(s, 0, len(s)));
|
a := make([]string, utf8.RuneCountInString(s, 0, len(s)));
|
||||||
j := 0;
|
j := 0;
|
||||||
var size, rune int;
|
var size, rune int;
|
||||||
@ -20,7 +20,7 @@ export func Explode(s string) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Count non-overlapping instances of sep in s.
|
// Count non-overlapping instances of sep in s.
|
||||||
export func Count(s, sep string) int {
|
func Count(s, sep string) int {
|
||||||
if sep == "" {
|
if sep == "" {
|
||||||
return utf8.RuneCountInString(s, 0, len(s))+1
|
return utf8.RuneCountInString(s, 0, len(s))+1
|
||||||
}
|
}
|
||||||
@ -36,7 +36,7 @@ export func Count(s, sep string) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return index of first instance of sep in s.
|
// Return index of first instance of sep in s.
|
||||||
export func Index(s, sep string) int {
|
func Index(s, sep string) int {
|
||||||
if sep == "" {
|
if sep == "" {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -50,7 +50,7 @@ export func Index(s, sep string) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Split string into list of strings at separators
|
// Split string into list of strings at separators
|
||||||
export func Split(s, sep string) []string {
|
func Split(s, sep string) []string {
|
||||||
if sep == "" {
|
if sep == "" {
|
||||||
return Explode(s)
|
return Explode(s)
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ export func Split(s, sep string) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Join list of strings with separators between them.
|
// Join list of strings with separators between them.
|
||||||
export func Join(a []string, sep string) string {
|
func Join(a []string, sep string) string {
|
||||||
if len(a) == 0 {
|
if len(a) == 0 {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ var faces = "☺☻☹";
|
|||||||
var commas = "1,2,3,4";
|
var commas = "1,2,3,4";
|
||||||
var dots = "1....2....3....4";
|
var dots = "1....2....3....4";
|
||||||
|
|
||||||
export type ExplodeTest struct {
|
type ExplodeTest struct {
|
||||||
s string;
|
s string;
|
||||||
a []string;
|
a []string;
|
||||||
}
|
}
|
||||||
@ -34,7 +34,7 @@ var explodetests = []ExplodeTest {
|
|||||||
ExplodeTest{ abcd, []string{"a", "b", "c", "d"} },
|
ExplodeTest{ abcd, []string{"a", "b", "c", "d"} },
|
||||||
ExplodeTest{ faces, []string{"☺", "☻", "☹" } },
|
ExplodeTest{ faces, []string{"☺", "☻", "☹" } },
|
||||||
}
|
}
|
||||||
export func TestExplode(t *testing.T) {
|
func TestExplode(t *testing.T) {
|
||||||
for i := 0; i < len(explodetests); i++ {
|
for i := 0; i < len(explodetests); i++ {
|
||||||
tt := explodetests[i];
|
tt := explodetests[i];
|
||||||
a := Explode(tt.s);
|
a := Explode(tt.s);
|
||||||
@ -49,7 +49,7 @@ export func TestExplode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type SplitTest struct {
|
type SplitTest struct {
|
||||||
s string;
|
s string;
|
||||||
sep string;
|
sep string;
|
||||||
a []string;
|
a []string;
|
||||||
@ -64,7 +64,7 @@ var splittests = []SplitTest {
|
|||||||
SplitTest{ faces, "~", []string{faces} },
|
SplitTest{ faces, "~", []string{faces} },
|
||||||
SplitTest{ faces, "", []string{"☺", "☻", "☹"} },
|
SplitTest{ faces, "", []string{"☺", "☻", "☹"} },
|
||||||
}
|
}
|
||||||
export func TestSplit(t *testing.T) {
|
func TestSplit(t *testing.T) {
|
||||||
for i := 0; i < len(splittests); i++ {
|
for i := 0; i < len(splittests); i++ {
|
||||||
tt := splittests[i];
|
tt := splittests[i];
|
||||||
a := Split(tt.s, tt.sep);
|
a := Split(tt.s, tt.sep);
|
||||||
|
@ -8,7 +8,7 @@ func cas(val *int32, old, new int32) bool
|
|||||||
func semacquire(*int32)
|
func semacquire(*int32)
|
||||||
func semrelease(*int32)
|
func semrelease(*int32)
|
||||||
|
|
||||||
export type Mutex struct {
|
type Mutex struct {
|
||||||
key int32;
|
key int32;
|
||||||
sema int32;
|
sema int32;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
export func HammerSemaphore(s *int32, cdone chan bool) {
|
func HammerSemaphore(s *int32, cdone chan bool) {
|
||||||
for i := 0; i < 1000; i++ {
|
for i := 0; i < 1000; i++ {
|
||||||
semacquire(s);
|
semacquire(s);
|
||||||
semrelease(s);
|
semrelease(s);
|
||||||
@ -19,7 +19,7 @@ export func HammerSemaphore(s *int32, cdone chan bool) {
|
|||||||
cdone <- true;
|
cdone <- true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestSemaphore(t *testing.T) {
|
func TestSemaphore(t *testing.T) {
|
||||||
s := new(int32);
|
s := new(int32);
|
||||||
*s = 1;
|
*s = 1;
|
||||||
c := make(chan bool);
|
c := make(chan bool);
|
||||||
@ -32,7 +32,7 @@ export func TestSemaphore(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export func HammerMutex(m *Mutex, cdone chan bool) {
|
func HammerMutex(m *Mutex, cdone chan bool) {
|
||||||
for i := 0; i < 1000; i++ {
|
for i := 0; i < 1000; i++ {
|
||||||
m.Lock();
|
m.Lock();
|
||||||
m.Unlock();
|
m.Unlock();
|
||||||
@ -40,7 +40,7 @@ export func HammerMutex(m *Mutex, cdone chan bool) {
|
|||||||
cdone <- true;
|
cdone <- true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export func TestMutex(t *testing.T) {
|
func TestMutex(t *testing.T) {
|
||||||
m := new(Mutex);
|
m := new(Mutex);
|
||||||
c := make(chan bool);
|
c := make(chan bool);
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package syscall
|
package syscall
|
||||||
|
|
||||||
export const (
|
const (
|
||||||
ENONE=0;
|
ENONE=0;
|
||||||
EPERM=1;
|
EPERM=1;
|
||||||
ENOENT=2;
|
ENOENT=2;
|
||||||
@ -234,7 +234,7 @@ func str(val int64) string { // do it here rather than with fmt to avoid depend
|
|||||||
return string(buf)[i:len(buf)];
|
return string(buf)[i:len(buf)];
|
||||||
}
|
}
|
||||||
|
|
||||||
export func Errstr(errno int64) string {
|
func Errstr(errno int64) string {
|
||||||
if errno < 0 || errno >= len(error) {
|
if errno < 0 || errno >= len(error) {
|
||||||
return "Error " + str(errno)
|
return "Error " + str(errno)
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user