diff options
Diffstat (limited to 'ext/rpatricia/rpatricia.c')
-rw-r--r-- | ext/rpatricia/rpatricia.c | 18 |
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); |