Skip to contentSkip to conversation

lib min_heap: add min_heap_empty()/min_heap_empty_inline()

PATCH NAK ColtenOuO 2 participants 2 messages Jul 21

Subsystems (2)
lore
Share & tools
lore

ColtenOuO

author
#0 lore raw

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
index 79ddc0adbf2b..931101c29e1d 100644
@@ -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
index 96f01a4c5fb6..9e3978a78a93 100644
@@ -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
maintainer NAK
#1 lore raw
Quoted 3 lines · ColtenOuO

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

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().

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
index 79ddc0adbf2b..931101c29e1d 100644
@@ -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
index 96f01a4c5fb6..9e3978a78a93 100644
@@ -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