| 603 | var sortN [1 << sortK]int |
| 604 | |
| 605 | func sortPost(post []postEntry) { |
| 606 | if len(post) > len(sortTmp) { |
| 607 | sortTmp = make([]postEntry, len(post)) |
| 608 | } |
| 609 | tmp := sortTmp[:len(post)] |
| 610 | |
| 611 | const k = sortK |
| 612 | for i := range sortN { |
| 613 | sortN[i] = 0 |
| 614 | } |
| 615 | for _, p := range post { |
| 616 | r := uintptr(p>>32) & (1<<k - 1) |
| 617 | sortN[r]++ |
| 618 | } |
| 619 | tot := 0 |
| 620 | for i, count := range sortN { |
| 621 | sortN[i] = tot |
| 622 | tot += count |
| 623 | } |
| 624 | for _, p := range post { |
| 625 | r := uintptr(p>>32) & (1<<k - 1) |
| 626 | o := sortN[r] |
| 627 | sortN[r]++ |
| 628 | tmp[o] = p |
| 629 | } |
| 630 | tmp, post = post, tmp |
| 631 | |
| 632 | for i := range sortN { |
| 633 | sortN[i] = 0 |
| 634 | } |
| 635 | for _, p := range post { |
| 636 | r := uintptr(p>>(32+k)) & (1<<k - 1) |
| 637 | sortN[r]++ |
| 638 | } |
| 639 | tot = 0 |
| 640 | for i, count := range sortN { |
| 641 | sortN[i] = tot |
| 642 | tot += count |
| 643 | } |
| 644 | for _, p := range post { |
| 645 | r := uintptr(p>>(32+k)) & (1<<k - 1) |
| 646 | o := sortN[r] |
| 647 | sortN[r]++ |
| 648 | tmp[o] = p |
| 649 | } |
| 650 | } |