Skip to content

Instantly share code, notes, and snippets.

@seth
Created January 29, 2014 23:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seth/8699574 to your computer and use it in GitHub Desktop.
Save seth/8699574 to your computer and use it in GitHub Desktop.
-module(fake_gen).
-export([
pop/1,
push/2,
start/0,
start2/0,
server_loop2/1
]).
start() ->
spawn(fun() -> server_loop([]) end).
start2() ->
spawn(fun() -> ?MODULE:server_loop2([]) end).
push(S, Value) ->
S ! {self(), push, Value},
receive
Msg ->
Msg
end.
pop(S) ->
S ! {self(), pop},
receive
Msg ->
Msg
end.
server_loop(State) ->
receive
{From, push, Value} ->
NewState = [Value | State],
From ! ok,
server_loop(NewState);
{From, pop} ->
[Value|NewState] = State,
From ! {ok, Value},
server_loop(NewState);
{From, stop} ->
From ! stopped,
ok;
{From, dump_state} ->
From ! {ok, State},
server_loop(State)
end.
server_loop2(State) ->
receive
{From, push, Value} ->
NewState = [Value | State],
From ! ok,
?MODULE:server_loop2(NewState);
{From, pop} ->
[Value|NewState] = State,
From ! {ok, Value},
?MODULE:server_loop2(NewState);
{From, stop} ->
From ! stopped,
ok;
{From, dump_state} ->
From ! {ok, State},
?MODULE:server_loop2(State)
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment