Skip to content

Commit

Permalink
Return owners
Browse files Browse the repository at this point in the history
- Also use emacs indenting
  • Loading branch information
MasseR committed May 3, 2013
1 parent f0393aa commit d7df6be
Showing 1 changed file with 22 additions and 10 deletions.
32 changes: 22 additions & 10 deletions src/itemstats_srv.erl
Expand Up @@ -3,7 +3,7 @@
-behaviour(gen_server). -behaviour(gen_server).


%% API %% API
-export([start_link/0, value/1, value/2, set/3, set/2, increment/2, increment/3, decrement/2, decrement/3]). -export([start_link/0, value/1, value/2, set/3, set/2, increment/2, increment/3, decrement/2, decrement/3, owners/1]).


%% gen_server callbacks %% gen_server callbacks
-export([init/1, -export([init/1,
Expand Down Expand Up @@ -39,6 +39,9 @@ decrement(Key, Amount) ->
decrement(Key, TurtleId, Amount) -> decrement(Key, TurtleId, Amount) ->
increment(Key, TurtleId, -Amount). increment(Key, TurtleId, -Amount).


owners(ItemId) ->
gen_server:call(?MODULE, {owners, ItemId}).

%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% @doc %% @doc
%% Starts the server %% Starts the server
Expand Down Expand Up @@ -84,6 +87,10 @@ init([]) ->
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
handle_call({get, Key}, _From, State) -> handle_call({get, Key}, _From, State) ->
{reply, internal_aggregate_value(Key), State}; {reply, internal_aggregate_value(Key), State};
handle_call({owners, ItemId}, _From, State) ->
Turtles = dets:lookup(?MODULE, ItemId),
TurtlesWithCount = [{TurtleId, internal_value(ItemId, TurtleId)} || TurtleId <- Turtles],
{reply, TurtlesWithCount, State};
handle_call({get, Key, TurtleId}, _From, State) -> handle_call({get, Key, TurtleId}, _From, State) ->
{reply, internal_value(Key, TurtleId), State}; {reply, internal_value(Key, TurtleId), State};
handle_call(_Request, _From, State) -> handle_call(_Request, _From, State) ->
Expand All @@ -102,23 +109,28 @@ handle_call(_Request, _From, State) ->
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
handle_cast({put, Key, TurtleId, Value}, State) -> handle_cast({put, Key, TurtleId, Value}, State) ->
NewSet = case dets:lookup(?MODULE, turtles) of NewSet = case dets:lookup(?MODULE, turtles) of
[ {turtles, Set} ] -> sets:add_element(TurtleId, Set); [ {turtles, Set} ] -> sets:add_element(TurtleId, Set);
[] -> sets:add_element(TurtleId, sets:new()) [] -> sets:add_element(TurtleId, sets:new())
end, end,
NewTurtleSet = case dets:lookup(?MODULE, "turtle-" ++ TurtleId) of NewTurtleSet = case dets:lookup(?MODULE, "turtle-" ++ TurtleId) of
[ { _, TurtleSet } ] -> sets:add_element(Key, TurtleSet); [ { _, TurtleSet } ] -> sets:add_element(Key, TurtleSet);
[] -> sets:add_element(Key, sets:new()) [] -> sets:add_element(Key, sets:new())
end, end,
NewItemSet = case dets:lookup(?MODULE, Key) of
[{_, ItemSet}] -> sets:add_element(TurtleId, ItemSet);
[] -> sets:add_element(TurtleId, sets:new())
end,
dets:insert(?MODULE, {make_key(Key, TurtleId), Value}), dets:insert(?MODULE, {make_key(Key, TurtleId), Value}),
dets:insert(?MODULE, {turtles, NewSet}), dets:insert(?MODULE, {turtles, NewSet}),
dets:insert(?MODULE, {"turtle-" ++ TurtleId, NewTurtleSet}), dets:insert(?MODULE, {"turtle-" ++ TurtleId, NewTurtleSet}),
dets:insert(?MODULE, {Key, NewItemSet}),
{noreply, State}; {noreply, State};
handle_cast({inc, Key, TurtleId, Value}, State) -> handle_cast({inc, Key, TurtleId, Value}, State) ->
OldValue = internal_value(Key, TurtleId), OldValue = internal_value(Key, TurtleId),
NewValue = case OldValue + Value of NewValue = case OldValue + Value of
X when X < 0 -> 0; X when X < 0 -> 0;
X -> X X -> X
end, end,
dets:insert(?MODULE, {Key, NewValue}), dets:insert(?MODULE, {Key, NewValue}),
{noreply, State}; {noreply, State};
handle_cast(_Msg, State) -> handle_cast(_Msg, State) ->
Expand Down

0 comments on commit d7df6be

Please sign in to comment.