aboutsummaryrefslogtreecommitdiff
path: root/src/eco_pool.erl
diff options
context:
space:
mode:
authorNathan Lasseter <Nathan Lasseter nathan@bytemark.co.uk>2014-05-30 13:34:17 +0100
committerNathan Lasseter <Nathan Lasseter nathan@bytemark.co.uk>2014-05-30 13:34:17 +0100
commit08fecb93995728ab53d78beefc329331d79f303f (patch)
tree3ba80e9dede138ce108ad53183cecc47069c736e /src/eco_pool.erl
parent59cee25c7f863e76bc82cd58b33f6f3b4e13770c (diff)
Added directory structure and Makefile
Diffstat (limited to 'src/eco_pool.erl')
-rw-r--r--src/eco_pool.erl42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/eco_pool.erl b/src/eco_pool.erl
new file mode 100644
index 0000000..63fbc3d
--- /dev/null
+++ b/src/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.