summaryrefslogtreecommitdiff
path: root/src/math
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2016-11-22 22:46:39 -0500
committerRuss Cox <rsc@golang.org>2016-11-23 04:29:25 +0000
commit3f69822a9a68c76a8562a43f226951c33ed5694a (patch)
treef294deed5892ed6fea73a10fbfc2108bc45c8be8 /src/math
parent2f0a306d283c21b98089706878190c34bd591b9a (diff)
downloadgo-git-3f69822a9a68c76a8562a43f226951c33ed5694a.tar.gz
math/rand: export Source64, mainly for documentation value
There is some code value too: types intending to implement Source64 can write a conversion confirming that. For #4254 and the Go 1.8 release notes. Change-Id: I7fc350a84f3a963e4dab317ad228fa340dda5c66 Reviewed-on: https://go-review.googlesource.com/33456 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/math')
-rw-r--r--src/math/rand/rand.go19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/math/rand/rand.go b/src/math/rand/rand.go
index 0e8e331fd7..9fe1cbd61e 100644
--- a/src/math/rand/rand.go
+++ b/src/math/rand/rand.go
@@ -23,10 +23,13 @@ type Source interface {
Seed(seed int64)
}
-// A source64 represents a Source, which is also a source
-// of uniformly-distributed pseudo-random uint64 values in
-// the range [0, 1<<64).
-type source64 interface {
+// A Source64 is a Source that can also generate
+// uniformly-distributed pseudo-random uint64 values in
+// the range [0, 1<<64) directly.
+// If a Rand r's underlying Source s implements Source64,
+// then r.Uint64 returns the result of one call to s.Uint64
+// instead of making two calls to s.Int63.
+type Source64 interface {
Source
Uint64() uint64
}
@@ -43,7 +46,7 @@ func NewSource(seed int64) Source {
// A Rand is a source of random numbers.
type Rand struct {
src Source
- s64 source64 // non-nil if src is source64
+ s64 Source64 // non-nil if src is source64
// readVal contains remainder of 63-bit integer used for bytes
// generation during most recent Read call.
@@ -58,7 +61,7 @@ type Rand struct {
// New returns a new Rand that uses random values from src
// to generate other random values.
func New(src Source) *Rand {
- s64, _ := src.(source64)
+ s64, _ := src.(Source64)
return &Rand{src: src, s64: s64}
}
@@ -229,7 +232,7 @@ func read(p []byte, int63 func() int64, readVal *int64, readPos *int8) (n int, e
* Top-level convenience functions
*/
-var globalRand = New(&lockedSource{src: NewSource(1).(source64)})
+var globalRand = New(&lockedSource{src: NewSource(1).(Source64)})
// Seed uses the provided seed value to initialize the default Source to a
// deterministic state. If Seed is not called, the generator behaves as
@@ -312,7 +315,7 @@ func ExpFloat64() float64 { return globalRand.ExpFloat64() }
type lockedSource struct {
lk sync.Mutex
- src source64
+ src Source64
}
func (r *lockedSource) Int63() (n int64) {