|
68 | 68 | string/6
|
69 | 69 | ]}).
|
70 | 70 |
|
71 |
| --include("elixir_json.hrl"). |
| 71 | +%% A lot of the macros below use multi-value comparisons where |
| 72 | +%% range checks would have worked just fine. This is because |
| 73 | +%% the compiler & JIT can emit better code in some cases when |
| 74 | +%% multiple clauses are to be dispatched based on such sets |
| 75 | +%% of values. They'll generate an efficient "jump table", |
| 76 | +%% which gets to the correct clause in one go, rather |
| 77 | +%% than going through a set of comparisons. |
| 78 | +%% However, this might not always be the best way (see is_0_to_9), |
| 79 | +%% so as always with any performance work - measure, don't guess! |
| 80 | + |
| 81 | +-define(is_1_to_9(X), |
| 82 | + X =:= $1 orelse |
| 83 | + X =:= $2 orelse |
| 84 | + X =:= $3 orelse |
| 85 | + X =:= $4 orelse |
| 86 | + X =:= $5 orelse |
| 87 | + X =:= $6 orelse |
| 88 | + X =:= $7 orelse |
| 89 | + X =:= $8 orelse |
| 90 | + X =:= $9 |
| 91 | +). |
| 92 | + |
| 93 | +-define(is_0_to_9(X), X >= $0 andalso X =< $9). |
| 94 | + |
| 95 | +-define(is_ws(X), X =:= $\s; X =:= $\t; X =:= $\r; X =:= $\n). |
| 96 | + |
| 97 | +-define(is_ascii_escape(Byte), |
| 98 | + Byte =:= 0 orelse |
| 99 | + Byte =:= 1 orelse |
| 100 | + Byte =:= 2 orelse |
| 101 | + Byte =:= 3 orelse |
| 102 | + Byte =:= 4 orelse |
| 103 | + Byte =:= 5 orelse |
| 104 | + Byte =:= 6 orelse |
| 105 | + Byte =:= 7 orelse |
| 106 | + Byte =:= 8 orelse |
| 107 | + Byte =:= 9 orelse |
| 108 | + Byte =:= 10 orelse |
| 109 | + Byte =:= 11 orelse |
| 110 | + Byte =:= 12 orelse |
| 111 | + Byte =:= 13 orelse |
| 112 | + Byte =:= 14 orelse |
| 113 | + Byte =:= 15 orelse |
| 114 | + Byte =:= 16 orelse |
| 115 | + Byte =:= 17 orelse |
| 116 | + Byte =:= 18 orelse |
| 117 | + Byte =:= 19 orelse |
| 118 | + Byte =:= 20 orelse |
| 119 | + Byte =:= 21 orelse |
| 120 | + Byte =:= 22 orelse |
| 121 | + Byte =:= 23 orelse |
| 122 | + Byte =:= 24 orelse |
| 123 | + Byte =:= 25 orelse |
| 124 | + Byte =:= 26 orelse |
| 125 | + Byte =:= 27 orelse |
| 126 | + Byte =:= 28 orelse |
| 127 | + Byte =:= 29 orelse |
| 128 | + Byte =:= 30 orelse |
| 129 | + Byte =:= 31 orelse |
| 130 | + Byte =:= 34 orelse |
| 131 | + Byte =:= 92 |
| 132 | +). |
| 133 | +-define(is_ascii_plain(Byte), |
| 134 | + Byte =:= 32 orelse |
| 135 | + Byte =:= 33 orelse |
| 136 | + Byte =:= 35 orelse |
| 137 | + Byte =:= 36 orelse |
| 138 | + Byte =:= 37 orelse |
| 139 | + Byte =:= 38 orelse |
| 140 | + Byte =:= 39 orelse |
| 141 | + Byte =:= 40 orelse |
| 142 | + Byte =:= 41 orelse |
| 143 | + Byte =:= 42 orelse |
| 144 | + Byte =:= 43 orelse |
| 145 | + Byte =:= 44 orelse |
| 146 | + Byte =:= 45 orelse |
| 147 | + Byte =:= 46 orelse |
| 148 | + Byte =:= 47 orelse |
| 149 | + Byte =:= 48 orelse |
| 150 | + Byte =:= 49 orelse |
| 151 | + Byte =:= 50 orelse |
| 152 | + Byte =:= 51 orelse |
| 153 | + Byte =:= 52 orelse |
| 154 | + Byte =:= 53 orelse |
| 155 | + Byte =:= 54 orelse |
| 156 | + Byte =:= 55 orelse |
| 157 | + Byte =:= 56 orelse |
| 158 | + Byte =:= 57 orelse |
| 159 | + Byte =:= 58 orelse |
| 160 | + Byte =:= 59 orelse |
| 161 | + Byte =:= 60 orelse |
| 162 | + Byte =:= 61 orelse |
| 163 | + Byte =:= 62 orelse |
| 164 | + Byte =:= 63 orelse |
| 165 | + Byte =:= 64 orelse |
| 166 | + Byte =:= 65 orelse |
| 167 | + Byte =:= 66 orelse |
| 168 | + Byte =:= 67 orelse |
| 169 | + Byte =:= 68 orelse |
| 170 | + Byte =:= 69 orelse |
| 171 | + Byte =:= 70 orelse |
| 172 | + Byte =:= 71 orelse |
| 173 | + Byte =:= 72 orelse |
| 174 | + Byte =:= 73 orelse |
| 175 | + Byte =:= 74 orelse |
| 176 | + Byte =:= 75 orelse |
| 177 | + Byte =:= 76 orelse |
| 178 | + Byte =:= 77 orelse |
| 179 | + Byte =:= 78 orelse |
| 180 | + Byte =:= 79 orelse |
| 181 | + Byte =:= 80 orelse |
| 182 | + Byte =:= 81 orelse |
| 183 | + Byte =:= 82 orelse |
| 184 | + Byte =:= 83 orelse |
| 185 | + Byte =:= 84 orelse |
| 186 | + Byte =:= 85 orelse |
| 187 | + Byte =:= 86 orelse |
| 188 | + Byte =:= 87 orelse |
| 189 | + Byte =:= 88 orelse |
| 190 | + Byte =:= 89 orelse |
| 191 | + Byte =:= 90 orelse |
| 192 | + Byte =:= 91 orelse |
| 193 | + Byte =:= 93 orelse |
| 194 | + Byte =:= 94 orelse |
| 195 | + Byte =:= 95 orelse |
| 196 | + Byte =:= 96 orelse |
| 197 | + Byte =:= 97 orelse |
| 198 | + Byte =:= 98 orelse |
| 199 | + Byte =:= 99 orelse |
| 200 | + Byte =:= 100 orelse |
| 201 | + Byte =:= 101 orelse |
| 202 | + Byte =:= 102 orelse |
| 203 | + Byte =:= 103 orelse |
| 204 | + Byte =:= 104 orelse |
| 205 | + Byte =:= 105 orelse |
| 206 | + Byte =:= 106 orelse |
| 207 | + Byte =:= 107 orelse |
| 208 | + Byte =:= 108 orelse |
| 209 | + Byte =:= 109 orelse |
| 210 | + Byte =:= 110 orelse |
| 211 | + Byte =:= 111 orelse |
| 212 | + Byte =:= 112 orelse |
| 213 | + Byte =:= 113 orelse |
| 214 | + Byte =:= 114 orelse |
| 215 | + Byte =:= 115 orelse |
| 216 | + Byte =:= 116 orelse |
| 217 | + Byte =:= 117 orelse |
| 218 | + Byte =:= 118 orelse |
| 219 | + Byte =:= 119 orelse |
| 220 | + Byte =:= 120 orelse |
| 221 | + Byte =:= 121 orelse |
| 222 | + Byte =:= 122 orelse |
| 223 | + Byte =:= 123 orelse |
| 224 | + Byte =:= 124 orelse |
| 225 | + Byte =:= 125 orelse |
| 226 | + Byte =:= 126 orelse |
| 227 | + Byte =:= 127 |
| 228 | +). |
| 229 | + |
| 230 | +-define(are_all_ascii_plain(B1, B2, B3, B4, B5, B6, B7, B8), |
| 231 | + (?is_ascii_plain(B1)) andalso |
| 232 | + (?is_ascii_plain(B2)) andalso |
| 233 | + (?is_ascii_plain(B3)) andalso |
| 234 | + (?is_ascii_plain(B4)) andalso |
| 235 | + (?is_ascii_plain(B5)) andalso |
| 236 | + (?is_ascii_plain(B6)) andalso |
| 237 | + (?is_ascii_plain(B7)) andalso |
| 238 | + (?is_ascii_plain(B8)) |
| 239 | +). |
| 240 | + |
72 | 241 | -define(UTF8_ACCEPT, 0).
|
73 | 242 | -define(UTF8_REJECT, 12).
|
74 | 243 |
|
|
0 commit comments