使用lua访问STL容器

最近在做项目时,需要在lua脚本中,对c++的一个容器进行遍历。查了半天的资料,没有一劳永逸的办法。只好使用了较鹾的办法。源码列出来了,等着板砖。

 

c++代码:

 

extern "C"

{

  #include "lua.h"

#include "lualib.h"

#include "luaxlib.h"

}

 

#pragma comment(lib,"lua51.lib")

#pragma comment(lib,"lua5.1.lib")

#pragma comment(lib,"tolua++.lib")

 

#define maxnum 10

 

std::vector<int> globalvec;

 

static int getmaxnum(Lua_state*L)

{

  size_t size = globalvec.size();

  lua_pushnumber(L,size);

  return 1;

}

 

static int getvalue(lua_State*L)

{

 size_t index= lua_tonumber(L,-1);

 

 if(index > globalvec.size()

{

  return 0;

}

 

lua_pushnumber(L,globalvec[index]);

return 1;

}

 

static int getvalue(unsigned int index)

{

   if(index >= globalvec.size())

   {

       return 0;

   }

  return globalvec[index];

}

 

static int testc()

{

  unsigned int index =0;

  while(index < globalvec.size())

{

    getval(index++);

}

}

main()

{

 

for(unsigned int i =0;i < maxnum;i ++)

{

   globalvec.push_back(i);

}

  L= lua_open();

 

luaopen_base(L):

luaL_ openlibs(L);

 

luaL_dofile(L,"test.lua");

lua_register(L,"getmaxindex",getmaxindex);

lua_register(L,"getvalue",getvalue);

 

LARGE_INTER startime1,starttime2,endtime1,endtime2;

LARGE_INTER frequency;

 

QueryPerformanceFrequency(&frequency);

QueryPerformanceCounter(&starttime1);

lua_getglobal(L,testfunc);

lua_call(L,0,0);

QueryPerformanceCounter(&endtime1);

 

QueryPerformanceCounter(&starttime2);

testc();

QueryPerformanceCounter(&endtime2);

 

float interval1 = (1000 * endtime1.QuardPart - 1000 *starttime1.QuardPart)/frequency.QuardPart;

 

float interval2 = (1000 * endtime2.QuardPart - 1000 * starttime.QuardPart)/frequencey.QuardPart;

 

lua_close(L):

 

return 1;

}

 

lua脚本:

function testfunc()

local index =0

local maxindex = getmaxindex()

local value =0

while index < maxindex do

   value = getvalue(index)

  index = index+1

  print(value)

end

 

最后测下来lua效果还不错,放心大胆的使用了

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值