-module(utSEtsSetDs).
|
|
-compile([nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).
|
|
|
|
-export([start/2]).
|
|
|
|
start(Num, Pid) ->
|
|
Ds = init(Num),
|
|
Time1 = erlang:monotonic_time(),
|
|
NewDsI = insert(Num, Ds),
|
|
Time2 = erlang:monotonic_time(),
|
|
NewDsR = read(Num, NewDsI),
|
|
Time3 = erlang:monotonic_time(),
|
|
NewDsU = update(Num, NewDsR),
|
|
Time4 = erlang:monotonic_time(),
|
|
NewDsF = for(Num, NewDsU),
|
|
Time5 = erlang:monotonic_time(),
|
|
delete(Num, NewDsF),
|
|
Time6 = erlang:monotonic_time(),
|
|
erlang:send(Pid, {over, self(), Time2 - Time1, Time3 - Time2, Time4 - Time3, Time5 - Time4, Time6 - Time5, ets:info(Ds, memory)}),
|
|
exit(normal).
|
|
|
|
init(_Num) ->
|
|
ets:new(test, [set]).
|
|
|
|
insert(0, Ds) ->
|
|
Ds;
|
|
insert(Num, Ds) ->
|
|
ets:insert(Ds, {Num, Num}),
|
|
insert(Num - 1, Ds).
|
|
|
|
read(0, Ds) ->
|
|
Ds;
|
|
read(Num, Ds) ->
|
|
Value = ets:lookup(Ds, Num),
|
|
read(Num - 1, Ds).
|
|
|
|
update(0, Ds) ->
|
|
Ds;
|
|
update(Num, Ds) ->
|
|
ets:update_element(Ds, Num, {2, Num + 1}),
|
|
update(Num - 1, Ds).
|
|
|
|
for(Num, Ds) ->
|
|
Fun =
|
|
fun({Key, Value}, Acc) ->
|
|
Value
|
|
end,
|
|
List = ets:foldl(Fun, [], Ds),
|
|
Ds.
|
|
|
|
delete(0, Ds) ->
|
|
ok;
|
|
delete(Num, Ds) ->
|
|
ets:delete(Ds, Num),
|
|
delete(Num - 1, Ds).
|
|
|
|
|