fLua Lua 增量修改和合并库开源项目

我要开发同款
匿名用户2023年04月13日
33阅读
开发技术C/C++
所属分类开发工具、程序调试工具
授权协议MIT

作品详情

fLua是Lua的增量修改和合并库,同时支持纯Lua和CPP。

使用纯Lua使用

参考pure_lua_test.lua中的示例,运行方式:

luapure_lua_test.lua

原始table为:

localsrc={a=1,b="2",c=3.3,d=true,sub={a=11,b="22",c=33.3,d=true,},array={1,2,3,4},obj_array={{id=1,a=1,b=2},{id=2,a=3,b=4},{id=3,a=5,b=6},{id=4,a=7,b=8},}}

新的table为:

localdst={b="2",c=3.4,d=false,sub={a=12,b="11",},array={2,3},obj_array={{id=2,a=3,b=4},{id=3,a=5,b=6},{id=4,a=70,b=80},}}

计算diff:

localdiff=lua_diff(src,dst,get_id)

注意:这里的get_id,是用来针对obj_array中的每个元素,获取其唯一标识的函数。目的是为了尽量减少大Obj数组的diff差异。这里的示例中,我们假设obj_array中的每个元素都有一个id字段,用来唯一标识该元素,所以get_id函数就是:

localget_id=function(v)returnv.idend

当然,如果obj_array中的元素没有id字段,那么get_id函数就可以返回nil,这样就会对obj_array进行全量diff,这样的话,diff结果就会比较大。

最终的diff结果为:

{['d']=false,['c']=3.4,['sub']={['b']='11',['a']=12,['__diff_lua_del']={[1]='d',[2]='c'}},['obj_array']={[4]={['b']=80,['a']=70},['__diff_lua_array']=true,['__diff_lua_del']={[1]=1}},['array']={[1]=2,[2]=3,['__diff_lua_del']={[1]=3,[2]=4}},['__diff_lua_del']={[1]='a'}}

然后可以将diff应用到原始table上,得到新的table:

localnew_dst=lua_patch(src,diff,get_id)

最终新的table与dst是相等的,注意这里obj_array里的元素顺序不一定是完全一致的

{['b']='2',['d']=false,['c']=3.4,['obj_array']={[1]={['b']=4,['a']=3,['id']=2},[2]={['b']=6,['a']=5,['id']=3},[3]={['b']=80,['a']=70,['id']=4}},['array']={[1]=2,[2]=3},['sub']={['b']='11',['a']=12}}纯CPP使用

参考main.cpp中的pure_cpp_test函数,使用和算法与Lua版本一样。计算diff:

#include"diff_lua.h"autodiff=CalDiff(src,dst,get_id,new_func);

输出结果diff与Lua一致,然后patch:

autonew_dst=PatchDiff(src,diff,get_id,new_func);

最终new_dst与dst是相等的

CPP+Lua混合使用

参考main.cpp中的mix_cpp_test函数和mix_cpp_test.lua,在Lua中调用CPP计算diff:

locallibdifflua=require("libdifflua")localdiff=libdifflua.cal_diff(src,dst,_G.lua_get_id,_G.lua_new_func)

CPP会把Luatable转成内置数据结构,计算diff,然后再转回LuaTable。

Lua调用CPP进行patch:

lualocalnew_dst=libdifflua.patch_diff(src,diff,_G.lua_get_id,_G.lua_new_func)

最终new_dst与dst是相等的

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论