C/C++使用Lu脚本字符串键树(二)

2014-11-24 07:33:53 · 作者: · 浏览: 1
(pub_d)); pd->d=1.23; InsertKey("my_k",4,key_no_lock,pk,Del_pub_k,NULL,1,NowKey); //在Lu键树中注册键值 InsertKey("my_d",4,key_no_lock,pd,Del_pub_d,NULL,1,NowKey); //在Lu键树中注册键值 pk=(pub_k *)SearchKey("my_k",4,key_no_lock); //在Lu键树中查找键值 if(pk) printf("%d\n",pk->k); pd=(pub_d *)SearchKey("my_d",4,key_no_lock); //在Lu键树中查找键值 if(pd) printf("%f\n",pd->d); DeleteKey("my_k",4,key_no_lock,NULL,0); //在Lu键树中删除键值 DeleteKey("my_d",4,key_no_lock,NULL,0); //在Lu键树中删除键值 pk=(pub_k *)SearchKey("my_k",4,key_no_lock); //在Lu键树中查找键值 if(!pk) printf("my_k 已销毁!\n"); pd=(pub_d *)SearchKey("my_d",4,key_no_lock); //在Lu键树中查找键值 if(!pd) printf("my_d 已销毁!\n"); LockKey(key_lock,Del_pub_d,OpLock_pub_d); //在Lu键树中加锁键,只能存储pub_d类型 pk=(pub_k *)malloc(sizeof(pub_k)); pk->k=20; pd=(pub_d *)malloc(sizeof(pub_d)); pd->d=5.67; InsertKey("my_k",4,key_lock,pk,Del_pub_k,NULL,1,NowKey);//在Lu键树中注册pub_k类型键值,失败 InsertKey("my_d",4,key_lock,pd,Del_pub_d,NULL,1,NowKey);//在Lu键树中注册pub_d类型键值,成功 pk=(pub_k *)SearchKey("my_k",4,key_lock); //在Lu键树中查找键值,失败 if(pk) printf("%d\n",pk->k); else printf("没有找到 my_k!\n"); pd=(pub_d *)SearchKey("my_d",4,key_lock); //在Lu键树中查找键值,成功 if(pd) printf("%f\n",pd->d); DeleteKey("my_k",4,key_lock,NULL,0); //在Lu键树中删除键值,失败 DeleteKey("my_d",4,key_lock,NULL,0); //在Lu键树中删除键值,成功 pd=(pub_d *)SearchKey("my_d",4,key_lock); //在Lu键树中查找键值 if(!pd) printf("my_d 已销毁!\n"); FreeLu(); //释放Lu }


运行结果:

10
1.230000
my_k 已销毁!
my_d 已销毁!
没有找到 my_k!
5.670000
my_d 已销毁!

代码2:演示指针型私有键

#include 
  
   
#include 
   
     #include "lu32.h" #pragma comment( lib, "lu32.lib" ) typedef struct pri_k //将注册为私有键 { int k; } pri_k; void _stdcall Del_pri_k(void *me) //销毁pri_k的函数 { free(me); } LuData _stdcall OpLock_pri_k(luINT m,LuData *Para,void *hFor,int theOperator) //pri_k的运算符重载函数 { LuData a; a.BType=luStaData_nil; a.VType=luStaData_nil; a.x=0; //不对pri_k类型的对象做运算,总返回nil return a; } #define key_lock (luPriKey_User-20) //将对该私有键加锁 #define imax 10 //私有键值最大数 void main(void) { pri_k *pk[imax],*p_k; int i; luKEY ByteNum; void *NowKey=NULL; //为避免编译器发出警告进行初始化,实际上不需要 if(!InitLu()) return; //初始化Lu LockKey(key_lock,Del_pri_k,OpLock_pri_k); //在Lu键树中加锁键,只能存储pri_k类型 for(i=0;i
    
     k=100+i; ByteNum= i%2   -1 : sizeof(luVOID); //i为偶数时注册为指针键,否则注册为非指针键 InsertKey((char *)&(pk[i]),ByteNum,key_lock,pk[i],Del_pri_k,NULL,1,NowKey); //在Lu键树中注册键值 } printf("--- 保存在Lu键树中的数据!---\n\n"); for(i=0;i
     
      k); } printf("\n--- 删除约1/3数据!---\n\n"); for(i=0;i
      
       k); else printf("没有找到第 %d 个数据!\n",i); } printf("\n--- 运行垃圾收集器后数据!---\n\n"); GC(0); //垃圾收集 for(i=0;i
       
        k); else printf("没有找到第 %d 个数据!\n",i); } printf("\n--- 解锁键并全部销毁数据!---\n\n"); LockKey(key_lock,NULL,OpLock_pri_k); //在Lu键树中解锁键 for(i=0;i
        
         k); else printf("没有找到第 %d 个数据!\n",i); } FreeLu(); //释放Lu }
        
       
      
     
    
   
  


运行结果:

--- 保存在Lu键树中的数据!---

100
101
102
103
104
105
106
107
108
109

--- 删除约1/3数据!---

没有找到第 0 个数据!
没有找到第 1 个数据!
没有找到第 2 个数据!
103
104
105
106
107
108
109

--- 运行垃圾收集器后数据!---

没有找到第 0 个数据!
没有找到第 1 个数据!
没有找到第 2 个数据!
没有找到第 3 个数据!
104
没有找到第 5 个数据!
106
没有找到第 7 个数据!
108
没有找到第 9 个数据!

--- 解锁键并全部销毁数据!---

没有找到第 0 个数据!
没有找到第 1 个数据!
没有找到第 2 个数据!
没有找到第 3 个数据!
没有找到第 4 个数据!
没有找到第 5 个数据!
没有找到第 6 个数据!
没有找到第 7 个数据!
没有找到第 8 个数据!
没有找到第 9 个数据!

代码3:演示非指针型私有键

将代码2中的

#define key_lock (luPriKey_User-20) //将对该私有键加锁

改为:

#define key_lock (luPoiKey_User-20) //将对该私有键加锁

然后编译运行即可。

运行结果:

--- 保存在Lu键树中的数据!---

100
102
104
106
108

--- 删除约1/3数据!---

没有找到第 0 个数据!