summaryrefslogtreecommitdiff
path: root/source/libs/asura-lib-utils/filesystem/binding/data_buffer.binding.cpp
diff options
context:
space:
mode:
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.cpp100
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;
}
}