Data-Buffer-Shared
view release on metacpan or search on metacpan
MODULE = Data::Buffer::Shared PACKAGE = Data::Buffer::Shared::U8
PROTOTYPES: DISABLE
SV*
new(char* class, char* path, UV capacity)
CODE:
char errbuf[BUF_ERR_BUFLEN];
BufHandle* buf = buf_u8_create(path, (uint64_t)capacity, errbuf);
if (!buf) croak("Data::Buffer::Shared::U8: %s", errbuf[0] ? errbuf : "unknown error");
RETVAL = sv_setref_pv(newSV(0), class, (void*)buf);
OUTPUT:
RETVAL
void
DESTROY(SV* self_sv)
CODE:
if (!SvROK(self_sv)) return;
BufHandle* h = INT2PTR(BufHandle*, SvIV(SvRV(self_sv)));
if (!h) return;
sv_setiv(SvRV(self_sv), 0);
buf_close_map(h);
SV*
get(SV* self_sv, UV idx)
CODE:
EXTRACT_BUF("Data::Buffer::Shared::U8", self_sv);
uint8_t val;
if (!buf_u8_get(h, (uint64_t)idx, &val)) XSRETURN_UNDEF;
RETVAL = newSVuv(val);
OUTPUT:
RETVAL
bool
set(SV* self_sv, UV idx, UV val)
CODE:
EXTRACT_BUF("Data::Buffer::Shared::U8", self_sv);
RETVAL = buf_u8_set(h, (uint64_t)idx, (uint8_t)val);
OUTPUT:
RETVAL
void
slice(SV* self_sv, UV from, UV count)
PPCODE:
EXTRACT_BUF("Data::Buffer::Shared::U8", self_sv);
if (count == 0) XSRETURN_EMPTY;
uint8_t *tmp;
Newx(tmp, count, uint8_t);
SAVEFREEPV(tmp);
if (!buf_u8_get_slice(h, (uint64_t)from, (uint64_t)count, tmp))
croak("Data::Buffer::Shared::U8: slice out of bounds");
EXTEND(SP, count);
for (UV i = 0; i < count; i++)
mPUSHu(tmp[i]);
bool
set_slice(SV* self_sv, UV from, ...)
CODE:
EXTRACT_BUF("Data::Buffer::Shared::U8", self_sv);
UV count = items - 2;
if (count == 0) XSRETURN(1);
uint8_t *tmp;
Newx(tmp, count, uint8_t);
SAVEFREEPV(tmp);
for (UV i = 0; i < count; i++)
tmp[i] = (uint8_t)SvUV(ST(i + 2));
RETVAL = buf_u8_set_slice(h, (uint64_t)from, (uint64_t)count, tmp);
OUTPUT:
RETVAL
void
fill(SV* self_sv, UV val)
CODE:
EXTRACT_BUF("Data::Buffer::Shared::U8", self_sv);
buf_u8_fill(h, (uint8_t)val);
SV*
incr(SV* self_sv, UV idx)
CODE:
EXTRACT_BUF("Data::Buffer::Shared::U8", self_sv);
if (idx >= h->hdr->capacity) croak("Data::Buffer::Shared::U8: index out of bounds");
RETVAL = newSVuv(buf_u8_incr(h, (uint64_t)idx));
OUTPUT:
RETVAL
SV*
decr(SV* self_sv, UV idx)
CODE:
EXTRACT_BUF("Data::Buffer::Shared::U8", self_sv);
if (idx >= h->hdr->capacity) croak("Data::Buffer::Shared::U8: index out of bounds");
RETVAL = newSVuv(buf_u8_decr(h, (uint64_t)idx));
OUTPUT:
RETVAL
SV*
add(SV* self_sv, UV idx, UV delta)
CODE:
EXTRACT_BUF("Data::Buffer::Shared::U8", self_sv);
if (idx >= h->hdr->capacity) croak("Data::Buffer::Shared::U8: index out of bounds");
RETVAL = newSVuv(buf_u8_add(h, (uint64_t)idx, (uint8_t)delta));
OUTPUT:
RETVAL
bool
( run in 0.475 second using v1.01-cache-2.11-cpan-5511b514fd6 )