gambit/helper/storage.go

64 lines
1.1 KiB
Go

package helper
type CountReward struct {
Counts []int
Rewards []float64
}
func (c *CountReward) ResetTo(size int) {
if len(c.Counts) > size {
c.Counts = make([]int, size)
}
c.Counts = c.Counts[:size]
for idx := range c.Counts {
c.Counts[idx] = 0
}
if len(c.Rewards) > size {
c.Rewards = make([]float64, size)
}
c.Rewards = c.Rewards[:size]
for idx := range c.Rewards {
c.Rewards[idx] = 0
}
}
func (c *CountReward) Count(res *[]int) {
if res == nil {
r := make([]int, len(c.Counts))
res = &r
}
if len(c.Counts) < len(*res) {
*res = append(*res, len(c.Counts)-len(*res))
}
(*res) = (*res)[:len(c.Counts)]
copy(*res, c.Counts)
}
func (c *CountReward) CountSum() (i int) {
for _, v := range c.Counts {
i = i + v
}
return i
}
func (c *CountReward) CountReward() (i int) {
for _, v := range c.Counts {
i = i + v
}
return i
}
func (c *CountReward) Reward(res *[]float64) {
if res == nil {
r := make([]float64, len(c.Rewards))
res = &r
}
if len(c.Rewards) < len(*res) {
*res = append(*res, make([]float64, len(c.Rewards)-len(*res))...)
}
(*res) = (*res)[:len(c.Rewards)]
copy(*res, c.Rewards)
}