aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_bstr.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2011-10-04 18:34:14 +0200
committerLoïc Hoguin <[email protected]>2011-10-04 18:34:14 +0200
commit9a775cce3c2cdab064dd79df29914296cf642a8d (patch)
tree2bb543f34b57eef7fb71338d7352e6fc4e6f9ec3 /src/cowboy_bstr.erl
parentee77ecec9265882be786d316acef1a8d91b892b9 (diff)
downloadcowboy-9a775cce3c2cdab064dd79df29914296cf642a8d.tar.gz
cowboy-9a775cce3c2cdab064dd79df29914296cf642a8d.tar.bz2
cowboy-9a775cce3c2cdab064dd79df29914296cf642a8d.zip
Move a few binary string handling functions to cowboy_bstr
Diffstat (limited to 'src/cowboy_bstr.erl')
-rw-r--r--src/cowboy_bstr.erl86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/cowboy_bstr.erl b/src/cowboy_bstr.erl
new file mode 100644
index 0000000..1c702ef
--- /dev/null
+++ b/src/cowboy_bstr.erl
@@ -0,0 +1,86 @@
+%% Copyright (c) 2011, Loïc Hoguin <[email protected]>
+%%
+%% Permission to use, copy, modify, and/or distribute this software for any
+%% purpose with or without fee is hereby granted, provided that the above
+%% copyright notice and this permission notice appear in all copies.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+%% @doc Binary string manipulation.
+-module(cowboy_bstr).
+
+-export([to_lower/1]). %% Binary strings.
+-export([char_to_lower/1, char_to_upper/1]). %% Characters.
+
+%% @doc Convert a binary string to lowercase.
+-spec to_lower(binary()) -> binary().
+to_lower(L) ->
+ << << (char_to_lower(C)) >> || << C >> <= L >>.
+
+%% @doc Convert [A-Z] characters to lowercase.
+%% @end
+%% We gain noticeable speed by matching each value directly.
+-spec char_to_lower(char()) -> char().
+char_to_lower($A) -> $a;
+char_to_lower($B) -> $b;
+char_to_lower($C) -> $c;
+char_to_lower($D) -> $d;
+char_to_lower($E) -> $e;
+char_to_lower($F) -> $f;
+char_to_lower($G) -> $g;
+char_to_lower($H) -> $h;
+char_to_lower($I) -> $i;
+char_to_lower($J) -> $j;
+char_to_lower($K) -> $k;
+char_to_lower($L) -> $l;
+char_to_lower($M) -> $m;
+char_to_lower($N) -> $n;
+char_to_lower($O) -> $o;
+char_to_lower($P) -> $p;
+char_to_lower($Q) -> $q;
+char_to_lower($R) -> $r;
+char_to_lower($S) -> $s;
+char_to_lower($T) -> $t;
+char_to_lower($U) -> $u;
+char_to_lower($V) -> $v;
+char_to_lower($W) -> $w;
+char_to_lower($X) -> $x;
+char_to_lower($Y) -> $y;
+char_to_lower($Z) -> $z;
+char_to_lower(Ch) -> Ch.
+
+%% @doc Convert [a-z] characters to uppercase.
+-spec char_to_upper(char()) -> char().
+char_to_upper($a) -> $A;
+char_to_upper($b) -> $B;
+char_to_upper($c) -> $C;
+char_to_upper($d) -> $D;
+char_to_upper($e) -> $E;
+char_to_upper($f) -> $F;
+char_to_upper($g) -> $G;
+char_to_upper($h) -> $H;
+char_to_upper($i) -> $I;
+char_to_upper($j) -> $J;
+char_to_upper($k) -> $K;
+char_to_upper($l) -> $L;
+char_to_upper($m) -> $M;
+char_to_upper($n) -> $N;
+char_to_upper($o) -> $O;
+char_to_upper($p) -> $P;
+char_to_upper($q) -> $Q;
+char_to_upper($r) -> $R;
+char_to_upper($s) -> $S;
+char_to_upper($t) -> $T;
+char_to_upper($u) -> $U;
+char_to_upper($v) -> $V;
+char_to_upper($w) -> $W;
+char_to_upper($x) -> $X;
+char_to_upper($y) -> $Y;
+char_to_upper($z) -> $Z;
+char_to_upper(Ch) -> Ch.