… | |
… | |
808 | WT *pos = heap + 4 * (k - HEAP0) + HEAP0; |
808 | WT *pos = heap + 4 * (k - HEAP0) + HEAP0; |
809 | |
809 | |
810 | // find minimum child |
810 | // find minimum child |
811 | if (expect_true (pos +3 < E)) |
811 | if (expect_true (pos +3 < E)) |
812 | { |
812 | { |
|
|
813 | /* fast path */ |
813 | (minpos = pos + 0), (minat = (*minpos)->at); |
814 | (minpos = pos + 0), (minat = (*minpos)->at); |
814 | if (pos [1]->at < minat) (minpos = pos + 1), (minat = (*minpos)->at); |
815 | if (pos [1]->at < minat) (minpos = pos + 1), (minat = (*minpos)->at); |
815 | if (pos [2]->at < minat) (minpos = pos + 2), (minat = (*minpos)->at); |
816 | if (pos [2]->at < minat) (minpos = pos + 2), (minat = (*minpos)->at); |
816 | if (pos [3]->at < minat) (minpos = pos + 3), (minat = (*minpos)->at); |
817 | if (pos [3]->at < minat) (minpos = pos + 3), (minat = (*minpos)->at); |
817 | } |
818 | } |
818 | else |
819 | else |
819 | { |
820 | { |
|
|
821 | /* slow path */ |
820 | if (pos >= E) |
822 | if (pos >= E) |
821 | break; |
823 | break; |
822 | |
|
|
823 | (minpos = pos + 0), (minat = (*minpos)->at); |
824 | (minpos = pos + 0), (minat = (*minpos)->at); |
824 | if (pos + 1 < E && pos [1]->at < minat) (minpos = pos + 1), (minat = (*minpos)->at); |
825 | if (pos + 1 < E && pos [1]->at < minat) (minpos = pos + 1), (minat = (*minpos)->at); |
825 | if (pos + 2 < E && pos [2]->at < minat) (minpos = pos + 2), (minat = (*minpos)->at); |
826 | if (pos + 2 < E && pos [2]->at < minat) (minpos = pos + 2), (minat = (*minpos)->at); |
826 | if (pos + 3 < E && pos [3]->at < minat) (minpos = pos + 3), (minat = (*minpos)->at); |
827 | if (pos + 3 < E && pos [3]->at < minat) (minpos = pos + 3), (minat = (*minpos)->at); |
827 | } |
828 | } |