mpls_refcnt.h

来自「实现了MPLS中的标签分发协议(LDP 3036 )的基本功能」· C头文件 代码 · 共 70 行

H
70
字号
/* *  Copyright (C) James R. Leu 2002 *  jleu@mindspring.com * *  This software is covered under the LGPL, for more *  info check out http://www.gnu.org/copyleft/lgpl.html */#ifndef _MPLS_REFCNT_H_#define _MPLS_REFCNT_H_#include "mpls_assert.h"#define MPLS_REFCNT_FIELD  uint32_t	_refcnt#define MPLS_REFCNT_VALUE(obj) (obj)?((obj)->_refcnt):(-1)#define MPLS_REFCNT_INIT(obj,count) {		\  (obj)->_refcnt = count;			\}#define MPLS_REFCNT_HOLD(obj) {			\  if((obj) != NULL) {				\    (obj)->_refcnt++;				\  }						\}#define MPLS_REFCNT_RELEASE(obj,dstry) {		\  if((obj) != NULL) {				\    (obj)->_refcnt--;				\    if((obj)->_refcnt <= 0) {			\      dstry(obj);				\      obj = NULL;				\    }						\  }						\}#define MPLS_REFCNT_RELEASE2(global,obj,dstry) { \  if((obj) != NULL) {				\    (obj)->_refcnt--;				\    if((obj)->_refcnt <= 0) {			\      dstry(global,obj);			\      obj = NULL;				\    }						\  }						\}#define MPLS_REFCNT_ASSERT(obj,count) {		\  if((obj) != NULL) {				\    MPLS_ASSERT((obj)->_refcnt == count);	\  }						\}#define MPLS_REFCNT_PTR_TYPE  uint32_t*#define MPLS_REFCNT_PTR(obj) (((obj) != NULL)?(&((obj)->_refcnt)):(NULL))#define MPLS_REFCNT_PTR_HOLD(ptr) {		\  if((ptr) != NULL) {				\    ((*(ptr))++);				\  }						\}#define MPLS_REFCNT_PTR_RELEASE(ptr) {		\  if((ptr) != NULL) {				\    ((*(ptr))--);				\  }						\}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?