📄 wd_set.h
字号:
/**
@file wd_set.h
@brief 集合操作.这是对同步和内存分配的简单应用.
在包含之前必须包含DDK相关头文件.(你可以
选择WDM或者IFS或者NDIS相关头文件.)
@author tan wen 谭文
@date 2005-12-20
*/
#ifndef _WD_SET_HEADER_
#define _WD_SET_HEADER_
#include "wdf.h"
#include "wd_mem.h"
#include "wd_syn.h"
typedef struct _wd_set {
wd_void **elems;
wd_spin lock;
wd_ulong size;
} wd_set;
_inline wd_bool wd_set_init(wd_set *myset,wd_ulong size)
{
myset->elems = (wd_void **)wd_malloc(wd_false,
sizeof(wd_void *)*size);
if(myset->elems == NULL)
return wd_false;
myset->size = size;
wd_memzero(myset->elems,sizeof(wd_void *)*size);
wd_spin_init(&myset->lock);
return wd_true;
}
_inline wd_bool wd_set_insert(wd_set * myset,
wd_void *elem)
{
wd_ulong i;
wd_spin_hold(&myset->lock);
for(i=0;i<myset->size;i++)
{
if(myset->elems[i] == 0)
{
myset->elems[i] = elem;
wd_spin_loose(&myset->lock);
return wd_true;
}
else if(myset->elems[i] == elem)
{
wd_spin_loose(&myset->lock);
return wd_true;
}
}
wd_spin_loose(&myset->lock);
return wd_false;
}
_inline wd_bool wd_set_in(wd_set *myset,
wd_void *elem)
{
wd_ulong i;
for(i=0;i<myset->size;i++)
{
if(myset->elems[i] == elem)
return wd_true;
}
return wd_false;
}
_inline wd_void wd_set_delete(wd_set * myset,
wd_void *elem)
{
wd_ulong i;
wd_spin_hold(&myset->lock);
for(i=0;i<myset->size;i++)
{
if(myset->elems[i] == elem)
myset->elems[i] = 0;
}
wd_spin_loose(&myset->lock);
}
#endif //_WD_SET_HEADER_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -