Lines Matching refs:h
62 #define heap_swap(h, i, j) swap((h)->data[i], (h)->data[j]) argument
64 #define heap_sift(h, i, cmp) \ argument
68 for (; _j * 2 + 1 < (h)->used; _j = _r) { \
70 if (_r + 1 < (h)->used && \
71 cmp((h)->data[_r], (h)->data[_r + 1])) \
74 if (cmp((h)->data[_r], (h)->data[_j])) \
76 heap_swap(h, _r, _j); \
80 #define heap_sift_down(h, i, cmp) \ argument
84 if (cmp((h)->data[i], (h)->data[p])) \
86 heap_swap(h, i, p); \
91 #define heap_add(h, d, cmp) \ argument
93 bool _r = !heap_full(h); \
95 size_t _i = (h)->used++; \
96 (h)->data[_i] = d; \
98 heap_sift_down(h, _i, cmp); \
99 heap_sift(h, _i, cmp); \
104 #define heap_pop(h, d, cmp) \ argument
106 bool _r = (h)->used; \
108 (d) = (h)->data[0]; \
109 (h)->used--; \
110 heap_swap(h, 0, (h)->used); \
111 heap_sift(h, 0, cmp); \
116 #define heap_peek(h) ((h)->used ? (h)->data[0] : NULL) argument
118 #define heap_full(h) ((h)->used == (h)->size) argument