Data-BitStream-XS
view release on metacpan or search on metacpan
ALIAS:
get_unary1 = 1
get_gamma = 2
get_delta = 3
get_omega = 4
get_fib = 5
get_levenstein = 6
get_evenrodeh = 7
get_goldbach_g1 = 8
get_goldbach_g2 = 9
PPCODE:
switch (ix) {
case 0: GET_CODE(unary); break;
case 1: GET_CODE(unary1); break;
case 2: GET_CODE(gamma); break;
case 3: GET_CODE(delta); break;
case 4: GET_CODE(omega); break;
case 5: GET_CODE(fib); break;
case 6: GET_CODE(levenstein); break;
case 7: GET_CODE(evenrodeh); break;
case 8: GET_CODE(goldbach_g1); break;
get_fibgen(IN Data::BitStream::XS list, IN int m, IN int count = 1)
ALIAS:
get_binword = 1
get_baer = 2
get_boldivigna = 3
get_comma = 4
get_gamma_rice = 5
get_expgolomb = 25
get_gamma_golomb = 6
get_gammagolomb = 26
PPCODE:
if (ix == 25) ix = 5;
if (ix == 26) ix = 6;
if ( (ix == 0 && (m < 2 || m > 16)) ||
(ix == 1 && (m <= 0 || m > BITS_PER_WORD)) ||
(ix == 2 && (m < -32 || m > 32)) ||
(ix == 3 && (m < 1 || m > 15)) ||
(ix == 4 && (m < 1 || m > 16)) ||
(ix == 5 && (m < 0 || m > BITS_PER_WORD)) ||
(ix == 6 && m < 1) )
croak("invalid parameters: %d\n", m);
default: put_gamma_golomb(list,m,n); break;
}
}
void
get_blocktaboo(IN Data::BitStream::XS list, IN const char* taboostr, IN int count = 1)
PREINIT:
int k;
UV taboo;
PPCODE:
k = parse_binary_string(taboostr, &taboo);
if ( (k < 1) || (k > 16) ) {
croak("invalid parameters: block taboo %s", taboostr);
XSRETURN_UNDEF;
}
GET_CODEPP(block_taboo, k, taboo);
void
put_blocktaboo(IN Data::BitStream::XS list, IN const char* taboostr, ...)
PREINIT:
return;
}
/* We've turned one argument into two */
PUT_CODEVP(block_taboo, 1, list, k, taboo);
void
_xget_rice_sub(IN Data::BitStream::XS list, IN SV* coderef, IN int k, IN int count = 1)
PREINIT:
SV* self = ST(0);
SV* cref = 0;
PPCODE:
if ( (k < 0) || (k > BITS_PER_WORD) ) {
croak("invalid parameters: rice %d", k);
XSRETURN_UNDEF;
}
if (!SvROK(coderef)) {
self = 0;
cref = 0;
} else {
if ((!SvROK(coderef)) || (SvTYPE(SvRV(coderef)) != SVt_PVCV) ) {
croak("invalid parameters: rice coderef");
}
cref = SvRV(coderef);
}
PUT_CODESPP(rice_sub, self, cref, k);
void
_xget_golomb_sub(IN Data::BitStream::XS list, IN SV* coderef, IN UV m, IN int count = 1)
PREINIT:
SV* self = ST(0);
SV* cref = 0;
PPCODE:
if (m < W_ONE) {
croak("invalid parameters: golomb %lu", m);
XSRETURN_UNDEF;
}
if (!SvROK(coderef)) {
self = 0;
cref = 0;
} else {
if ((!SvROK(coderef)) || (SvTYPE(SvRV(coderef)) != SVt_PVCV) ) {
croak("invalid parameters: golomb coderef");
void
_xget_arice_sub(list, coderef, k, count=1)
Data::BitStream::XS list
SV* coderef
int &k
int count
PREINIT:
SV* self = ST(0);
SV* cref = 0;
SV* stack_k_ptr = ST(2); /* Remember position of k, it will be modified */
PPCODE:
if ( (k < 0) || (k > BITS_PER_WORD) ) {
croak("invalid parameters: adaptive_rice %d", k);
XSRETURN_UNDEF;
}
if (!SvROK(coderef)) {
self = 0;
cref = 0;
} else {
if ((!SvROK(coderef)) || (SvTYPE(SvRV(coderef)) != SVt_PVCV) ) {
croak("invalid parameters: adaptive_rice coderef");
}
PUT_CODESPP(adaptive_rice_sub, self, cref, &k);
OUTPUT:
k
void
get_startstop(IN Data::BitStream::XS list, IN SV* p, IN int count = 1)
PREINIT:
char* map;
PPCODE:
map = make_startstop_prefix_map(p);
if (map == 0) {
XSRETURN_UNDEF;
}
/* TODO: we'll skip free in some croak conditions */
GET_CODEP(startstop, map);
Safefree(map);
void
put_startstop(IN Data::BitStream::XS list, IN SV* p, ...)
( run in 1.218 second using v1.01-cache-2.11-cpan-71847e10f99 )