You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

582 line
49 KiB

3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
  1. %% Copyright (c) 2014-2018, 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 ->
  230. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $a>>);
  231. $B ->
  232. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $b>>);
  233. $C ->
  234. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $c>>);
  235. $D ->
  236. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $d>>);
  237. $E ->
  238. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $e>>);
  239. $F ->
  240. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $f>>);
  241. $G ->
  242. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $g>>);
  243. $H ->
  244. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $h>>);
  245. $I ->
  246. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $i>>);
  247. $J ->
  248. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $j>>);
  249. $K ->
  250. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $k>>);
  251. $L ->
  252. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $l>>);
  253. $M ->
  254. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $m>>);
  255. $N ->
  256. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $n>>);
  257. $O ->
  258. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $o>>);
  259. $P ->
  260. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $p>>);
  261. $Q ->
  262. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $q>>);
  263. $R ->
  264. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $r>>);
  265. $S ->
  266. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $s>>);
  267. $T ->
  268. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $t>>);
  269. $U ->
  270. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $u>>);
  271. $V ->
  272. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $v>>);
  273. $W ->
  274. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $w>>);
  275. $X ->
  276. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $x>>);
  277. $Y ->
  278. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $y>>);
  279. $Z ->
  280. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, $z>>);
  281. C ->
  282. Function(Rest, A0, A1, A2, A3, A4, A5, <<Acc/binary, C>>)
  283. end).
  284. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, A6, Acc), case C of
  285. $A ->
  286. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $a>>);
  287. $B ->
  288. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $b>>);
  289. $C ->
  290. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $c>>);
  291. $D ->
  292. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $d>>);
  293. $E ->
  294. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $e>>);
  295. $F ->
  296. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $f>>);
  297. $G ->
  298. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $g>>);
  299. $H ->
  300. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $h>>);
  301. $I ->
  302. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $i>>);
  303. $J ->
  304. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $j>>);
  305. $K ->
  306. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $k>>);
  307. $L ->
  308. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $l>>);
  309. $M ->
  310. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $m>>);
  311. $N ->
  312. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $n>>);
  313. $O ->
  314. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $o>>);
  315. $P ->
  316. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $p>>);
  317. $Q ->
  318. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $q>>);
  319. $R ->
  320. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $r>>);
  321. $S ->
  322. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $s>>);
  323. $T ->
  324. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $t>>);
  325. $U ->
  326. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $u>>);
  327. $V ->
  328. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $v>>);
  329. $W ->
  330. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $w>>);
  331. $X ->
  332. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $x>>);
  333. $Y ->
  334. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $y>>);
  335. $Z ->
  336. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, $z>>);
  337. C ->
  338. Function(Rest, A0, A1, A2, A3, A4, A5, A6, <<Acc/binary, C>>)
  339. end).
  340. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, Acc), case C of
  341. $A ->
  342. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $a>>);
  343. $B ->
  344. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $b>>);
  345. $C ->
  346. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $c>>);
  347. $D ->
  348. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $d>>);
  349. $E ->
  350. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $e>>);
  351. $F ->
  352. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $f>>);
  353. $G ->
  354. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $g>>);
  355. $H ->
  356. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $h>>);
  357. $I ->
  358. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $i>>);
  359. $J ->
  360. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $j>>);
  361. $K ->
  362. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $k>>);
  363. $L ->
  364. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $l>>);
  365. $M ->
  366. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $m>>);
  367. $N ->
  368. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $n>>);
  369. $O ->
  370. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $o>>);
  371. $P ->
  372. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $p>>);
  373. $Q ->
  374. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $q>>);
  375. $R ->
  376. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $r>>);
  377. $S ->
  378. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $s>>);
  379. $T ->
  380. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $t>>);
  381. $U ->
  382. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $u>>);
  383. $V ->
  384. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $v>>);
  385. $W ->
  386. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $w>>);
  387. $X ->
  388. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $x>>);
  389. $Y ->
  390. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $y>>);
  391. $Z ->
  392. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, $z>>);
  393. C ->
  394. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, <<Acc/binary, C>>)
  395. end).
  396. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, Acc), case C of
  397. $A ->
  398. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $a>>);
  399. $B ->
  400. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $b>>);
  401. $C ->
  402. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $c>>);
  403. $D ->
  404. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $d>>);
  405. $E ->
  406. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $e>>);
  407. $F ->
  408. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $f>>);
  409. $G ->
  410. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $g>>);
  411. $H ->
  412. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $h>>);
  413. $I ->
  414. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $i>>);
  415. $J ->
  416. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $j>>);
  417. $K ->
  418. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $k>>);
  419. $L ->
  420. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $l>>);
  421. $M ->
  422. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $m>>);
  423. $N ->
  424. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $n>>);
  425. $O ->
  426. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $o>>);
  427. $P ->
  428. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $p>>);
  429. $Q ->
  430. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $q>>);
  431. $R ->
  432. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $r>>);
  433. $S ->
  434. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $s>>);
  435. $T ->
  436. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $t>>);
  437. $U ->
  438. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $u>>);
  439. $V ->
  440. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $v>>);
  441. $W ->
  442. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $w>>);
  443. $X ->
  444. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $x>>);
  445. $Y ->
  446. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $y>>);
  447. $Z ->
  448. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, $z>>);
  449. C ->
  450. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, <<Acc/binary, C>>)
  451. end).
  452. -define(LOWER(Function, Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, Acc), case C of
  453. $A ->
  454. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $a>>);
  455. $B ->
  456. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $b>>);
  457. $C ->
  458. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $c>>);
  459. $D ->
  460. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $d>>);
  461. $E ->
  462. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $e>>);
  463. $F ->
  464. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $f>>);
  465. $G ->
  466. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $g>>);
  467. $H ->
  468. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $h>>);
  469. $I ->
  470. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $i>>);
  471. $J ->
  472. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $j>>);
  473. $K ->
  474. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $k>>);
  475. $L ->
  476. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $l>>);
  477. $M ->
  478. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $m>>);
  479. $N ->
  480. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $n>>);
  481. $O ->
  482. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $o>>);
  483. $P ->
  484. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $p>>);
  485. $Q ->
  486. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $q>>);
  487. $R ->
  488. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $r>>);
  489. $S ->
  490. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $s>>);
  491. $T ->
  492. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $t>>);
  493. $U ->
  494. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $u>>);
  495. $V ->
  496. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $v>>);
  497. $W ->
  498. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $w>>);
  499. $X ->
  500. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $x>>);
  501. $Y ->
  502. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $y>>);
  503. $Z ->
  504. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, $z>>);
  505. C ->
  506. Function(Rest, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, <<Acc/binary, C>>)
  507. end).
  508. %% HEX(C)
  509. -define(HEX(C), (?HEXHL(C bsr 4)), (?HEXHL(C band 16#0f))).
  510. -define(HEXHL(HL),
  511. case HL of
  512. 0 -> $0;
  513. 1 -> $1;
  514. 2 -> $2;
  515. 3 -> $3;
  516. 4 -> $4;
  517. 5 -> $5;
  518. 6 -> $6;
  519. 7 -> $7;
  520. 8 -> $8;
  521. 9 -> $9;
  522. 10 -> $A;
  523. 11 -> $B;
  524. 12 -> $C;
  525. 13 -> $D;
  526. 14 -> $E;
  527. 15 -> $F
  528. end
  529. ).
  530. %% UNHEX(H, L)
  531. -define(UNHEX(H, L), (?UNHEX(H) bsl 4 bor ?UNHEX(L))).
  532. -define(UNHEX(C),
  533. case C of
  534. $0 -> 0;
  535. $1 -> 1;
  536. $2 -> 2;
  537. $3 -> 3;
  538. $4 -> 4;
  539. $5 -> 5;
  540. $6 -> 6;
  541. $7 -> 7;
  542. $8 -> 8;
  543. $9 -> 9;
  544. $A -> 10;
  545. $B -> 11;
  546. $C -> 12;
  547. $D -> 13;
  548. $E -> 14;
  549. $F -> 15;
  550. $a -> 10;
  551. $b -> 11;
  552. $c -> 12;
  553. $d -> 13;
  554. $e -> 14;
  555. $f -> 15
  556. end
  557. ).
  558. -endif.