ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.c
(Generate patch)

Comparing libev/ev.c (file contents):
Revision 1.239 by root, Thu May 8 20:52:13 2008 UTC vs.
Revision 1.240 by root, Thu May 8 21:21:41 2008 UTC

776/* towards the root */ 776/* towards the root */
777void inline_speed 777void inline_speed
778upheap (WT *heap, int k) 778upheap (WT *heap, int k)
779{ 779{
780 WT w = heap [k]; 780 WT w = heap [k];
781 ev_tstamp w_at = w->at;
781 782
782 for (;;) 783 for (;;)
783 { 784 {
784 int p = ((k - HEAP0 - 1) / DHEAP) + HEAP0; 785 int p = ((k - HEAP0 - 1) / DHEAP) + HEAP0;
785 786
786 if (p == k || heap [p]->at <= w->at) 787 if (p == k || heap [p]->at <= w_at)
787 break; 788 break;
788 789
789 heap [k] = heap [p]; 790 heap [k] = heap [p];
790 ev_active (heap [k]) = k; 791 ev_active (heap [k]) = k;
791 k = p; 792 k = p;
809 WT *pos = heap + DHEAP * (k - HEAP0) + HEAP0; 810 WT *pos = heap + DHEAP * (k - HEAP0) + HEAP0;
810 811
811 // find minimum child 812 // find minimum child
812 if (expect_true (pos + DHEAP - 1 < E)) 813 if (expect_true (pos + DHEAP - 1 < E))
813 { 814 {
814 /* fast path */
815 (minpos = pos + 0), (minat = (*minpos)->at); 815 /* fast path */ (minpos = pos + 0), (minat = (*minpos)->at);
816 if (pos [1]->at < minat) (minpos = pos + 1), (minat = (*minpos)->at); 816 if (pos [1]->at < minat) (minpos = pos + 1), (minat = (*minpos)->at);
817 if (pos [2]->at < minat) (minpos = pos + 2), (minat = (*minpos)->at); 817 if (pos [2]->at < minat) (minpos = pos + 2), (minat = (*minpos)->at);
818 if (pos [3]->at < minat) (minpos = pos + 3), (minat = (*minpos)->at); 818 if (pos [3]->at < minat) (minpos = pos + 3), (minat = (*minpos)->at);
819 } 819 }
820 else 820 else if (pos < E)
821 { 821 {
822 /* slow path */
823 if (pos >= E)
824 break;
825 (minpos = pos + 0), (minat = (*minpos)->at); 822 /* slow path */ (minpos = pos + 0), (minat = (*minpos)->at);
826 if (pos + 1 < E && pos [1]->at < minat) (minpos = pos + 1), (minat = (*minpos)->at); 823 if (pos + 1 < E && pos [1]->at < minat) (minpos = pos + 1), (minat = (*minpos)->at);
827 if (pos + 2 < E && pos [2]->at < minat) (minpos = pos + 2), (minat = (*minpos)->at); 824 if (pos + 2 < E && pos [2]->at < minat) (minpos = pos + 2), (minat = (*minpos)->at);
828 if (pos + 3 < E && pos [3]->at < minat) (minpos = pos + 3), (minat = (*minpos)->at); 825 if (pos + 3 < E && pos [3]->at < minat) (minpos = pos + 3), (minat = (*minpos)->at);
829 } 826 }
827 else
828 break;
830 829
831 if (w->at <= minat) 830 if (w->at <= minat)
832 break; 831 break;
833 832
834 ev_active (*minpos) = k; 833 ev_active (*minpos) = k;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines