Browse Source

Replace many proplists:get_value/{2,3} calls by BIFs

Originally suggested by Roberto Ostinelli.
Loïc Hoguin 12 years ago
parent
commit
9090cd9765
2 changed files with 18 additions and 10 deletions
  1. 2 2
      src/cowboy_http.erl
  2. 16 8
      src/cowboy_protocol.erl

+ 2 - 2
src/cowboy_http.erl

@@ -868,8 +868,8 @@ urlencode(Bin) ->
 %% instead.
 -spec urlencode(binary(), [noplus|upper]) -> binary().
 urlencode(Bin, Opts) ->
-	Plus = not proplists:get_value(noplus, Opts, false),
-	Upper = proplists:get_value(upper, Opts, false),
+	Plus = not lists:member(noplus, Opts),
+	Upper = lists:member(upper, Opts),
 	urlencode(Bin, <<>>, Plus, Upper).
 
 -spec urlencode(binary(), binary(), boolean(), boolean()) -> binary().

+ 16 - 8
src/cowboy_protocol.erl

@@ -80,18 +80,26 @@ start_link(ListenerPid, Socket, Transport, Opts) ->
 
 %% Internal.
 
+%% @doc Faster alternative to proplists:get_value/3.
+%% @private
+get_value(Key, Opts, Default) ->
+	case lists:keyfind(Key, 1, Opts) of
+		{_, Value} -> Value;
+		_ -> Default
+	end.
+
 %% @private
 -spec init(pid(), inet:socket(), module(), any()) -> ok.
 init(ListenerPid, Socket, Transport, Opts) ->
-	Dispatch = proplists:get_value(dispatch, Opts, []),
-	MaxEmptyLines = proplists:get_value(max_empty_lines, Opts, 5),
-	MaxKeepalive = proplists:get_value(max_keepalive, Opts, infinity),
-	MaxLineLength = proplists:get_value(max_line_length, Opts, 4096),
-	OnRequest = proplists:get_value(onrequest, Opts),
-	OnResponse = proplists:get_value(onresponse, Opts),
-	Timeout = proplists:get_value(timeout, Opts, 5000),
+	Dispatch = get_value(dispatch, Opts, []),
+	MaxEmptyLines = get_value(max_empty_lines, Opts, 5),
+	MaxKeepalive = get_value(max_keepalive, Opts, infinity),
+	MaxLineLength = get_value(max_line_length, Opts, 4096),
+	OnRequest = get_value(onrequest, Opts, undefined),
+	OnResponse = get_value(onresponse, Opts, undefined),
+	Timeout = get_value(timeout, Opts, 5000),
 	URLDecDefault = {fun cowboy_http:urldecode/2, crash},
-	URLDec = proplists:get_value(urldecode, Opts, URLDecDefault),
+	URLDec = get_value(urldecode, Opts, URLDecDefault),
 	ok = ranch:accept_ack(ListenerPid),
 	wait_request(#state{listener=ListenerPid, socket=Socket, transport=Transport,
 		dispatch=Dispatch, max_empty_lines=MaxEmptyLines,