Browse Source

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.
Loïc Hoguin 11 years ago
parent
commit
e85c7a5ee2
1 changed files with 4 additions and 62 deletions
  1. 4 62
      src/cowboy_protocol.erl

+ 4 - 62
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.