package statsd

import (
	"math/rand"
	"sync"
)

func shouldSample(rate float64, r *rand.Rand, lock *sync.Mutex) bool {
	if rate >= 1 {
		return true
	}
	// sources created by rand.NewSource() (ie. w.random) are not thread safe.
	// TODO: use defer once the lowest Go version we support is 1.14 (defer
	// has an overhead before that).
	lock.Lock()
	if r.Float64() > rate {
		lock.Unlock()
		return false
	}
	lock.Unlock()
	return true
}

func copySlice(src []string) []string {
	if src == nil {
		return nil
	}

	c := make([]string, len(src))
	copy(c, src)
	return c
}
