diff options
author | Noah Watkins <noahwatkins@gmail.com> | 2013-02-16 21:30:47 -0800 |
---|---|---|
committer | Noah Watkins <noahwatkins@gmail.com> | 2013-08-25 08:58:27 -0700 |
commit | becab46f57e7fcc10938ee422e115afbdf472f0f (patch) | |
tree | 5c9fe8f6e7867dd8e27cd588eed162692f5b0b66 | |
parent | dc261c21e22468bea3f31bbeae5b9b035ab294ac (diff) | |
download | ceph-becab46f57e7fcc10938ee422e115afbdf472f0f.tar.gz |
lua: support bufferlist concatenation
Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
-rw-r--r-- | src/liblua/src/lua_bufferlist.cc | 14 | ||||
-rw-r--r-- | src/test/cls_lua/test_cls_lua.cc | 6 | ||||
-rw-r--r-- | src/test/cls_lua/test_script.lua | 43 |
3 files changed, 63 insertions, 0 deletions
diff --git a/src/liblua/src/lua_bufferlist.cc b/src/liblua/src/lua_bufferlist.cc index a5e4e56dbd0..1ff29b8fad2 100644 --- a/src/liblua/src/lua_bufferlist.cc +++ b/src/liblua/src/lua_bufferlist.cc @@ -121,6 +121,19 @@ static int bl_le(lua_State *L) } /* + * Bufferlist concatentation + */ +static int bl_concat(lua_State *L) +{ + bufferlist *bl1 = clslua_checkbufferlist(L, 1); + bufferlist *bl2 = clslua_checkbufferlist(L, 2); + bufferlist *ret = clslua_pushbufferlist(L, NULL); + ret->append(bl1->c_str(), bl1->length()); + ret->append(bl2->c_str(), bl2->length()); + return 1; +} + +/* * Garbage collect bufferlist */ static int bl_gc(lua_State *L) @@ -136,6 +149,7 @@ static int bl_gc(lua_State *L) static const struct luaL_Reg bufferlist_methods[] = { {"str", bl_str}, {"append", bl_append}, + {"__concat", bl_concat}, {"__len", bl_len}, {"__lt", bl_lt}, {"__le", bl_le}, diff --git a/src/test/cls_lua/test_cls_lua.cc b/src/test/cls_lua/test_cls_lua.cc index 004f56ccc61..f802cd85645 100644 --- a/src/test/cls_lua/test_cls_lua.cc +++ b/src/test/cls_lua/test_cls_lua.cc @@ -383,3 +383,9 @@ TEST_F(ClsLua, BufferlistCompare) { ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_lt")); ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_le")); } + +TEST_F(ClsLua, BufferlistConcat) { + ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_concat_eq")); + ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_concat_ne")); + ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_concat_immut")); +} diff --git a/src/test/cls_lua/test_script.lua b/src/test/cls_lua/test_script.lua index b406481673e..e3663acc46a 100644 --- a/src/test/cls_lua/test_script.lua +++ b/src/test/cls_lua/test_script.lua @@ -230,6 +230,49 @@ cls.register(bl_lt) cls.register(bl_le) -- +-- Bufferlist concat +-- +function bl_concat_eq() + local a = bufferlist.new() + local b = bufferlist.new() + local ab = bufferlist.new() + a:append('A') + b:append('B') + ab:append('AB') + assert(a .. b == ab) +end + +function bl_concat_ne() + local a = bufferlist.new() + local b = bufferlist.new() + local ab = bufferlist.new() + a:append('A') + b:append('B') + ab:append('AB') + assert(b .. a ~= ab) +end + +function bl_concat_immut() + local a = bufferlist.new() + local b = bufferlist.new() + local ab = bufferlist.new() + a:append('A') + b:append('B') + ab:append('AB') + x = a .. b + assert(x == ab) + b:append('C') + assert(x == ab) + local bc = bufferlist.new() + bc:append('BC') + assert(b == bc) +end + +cls.register(bl_concat_eq) +cls.register(bl_concat_ne) +cls.register(bl_concat_immut) + +-- -- RunError -- function runerr_a() |