Data-Heap-Shared
view release on metacpan or search on metacpan
HeapHandle *h = heap_create(p, capacity, errbuf);
if (!h) croak("Data::Heap::Shared->new: %s", errbuf);
MAKE_OBJ(class, h);
OUTPUT:
RETVAL
SV *
new_memfd(class, name, capacity)
const char *class
const char *name
UV capacity
PREINIT:
char errbuf[HEAP_ERR_BUFLEN];
CODE:
HeapHandle *h = heap_create_memfd(name, capacity, errbuf);
if (!h) croak("Data::Heap::Shared->new_memfd: %s", errbuf);
MAKE_OBJ(class, h);
OUTPUT:
RETVAL
SV *
new_from_fd(class, fd)
const char *class
int fd
PREINIT:
char errbuf[HEAP_ERR_BUFLEN];
CODE:
HeapHandle *h = heap_open_fd(fd, errbuf);
if (!h) croak("Data::Heap::Shared->new_from_fd: %s", errbuf);
MAKE_OBJ(class, h);
OUTPUT:
RETVAL
void
DESTROY(self)
SV *self
CODE:
if (!SvROK(self)) return;
HeapHandle *h = INT2PTR(HeapHandle*, SvIV(SvRV(self)));
if (!h) return;
sv_setiv(SvRV(self), 0);
heap_destroy(h);
bool
push(self, priority, value)
SV *self
IV priority
IV value
PREINIT:
EXTRACT_HEAP(self);
CODE:
RETVAL = heap_push(h, (int64_t)priority, (int64_t)value);
OUTPUT:
RETVAL
void
pop(self)
SV *self
PREINIT:
EXTRACT_HEAP(self);
PPCODE:
int64_t p, v;
if (heap_pop(h, &p, &v)) {
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv((IV)p)));
PUSHs(sv_2mortal(newSViv((IV)v)));
}
void
pop_wait(self, ...)
SV *self
PREINIT:
EXTRACT_HEAP(self);
double timeout = -1;
PPCODE:
if (items > 1) timeout = SvNV(ST(1));
int64_t p, v;
if (heap_pop_wait(h, &p, &v, timeout)) {
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv((IV)p)));
PUSHs(sv_2mortal(newSViv((IV)v)));
}
void
peek(self)
SV *self
PREINIT:
EXTRACT_HEAP(self);
PPCODE:
int64_t p, v;
if (heap_peek(h, &p, &v)) {
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv((IV)p)));
PUSHs(sv_2mortal(newSViv((IV)v)));
}
UV
size(self)
SV *self
PREINIT:
EXTRACT_HEAP(self);
CODE:
RETVAL = heap_size(h);
OUTPUT:
RETVAL
UV
capacity(self)
SV *self
PREINIT:
EXTRACT_HEAP(self);
CODE:
RETVAL = (UV)h->hdr->capacity;
OUTPUT:
RETVAL
bool
is_empty(self)
SV *self
PREINIT:
EXTRACT_HEAP(self);
CODE:
RETVAL = heap_size(h) == 0;
OUTPUT:
RETVAL
bool
is_full(self)
SV *self
PREINIT:
EXTRACT_HEAP(self);
CODE:
RETVAL = heap_size(h) >= (UV)h->hdr->capacity;
OUTPUT:
RETVAL
void
clear(self)
SV *self
PREINIT:
EXTRACT_HEAP(self);
CODE:
heap_clear(h);
SV *
path(self)
SV *self
PREINIT:
EXTRACT_HEAP(self);
( run in 3.422 seconds using v1.01-cache-2.11-cpan-71847e10f99 )