From fc86381ccac10fa30aefe76996a716ae1d677f5b Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 29 Oct 2015 14:00:41 +0100 Subject: Prepare for rebar --- src/counter.erl | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/counter.erl (limited to 'src/counter.erl') diff --git a/src/counter.erl b/src/counter.erl new file mode 100644 index 0000000..98605f6 --- /dev/null +++ b/src/counter.erl @@ -0,0 +1,41 @@ +-module(counter). + +-export([start/0, counter/0, next/0, set/1, stop/0]). + +-define(MAXCOUNT, 32767). + +start() -> + register(counterPid, spawn_link(?MODULE, counter, [0])). + +counter() -> + process_flag(trap_exit, true), + count(0). + +count(N) when N > ?MAXCOUNT -> + count(0); + +count(N) -> + receive + {next, FromPID} -> + FromPID ! {next, N}, + count(N+1); + {set, New} -> + count(New); + {'EXIT', Pid, Reason} -> + io:format("~p: ~p~n", [Pid, Reason]), + exit(normal); + {stop} -> + exit(normal) + end. + +set({present, N}) -> + counterPid ! {set, N}. + +next() -> + counterPid ! {next, self()}, + receive + {next, N} -> {present, N} + end. + +stop() -> + counterPid ! {stop}. -- cgit v1.2.3