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