%%%------------------------------------------------------------------- %%% File : five11.erl %%% Author : Per Gustafsson %%% Description : IS-683 PRL decode tool %%% %%% Created : 25 Jan 2006 by Per Gustafsson %%%------------------------------------------------------------------- -module(five11). -export([test/1,main/2]). %%-------- Code for the benchmark ------------------------------- decode(<>, Acc) -> %1 decode(get_next(X),[decode_chans(Chs,[])|Acc]); %2 decode(<<>>,Acc) -> lists:reverse(Acc). %3 decode_chans(<>,Acc) -> %4 decode_chans(Rest,[Chan|Acc]); %5 decode_chans(<<>>,Acc) -> lists:reverse(Acc). %6 get_next(X) -> %7 Pad = erlang:bitsize(X) - size(X)*8, %8 <<_:Pad,Rest/binary>>=X,Rest. %9 %%---------- Stuff for benchmarking --------------------------------- -define(ITER,10000). test([InName]) -> {ok,Bin}=file:read_file(InName), hipe:c(lists), erlang:spawn_opt(?MODULE,main,[InName,Bin],[{min_heap_size, 1000000}]). main(FileName,Bin) -> statistics(runtime), Res = iter(?ITER,fun() -> <<_:16,B/binary>>=Bin, sum_all(decode(B,[])) end), {_,X}= statistics(runtime), io:format("~.3f", [X/1000]), file:write_file(FileName++".erlang", list_to_binary(integer_to_list(Res))), halt(). iter(1,F) -> F(); iter(N,F) -> F(),iter(N-1,F). sum_all(LL) -> lists:sum([lists:sum(L)||L<-LL]).