mirror of
https://github.com/MontFerret/ferret.git
synced 2025-03-23 21:51:08 +02:00
86 lines
1.3 KiB
Go
86 lines
1.3 KiB
Go
package core
|
|
|
|
import (
|
|
"context"
|
|
"math"
|
|
"math/rand"
|
|
"reflect"
|
|
"time"
|
|
)
|
|
|
|
func IsNil(input interface{}) bool {
|
|
val := reflect.ValueOf(input)
|
|
kind := val.Kind()
|
|
|
|
switch kind {
|
|
case reflect.Ptr,
|
|
reflect.Array,
|
|
reflect.Slice,
|
|
reflect.Map,
|
|
reflect.Func,
|
|
reflect.Interface,
|
|
reflect.Chan:
|
|
return val.IsNil()
|
|
case reflect.Struct,
|
|
reflect.UnsafePointer:
|
|
return false
|
|
case reflect.Invalid:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func NumberBoundaries(input float64) (max float64, min float64) {
|
|
min = input / 2
|
|
max = input * 2
|
|
|
|
return
|
|
}
|
|
|
|
func NumberUpperBoundary(input float64) float64 {
|
|
return input * 2
|
|
}
|
|
|
|
func NumberLowerBoundary(input float64) float64 {
|
|
return input / 2
|
|
}
|
|
|
|
func RandomDefault() float64 {
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
|
return rand.Float64()
|
|
}
|
|
|
|
func Random(max float64, min float64) float64 {
|
|
r := RandomDefault()
|
|
i := r * (max - min + 1)
|
|
out := math.Floor(i) + min
|
|
|
|
return out
|
|
}
|
|
|
|
func Random2(mid float64) float64 {
|
|
max, min := NumberBoundaries(mid)
|
|
|
|
return Random(max, min)
|
|
}
|
|
|
|
func ForEach(ctx context.Context, iter Iterator, predicate func(value Value, key Value) bool) error {
|
|
for {
|
|
value, key, err := iter.Next(ctx)
|
|
|
|
if err != nil {
|
|
if IsNoMoreData(err) {
|
|
return nil
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
if !predicate(value, key) {
|
|
return nil
|
|
}
|
|
}
|
|
}
|