diff options
author | chai <chaifix@163.com> | 2019-03-20 22:43:25 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-03-20 22:43:25 +0800 |
commit | 82956beb1fe17e1226327638c8ab22b5f5adfc1d (patch) | |
tree | b47464697174d5f9db4c8c9ab4a25cc384927d97 /source/libs/asura-lib-utils/filesystem/binding/data_buffer.binding.cpp | |
parent | 1497dccd63a84b7ee2b229b1ad9c5c02718f2a78 (diff) |
*misc
Diffstat (limited to 'source/libs/asura-lib-utils/filesystem/binding/data_buffer.binding.cpp')
-rw-r--r-- | source/libs/asura-lib-utils/filesystem/binding/data_buffer.binding.cpp | 100 |
1 files changed, 71 insertions, 29 deletions
diff --git a/source/libs/asura-lib-utils/filesystem/binding/data_buffer.binding.cpp b/source/libs/asura-lib-utils/filesystem/binding/data_buffer.binding.cpp index a9113a7..8e92eee 100644 --- a/source/libs/asura-lib-utils/filesystem/binding/data_buffer.binding.cpp +++ b/source/libs/asura-lib-utils/filesystem/binding/data_buffer.binding.cpp @@ -9,59 +9,101 @@ namespace AsuraEngine LUAX_REGISTRY(DataBuffer) { - luaL_Reg f[] = { + LUAX_REGISTER_METHODS(state, { "New", _New }, - { "SetContent", _SetContent }, - { "GetContent", _GetContent }, - { "GetContentLength", _GetContentLength }, - {0, 0} - }; - - state.RegisterMethods(f); + { "GetBuffer", _GetBuffer }, + { "GetSize", _GetSize }, + { "Load", _Load }, + { "Clear", _Clear } + ); } LUAX_POSTPROCESS(DataBuffer) { - } + // databuffer = DataBuffer.New(lstring) + // databuffer = DataBuffer.New(size) LUAX_IMPL_METHOD(DataBuffer, _New) { + LUAX_STATE(L); + if (state.IsType(1, LUA_TSTRING)) + { + byte* bytes; + size_t size; + lua_tolstring(L, 1, &size); + DataBuffer* buffer = new DataBuffer(bytes, size); + buffer->PushLuaxUserdata(state); + return 1; + } + else if (state.IsType(1, LUA_TNUMBER)) + { + size_t size = lua_tonumber(L, 1); + DataBuffer* buffer = new DataBuffer(size); + buffer->PushLuaxUserdata(state); + } + else + { + return state.ErrorType(1, "number or string"); + } } - // SetContent(dataBuffer, lString) - LUAX_IMPL_METHOD(DataBuffer, _SetContent) + // lsting, len = databuffer:GetBuffer() + LUAX_IMPL_METHOD(DataBuffer, _GetBuffer) { - LUAX_SETUP(L, "US"); - // params: - // 1: data buffer - // 2: lstring + LUAX_SETUP(L, "U"); - DataBuffer* self = state.GetLuaUserdata<DataBuffer>(1); - size_t size = 0; - const char* str = lua_tolstring(L, 2, &size); - void* data = new char[size]; - memcpy(data, str, size); - self->SetContent(data, size); - return 0; + DataBuffer* self = state.GetUserdata<DataBuffer>(1); + lua_pushlstring(L, self->GetBuffer(), self->GetSize()); + return 2; } - LUAX_IMPL_METHOD(DataBuffer, _GetContent) + // length = databuffer:GetSize() + LUAX_IMPL_METHOD(DataBuffer, _GetSize) { LUAX_SETUP(L, "U"); - DataBuffer* self = state.GetLuaUserdata<DataBuffer>(1); - lua_pushlstring(L, (const char*)self->data, self->size); + DataBuffer* self = state.GetUserdata<DataBuffer>(1); + lua_pushinteger(L, self->GetSize()); return 1; } - LUAX_IMPL_METHOD(DataBuffer, _GetContentLength) + // databuffer:Load(lstring) + // databuffer:Load(src) + LUAX_IMPL_METHOD(DataBuffer, _Load) + { + LUAX_STATE(L); + + DataBuffer* buffer = state.GetUserdata<DataBuffer>(1); + const byte* data; + size_t size; + if (state.IsType(2, LUA_TSTRING)) + { + data = lua_tolstring(L, 2, &size); + buffer->Load(data, size); + return 0; + } + else if(state.IsType(2, LUA_TUSERDATA)) + { + DataBuffer* src = state.CheckUserdata<DataBuffer>(2); + buffer->Load(*src); + return 0; + } + else + { + return state.ErrorType(1, "lstring or DataBuffer"); + } + } + + // databuffer:Clear() + LUAX_IMPL_METHOD(DataBuffer, _Clear) { LUAX_SETUP(L, "U"); - DataBuffer* self = state.GetLuaUserdata<DataBuffer>(1); - lua_pushinteger(L, self->size); - return 1; + + DataBuffer* self = state.GetUserdata<DataBuffer>(1); + self->Clear(); + return 0; } } |