mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-28 22:19:59 +02:00
resources/page: Use binary search in Pages.Prev/Next if possible
This is obviously much faster for lager data sets: ```bash name old time/op new time/op delta SearchPage/ByWeight-100-4 267ns ± 4% 272ns ± 5% ~ (p=0.457 n=4+4) SearchPage/ByWeight-5000-4 10.8µs ± 3% 1.2µs ± 2% -88.99% (p=0.029 n=4+4) SearchPage/ByWeight-10000-4 21.1µs ± 1% 1.4µs ±11% -93.28% (p=0.029 n=4+4) ``` See #4500
This commit is contained in:
@@ -15,26 +15,21 @@ package page
|
||||
|
||||
// Next returns the next page reletive to the given
|
||||
func (p Pages) Next(cur Page) Page {
|
||||
for x, c := range p {
|
||||
if c.Eq(cur) {
|
||||
if x == 0 {
|
||||
return nil
|
||||
}
|
||||
return p[x-1]
|
||||
}
|
||||
x := searchPage(cur, p)
|
||||
if x <= 0 {
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
return p[x-1]
|
||||
}
|
||||
|
||||
// Prev returns the previous page reletive to the given
|
||||
func (p Pages) Prev(cur Page) Page {
|
||||
for x, c := range p {
|
||||
if c.Eq(cur) {
|
||||
if x < len(p)-1 {
|
||||
return p[x+1]
|
||||
}
|
||||
return nil
|
||||
}
|
||||
x := searchPage(cur, p)
|
||||
|
||||
if x == -1 || len(p)-x < 2 {
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
|
||||
return p[x+1]
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user