mirror of
https://github.com/lukaszraczylo/traefikoidc.git
synced 2026-10-14 04:07:46 +00:00
Release 0.7.5 (#70)
* Resolve issue with opaque tokens not being parsed correctly * Increase test coverage * Further improvements to test coverage and code quality * Add new providers. * fixup! Add new providers. * Cleanup. * fixup! Cleanup. * fixup! fixup! Cleanup. * fixup! fixup! fixup! Cleanup. * fixup! fixup! fixup! fixup! Cleanup. * Memory management optimisation 24 bytes per Put < 256-4096 bytes per buffer allocation avoided (10-170x difference) * Pooling cleanup.
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
// Package pool provides centralized memory pool management utilities
|
||||
package pool
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// BuildSessionName efficiently builds session names using pooled string builders
|
||||
func BuildSessionName(baseName string, index int) string {
|
||||
sb := StringBuilder()
|
||||
defer ReturnStringBuilder(sb)
|
||||
|
||||
sb.WriteString(baseName)
|
||||
sb.WriteRune('_')
|
||||
// Efficient int to string conversion
|
||||
if index < 10 {
|
||||
sb.WriteRune('0' + rune(index))
|
||||
} else {
|
||||
sb.WriteString(intToString(index))
|
||||
}
|
||||
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
// BuildCacheKey efficiently builds cache keys using pooled string builders
|
||||
func BuildCacheKey(parts ...string) string {
|
||||
sb := StringBuilder()
|
||||
defer ReturnStringBuilder(sb)
|
||||
|
||||
for i, part := range parts {
|
||||
if i > 0 {
|
||||
sb.WriteRune(':')
|
||||
}
|
||||
sb.WriteString(part)
|
||||
}
|
||||
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
// FormatString efficiently formats a string using a pooled string builder
|
||||
func FormatString(format func(*strings.Builder)) string {
|
||||
sb := StringBuilder()
|
||||
defer ReturnStringBuilder(sb)
|
||||
format(sb)
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
// intToString converts int to string without allocation (for small numbers)
|
||||
func intToString(n int) string {
|
||||
if n < 0 {
|
||||
return "-" + intToString(-n)
|
||||
}
|
||||
if n < 10 {
|
||||
return string(rune('0' + n))
|
||||
}
|
||||
if n < 100 {
|
||||
return string(rune('0'+n/10)) + string(rune('0'+n%10))
|
||||
}
|
||||
// Fall back to standard conversion for larger numbers
|
||||
buf := make([]byte, 0, 20)
|
||||
for n > 0 {
|
||||
buf = append(buf, byte('0'+n%10))
|
||||
n /= 10
|
||||
}
|
||||
// Reverse the buffer
|
||||
for i, j := 0, len(buf)-1; i < j; i, j = i+1, j-1 {
|
||||
buf[i], buf[j] = buf[j], buf[i]
|
||||
}
|
||||
return string(buf)
|
||||
}
|
||||
Reference in New Issue
Block a user