From e85c7a5ee22e5f53ced3d98516ae045d695a503f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Thu, 6 Feb 2014 19:50:25 +0100 Subject: Use the INLINE_LOWERCASE macro in the request parsing code Since I made it for similar code in cowlib, let's use it here too. --- src/cowboy_protocol.erl | 66 +++---------------------------------------------- 1 file changed, 4 insertions(+), 62 deletions(-) (limited to 'src') diff --git a/src/cowboy_protocol.erl b/src/cowboy_protocol.erl index fdc1126..d07b23b 100644 --- a/src/cowboy_protocol.erl +++ b/src/cowboy_protocol.erl @@ -89,6 +89,8 @@ until :: non_neg_integer() | infinity }). +-include_lib("cowlib/include/cow_inline.hrl"). + %% API. %% @doc Start an HTTP protocol process. @@ -292,44 +294,12 @@ match_colon(<< _, Rest/bits >>, N) -> match_colon(_, _) -> nomatch. -%% I know, this isn't exactly pretty. But this is the most critical -%% code path and as such needs to be optimized to death. -%% -%% ... Sorry for your eyes. -%% -%% But let's be honest, that's still pretty readable. parse_hd_name(<< C, Rest/bits >>, S, M, P, Q, V, H, SoFar) -> case C of $: -> parse_hd_before_value(Rest, S, M, P, Q, V, H, SoFar); $\s -> parse_hd_name_ws(Rest, S, M, P, Q, V, H, SoFar); $\t -> parse_hd_name_ws(Rest, S, M, P, Q, V, H, SoFar); - $A -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $a >>); - $B -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $b >>); - $C -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $c >>); - $D -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $d >>); - $E -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $e >>); - $F -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $f >>); - $G -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $g >>); - $H -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $h >>); - $I -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $i >>); - $J -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $j >>); - $K -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $k >>); - $L -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $l >>); - $M -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $m >>); - $N -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $n >>); - $O -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $o >>); - $P -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $p >>); - $Q -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $q >>); - $R -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $r >>); - $S -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $s >>); - $T -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $t >>); - $U -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $u >>); - $V -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $v >>); - $W -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $w >>); - $X -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $x >>); - $Y -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $y >>); - $Z -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, $z >>); - C -> parse_hd_name(Rest, S, M, P, Q, V, H, << SoFar/binary, C >>) + ?INLINE_LOWERCASE(parse_hd_name, Rest, S, M, P, Q, V, H, SoFar) end. parse_hd_name_ws(<< C, Rest/bits >>, S, M, P, Q, V, H, Name) -> @@ -441,8 +411,6 @@ request(B, State=#state{transport=Transport}, M, P, Q, Version, Headers) -> default_port(ssl) -> 443; default_port(_) -> 80. -%% Another hurtful block of code. :) -%% %% Same code as cow_http:parse_fullhost/1, but inline because we %% really want this to go fast. parse_host(<< $[, Rest/bits >>, false, <<>>) -> @@ -455,33 +423,7 @@ parse_host(<< $], Rest/bits >>, true, Acc) -> parse_host(Rest, false, << Acc/binary, $] >>); parse_host(<< C, Rest/bits >>, E, Acc) -> case C of - $A -> parse_host(Rest, E, << Acc/binary, $a >>); - $B -> parse_host(Rest, E, << Acc/binary, $b >>); - $C -> parse_host(Rest, E, << Acc/binary, $c >>); - $D -> parse_host(Rest, E, << Acc/binary, $d >>); - $E -> parse_host(Rest, E, << Acc/binary, $e >>); - $F -> parse_host(Rest, E, << Acc/binary, $f >>); - $G -> parse_host(Rest, E, << Acc/binary, $g >>); - $H -> parse_host(Rest, E, << Acc/binary, $h >>); - $I -> parse_host(Rest, E, << Acc/binary, $i >>); - $J -> parse_host(Rest, E, << Acc/binary, $j >>); - $K -> parse_host(Rest, E, << Acc/binary, $k >>); - $L -> parse_host(Rest, E, << Acc/binary, $l >>); - $M -> parse_host(Rest, E, << Acc/binary, $m >>); - $N -> parse_host(Rest, E, << Acc/binary, $n >>); - $O -> parse_host(Rest, E, << Acc/binary, $o >>); - $P -> parse_host(Rest, E, << Acc/binary, $p >>); - $Q -> parse_host(Rest, E, << Acc/binary, $q >>); - $R -> parse_host(Rest, E, << Acc/binary, $r >>); - $S -> parse_host(Rest, E, << Acc/binary, $s >>); - $T -> parse_host(Rest, E, << Acc/binary, $t >>); - $U -> parse_host(Rest, E, << Acc/binary, $u >>); - $V -> parse_host(Rest, E, << Acc/binary, $v >>); - $W -> parse_host(Rest, E, << Acc/binary, $w >>); - $X -> parse_host(Rest, E, << Acc/binary, $x >>); - $Y -> parse_host(Rest, E, << Acc/binary, $y >>); - $Z -> parse_host(Rest, E, << Acc/binary, $z >>); - _ -> parse_host(Rest, E, << Acc/binary, C >>) + ?INLINE_LOWERCASE(parse_host, Rest, E, Acc) end. %% End of request parsing. -- cgit v1.2.3