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.571 second using v1.01-cache-2.11-cpan-5511b514fd6 )