summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Watkins <noahwatkins@gmail.com>2013-02-16 18:16:36 -0800
committerNoah Watkins <noahwatkins@gmail.com>2013-08-25 08:58:27 -0700
commitdc261c21e22468bea3f31bbeae5b9b035ab294ac (patch)
tree5f0d85fee8a55caba0fb3bc6ce9d8052db95310a
parent4317270d08709627820dcdc388351b7309d45545 (diff)
downloadceph-dc261c21e22468bea3f31bbeae5b9b035ab294ac.tar.gz
lua: support bufferlist < and <= operators
Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
-rw-r--r--src/liblua/src/lua_bufferlist.cc24
-rw-r--r--src/test/cls_lua/test_cls_lua.cc5
-rw-r--r--src/test/cls_lua/test_script.lua22
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()