mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	
		
			
	
	
		
			36 lines
		
	
	
		
			740 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			36 lines
		
	
	
		
			740 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | // Package rand is used for concurrency safe random number generator.
 | ||
|  | package rand
 | ||
|  | 
 | ||
|  | import (
 | ||
|  | 	"math/rand"
 | ||
|  | 	"sync"
 | ||
|  | )
 | ||
|  | 
 | ||
|  | // Rand is used for concurrency safe random number generator.
 | ||
|  | type Rand struct {
 | ||
|  | 	m sync.Mutex
 | ||
|  | 	r *rand.Rand
 | ||
|  | }
 | ||
|  | 
 | ||
|  | // New returns a new Rand from seed.
 | ||
|  | func New(seed int64) *Rand {
 | ||
|  | 	return &Rand{r: rand.New(rand.NewSource(seed))}
 | ||
|  | }
 | ||
|  | 
 | ||
|  | // Int returns a non-negative pseudo-random int from the Source in Rand.r.
 | ||
|  | func (r *Rand) Int() int {
 | ||
|  | 	r.m.Lock()
 | ||
|  | 	v := r.r.Int()
 | ||
|  | 	r.m.Unlock()
 | ||
|  | 	return v
 | ||
|  | }
 | ||
|  | 
 | ||
|  | // Perm returns, as a slice of n ints, a pseudo-random permutation of the
 | ||
|  | // integers in the half-open interval [0,n) from the Source in Rand.r.
 | ||
|  | func (r *Rand) Perm(n int) []int {
 | ||
|  | 	r.m.Lock()
 | ||
|  | 	v := r.r.Perm(n)
 | ||
|  | 	r.m.Unlock()
 | ||
|  | 	return v
 | ||
|  | }
 |