about summary refs log tree commit
path: root/ext/rpatricia/rpatricia.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/rpatricia/rpatricia.c')
-rw-r--r--ext/rpatricia/rpatricia.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/ext/rpatricia/rpatricia.c b/ext/rpatricia/rpatricia.c
index 866572c..2c3fcc9 100644
--- a/ext/rpatricia/rpatricia.c
+++ b/ext/rpatricia/rpatricia.c
@@ -118,6 +118,21 @@ p_match (VALUE self, VALUE r_key)
 }
 
 static VALUE
+p_include (VALUE self, VALUE r_key)
+{
+  patricia_tree_t *tree;
+  patricia_node_t *node;
+  prefix_t *prefix;
+
+  Data_Get_Struct(self, patricia_tree_t, tree);
+  prefix = my_ascii2prefix (AF_INET, r_key);
+  node = patricia_search_best(tree, prefix);
+  Deref_Prefix (prefix);
+
+  return node ? Qtrue : Qfalse;
+}
+
+static VALUE
 p_match_exact (VALUE self, VALUE r_key)
 {
   patricia_tree_t *tree;
@@ -304,6 +319,9 @@ Init_rpatricia (void)
   rb_define_method(cPatricia, "match_exact", p_match_exact, 1);
   rb_define_method(cPatricia, "search_exact", p_match_exact, 1);
 
+  /* check existence */
+  rb_define_method(cPatricia, "include?", p_include, 1);
+
   /* removal */
   rb_define_method(cPatricia, "remove", p_remove, 1);
   rb_define_method(cPatricia, "remove_node", p_remove, 1);