in reply to unpacking 6-bit values
Cheers,use warnings; use strict; use Inline C => Config => INC => '-IC:/_32/msys/1.0/local/include', LIBS => '-LC:/_32/msys/1.0/local/lib -lgmp', BUILD_NOISY => 1, USING => 'ParseRegExp'; use Inline C => <<'EOC'; #include <gmp.h> void process(SV * inp) { Inline_Stack_Vars; mpz_t in, ret, and; int i; mpz_init2(in, 192); mpz_set_str(in, SvPV_nolen(inp), 2); mpz_init_set_ui(and, 63); mpz_init2(ret, 6); Inline_Stack_Reset; for(i=0; i<32; i++) { mpz_and(ret, in, and); Inline_Stack_Push(newSVuv(mpz_get_ui(ret))); mpz_div_2exp(in, in, 6); } Inline_Stack_Done; Inline_Stack_Return(32); } EOC my @in; my @result; for(1..100000) { push @in, create(); } print time, "\n"; for(@in) { @result = process($_); } print time, "\n"; print "$in[-1]\n@result\n"; sub create { my $ret; $ret .= int(rand(2)) for 0..191; return $ret; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: unpacking 6-bit values
by BrowserUk (Patriarch) on Dec 11, 2010 at 09:40 UTC | |
by syphilis (Archbishop) on Dec 12, 2010 at 10:34 UTC |