bytes.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // ⚡️ Fiber is an Express inspired web framework written in Go with ☕️
  2. // 🤖 Github Repository: https://github.com/gofiber/fiber
  3. // 📌 API Documentation: https://docs.gofiber.io
  4. package utils
  5. // ToLowerBytes converts ascii slice to lower-case in-place.
  6. func ToLowerBytes(b []byte) []byte {
  7. for i := 0; i < len(b); i++ {
  8. b[i] = toLowerTable[b[i]]
  9. }
  10. return b
  11. }
  12. // ToUpperBytes converts ascii slice to upper-case in-place.
  13. func ToUpperBytes(b []byte) []byte {
  14. for i := 0; i < len(b); i++ {
  15. b[i] = toUpperTable[b[i]]
  16. }
  17. return b
  18. }
  19. // TrimRightBytes is the equivalent of bytes.TrimRight
  20. func TrimRightBytes(b []byte, cutset byte) []byte {
  21. lenStr := len(b)
  22. for lenStr > 0 && b[lenStr-1] == cutset {
  23. lenStr--
  24. }
  25. return b[:lenStr]
  26. }
  27. // TrimLeftBytes is the equivalent of bytes.TrimLeft
  28. func TrimLeftBytes(b []byte, cutset byte) []byte {
  29. lenStr, start := len(b), 0
  30. for start < lenStr && b[start] == cutset {
  31. start++
  32. }
  33. return b[start:]
  34. }
  35. // TrimBytes is the equivalent of bytes.Trim
  36. func TrimBytes(b []byte, cutset byte) []byte {
  37. i, j := 0, len(b)-1
  38. for ; i <= j; i++ {
  39. if b[i] != cutset {
  40. break
  41. }
  42. }
  43. for ; i < j; j-- {
  44. if b[j] != cutset {
  45. break
  46. }
  47. }
  48. return b[i : j+1]
  49. }
  50. // EqualFoldBytes tests ascii slices for equality case-insensitively
  51. func EqualFoldBytes(b, s []byte) bool {
  52. if len(b) != len(s) {
  53. return false
  54. }
  55. for i := len(b) - 1; i >= 0; i-- {
  56. if toUpperTable[b[i]] != toUpperTable[s[i]] {
  57. return false
  58. }
  59. }
  60. return true
  61. }