首页
社区
课程
招聘
[原创]仿SQL的内存数据库
发表于: 2018-3-12 13:31 2760

[原创]仿SQL的内存数据库

2018-3-12 13:31
2760

写这玩意的初衷是觉得,每次写遍历代码太麻烦了,有没有办法让一条类似SQL的搜索字符串来解决呢,最终出了这么个玩意
 
那么怎么用呢,DEMO在下面  这里贴出大概用法
 
创建一个对象以及他的属性
方式1


CMapStu Stu1; 

Stu1.InsertDword("ID", 0x123); 
Stu1.InsertInt("LV", 30); 
Stu1.InsertInt("COORD", 44); 
Stu1.InsertString("名字", "怪物1"); 


方式2

CLString Data = 
_T("HP=100,LV=30,名字=怪物1,距离=1.326,类型=1\r\n") 
_T("HP=200,LV=10,名字=怪物2,距离=5.526,类型=3\r\n") 
_T("HP=300,LV=30,名字=怪物2,距离=3.426,类型=3\r\n") 
_T("HP=400,LV=40,名字=怪物4,距离=8.326,类型=3\r\n") 
_T("HP=500,LV=30,名字=怪物3,距离=7.626,类型=4\r\n") 
_T("HP=400,LV=20,名字=怪物3,距离=5.326,类型=1\r\n") 
_T("HP=400,LV=10,名字=怪物1,距离=2.326,类型=1\r\n");




方式3


//用构造函数创建单一数据 
CMapStu Data2(_T("LV=1,ID=0x100,坐标X=100.123,名字='小怪2'"));



方式4

//使用字符串数据转换成 单一数据 字符串最好用 ' ' 括起来 
CMapStu Data3; 

Data3.StringToData(_T("LV=1,ID=0x100,坐标X=100.123,名字='小怪3'"));





索引方式

 //SEACH_DATA_FIRST  SEACH_DATA_LAST SEACH_DATA_LIST
 //三种查找函数的区别
 //第一种 搜索到第一个匹配的条件则立即终止
 //第二种 搜索到末尾,然后返回最后一个匹配的条件
 //第三种 搜索到末尾,返回所有的匹配列表
 //注意 如果是匹配最小值或者匹配最大值 则一定要用SEACH_DATA_LAST 例子


 //DWORD类型匹配 ID==0x100 
CMapStu Seacher2 = SEACH_DATA_FIRST(StuData, _T("ID==0x200")); 

printf("查找 条件 ID==0x200 的对象 , DWORD类型查找必须加 0x\r\n"); 
printf(Seacher2.DataToStringA().c_str()); 
printf("\r\n------------------------------------\r\n");



//string类型匹配 
CMapStuList Seacher3 = SEACH_DATA_LIST(StuData, _T("名字=='小怪3'")); 

printf("查找所有 名字=='小怪3' 的对象列表,如果查找的是字符串 必须加 ' ' \r\n"); 
printf(Seacher3.DataToStringA().c_str()); 
printf("\r\n------------------------------------\r\n");






//float类型匹配 
CMapStu Seacher4 = SEACH_DATA_FIRST(StuData, _T("坐标X==100.123")); 

printf("查找 坐标X==100.123 的对象,如果查找的是浮点必须有 . 比如说100.0 \r\n"); 
printf(Seacher4.DataToStringA().c_str()); 
printf("\r\n------------------------------------\r\n");






//最小值匹配类型匹配 匹配ID不为0的最小ID值的对象 
CMapStu Seacher5 = SEACH_DATA_LAST(StuData, _T("ID!=0x0 min hex by ID")); 

printf("查找 匹配ID不为0的最小ID值的对象 \r\n"); 
printf(Seacher5.DataToStringA().c_str()); 
printf("\r\n------------------------------------\r\n");




//查找 等级大于50 并且等级最小的对象 
CMapStu Seacher6 = SEACH_DATA_LAST(StuData, _T("LV>50 min int by LV")); 

printf("查找 等级大于50 并且等级最小的对象 \r\n"); 
printf(Seacher6.DataToStringA().c_str()); 
printf("\r\n------------------------------------\r\n");[/



//查找 坐标<200.123 坐标最大值 
CMapStu Seacher7 = SEACH_DATA_LAST(StuData, _T("坐标<200.123 max float by 坐标")); 

printf("查找 坐标<200.123 坐标最大值 \r\n"); 
printf(Seacher7.DataToStringA().c_str()); 
printf("\r\n------------------------------------\r\n");


+增加where 规则库 支持 整数/小数/十六进制 >= <= = == != <> < >  小数必须带 . 如 19.2 十六进制必须带 0x 支持字符串 == = != <> @= *=
+增加where 规则库 支持 取最大值 最小值功能 支持 整数/小数/十六进制  如 max int by / min hex by / min float by
+增加from  指令 刷新单条数据库  如 from 角色数据
+增加fromlist  指令 刷新多条数据库  如 fromlist 怪物数据
+增加select  指令 选择列表   select *   /  select name  / select name,lv
+增加 数据库操作模式 seacher one / seacher first one /seacher list (对结果保存必须添加操作模式)
+增加print 指令 在控制台或者debugprint中 输出数据
+增加insert 指令,在数据库列表中插入一条数据
+增加set 指令 ,在数据库单条列表中设置数据
+增加排序指令sort min(max) int(float dword hex str) by
 
其中涉及简单的编译原理理论 规则设计模式  后缀表达式


好了 大致介绍到这里,给大家学习下

 
 

 


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 216
活跃值: (250)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持一下.
个人还是习惯用sqlite的内存模式.
2018-3-12 17:14
0
游客
登录 | 注册 方可回帖
返回
//