1. 程式人生 > >系統技術非業餘研究 » hipe_bifs:bitarray的使用

系統技術非業餘研究 » hipe_bifs:bitarray的使用

未公開的hipe_bifs:bitarray是內建的,用c語言實現的, inplace修改的,有非常高的效率.

-module(bitarray).
-export([new/1, set/2, get/2]).

new(Size) -> hipe_bifs:bitarray(Size, false).
set(I, A) -> hipe_bifs:bitarray_update(A, I, true).
get(I, A) -> hipe_bifs:bitarray_sub(A, I).

相比之下用純erlang array模組實現的bitarray的版本

-module(bitarray).
-export([new/1, set/2, get/2]).

-define(W, 24).

new(N) -> array:new((N-1) div ?W + 1, {default, 0}).

set(I, A) ->
  AI = I div ?W,
  V = array:get(AI, A),
  V1 = V bor (1 bsl (I rem ?W)),
  array:set(AI, V1, A).

get(I, A) ->
  AI = I div ?W,
  V = array:get(AI, A),
  V band (1 bsl (I rem ?W)) =/= 0.

大家看著用把…

Post Footer automatically generated by wp-posturl plugin for wordpress.