aboutsummaryrefslogtreecommitdiff
path: root/eco_pool.erl
diff options
context:
space:
mode:
Diffstat (limited to 'eco_pool.erl')
-rw-r--r--eco_pool.erl42
1 files changed, 42 insertions, 0 deletions
diff --git a/eco_pool.erl b/eco_pool.erl
new file mode 100644
index 0000000..63fbc3d
--- /dev/null
+++ b/eco_pool.erl
@@ -0,0 +1,42 @@
+-module(eco_pool).
+-export([start_pool/1, start_random_pool/2]).
+
+start_pool(Data) ->
+ pool_loop(Data).
+
+start_random_pool(Size, Max) ->
+ random:seed(now()),
+ Data = [random:uniform(Max) || _ <- lists:seq(1, Size)],
+ pool_loop(Data).
+
+pool_loop(PoolData) ->
+ receive
+ {From, stop} ->
+ From ! {ok, stopped},
+ {ok, stopped};
+ {From, drain} ->
+ From ! {ok, drained},
+ pool_loop([]);
+ {From, set, Data} ->
+ From ! {ok, set, Data},
+ pool_loop(Data);
+ {From, put, Data} ->
+ From ! {ok, put, Data},
+ pool_loop(PoolData ++ Data);
+ {From, get, Data} ->
+ New = PoolData -- Data,
+ Test = PoolData -- New,
+ if
+ Test =:= Data ->
+ From ! {ok, get, Data},
+ pool_loop(New);
+ true ->
+ From ! {error, get, Data},
+ pool_loop(PoolData)
+ end;
+ {From, look} ->
+ From ! {ok, look, PoolData},
+ pool_loop(PoolData);
+ Msg ->
+ {error, invalid_message, Msg}
+ end.