WXK
2025-01-22 255c51174a0571340ef470184064a5c75d261d27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
 *******************************************************************************
 * @file     sort_queue.h
 * @create   2023-08-01    
 * @author   Panchip BLE GROUP
 * @note
 * Copyright (c) Shanghai Panchip Microelectronics Co.,Ltd.
 *
 *******************************************************************************
 */
 
#ifndef SORT_QUEUE_H_
#define SORT_QUEUE_H_
 
#include <stdint.h>
#include <stdbool.h>
#include "os/queue.h"
 
struct sort_queue_item_s{
    SLIST_ENTRY(sort_queue_item_s) next;
};
typedef struct sort_queue_item_s sort_queue_item_t;
 
typedef bool (*sort_compare_func_t)(sort_queue_item_t *item0, sort_queue_item_t *item1);
 
typedef struct{
    SLIST_HEAD(, sort_queue_item_s) list;
    sort_compare_func_t              compare_func;
}sort_queue_t;
 
#define SORT_QUEUE_INIT(_name, _compare_func) \
    static sort_queue_t _name = {              \
        .list.slh_first = NULL,                  \
        .compare_func = _compare_func,          \
    }
 
void sort_queue_add(sort_queue_t *sq, sort_queue_item_t *pitem);
void *sort_queue_pop(sort_queue_t *sq);
void *sort_queue_peek(sort_queue_t *sq);
void sort_queue_remove(sort_queue_t *sq, sort_queue_item_t *pitem);
 
uint32_t sort_queue_cnt(sort_queue_t *sq);
 
#define SORT_QUEUE_TEST_EN  0
#if SORT_QUEUE_TEST_EN
void sort_queue_test(void);
#endif
 
#endif /* SORT_QUEUE_H_ */