Net-BART
view release on metacpan or search on metacpan
lib/Net/BART/XS.xs view on Meta::CPAN
if (is_ipv6) t->size6++; else t->size4++;
}
RETVAL = is_new;
OUTPUT:
RETVAL
void
lookup(self, ip_str)
SV *self
const char *ip_str
PPCODE:
bart_table_t *t = INT2PTR(bart_table_t*, SvIV(SvRV(self)));
uint8_t addr[16];
int is_ipv6 = parse_ip_str(aTHX_ ip_str, addr);
int found = 0;
void *val = bart_lookup(t, addr, is_ipv6, &found);
if (found && val) {
XPUSHs(sv_2mortal(newSVsv((SV*)val)));
XPUSHs(sv_2mortal(newSViv(1)));
} else {
XPUSHs(&PL_sv_undef);
lib/Net/BART/XS.xs view on Meta::CPAN
uint8_t addr[16];
int is_ipv6 = parse_ip_str(aTHX_ ip_str, addr);
RETVAL = bart_contains(t, addr, is_ipv6);
OUTPUT:
RETVAL
void
get(self, prefix_str)
SV *self
const char *prefix_str
PPCODE:
bart_table_t *t = INT2PTR(bart_table_t*, SvIV(SvRV(self)));
uint8_t addr[16];
int addr_len, prefix_len;
int is_ipv6 = parse_prefix_str(aTHX_ prefix_str, addr, &addr_len, &prefix_len);
int found = 0;
void *val = bart_get(t, addr, prefix_len, is_ipv6, &found);
if (found && val) {
XPUSHs(sv_2mortal(newSVsv((SV*)val)));
XPUSHs(sv_2mortal(newSViv(1)));
} else {
XPUSHs(&PL_sv_undef);
XPUSHs(sv_2mortal(newSViv(0)));
}
void
delete(self, prefix_str)
SV *self
const char *prefix_str
PPCODE:
bart_table_t *t = INT2PTR(bart_table_t*, SvIV(SvRV(self)));
uint8_t addr[16];
int addr_len, prefix_len;
int is_ipv6 = parse_prefix_str(aTHX_ prefix_str, addr, &addr_len, &prefix_len);
bart_node_t *root = is_ipv6 ? t->root6 : t->root4;
int found = 0;
void *val = bart_delete(root, addr, prefix_len, 0, &found);
if (found) {
if (is_ipv6) t->size6--; else t->size4--;
if (val) {
( run in 0.959 second using v1.01-cache-2.11-cpan-5511b514fd6 )