diff options
author | Noah Watkins <noahwatkins@gmail.com> | 2013-02-16 18:16:36 -0800 |
---|---|---|
committer | Noah Watkins <noahwatkins@gmail.com> | 2013-08-25 08:58:27 -0700 |
commit | dc261c21e22468bea3f31bbeae5b9b035ab294ac (patch) | |
tree | 5f0d85fee8a55caba0fb3bc6ce9d8052db95310a | |
parent | 4317270d08709627820dcdc388351b7309d45545 (diff) | |
download | ceph-dc261c21e22468bea3f31bbeae5b9b035ab294ac.tar.gz |
lua: support bufferlist < and <= operators
Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
-rw-r--r-- | src/liblua/src/lua_bufferlist.cc | 24 | ||||
-rw-r--r-- | src/test/cls_lua/test_cls_lua.cc | 5 | ||||
-rw-r--r-- | src/test/cls_lua/test_script.lua | 22 |
3 files changed, 51 insertions, 0 deletions
diff --git a/src/liblua/src/lua_bufferlist.cc b/src/liblua/src/lua_bufferlist.cc index 1fb0df94123..a5e4e56dbd0 100644 --- a/src/liblua/src/lua_bufferlist.cc +++ b/src/liblua/src/lua_bufferlist.cc @@ -99,6 +99,28 @@ static int bl_eq(lua_State *L) } /* + * Bufferlist < operator + */ +static int bl_lt(lua_State *L) +{ + bufferlist *bl1 = clslua_checkbufferlist(L, 1); + bufferlist *bl2 = clslua_checkbufferlist(L, 2); + lua_pushboolean(L, *bl1 < *bl2 ? 1 : 0); + return 1; +} + +/* + * Bufferlist <= operator + */ +static int bl_le(lua_State *L) +{ + bufferlist *bl1 = clslua_checkbufferlist(L, 1); + bufferlist *bl2 = clslua_checkbufferlist(L, 2); + lua_pushboolean(L, *bl1 <= *bl2 ? 1 : 0); + return 1; +} + +/* * Garbage collect bufferlist */ static int bl_gc(lua_State *L) @@ -115,6 +137,8 @@ static const struct luaL_Reg bufferlist_methods[] = { {"str", bl_str}, {"append", bl_append}, {"__len", bl_len}, + {"__lt", bl_lt}, + {"__le", bl_le}, {"__gc", bl_gc}, {"__eq", bl_eq}, {NULL, NULL} diff --git a/src/test/cls_lua/test_cls_lua.cc b/src/test/cls_lua/test_cls_lua.cc index 666ffa3c2b4..004f56ccc61 100644 --- a/src/test/cls_lua/test_cls_lua.cc +++ b/src/test/cls_lua/test_cls_lua.cc @@ -378,3 +378,8 @@ TEST_F(ClsLua, ClsLog) { ASSERT_EQ(reply.log[0], "la tee da"); ASSERT_EQ(reply.log[1], "coffee"); } + +TEST_F(ClsLua, BufferlistCompare) { + ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_lt")); + ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_le")); +} diff --git a/src/test/cls_lua/test_script.lua b/src/test/cls_lua/test_script.lua index 53bdc213240..b406481673e 100644 --- a/src/test/cls_lua/test_script.lua +++ b/src/test/cls_lua/test_script.lua @@ -208,6 +208,28 @@ cls.register(bl_eq_equal) cls.register(bl_eq_notequal) -- +-- Bufferlist Compare +-- +function bl_lt() + local a = bufferlist.new() + local b = bufferlist.new() + a:append('A') + b:append('B') + assert(a < b) +end + +function bl_le() + local a = bufferlist.new() + local b = bufferlist.new() + a:append('A') + b:append('B') + assert(a <= b) +end + +cls.register(bl_lt) +cls.register(bl_le) + +-- -- RunError -- function runerr_a() |