diff options
Diffstat (limited to 'round2_32.go')
-rw-r--r-- | round2_32.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/round2_32.go b/round2_32.go new file mode 100644 index 0000000..541b85e --- /dev/null +++ b/round2_32.go @@ -0,0 +1,29 @@ +//go:build !amd64 && !arm64 && !ppc64 && !ppc64le && !s390x +// +build !amd64,!arm64,!ppc64,!ppc64le,!s390x + +package fasthttp + +func roundUpForSliceCap(n int) int { + if n <= 0 { + return 0 + } + + // Above 100MB, we don't round up as the overhead is too large. + if n > 100*1024*1024 { + return n + } + + x := uint32(n - 1) + x |= x >> 1 + x |= x >> 2 + x |= x >> 4 + x |= x >> 8 + x |= x >> 16 + + // Make sure we don't return 0 due to overflow, even on 32 bit systems + if x >= uint32(math.MaxInt32) { + return math.MaxInt32 + } + + return int(x + 1) +} |