lib min_heap: add min_heap_empty()/min_heap_empty_inline()
Subsystems (2)
PATCH 1/1 lib min_heap: add min_heap_empty()/min_heap_empty_inline()
Documentation/core-api/min_heap.rst documents min_heap_empty() and min_heap_empty_inline() as part of the Min Heap API, but these functions were never actually implemented. Add them, following the same pattern as the existing min_heap_full()/min_heap_full_inline().
--- include/linux/min_heap.h | 13 +++++++++++++ lib/min_heap.c | 6 ++++++ 2 files changed, 19 insertions(+)
include/linux/min_heap.h +13 -0
@@ -252,6 +252,16 @@ bool __min_heap_full_inline(min_heap_char *heap)#define min_heap_full_inline (_heap) \ __min_heap_full_inline(container_of(&(_heap)->nr, min_heap_char, nr)) +/* Check if the heap is empty. */ +static __always_inline +bool __min_heap_empty_inline(min_heap_char *heap) +{ +return heap->nr ==0 ; +} + +#define min_heap_empty_inline (_heap) \ + __min_heap_empty_inline(container_of(&(_heap)->nr, min_heap_char, nr)) +/* Sift the element at pos down the heap. */ static __always_inline void __min_heap_sift_down_inline(min_heap_char *heap, size_t pos, size_t elem_size,
@@ -431,6 +441,7 @@ bool __min_heap_del_inline(min_heap_char *heap, size_t elem_size, size_t idx,void __min_heap_init (min_heap_char *heap,void *data,size_t size);void *__min_heap_peek (struct min_heap_char *heap);bool __min_heap_full (min_heap_char *heap); +bool __min_heap_empty (min_heap_char *heap);void __min_heap_sift_down (min_heap_char *heap,size_t pos,size_t elem_size,const struct min_heap_callbacks *func,void *args); void __min_heap_sift_up(min_heap_char *heap, size_t elem_size, size_t idx,
@@ -452,6 +463,8 @@ bool __min_heap_del(min_heap_char *heap, size_t elem_size, size_t idx, (__minheap_cast(_heap) __min_heap_peek(container_of(&(_heap)->nr, min_heap_char, nr)))#define min_heap_full (_heap) \ __min_heap_full(container_of(&(_heap)->nr, min_heap_char, nr)) +#define min_heap_empty (_heap) \ + __min_heap_empty(container_of(&(_heap)->nr, min_heap_char, nr))#define min_heap_sift_down (_heap, _pos, _func, _args) \ __min_heap_sift_down(container_of(&(_heap)->nr, min_heap_char, nr), _pos, \ __minheap_obj_size(_heap), _func, _args)
lib/min_heap.c +6 -0
@@ -20,6 +20,12 @@ bool __min_heap_full(min_heap_char *heap) }EXPORT_SYMBOL (__min_heap_full); +bool __min_heap_empty (min_heap_char *heap) +{ +return __min_heap_empty_inline (heap); +} +EXPORT_SYMBOL (__min_heap_empty); +void __min_heap_sift_down (min_heap_char *heap,size_t pos,size_t elem_size,const struct min_heap_callbacks *func,void *args) {
Signature · 1 line
2.43.0
Quoted 3 lines · ColtenOuO
Documentation/core-api/min_heap.rstdocumentsmin_heap_empty()andmin_heap_empty_inline()as part of the Min Heap API, but these functions were never actually implemented. Add them, following the
NAK.
We generally do not introduce new APIs or helper functions that have no in-tree users. Just clean up the doc to reflect reality, rather than adding unused code.
Quoted 3 lines
same pattern as the existing min_heap_full()/min_heap_full_inline().
Signed-off-by ColtenOuO <[email protected]>
Please use your real name for the Sob tag.
Regards,
Kuan-Wei
Quoted 63 lines
--- include/linux/min_heap.h | 13 +++++++++++++ lib/min_heap.c | 6 ++++++ 2 files changed, 19 insertions(+)include/linux/min_heap.h +13
-0@@ -252,6 +252,16 @@ bool __min_heap_full_inline(min_heap_char *heap)#define min_heap_full_inline (_heap) \ __min_heap_full_inline(container_of(&(_heap)->nr, min_heap_char, nr)) +/* Check if the heap is empty. */ +static __always_inline +bool __min_heap_empty_inline(min_heap_char *heap) +{ +return heap->nr ==0 ; +} + +#define min_heap_empty_inline (_heap) \ + __min_heap_empty_inline(container_of(&(_heap)->nr, min_heap_char, nr)) +/* Sift the element at pos down the heap. */ static __always_inline void __min_heap_sift_down_inline(min_heap_char *heap, size_t pos, size_t elem_size,@@ -431,6 +441,7 @@ bool __min_heap_del_inline(min_heap_char *heap, size_t elem_size, size_t idx,void __min_heap_init (min_heap_char *heap,void *data,size_t size);void *__min_heap_peek (struct min_heap_char *heap);bool __min_heap_full (min_heap_char *heap); +bool __min_heap_empty (min_heap_char *heap);void __min_heap_sift_down (min_heap_char *heap,size_t pos,size_t elem_size,const struct min_heap_callbacks *func,void *args); void __min_heap_sift_up(min_heap_char *heap, size_t elem_size, size_t idx,@@ -452,6 +463,8 @@ bool __min_heap_del(min_heap_char *heap, size_t elem_size, size_t idx, (__minheap_cast(_heap) __min_heap_peek(container_of(&(_heap)->nr, min_heap_char, nr)))#define min_heap_full (_heap) \ __min_heap_full(container_of(&(_heap)->nr, min_heap_char, nr)) +#define min_heap_empty (_heap) \ + __min_heap_empty(container_of(&(_heap)->nr, min_heap_char, nr))#define min_heap_sift_down (_heap, _pos, _func, _args) \ __min_heap_sift_down(container_of(&(_heap)->nr, min_heap_char, nr), _pos, \ __minheap_obj_size(_heap), _func, _args)lib/min_heap.c +6
-0@@ -20,6 +20,12 @@ bool __min_heap_full(min_heap_char *heap) }EXPORT_SYMBOL (__min_heap_full); +bool __min_heap_empty (min_heap_char *heap) +{ +return __min_heap_empty_inline (heap); +} +EXPORT_SYMBOL (__min_heap_empty); +void __min_heap_sift_down (min_heap_char *heap,size_t pos,size_t elem_size,const struct min_heap_callbacks *func,void *args) {Signature · 1 line
2.43.0