xref: /rockchip-linux_mpp/mpp/legacy/rk_list.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka #ifndef __RK_LIST_H__
2*437bfbebSnyanmisaka #define __RK_LIST_H__
3*437bfbebSnyanmisaka 
4*437bfbebSnyanmisaka #include <pthread.h>
5*437bfbebSnyanmisaka #include "rk_type.h"
6*437bfbebSnyanmisaka // desctructor of list node
7*437bfbebSnyanmisaka typedef void *(*node_destructor)(void *);
8*437bfbebSnyanmisaka 
9*437bfbebSnyanmisaka struct rk_list_node;
10*437bfbebSnyanmisaka class rk_list
11*437bfbebSnyanmisaka {
12*437bfbebSnyanmisaka public:
13*437bfbebSnyanmisaka     rk_list(node_destructor func);
14*437bfbebSnyanmisaka     ~rk_list();
15*437bfbebSnyanmisaka 
16*437bfbebSnyanmisaka     // for FIFO or FILO implement
17*437bfbebSnyanmisaka     // adding functions support simple structure like C struct or C++ class pointer,
18*437bfbebSnyanmisaka     // do not support C++ object
19*437bfbebSnyanmisaka     RK_S32 add_at_head(void *data, RK_S32 size);
20*437bfbebSnyanmisaka     RK_S32 add_at_tail(void *data, RK_S32 size);
21*437bfbebSnyanmisaka     // deleting function will copy the stored data to input pointer with size as size
22*437bfbebSnyanmisaka     // if NULL is passed to deleting functions, the node will be delete directly
23*437bfbebSnyanmisaka     RK_S32 del_at_head(void *data, RK_S32 size);
24*437bfbebSnyanmisaka     RK_S32 del_at_tail(void *data, RK_S32 size);
25*437bfbebSnyanmisaka 
26*437bfbebSnyanmisaka     // for status check
27*437bfbebSnyanmisaka     RK_S32 list_is_empty();
28*437bfbebSnyanmisaka     RK_S32 list_size();
29*437bfbebSnyanmisaka 
30*437bfbebSnyanmisaka     // for vector implement - not implemented yet
31*437bfbebSnyanmisaka     // adding function will return a key
32*437bfbebSnyanmisaka     RK_S32 add_by_key(void *data, RK_S32 size, RK_U32 *key);
33*437bfbebSnyanmisaka     RK_S32 del_by_key(void *data, RK_S32 size, RK_U32 key);
34*437bfbebSnyanmisaka     RK_S32 show_by_key(void *data, RK_U32 key);
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka     RK_S32 flush();
37*437bfbebSnyanmisaka 
38*437bfbebSnyanmisaka private:
39*437bfbebSnyanmisaka     pthread_mutex_t         mutex;
40*437bfbebSnyanmisaka     node_destructor         destroy;
41*437bfbebSnyanmisaka     struct rk_list_node    *head;
42*437bfbebSnyanmisaka     RK_S32                 count;
43*437bfbebSnyanmisaka 
44*437bfbebSnyanmisaka     rk_list();
45*437bfbebSnyanmisaka     rk_list(const rk_list &);
46*437bfbebSnyanmisaka     rk_list &operator=(const rk_list &);
47*437bfbebSnyanmisaka };
48*437bfbebSnyanmisaka 
49*437bfbebSnyanmisaka #endif /*__RK_LIST_H__*/
50