acl/lib_acl/include/stdlib/acl_dlink.h

191 lines
6.5 KiB
C
Raw Normal View History

#ifndef ACL_DLINK_INCLUDE
2014-11-19 00:25:21 +08:00
#define ACL_DLINK_INCLUDE
#ifdef __cplusplus
extern "C" {
#endif
#include "acl_define.h"
#include "acl_array.h"
#include "acl_iterator.h"
/**
*
2014-11-19 00:25:21 +08:00
*/
typedef struct {
acl_int64 begin;
acl_int64 end;
2014-11-19 00:25:21 +08:00
void *pnode;
} ACL_DITEM;
/**
*
2014-11-19 00:25:21 +08:00
*/
typedef struct ACL_DLINK {
ACL_ARRAY *parray;
void *call_back_data;
/* for acl_iterator */
/* 取迭代器头函数 */
2014-11-19 00:25:21 +08:00
void *(*iter_head)(ACL_ITER*, struct ACL_DLINK*);
/* 取迭代器下一个函数 */
2014-11-19 00:25:21 +08:00
void *(*iter_next)(ACL_ITER*, struct ACL_DLINK*);
/* 取迭代器尾函数 */
2014-11-19 00:25:21 +08:00
void *(*iter_tail)(ACL_ITER*, struct ACL_DLINK*);
/* 取迭代器上一个函数 */
2014-11-19 00:25:21 +08:00
void *(*iter_prev)(ACL_ITER*, struct ACL_DLINK*);
} ACL_DLINK;
/**
*
* @param nsize {int}
* @return {ACL_DLINK*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DLINK *acl_dlink_create(int nsize);
/**
*
* @param plink {ACL_DLINK*}
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_dlink_free(ACL_DLINK *plink);
/**
*
* @param plink {ACL_DLINK*}
* @param pitem {ACL_DITEM*}
* @return {ACL_DITEM*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_lookup_by_item(const ACL_DLINK *plink,
ACL_DITEM *pitem);
/**
*
* @param plink {const ACL_DLINK*}
* @param pitem {ACL_DITEM*}
* @param pidx {int*}
* @return {ACL_DITEM*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_lookup2_by_item(const ACL_DLINK *plink,
ACL_DITEM *pitem, int *pidx);
/**
*
* @param plink {const ACL_DLINK*}
* @param n {acl_int64}
* @return {ACL_DITEM*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_lookup(const ACL_DLINK *plink, acl_int64 n);
2014-11-19 00:25:21 +08:00
/**
*
* @param plink {const ACL_DLINK*}
* @param n {acl_int64}
* @param pidx {int*}
* @return {ACL_DITEM*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_lookup2(const ACL_DLINK *plink,
acl_int64 n, int *pidx);
2014-11-19 00:25:21 +08:00
/**
*
* @param plink {const ACL_DLINK*}
* @param begin {acl_int64}
* @param end {acl_int64}
* @param pidx {int*}
* @return {ACL_DITEM*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_lookup_range(const ACL_DLINK *plink,
acl_int64 begin, acl_int64 end, int *pidx);
2014-11-19 00:25:21 +08:00
/**
*
* @param plink {const ACL_DLINK*}
* @param off {acl_int64}
* @param pidx {int*}
* @return {ACL_DITEM*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_lookup_larger(const ACL_DLINK *plink,
acl_int64 off, int *pidx);
2014-11-19 00:25:21 +08:00
/**
*
* @param plink {const ACL_DLINK*}
* @param off {acl_int64}
* @param pidx {int*}
* @return {ACL_DITEM*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_lookup_lower(const ACL_DLINK *plink,
acl_int64 off, int *pidx);
2014-11-19 00:25:21 +08:00
/**
*
* @param plink {ACL_DLINK*}
* @param begin {acl_int64}
* @param end {acl_int64}
* @return {ACL_DITEM*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_insert(ACL_DLINK *plink,
acl_int64 begin, acl_int64 end);
2014-11-19 00:25:21 +08:00
/**
*
* @param plink {ACL_DLINK*}
* @param n {acl_int64}
* @return {int} 0OK-1:
2014-11-19 00:25:21 +08:00
*/
ACL_API int acl_dlink_delete(ACL_DLINK *plink, acl_int64 n);
2014-11-19 00:25:21 +08:00
/**
*
* @param plink {ACL_DLINK*}
* @param pitem {ACL_DITEM*}
* @return {int} 0OK-1:
2014-11-19 00:25:21 +08:00
*/
ACL_API int acl_dlink_delete_by_item(ACL_DLINK *plink, ACL_DITEM *pitem);
/**
* acl_dlink_insert
* @deprecated
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_modify(ACL_DLINK *plink,
acl_int64 begin, acl_int64 end);
2014-11-19 00:25:21 +08:00
/**
* ,
*
* @param plink {ACL_DLINK*}
* @param begin {acl_int64}
* @param end {acl_int64}
* @return {int} 0OK-1:
2014-11-19 00:25:21 +08:00
*/
ACL_API int acl_dlink_delete_range(ACL_DLINK *plink,
acl_int64 begin, acl_int64 end);
2014-11-19 00:25:21 +08:00
/**
*
* @param plink {const ACL_DLINK*}
* @param idx {int}
* @return {ACL_DITEM*} NULL: ; != NULL:
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DITEM *acl_dlink_index(const ACL_DLINK *plink, int idx);
/**
*
* @param plink {const ACL_DLINK*}
* @return {int}
2014-11-19 00:25:21 +08:00
*/
ACL_API int acl_dlink_size(const ACL_DLINK *plink);
/**
* ()
* @param plink {const ACL_DLINK*}
* @return {int} 0OK-1:
2014-11-19 00:25:21 +08:00
*/
ACL_API int acl_dlink_list(const ACL_DLINK *plink);
#ifdef __cplusplus
}
#endif
#endif