Lines Matching refs:h
60 #define heap_swap(h, i, j) swap((h)->data[i], (h)->data[j]) argument
62 #define heap_sift(h, i, cmp) \ argument
66 for (; _j * 2 + 1 < (h)->used; _j = _r) { \
68 if (_r + 1 < (h)->used && \
69 cmp((h)->data[_r], (h)->data[_r + 1])) \
72 if (cmp((h)->data[_r], (h)->data[_j])) \
74 heap_swap(h, _r, _j); \
78 #define heap_sift_down(h, i, cmp) \ argument
82 if (cmp((h)->data[i], (h)->data[p])) \
84 heap_swap(h, i, p); \
89 #define heap_add(h, d, cmp) \ argument
91 bool _r = !heap_full(h); \
93 size_t _i = (h)->used++; \
94 (h)->data[_i] = d; \
96 heap_sift_down(h, _i, cmp); \
97 heap_sift(h, _i, cmp); \
102 #define heap_pop(h, d, cmp) \ argument
104 bool _r = (h)->used; \
106 (d) = (h)->data[0]; \
107 (h)->used--; \
108 heap_swap(h, 0, (h)->used); \
109 heap_sift(h, 0, cmp); \
114 #define heap_peek(h) ((h)->used ? (h)->data[0] : NULL) argument
116 #define heap_full(h) ((h)->used == (h)->size) argument