utils.go 721 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package main
  2. import (
  3. "math"
  4. "strings"
  5. "unsafe"
  6. )
  7. func maxInt(a, b int) int {
  8. if a > b {
  9. return a
  10. }
  11. return b
  12. }
  13. func minInt(a, b int) int {
  14. if a < b {
  15. return a
  16. }
  17. return b
  18. }
  19. func minNonZeroInt(a, b int) int {
  20. switch {
  21. case a == 0:
  22. return b
  23. case b == 0:
  24. return a
  25. }
  26. return minInt(a, b)
  27. }
  28. func roundToInt(a float64) int {
  29. return int(math.Round(a))
  30. }
  31. func scaleInt(a int, scale float64) int {
  32. if a == 0 {
  33. return 0
  34. }
  35. return roundToInt(float64(a) * scale)
  36. }
  37. func trimAfter(s string, sep byte) string {
  38. i := strings.IndexByte(s, sep)
  39. if i < 0 {
  40. return s
  41. }
  42. return s[:i]
  43. }
  44. func ptrToBytes(ptr unsafe.Pointer, size int) []byte {
  45. return (*[math.MaxInt32]byte)(ptr)[:int(size):int(size)]
  46. }