| OLD | NEW |
| 1 /* | 1 /* |
| 2 * The authors of this software are Rob Pike and Ken Thompson. | 2 * The authors of this software are Rob Pike and Ken Thompson. |
| 3 * Copyright (c) 2002 by Lucent Technologies. | 3 * Copyright (c) 2002 by Lucent Technologies. |
| 4 * Permission to use, copy, modify, and distribute this software for any | 4 * Permission to use, copy, modify, and distribute this software for any |
| 5 * purpose without fee is hereby granted, provided that this entire notice | 5 * purpose without fee is hereby granted, provided that this entire notice |
| 6 * is included in all copies of any software which is or includes a copy | 6 * is included in all copies of any software which is or includes a copy |
| 7 * or modification of this software and in all copies of the supporting | 7 * or modification of this software and in all copies of the supporting |
| 8 * documentation for such software. | 8 * documentation for such software. |
| 9 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED | 9 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED |
| 10 * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE AN
Y | 10 * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE AN
Y |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 { | 126 { |
| 127 /* Runes are signed, so convert to unsigned for range check. */ | 127 /* Runes are signed, so convert to unsigned for range check. */ |
| 128 unsigned long c; | 128 unsigned long c; |
| 129 | 129 |
| 130 /* | 130 /* |
| 131 * one character sequence | 131 * one character sequence |
| 132 * 00000-0007F => 00-7F | 132 * 00000-0007F => 00-7F |
| 133 */ | 133 */ |
| 134 c = *rune; | 134 c = *rune; |
| 135 if(c <= Rune1) { | 135 if(c <= Rune1) { |
| 136 » » str[0] = static_cast<char>(c); | 136 » » str[0] = c; |
| 137 return 1; | 137 return 1; |
| 138 } | 138 } |
| 139 | 139 |
| 140 /* | 140 /* |
| 141 * two character sequence | 141 * two character sequence |
| 142 * 0080-07FF => T2 Tx | 142 * 0080-07FF => T2 Tx |
| 143 */ | 143 */ |
| 144 if(c <= Rune2) { | 144 if(c <= Rune2) { |
| 145 » » str[0] = T2 | static_cast<char>(c >> 1*Bitx); | 145 » » str[0] = T2 | (c >> 1*Bitx); |
| 146 str[1] = Tx | (c & Maskx); | 146 str[1] = Tx | (c & Maskx); |
| 147 return 2; | 147 return 2; |
| 148 } | 148 } |
| 149 | 149 |
| 150 /* | 150 /* |
| 151 * If the Rune is out of range, convert it to the error rune. | 151 * If the Rune is out of range, convert it to the error rune. |
| 152 * Do this test here because the error rune encodes to three bytes. | 152 * Do this test here because the error rune encodes to three bytes. |
| 153 * Doing it earlier would duplicate work, since an out of range | 153 * Doing it earlier would duplicate work, since an out of range |
| 154 * Rune wouldn't have fit in one or two bytes. | 154 * Rune wouldn't have fit in one or two bytes. |
| 155 */ | 155 */ |
| 156 if (c > Runemax) | 156 if (c > Runemax) |
| 157 c = Runeerror; | 157 c = Runeerror; |
| 158 | 158 |
| 159 /* | 159 /* |
| 160 * three character sequence | 160 * three character sequence |
| 161 * 0800-FFFF => T3 Tx Tx | 161 * 0800-FFFF => T3 Tx Tx |
| 162 */ | 162 */ |
| 163 if (c <= Rune3) { | 163 if (c <= Rune3) { |
| 164 » » str[0] = T3 | static_cast<char>(c >> 2*Bitx); | 164 » » str[0] = T3 | (c >> 2*Bitx); |
| 165 str[1] = Tx | ((c >> 1*Bitx) & Maskx); | 165 str[1] = Tx | ((c >> 1*Bitx) & Maskx); |
| 166 » » str[2] = Tx | (c & Maskx); | 166 » » str[2] = Tx | (c & Maskx); |
| 167 return 3; | 167 return 3; |
| 168 } | 168 } |
| 169 | 169 |
| 170 /* | 170 /* |
| 171 * four character sequence (21-bit value) | 171 * four character sequence (21-bit value) |
| 172 * 10000-1FFFFF => T4 Tx Tx Tx | 172 * 10000-1FFFFF => T4 Tx Tx Tx |
| 173 */ | 173 */ |
| 174 » str[0] = T4 | static_cast<char>(c >> 3*Bitx); | 174 » str[0] = T4 | (c >> 3*Bitx); |
| 175 str[1] = Tx | ((c >> 2*Bitx) & Maskx); | 175 str[1] = Tx | ((c >> 2*Bitx) & Maskx); |
| 176 str[2] = Tx | ((c >> 1*Bitx) & Maskx); | 176 str[2] = Tx | ((c >> 1*Bitx) & Maskx); |
| 177 str[3] = Tx | (c & Maskx); | 177 str[3] = Tx | (c & Maskx); |
| 178 return 4; | 178 return 4; |
| 179 } | 179 } |
| 180 | 180 |
| 181 int | 181 int |
| 182 runelen(Rune rune) | 182 runelen(Rune rune) |
| 183 { | 183 { |
| 184 char str[10]; | 184 char str[10]; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 } | 249 } |
| 250 n = chartorune(&r, s); | 250 n = chartorune(&r, s); |
| 251 if(r == c) | 251 if(r == c) |
| 252 return (char*)s; | 252 return (char*)s; |
| 253 s += n; | 253 s += n; |
| 254 } | 254 } |
| 255 return 0; | 255 return 0; |
| 256 } | 256 } |
| 257 | 257 |
| 258 } // namespace re2 | 258 } // namespace re2 |
| OLD | NEW |