leakage
This commit is contained in:
119
calib_board/usr/algo/algo_queue.h
Normal file
119
calib_board/usr/algo/algo_queue.h
Normal file
@@ -0,0 +1,119 @@
|
||||
#ifndef _ALGO_QUEUE_H_
|
||||
#define _ALGO_QUEUE_H_
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> */
|
||||
typedef struct QUEUE
|
||||
{
|
||||
void* base; /* <20><><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>ַ */
|
||||
int dsize; /* ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĴ<D8B5>С<EFBFBD><D0A1><EFBFBD>ֽڣ<D6BD> */
|
||||
int capacity; /* <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
int size; /* <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
int head; /* <20><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ԫ<EFBFBD>أ<EFBFBD> */
|
||||
int tail; /* <20><>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD> */
|
||||
} *queue; // <20><><EFBFBD><EFBFBD>queueΪָ<CEAA><D6B8><EFBFBD>ýṹ<C3BD><E1B9B9>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
/**
|
||||
* \brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* \param[in] type: <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* \param[in] capacity: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* \return <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ɵĶ<C9B5><C4B6>ж<EFBFBD><D0B6><EFBFBD>
|
||||
*
|
||||
* \note ʹ<>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \example queue(int, 10) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10<31><30><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
|
||||
*/
|
||||
#define queue(type, capacity) (&(struct QUEUE){(type[capacity]){0},sizeof(type),capacity,0,0,0})
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int queue_push(queue queue, void* data);
|
||||
int queue_push2(queue queue, void* data);
|
||||
int queue_pop(queue queue, void* data);
|
||||
int queue_insert(queue queue, int index, void* data);
|
||||
int queue_erase(queue queue, int index, void* data);
|
||||
void queue_clear(queue queue);
|
||||
void* queue_data(queue queue, int index);
|
||||
|
||||
/**
|
||||
* \brief <20><><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD>õ<EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \param[in] type: Ԫ<><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* \param[in] i: Ԫ<><D4AA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-based<65><64>
|
||||
* \return ָ<><D6B8>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
*
|
||||
* \example queue_at(q, int, 0) = 42; // <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
*/
|
||||
#define queue_at(queue, type, i) (*(type *)queue_data((queue),(i)))
|
||||
|
||||
/**
|
||||
* \brief <20>ڶ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \param[in] data: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ<EFBFBD><D6B7>NULL<4C><4C>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
||||
* \return <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>״̬<D7B4><CCAC>1<EFBFBD>ɹ<EFBFBD>/0ʧ<30>ܣ<EFBFBD>
|
||||
*/
|
||||
#define queue_push_front(queue, data) queue_insert((queue), 0, data)
|
||||
|
||||
/**
|
||||
* \brief <20>ڶ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \param[in] data: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ<EFBFBD><D6B7>NULL<4C><4C>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
||||
* \return <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>״̬<D7B4><CCAC>1<EFBFBD>ɹ<EFBFBD>/0ʧ<30>ܣ<EFBFBD>
|
||||
*/
|
||||
#define queue_push_back(queue, data) queue_push2((queue), data)
|
||||
|
||||
/**
|
||||
* \brief <20>Ӷ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \param[out] data: <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĵ<DDB5>ַ<EFBFBD><D6B7>NULL<4C><4C>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
* \return <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>״̬<D7B4><CCAC>1<EFBFBD>ɹ<EFBFBD>/0ʧ<30>ܣ<EFBFBD>
|
||||
*/
|
||||
#define queue_pop_front(queue, data) queue_pop((queue), data)
|
||||
|
||||
/**
|
||||
* \brief <20>Ӷ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \param[out] data: <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĵ<DDB5>ַ<EFBFBD><D6B7>NULL<4C><4C>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
* \return <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>״̬<D7B4><CCAC>1<EFBFBD>ɹ<EFBFBD>/0ʧ<30>ܣ<EFBFBD>
|
||||
*/
|
||||
#define queue_pop_back(queue, data) queue_erase((queue), (queue)->size - 1, data)
|
||||
|
||||
/**
|
||||
* \brief <20><>ȡ<EFBFBD><C8A1><EFBFBD>е<EFBFBD>ǰԪ<C7B0><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \return <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
#define queue_size(queue) ((queue)->size)
|
||||
|
||||
/**
|
||||
* \brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \return <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
#define queue_capacity(queue) ((queue)->capacity)
|
||||
|
||||
/**
|
||||
* \brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \return 0<><30>ʾ<EFBFBD>ǿգ<C7BF><D5A3><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE>
|
||||
*/
|
||||
#define queue_empty(queue) ((queue)->size == 0)
|
||||
|
||||
/**
|
||||
* \brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
* \param[in] queue: <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
||||
* \return 0<><30>ʾδ<CABE><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
*/
|
||||
#define queue_full(queue) ((queue)->size == (queue)->capacity)
|
||||
|
||||
/**
|
||||
* \brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7>װ
|
||||
* \param[in] type: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>int/float<61>ȣ<EFBFBD>
|
||||
* \param[in] value: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
* \return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
*
|
||||
* \note <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊָ<CEAA><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* \example queue_push(q, literal(int, 42));
|
||||
*/
|
||||
#ifndef literal
|
||||
#define literal(type, value) ((type[1]){value})
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user