Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-10-11 14:55:46 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-10-13 13:36:17 +0300
commit653e6856ea1cfc60cc16733807d23b302dbe4bd5 (patch)
treec77d48f3ec9a07a47ae5a8d53b2cf7b6c459f66f /resources/page/pages_prev_next.go
parentf4f566edf4bd6a590cf9cdbd5cfc0026ecd93b14 (diff)
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
Diffstat (limited to 'resources/page/pages_prev_next.go')
-rw-r--r--resources/page/pages_prev_next.go27
1 files changed, 11 insertions, 16 deletions
diff --git a/resources/page/pages_prev_next.go b/resources/page/pages_prev_next.go
index dd87aa4ce..dd767c667 100644
--- a/resources/page/pages_prev_next.go
+++ b/resources/page/pages_prev_next.go
@@ -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]
+
}