Cache-utLRU

 view release on metacpan or  search on metacpan

cache.xs  view on Meta::CPAN


MODULE = Cache::utLRU        PACKAGE = Cache::utLRU
PROTOTYPES: DISABLE

#################################################################

Cache*
new(char* CLASS, int size = 0)
CODE:
{
    if (size <= 0) {
        size = CACHE_DEFAULT_SIZE;
    }
    RETVAL = cache_build(aTHX_ size);
    if (!RETVAL) {
        croak("could not create cache");
    }
}
OUTPUT: RETVAL

int
size(Cache* cache)
CODE:
{
    RETVAL = cache_size(aTHX_ cache);
}
OUTPUT: RETVAL

int
capacity(Cache* cache)
CODE:
{
    RETVAL = cache_capacity(aTHX_ cache);
}
OUTPUT: RETVAL

void
clear(Cache* cache)
CODE:
{
    cache_clear(aTHX_ cache);
}

void
add(Cache* cache, SV* key, SV* val)
CODE:
{
    if (!key || !SvOK(key) || !SvPOK(key)) {
        croak("add key argument must be a string");
    }
    if (!val || !SvOK(val)) {
        croak("add value argument must be an actual value");
    }
    if (!cache_add(aTHX_ cache, key, val)) {
        croak("could not add element to cache");
    }
}

void
find(Cache* cache, SV* key)
PPCODE:
{
    /* We use PPCODE because XS mortalizes the return value */
    if (!key || !SvOK(key) || !SvPOK(key)) {
        croak("find key argument must be a string");
    }
    ST(0) = cache_find(aTHX_ cache, key);
    XSRETURN(1);
}

void
visit(Cache* cache, SV* cb)
CODE:
{
    if (!cb || !SvOK(cb) || !SvROK(cb) || SvTYPE(SvRV(cb)) != SVt_PVCV) {
        croak("visit cb argument must be a coderef");
    }
    cache_iterate(aTHX_ cache, cache_visit, cb);
}



( run in 2.796 seconds using v1.01-cache-2.11-cpan-71847e10f99 )