cow_inline.hrl 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. %% Copyright (c) 2014, Loïc Hoguin <essen@ninenines.eu>
  2. %%
  3. %% Permission to use, copy, modify, and/or distribute this software for any
  4. %% purpose with or without fee is hereby granted, provided that the above
  5. %% copyright notice and this permission notice appear in all copies.
  6. %%
  7. %% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. %% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. %% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. %% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. %% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. %% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. %% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. -ifndef(COW_INLINE_HRL).
  15. -define(COW_INLINE_HRL, 1).
  16. %% IS_ALPHA(Character)
  17. -define(IS_ALPHA(C),
  18. C =:= $a orelse C =:= $b orelse C =:= $c orelse C =:= $d orelse C =:= $e orelse
  19. C =:= $f orelse C =:= $g orelse C =:= $h orelse C =:= $i orelse C =:= $j orelse
  20. C =:= $k orelse C =:= $l orelse C =:= $m orelse C =:= $n orelse C =:= $o orelse
  21. C =:= $p orelse C =:= $q orelse C =:= $r orelse C =:= $s orelse C =:= $t orelse
  22. C =:= $u orelse C =:= $v orelse C =:= $w orelse C =:= $x orelse C =:= $y orelse
  23. C =:= $z orelse
  24. C =:= $A orelse C =:= $B orelse C =:= $C orelse C =:= $D orelse C =:= $E orelse
  25. C =:= $F orelse C =:= $G orelse C =:= $H orelse C =:= $I orelse C =:= $J orelse
  26. C =:= $K orelse C =:= $L orelse C =:= $M orelse C =:= $N orelse C =:= $O orelse
  27. C =:= $P orelse C =:= $Q orelse C =:= $R orelse C =:= $S orelse C =:= $T orelse
  28. C =:= $U orelse C =:= $V orelse C =:= $W orelse C =:= $X orelse C =:= $Y orelse
  29. C =:= $Z
  30. ).
  31. %% IS_ALPHANUM(Character)
  32. -define(IS_ALPHANUM(C), ?IS_ALPHA(C) orelse ?IS_DIGIT(C)).
  33. %% IS_CHAR(Character)
  34. -define(IS_CHAR(C), C > 0, C < 128).
  35. %% IS_DIGIT(Character)
  36. -define(IS_DIGIT(C),
  37. C =:= $0 orelse C =:= $1 orelse C =:= $2 orelse C =:= $3 orelse C =:= $4 orelse
  38. C =:= $5 orelse C =:= $6 orelse C =:= $7 orelse C =:= $8 orelse C =:= $9
  39. ).
  40. %% IS_ETAGC(Character)
  41. -define(IS_ETAGC(C), C =:= 16#21; C >= 16#23, C =/= 16#7f).
  42. %% IS_HEX(Character)
  43. -define(IS_HEX(C),
  44. ?IS_DIGIT(C) orelse
  45. C =:= $a orelse C =:= $b orelse C =:= $c orelse
  46. C =:= $d orelse C =:= $e orelse C =:= $f orelse
  47. C =:= $A orelse C =:= $B orelse C =:= $C orelse
  48. C =:= $D orelse C =:= $E orelse C =:= $F).
  49. %% IS_LHEX(Character)
  50. -define(IS_LHEX(C),
  51. ?IS_DIGIT(C) orelse
  52. C =:= $a orelse C =:= $b orelse C =:= $c orelse
  53. C =:= $d orelse C =:= $e orelse C =:= $f).
  54. %% IS_TOKEN(Character)
  55. -define(IS_TOKEN(C),
  56. ?IS_ALPHA(C) orelse ?IS_DIGIT(C)
  57. orelse C =:= $! orelse C =:= $# orelse C =:= $$ orelse C =:= $% orelse C =:= $&
  58. orelse C =:= $' orelse C =:= $* orelse C =:= $+ orelse C =:= $- orelse C =:= $.
  59. orelse C =:= $^ orelse C =:= $_ orelse C =:= $` orelse C =:= $| orelse C =:= $~
  60. ).
  61. %% IS_TOKEN68(Character)
  62. -define(IS_TOKEN68(C),
  63. ?IS_ALPHA(C) orelse ?IS_DIGIT(C) orelse
  64. C =:= $- orelse C =:= $. orelse C =:= $_ orelse
  65. C =:= $~ orelse C =:= $+ orelse C =:= $/).
  66. %% IS_URI_UNRESERVED(Character)
  67. -define(IS_URI_UNRESERVED(C),
  68. ?IS_ALPHA(C) orelse ?IS_DIGIT(C) orelse
  69. C =:= $- orelse C =:= $. orelse C =:= $_ orelse C =:= $~).
  70. %% IS_URI_SUB_DELIMS(Character)
  71. -define(IS_URI_SUB_DELIMS(C),
  72. C =:= $! orelse C =:= $$ orelse C =:= $& orelse C =:= $' orelse
  73. C =:= $( orelse C =:= $) orelse C =:= $* orelse C =:= $+ orelse
  74. C =:= $, orelse C =:= $; orelse C =:= $=).
  75. %% IS_VCHAR(Character)
  76. -define(IS_VCHAR(C), C =:= $\t; C > 31, C < 127).
  77. %% IS_VCHAR_OBS(Character)
  78. -define(IS_VCHAR_OBS(C), C =:= $\t; C > 31, C =/= 127).
  79. %% LC(Character)
  80. -define(LC(C), case C of
  81. $A -> $a;
  82. $B -> $b;
  83. $C -> $c;
  84. $D -> $d;
  85. $E -> $e;
  86. $F -> $f;
  87. $G -> $g;
  88. $H -> $h;
  89. $I -> $i;
  90. $J -> $j;
  91. $K -> $k;
  92. $L -> $l;
  93. $M -> $m;
  94. $N -> $n;
  95. $O -> $o;
  96. $P -> $p;
  97. $Q -> $q;
  98. $R -> $r;
  99. $S -> $s;
  100. $T -> $t;
  101. $U -> $u;
  102. $V -> $v;
  103. $W -> $w;
  104. $X -> $x;
  105. $Y -> $y;
  106. $Z -> $z;
  107. _ -> C
  108. end).
  109. %% INLINE_LOWERCASE(Function, Rest, Acc, ...)
  110. %%
  111. %% To be included at the end of a case block.
  112. %% Defined for up to 10 extra arguments.
  113. -define(INLINE_LOWERCASE(Function, Rest, Acc),
  114. $A -> Function(Rest, << Acc/binary, $a >>);
  115. $B -> Function(Rest, << Acc/binary, $b >>);
  116. $C -> Function(Rest, << Acc/binary, $c >>);
  117. $D -> Function(Rest, << Acc/binary, $d >>);
  118. $E -> Function(Rest, << Acc/binary, $e >>);
  119. $F -> Function(Rest, << Acc/binary, $f >>);
  120. $G -> Function(Rest, << Acc/binary, $g >>);
  121. $H -> Function(Rest, << Acc/binary, $h >>);
  122. $I -> Function(Rest, << Acc/binary, $i >>);
  123. $J -> Function(Rest, << Acc/binary, $j >>);
  124. $K -> Function(Rest, << Acc/binary, $k >>);
  125. $L -> Function(Rest, << Acc/binary, $l >>);
  126. $M -> Function(Rest, << Acc/binary, $m >>);
  127. $N -> Function(Rest, << Acc/binary, $n >>);
  128. $O -> Function(Rest, << Acc/binary, $o >>);
  129. $P -> Function(Rest, << Acc/binary, $p >>);
  130. $Q -> Function(Rest, << Acc/binary, $q >>);
  131. $R -> Function(Rest, << Acc/binary, $r >>);
  132. $S -> Function(Rest, << Acc/binary, $s >>);
  133. $T -> Function(Rest, << Acc/binary, $t >>);
  134. $U -> Function(Rest, << Acc/binary, $u >>);
  135. $V -> Function(Rest, << Acc/binary, $v >>);
  136. $W -> Function(Rest, << Acc/binary, $w >>);
  137. $X -> Function(Rest, << Acc/binary, $x >>);
  138. $Y -> Function(Rest, << Acc/binary, $y >>);
  139. $Z -> Function(Rest, << Acc/binary, $z >>);
  140. C -> Function(Rest, << Acc/binary, C >>)
  141. ).
  142. -define(INLINE_LOWERCASE(Function, Rest, A0, Acc),
  143. $A -> Function(Rest, A0, << Acc/binary, $a >>);
  144. $B -> Function(Rest, A0, << Acc/binary, $b >>);
  145. $C -> Function(Rest, A0, << Acc/binary, $c >>);
  146. $D -> Function(Rest, A0, << Acc/binary, $d >>);
  147. $E -> Function(Rest, A0, << Acc/binary, $e >>);
  148. $F -> Function(Rest, A0, << Acc/binary, $f >>);
  149. $G -> Function(Rest, A0, << Acc/binary, $g >>);
  150. $H -> Function(Rest, A0, << Acc/binary, $h >>);
  151. $I -> Function(Rest, A0, << Acc/binary, $i >>);
  152. $J -> Function(Rest, A0, << Acc/binary, $j >>);
  153. $K -> Function(Rest, A0, << Acc/binary, $k >>);
  154. $L -> Function(Rest, A0, << Acc/binary, $l >>);
  155. $M -> Function(Rest, A0, << Acc/binary, $m >>);
  156. $N -> Function(Rest, A0, << Acc/binary, $n >>);
  157. $O -> Function(Rest, A0, << Acc/binary, $o >>);
  158. $P -> Function(Rest, A0, << Acc/binary, $p >>);
  159. $Q -> Function(Rest, A0, << Acc/binary, $q >>);
  160. $R -> Function(Rest, A0, << Acc/binary, $r >>);
  161. $S -> Function(Rest, A0, << Acc/binary, $s >>);
  162. $T -> Function(Rest, A0, << Acc/binary, $t >>);
  163. $U -> Function(Rest, A0, << Acc/binary, $u >>);
  164. $V -> Function(Rest, A0, << Acc/binary, $v >>);
  165. $W -> Function(Rest, A0, << Acc/binary, $w >>);
  166. $X -> Function(Rest, A0, << Acc/binary, $x >>);
  167. $Y -> Function(Rest, A0, << Acc/binary, $y >>);
  168. $Z -> Function(Rest, A0, << Acc/binary, $z >>);
  169. C -> Function(Rest, A0, << Acc/binary, C >>)
  170. ).
  171. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, Acc),
  172. $A -> Function(Rest, A0, A1, << Acc/binary, $a >>);
  173. $B -> Function(Rest, A0, A1, << Acc/binary, $b >>);
  174. $C -> Function(Rest, A0, A1, << Acc/binary, $c >>);
  175. $D -> Function(Rest, A0, A1, << Acc/binary, $d >>);
  176. $E -> Function(Rest, A0, A1, << Acc/binary, $e >>);
  177. $F -> Function(Rest, A0, A1, << Acc/binary, $f >>);
  178. $G -> Function(Rest, A0, A1, << Acc/binary, $g >>);
  179. $H -> Function(Rest, A0, A1, << Acc/binary, $h >>);
  180. $I -> Function(Rest, A0, A1, << Acc/binary, $i >>);
  181. $J -> Function(Rest, A0, A1, << Acc/binary, $j >>);
  182. $K -> Function(Rest, A0, A1, << Acc/binary, $k >>);
  183. $L -> Function(Rest, A0, A1, << Acc/binary, $l >>);
  184. $M -> Function(Rest, A0, A1, << Acc/binary, $m >>);
  185. $N -> Function(Rest, A0, A1, << Acc/binary, $n >>);
  186. $O -> Function(Rest, A0, A1, << Acc/binary, $o >>);
  187. $P -> Function(Rest, A0, A1, << Acc/binary, $p >>);
  188. $Q -> Function(Rest, A0, A1, << Acc/binary, $q >>);
  189. $R -> Function(Rest, A0, A1, << Acc/binary, $r >>);
  190. $S -> Function(Rest, A0, A1, << Acc/binary, $s >>);
  191. $T -> Function(Rest, A0, A1, << Acc/binary, $t >>);
  192. $U -> Function(Rest, A0, A1, << Acc/binary, $u >>);
  193. $V -> Function(Rest, A0, A1, << Acc/binary, $v >>);
  194. $W -> Function(Rest, A0, A1, << Acc/binary, $w >>);
  195. $X -> Function(Rest, A0, A1, << Acc/binary, $x >>);
  196. $Y -> Function(Rest, A0, A1, << Acc/binary, $y >>);
  197. $Z -> Function(Rest, A0, A1, << Acc/binary, $z >>);
  198. C -> Function(Rest, A0, A1, << Acc/binary, C >>)
  199. ).
  200. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, A2, Acc),
  201. $A -> Function(Rest, A0, A1, A2, << Acc/binary, $a >>);
  202. $B -> Function(Rest, A0, A1, A2, << Acc/binary, $b >>);
  203. $C -> Function(Rest, A0, A1, A2, << Acc/binary, $c >>);
  204. $D -> Function(Rest, A0, A1, A2, << Acc/binary, $d >>);
  205. $E -> Function(Rest, A0, A1, A2, << Acc/binary, $e >>);
  206. $F -> Function(Rest, A0, A1, A2, << Acc/binary, $f >>);
  207. $G -> Function(Rest, A0, A1, A2, << Acc/binary, $g >>);
  208. $H -> Function(Rest, A0, A1, A2, << Acc/binary, $h >>);
  209. $I -> Function(Rest, A0, A1, A2, << Acc/binary, $i >>);
  210. $J -> Function(Rest, A0, A1, A2, << Acc/binary, $j >>);
  211. $K -> Function(Rest, A0, A1, A2, << Acc/binary, $k >>);
  212. $L -> Function(Rest, A0, A1, A2, << Acc/binary, $l >>);
  213. $M -> Function(Rest, A0, A1, A2, << Acc/binary, $m >>);
  214. $N -> Function(Rest, A0, A1, A2, << Acc/binary, $n >>);
  215. $O -> Function(Rest, A0, A1, A2, << Acc/binary, $o >>);
  216. $P -> Function(Rest, A0, A1, A2, << Acc/binary, $p >>);
  217. $Q -> Function(Rest, A0, A1, A2, << Acc/binary, $q >>);
  218. $R -> Function(Rest, A0, A1, A2, << Acc/binary, $r >>);
  219. $S -> Function(Rest, A0, A1, A2, << Acc/binary, $s >>);
  220. $T -> Function(Rest, A0, A1, A2, << Acc/binary, $t >>);
  221. $U -> Function(Rest, A0, A1, A2, << Acc/binary, $u >>);
  222. $V -> Function(Rest, A0, A1, A2, << Acc/binary, $v >>);
  223. $W -> Function(Rest, A0, A1, A2, << Acc/binary, $w >>);
  224. $X -> Function(Rest, A0, A1, A2, << Acc/binary, $x >>);
  225. $Y -> Function(Rest, A0, A1, A2, << Acc/binary, $y >>);
  226. $Z -> Function(Rest, A0, A1, A2, << Acc/binary, $z >>);
  227. C -> Function(Rest, A0, A1, A2, << Acc/binary, C >>)
  228. ).
  229. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, A2, A3, Acc),
  230. $A -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $a >>);
  231. $B -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $b >>);
  232. $C -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $c >>);
  233. $D -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $d >>);
  234. $E -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $e >>);
  235. $F -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $f >>);
  236. $G -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $g >>);
  237. $H -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $h >>);
  238. $I -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $i >>);
  239. $J -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $j >>);
  240. $K -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $k >>);
  241. $L -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $l >>);
  242. $M -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $m >>);
  243. $N -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $n >>);
  244. $O -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $o >>);
  245. $P -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $p >>);
  246. $Q -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $q >>);
  247. $R -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $r >>);
  248. $S -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $s >>);
  249. $T -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $t >>);
  250. $U -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $u >>);
  251. $V -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $v >>);
  252. $W -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $w >>);
  253. $X -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $x >>);
  254. $Y -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $y >>);
  255. $Z -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $z >>);
  256. C -> Function(Rest, A0, A1, A2, A3, << Acc/binary, C >>)
  257. ).
  258. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, A2, A3, A4, Acc),
  259. $A -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $a >>);
  260. $B -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $b >>);
  261. $C -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $c >>);
  262. $D -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $d >>);
  263. $E -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $e >>);
  264. $F -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $f >>);
  265. $G -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $g >>);
  266. $H -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $h >>);
  267. $I -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $i >>);
  268. $J -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $j >>);
  269. $K -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $k >>);
  270. $L -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $l >>);
  271. $M -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $m >>);
  272. $N -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $n >>);
  273. $O -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $o >>);
  274. $P -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $p >>);
  275. $Q -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $q >>);
  276. $R -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $r >>);
  277. $S -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $s >>);
  278. $T -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $t >>);
  279. $U -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $u >>);
  280. $V -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $v >>);
  281. $W -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $w >>);
  282. $X -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $x >>);
  283. $Y -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $y >>);
  284. $Z -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $z >>);
  285. C -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, C >>)
  286. ).
  287. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, A2, A3, A4, A5, Acc),
  288. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $a >>);
  289. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $b >>);
  290. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $c >>);
  291. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $d >>);
  292. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $e >>);
  293. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $f >>);
  294. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $g >>);
  295. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $h >>);
  296. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $i >>);
  297. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $j >>);
  298. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $k >>);
  299. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $l >>);
  300. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $m >>);
  301. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $n >>);
  302. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $o >>);
  303. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $p >>);
  304. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $q >>);
  305. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $r >>);
  306. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $s >>);
  307. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $t >>);
  308. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $u >>);
  309. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $v >>);
  310. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $w >>);
  311. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $x >>);
  312. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $y >>);
  313. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $z >>);
  314. C -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, C >>)
  315. ).
  316. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, A2, A3, A4, A5, A6, Acc),
  317. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $a >>);
  318. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $b >>);
  319. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $c >>);
  320. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $d >>);
  321. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $e >>);
  322. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $f >>);
  323. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $g >>);
  324. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $h >>);
  325. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $i >>);
  326. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $j >>);
  327. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $k >>);
  328. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $l >>);
  329. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $m >>);
  330. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $n >>);
  331. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $o >>);
  332. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $p >>);
  333. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $q >>);
  334. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $r >>);
  335. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $s >>);
  336. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $t >>);
  337. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $u >>);
  338. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $v >>);
  339. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $w >>);
  340. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $x >>);
  341. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $y >>);
  342. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $z >>);
  343. C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, C >>)
  344. ).
  345. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, Acc),
  346. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $a >>);
  347. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $b >>);
  348. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $c >>);
  349. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $d >>);
  350. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $e >>);
  351. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $f >>);
  352. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $g >>);
  353. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $h >>);
  354. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $i >>);
  355. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $j >>);
  356. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $k >>);
  357. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $l >>);
  358. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $m >>);
  359. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $n >>);
  360. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $o >>);
  361. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $p >>);
  362. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $q >>);
  363. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $r >>);
  364. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $s >>);
  365. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $t >>);
  366. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $u >>);
  367. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $v >>);
  368. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $w >>);
  369. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $x >>);
  370. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $y >>);
  371. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $z >>);
  372. C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, C >>)
  373. ).
  374. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, Acc),
  375. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $a >>);
  376. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $b >>);
  377. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $c >>);
  378. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $d >>);
  379. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $e >>);
  380. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $f >>);
  381. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $g >>);
  382. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $h >>);
  383. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $i >>);
  384. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $j >>);
  385. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $k >>);
  386. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $l >>);
  387. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $m >>);
  388. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $n >>);
  389. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $o >>);
  390. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $p >>);
  391. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $q >>);
  392. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $r >>);
  393. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $s >>);
  394. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $t >>);
  395. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $u >>);
  396. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $v >>);
  397. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $w >>);
  398. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $x >>);
  399. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $y >>);
  400. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $z >>);
  401. C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, C >>)
  402. ).
  403. -define(INLINE_LOWERCASE(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, Acc),
  404. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $a >>);
  405. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $b >>);
  406. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $c >>);
  407. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $d >>);
  408. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $e >>);
  409. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $f >>);
  410. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $g >>);
  411. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $h >>);
  412. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $i >>);
  413. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $j >>);
  414. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $k >>);
  415. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $l >>);
  416. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $m >>);
  417. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $n >>);
  418. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $o >>);
  419. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $p >>);
  420. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $q >>);
  421. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $r >>);
  422. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $s >>);
  423. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $t >>);
  424. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $u >>);
  425. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $v >>);
  426. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $w >>);
  427. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $x >>);
  428. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $y >>);
  429. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $z >>);
  430. C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, C >>)
  431. ).
  432. %% INLINE_LOWERCASE_BC(Bin)
  433. %%
  434. %% Lowercase the entire binary string in a binary comprehension.
  435. -define(INLINE_LOWERCASE_BC(Bin),
  436. << << case C of
  437. $A -> $a;
  438. $B -> $b;
  439. $C -> $c;
  440. $D -> $d;
  441. $E -> $e;
  442. $F -> $f;
  443. $G -> $g;
  444. $H -> $h;
  445. $I -> $i;
  446. $J -> $j;
  447. $K -> $k;
  448. $L -> $l;
  449. $M -> $m;
  450. $N -> $n;
  451. $O -> $o;
  452. $P -> $p;
  453. $Q -> $q;
  454. $R -> $r;
  455. $S -> $s;
  456. $T -> $t;
  457. $U -> $u;
  458. $V -> $v;
  459. $W -> $w;
  460. $X -> $x;
  461. $Y -> $y;
  462. $Z -> $z;
  463. C -> C
  464. end >> || << C >> <= Bin >>).
  465. -endif.