Data-Intern-Shared
view release on metacpan or search on metacpan
void
DESTROY(self)
SV *self
CODE:
if (sv_isobject(self) && sv_derived_from(self, "Data::Intern::Shared")) {
SiHandle *h = INT2PTR(SiHandle*, SvIV(SvRV(self)));
if (h) { sv_setiv(SvRV(self), 0); si_destroy(h); } /* null first: activates EXTRACT's use-after-destroy croak + makes a double DESTROY a no-op */
}
UV
count(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
si_rwlock_rdlock(h);
RETVAL = h->hdr->count;
si_rwlock_rdunlock(h);
OUTPUT:
RETVAL
UV
max_strings(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
RETVAL = h->hdr->max_strings;
OUTPUT:
RETVAL
UV
arena_bytes(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
RETVAL = h->hdr->arena_bytes;
OUTPUT:
RETVAL
UV
arena_used(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
si_rwlock_rdlock(h);
RETVAL = h->hdr->arena_used;
si_rwlock_rdunlock(h);
OUTPUT:
RETVAL
void
clear(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
si_rwlock_wrlock(h);
si_clear_locked(h);
si_rwlock_wrunlock(h);
SV *
intern(self, str)
SV *self
SV *str
PREINIT:
EXTRACT(self);
STRLEN n;
const char *s;
int64_t id;
CODE:
s = SvPVbyte(str, n);
si_rwlock_wrlock(h);
id = si_intern_locked(h, s, n);
__atomic_fetch_add(&h->hdr->stat_ops, 1, __ATOMIC_RELAXED);
si_rwlock_wrunlock(h);
RETVAL = (id < 0) ? &PL_sv_undef : newSVuv((UV)id);
OUTPUT:
RETVAL
SV *
id_of(self, str)
SV *self
SV *str
PREINIT:
EXTRACT(self);
STRLEN n;
const char *s;
uint32_t id;
CODE:
s = SvPVbyte(str, n);
si_rwlock_rdlock(h);
int found = si_id_of_locked(h, s, n, &id);
si_rwlock_rdunlock(h);
RETVAL = found ? newSVuv(id) : &PL_sv_undef;
OUTPUT:
RETVAL
SV *
string(self, id)
SV *self
UV id
PREINIT:
EXTRACT(self);
CODE:
si_rwlock_rdlock(h);
{
SV *out = &PL_sv_undef;
if (id < h->hdr->count) {
uint32_t l;
const char *str = si_arena_str(h, h->reverse[id], &l);
out = newSVpvn(str, l);
}
si_rwlock_rdunlock(h);
RETVAL = out;
}
OUTPUT:
RETVAL
bool
exists(self, str)
SV *self
SV *str
PREINIT:
EXTRACT(self);
STRLEN n;
const char *s;
uint32_t id;
CODE:
s = SvPVbyte(str, n);
si_rwlock_rdlock(h);
RETVAL = si_id_of_locked(h, s, n, &id);
si_rwlock_rdunlock(h);
OUTPUT:
RETVAL
SV *
stats(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
{
HV *hv = newHV();
si_rwlock_rdlock(h);
SiHeader *hd = h->hdr;
hv_stores(hv, "count", newSVuv(hd->count));
hv_stores(hv, "max_strings", newSVuv(hd->max_strings));
hv_stores(hv, "hash_slots", newSVuv(hd->hash_slots));
hv_stores(hv, "hash_load", newSVnv((double)hd->count / (double)hd->hash_slots));
hv_stores(hv, "arena_used", newSVuv(hd->arena_used));
hv_stores(hv, "arena_bytes", newSVuv(hd->arena_bytes));
hv_stores(hv, "arena_load", newSVnv((double)hd->arena_used / (double)hd->arena_bytes));
hv_stores(hv, "ops", newSVuv(hd->stat_ops));
hv_stores(hv, "mmap_size", newSVuv((UV)h->mmap_size));
si_rwlock_rdunlock(h);
RETVAL = newRV_noinc((SV *)hv);
}
OUTPUT:
RETVAL
SV *
path(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
RETVAL = h->path ? newSVpv(h->path, 0) : &PL_sv_undef;
OUTPUT:
RETVAL
int
memfd(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
RETVAL = h->backing_fd;
OUTPUT:
RETVAL
void
sync(self)
SV *self
PREINIT:
EXTRACT(self);
CODE:
if (si_msync(h) != 0) croak("sync: %s", strerror(errno));
void
unlink(self, ...)
SV *self
( run in 0.730 second using v1.01-cache-2.11-cpan-bbe5e583499 )