cow_inline.hrl 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. %% Copyright (c) 2014-2023, 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. %% LC(Character)
  17. -define(LC(C), case C of
  18. $A -> $a;
  19. $B -> $b;
  20. $C -> $c;
  21. $D -> $d;
  22. $E -> $e;
  23. $F -> $f;
  24. $G -> $g;
  25. $H -> $h;
  26. $I -> $i;
  27. $J -> $j;
  28. $K -> $k;
  29. $L -> $l;
  30. $M -> $m;
  31. $N -> $n;
  32. $O -> $o;
  33. $P -> $p;
  34. $Q -> $q;
  35. $R -> $r;
  36. $S -> $s;
  37. $T -> $t;
  38. $U -> $u;
  39. $V -> $v;
  40. $W -> $w;
  41. $X -> $x;
  42. $Y -> $y;
  43. $Z -> $z;
  44. _ -> C
  45. end).
  46. %% LOWER(Bin)
  47. %%
  48. %% Lowercase the entire binary string in a binary comprehension.
  49. -define(LOWER(Bin), << << ?LC(C) >> || << C >> <= Bin >>).
  50. %% LOWERCASE(Function, Rest, Acc, ...)
  51. %%
  52. %% To be included at the end of a case block.
  53. %% Defined for up to 10 extra arguments.
  54. -define(LOWER(Function, Rest, Acc), case C of
  55. $A -> Function(Rest, << Acc/binary, $a >>);
  56. $B -> Function(Rest, << Acc/binary, $b >>);
  57. $C -> Function(Rest, << Acc/binary, $c >>);
  58. $D -> Function(Rest, << Acc/binary, $d >>);
  59. $E -> Function(Rest, << Acc/binary, $e >>);
  60. $F -> Function(Rest, << Acc/binary, $f >>);
  61. $G -> Function(Rest, << Acc/binary, $g >>);
  62. $H -> Function(Rest, << Acc/binary, $h >>);
  63. $I -> Function(Rest, << Acc/binary, $i >>);
  64. $J -> Function(Rest, << Acc/binary, $j >>);
  65. $K -> Function(Rest, << Acc/binary, $k >>);
  66. $L -> Function(Rest, << Acc/binary, $l >>);
  67. $M -> Function(Rest, << Acc/binary, $m >>);
  68. $N -> Function(Rest, << Acc/binary, $n >>);
  69. $O -> Function(Rest, << Acc/binary, $o >>);
  70. $P -> Function(Rest, << Acc/binary, $p >>);
  71. $Q -> Function(Rest, << Acc/binary, $q >>);
  72. $R -> Function(Rest, << Acc/binary, $r >>);
  73. $S -> Function(Rest, << Acc/binary, $s >>);
  74. $T -> Function(Rest, << Acc/binary, $t >>);
  75. $U -> Function(Rest, << Acc/binary, $u >>);
  76. $V -> Function(Rest, << Acc/binary, $v >>);
  77. $W -> Function(Rest, << Acc/binary, $w >>);
  78. $X -> Function(Rest, << Acc/binary, $x >>);
  79. $Y -> Function(Rest, << Acc/binary, $y >>);
  80. $Z -> Function(Rest, << Acc/binary, $z >>);
  81. C -> Function(Rest, << Acc/binary, C >>)
  82. end).
  83. -define(LOWER(Function, Rest, A0, Acc), case C of
  84. $A -> Function(Rest, A0, << Acc/binary, $a >>);
  85. $B -> Function(Rest, A0, << Acc/binary, $b >>);
  86. $C -> Function(Rest, A0, << Acc/binary, $c >>);
  87. $D -> Function(Rest, A0, << Acc/binary, $d >>);
  88. $E -> Function(Rest, A0, << Acc/binary, $e >>);
  89. $F -> Function(Rest, A0, << Acc/binary, $f >>);
  90. $G -> Function(Rest, A0, << Acc/binary, $g >>);
  91. $H -> Function(Rest, A0, << Acc/binary, $h >>);
  92. $I -> Function(Rest, A0, << Acc/binary, $i >>);
  93. $J -> Function(Rest, A0, << Acc/binary, $j >>);
  94. $K -> Function(Rest, A0, << Acc/binary, $k >>);
  95. $L -> Function(Rest, A0, << Acc/binary, $l >>);
  96. $M -> Function(Rest, A0, << Acc/binary, $m >>);
  97. $N -> Function(Rest, A0, << Acc/binary, $n >>);
  98. $O -> Function(Rest, A0, << Acc/binary, $o >>);
  99. $P -> Function(Rest, A0, << Acc/binary, $p >>);
  100. $Q -> Function(Rest, A0, << Acc/binary, $q >>);
  101. $R -> Function(Rest, A0, << Acc/binary, $r >>);
  102. $S -> Function(Rest, A0, << Acc/binary, $s >>);
  103. $T -> Function(Rest, A0, << Acc/binary, $t >>);
  104. $U -> Function(Rest, A0, << Acc/binary, $u >>);
  105. $V -> Function(Rest, A0, << Acc/binary, $v >>);
  106. $W -> Function(Rest, A0, << Acc/binary, $w >>);
  107. $X -> Function(Rest, A0, << Acc/binary, $x >>);
  108. $Y -> Function(Rest, A0, << Acc/binary, $y >>);
  109. $Z -> Function(Rest, A0, << Acc/binary, $z >>);
  110. C -> Function(Rest, A0, << Acc/binary, C >>)
  111. end).
  112. -define(LOWER(Function, Rest, A0, A1, Acc), case C of
  113. $A -> Function(Rest, A0, A1, << Acc/binary, $a >>);
  114. $B -> Function(Rest, A0, A1, << Acc/binary, $b >>);
  115. $C -> Function(Rest, A0, A1, << Acc/binary, $c >>);
  116. $D -> Function(Rest, A0, A1, << Acc/binary, $d >>);
  117. $E -> Function(Rest, A0, A1, << Acc/binary, $e >>);
  118. $F -> Function(Rest, A0, A1, << Acc/binary, $f >>);
  119. $G -> Function(Rest, A0, A1, << Acc/binary, $g >>);
  120. $H -> Function(Rest, A0, A1, << Acc/binary, $h >>);
  121. $I -> Function(Rest, A0, A1, << Acc/binary, $i >>);
  122. $J -> Function(Rest, A0, A1, << Acc/binary, $j >>);
  123. $K -> Function(Rest, A0, A1, << Acc/binary, $k >>);
  124. $L -> Function(Rest, A0, A1, << Acc/binary, $l >>);
  125. $M -> Function(Rest, A0, A1, << Acc/binary, $m >>);
  126. $N -> Function(Rest, A0, A1, << Acc/binary, $n >>);
  127. $O -> Function(Rest, A0, A1, << Acc/binary, $o >>);
  128. $P -> Function(Rest, A0, A1, << Acc/binary, $p >>);
  129. $Q -> Function(Rest, A0, A1, << Acc/binary, $q >>);
  130. $R -> Function(Rest, A0, A1, << Acc/binary, $r >>);
  131. $S -> Function(Rest, A0, A1, << Acc/binary, $s >>);
  132. $T -> Function(Rest, A0, A1, << Acc/binary, $t >>);
  133. $U -> Function(Rest, A0, A1, << Acc/binary, $u >>);
  134. $V -> Function(Rest, A0, A1, << Acc/binary, $v >>);
  135. $W -> Function(Rest, A0, A1, << Acc/binary, $w >>);
  136. $X -> Function(Rest, A0, A1, << Acc/binary, $x >>);
  137. $Y -> Function(Rest, A0, A1, << Acc/binary, $y >>);
  138. $Z -> Function(Rest, A0, A1, << Acc/binary, $z >>);
  139. C -> Function(Rest, A0, A1, << Acc/binary, C >>)
  140. end).
  141. -define(LOWER(Function, Rest, A0, A1, A2, Acc), case C of
  142. $A -> Function(Rest, A0, A1, A2, << Acc/binary, $a >>);
  143. $B -> Function(Rest, A0, A1, A2, << Acc/binary, $b >>);
  144. $C -> Function(Rest, A0, A1, A2, << Acc/binary, $c >>);
  145. $D -> Function(Rest, A0, A1, A2, << Acc/binary, $d >>);
  146. $E -> Function(Rest, A0, A1, A2, << Acc/binary, $e >>);
  147. $F -> Function(Rest, A0, A1, A2, << Acc/binary, $f >>);
  148. $G -> Function(Rest, A0, A1, A2, << Acc/binary, $g >>);
  149. $H -> Function(Rest, A0, A1, A2, << Acc/binary, $h >>);
  150. $I -> Function(Rest, A0, A1, A2, << Acc/binary, $i >>);
  151. $J -> Function(Rest, A0, A1, A2, << Acc/binary, $j >>);
  152. $K -> Function(Rest, A0, A1, A2, << Acc/binary, $k >>);
  153. $L -> Function(Rest, A0, A1, A2, << Acc/binary, $l >>);
  154. $M -> Function(Rest, A0, A1, A2, << Acc/binary, $m >>);
  155. $N -> Function(Rest, A0, A1, A2, << Acc/binary, $n >>);
  156. $O -> Function(Rest, A0, A1, A2, << Acc/binary, $o >>);
  157. $P -> Function(Rest, A0, A1, A2, << Acc/binary, $p >>);
  158. $Q -> Function(Rest, A0, A1, A2, << Acc/binary, $q >>);
  159. $R -> Function(Rest, A0, A1, A2, << Acc/binary, $r >>);
  160. $S -> Function(Rest, A0, A1, A2, << Acc/binary, $s >>);
  161. $T -> Function(Rest, A0, A1, A2, << Acc/binary, $t >>);
  162. $U -> Function(Rest, A0, A1, A2, << Acc/binary, $u >>);
  163. $V -> Function(Rest, A0, A1, A2, << Acc/binary, $v >>);
  164. $W -> Function(Rest, A0, A1, A2, << Acc/binary, $w >>);
  165. $X -> Function(Rest, A0, A1, A2, << Acc/binary, $x >>);
  166. $Y -> Function(Rest, A0, A1, A2, << Acc/binary, $y >>);
  167. $Z -> Function(Rest, A0, A1, A2, << Acc/binary, $z >>);
  168. C -> Function(Rest, A0, A1, A2, << Acc/binary, C >>)
  169. end).
  170. -define(LOWER(Function, Rest, A0, A1, A2, A3, Acc), case C of
  171. $A -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $a >>);
  172. $B -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $b >>);
  173. $C -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $c >>);
  174. $D -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $d >>);
  175. $E -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $e >>);
  176. $F -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $f >>);
  177. $G -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $g >>);
  178. $H -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $h >>);
  179. $I -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $i >>);
  180. $J -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $j >>);
  181. $K -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $k >>);
  182. $L -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $l >>);
  183. $M -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $m >>);
  184. $N -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $n >>);
  185. $O -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $o >>);
  186. $P -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $p >>);
  187. $Q -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $q >>);
  188. $R -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $r >>);
  189. $S -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $s >>);
  190. $T -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $t >>);
  191. $U -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $u >>);
  192. $V -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $v >>);
  193. $W -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $w >>);
  194. $X -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $x >>);
  195. $Y -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $y >>);
  196. $Z -> Function(Rest, A0, A1, A2, A3, << Acc/binary, $z >>);
  197. C -> Function(Rest, A0, A1, A2, A3, << Acc/binary, C >>)
  198. end).
  199. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, Acc), case C of
  200. $A -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $a >>);
  201. $B -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $b >>);
  202. $C -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $c >>);
  203. $D -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $d >>);
  204. $E -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $e >>);
  205. $F -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $f >>);
  206. $G -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $g >>);
  207. $H -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $h >>);
  208. $I -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $i >>);
  209. $J -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $j >>);
  210. $K -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $k >>);
  211. $L -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $l >>);
  212. $M -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $m >>);
  213. $N -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $n >>);
  214. $O -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $o >>);
  215. $P -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $p >>);
  216. $Q -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $q >>);
  217. $R -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $r >>);
  218. $S -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $s >>);
  219. $T -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $t >>);
  220. $U -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $u >>);
  221. $V -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $v >>);
  222. $W -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $w >>);
  223. $X -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $x >>);
  224. $Y -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $y >>);
  225. $Z -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, $z >>);
  226. C -> Function(Rest, A0, A1, A2, A3, A4, << Acc/binary, C >>)
  227. end).
  228. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, Acc), case C of
  229. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $a >>);
  230. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $b >>);
  231. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $c >>);
  232. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $d >>);
  233. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $e >>);
  234. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $f >>);
  235. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $g >>);
  236. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $h >>);
  237. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $i >>);
  238. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $j >>);
  239. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $k >>);
  240. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $l >>);
  241. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $m >>);
  242. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $n >>);
  243. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $o >>);
  244. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $p >>);
  245. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $q >>);
  246. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $r >>);
  247. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $s >>);
  248. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $t >>);
  249. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $u >>);
  250. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $v >>);
  251. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $w >>);
  252. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $x >>);
  253. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $y >>);
  254. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, $z >>);
  255. C -> Function(Rest, A0, A1, A2, A3, A4, A5, << Acc/binary, C >>)
  256. end).
  257. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, A6, Acc), case C of
  258. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $a >>);
  259. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $b >>);
  260. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $c >>);
  261. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $d >>);
  262. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $e >>);
  263. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $f >>);
  264. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $g >>);
  265. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $h >>);
  266. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $i >>);
  267. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $j >>);
  268. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $k >>);
  269. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $l >>);
  270. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $m >>);
  271. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $n >>);
  272. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $o >>);
  273. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $p >>);
  274. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $q >>);
  275. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $r >>);
  276. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $s >>);
  277. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $t >>);
  278. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $u >>);
  279. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $v >>);
  280. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $w >>);
  281. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $x >>);
  282. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $y >>);
  283. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, $z >>);
  284. C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, << Acc/binary, C >>)
  285. end).
  286. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, Acc), case C of
  287. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $a >>);
  288. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $b >>);
  289. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $c >>);
  290. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $d >>);
  291. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $e >>);
  292. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $f >>);
  293. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $g >>);
  294. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $h >>);
  295. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $i >>);
  296. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $j >>);
  297. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $k >>);
  298. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $l >>);
  299. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $m >>);
  300. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $n >>);
  301. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $o >>);
  302. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $p >>);
  303. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $q >>);
  304. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $r >>);
  305. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $s >>);
  306. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $t >>);
  307. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $u >>);
  308. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $v >>);
  309. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $w >>);
  310. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $x >>);
  311. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $y >>);
  312. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, $z >>);
  313. C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, << Acc/binary, C >>)
  314. end).
  315. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, Acc), case C of
  316. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $a >>);
  317. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $b >>);
  318. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $c >>);
  319. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $d >>);
  320. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $e >>);
  321. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $f >>);
  322. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $g >>);
  323. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $h >>);
  324. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $i >>);
  325. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $j >>);
  326. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $k >>);
  327. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $l >>);
  328. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $m >>);
  329. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $n >>);
  330. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $o >>);
  331. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $p >>);
  332. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $q >>);
  333. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $r >>);
  334. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $s >>);
  335. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $t >>);
  336. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $u >>);
  337. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $v >>);
  338. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $w >>);
  339. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $x >>);
  340. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $y >>);
  341. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, $z >>);
  342. C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, << Acc/binary, C >>)
  343. end).
  344. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, Acc), case C of
  345. $A -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $a >>);
  346. $B -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $b >>);
  347. $C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $c >>);
  348. $D -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $d >>);
  349. $E -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $e >>);
  350. $F -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $f >>);
  351. $G -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $g >>);
  352. $H -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $h >>);
  353. $I -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $i >>);
  354. $J -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $j >>);
  355. $K -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $k >>);
  356. $L -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $l >>);
  357. $M -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $m >>);
  358. $N -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $n >>);
  359. $O -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $o >>);
  360. $P -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $p >>);
  361. $Q -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $q >>);
  362. $R -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $r >>);
  363. $S -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $s >>);
  364. $T -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $t >>);
  365. $U -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $u >>);
  366. $V -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $v >>);
  367. $W -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $w >>);
  368. $X -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $x >>);
  369. $Y -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $y >>);
  370. $Z -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, $z >>);
  371. C -> Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, << Acc/binary, C >>)
  372. end).
  373. %% HEX(C)
  374. -define(HEX(C), (?HEXHL(C bsr 4)), (?HEXHL(C band 16#0f))).
  375. -define(HEXHL(HL),
  376. case HL of
  377. 0 -> $0;
  378. 1 -> $1;
  379. 2 -> $2;
  380. 3 -> $3;
  381. 4 -> $4;
  382. 5 -> $5;
  383. 6 -> $6;
  384. 7 -> $7;
  385. 8 -> $8;
  386. 9 -> $9;
  387. 10 -> $A;
  388. 11 -> $B;
  389. 12 -> $C;
  390. 13 -> $D;
  391. 14 -> $E;
  392. 15 -> $F
  393. end
  394. ).
  395. %% UNHEX(H, L)
  396. -define(UNHEX(H, L), (?UNHEX(H) bsl 4 bor ?UNHEX(L))).
  397. -define(UNHEX(C),
  398. case C of
  399. $0 -> 0;
  400. $1 -> 1;
  401. $2 -> 2;
  402. $3 -> 3;
  403. $4 -> 4;
  404. $5 -> 5;
  405. $6 -> 6;
  406. $7 -> 7;
  407. $8 -> 8;
  408. $9 -> 9;
  409. $A -> 10;
  410. $B -> 11;
  411. $C -> 12;
  412. $D -> 13;
  413. $E -> 14;
  414. $F -> 15;
  415. $a -> 10;
  416. $b -> 11;
  417. $c -> 12;
  418. $d -> 13;
  419. $e -> 14;
  420. $f -> 15
  421. end
  422. ).
  423. -endif.