Changeset 43 for pjproject/main/pjlib-util/src/pjlib-util/scanner.c
- Timestamp:
- Nov 11, 2005 7:01:31 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/main/pjlib-util/src/pjlib-util/scanner.c
r32 r43 5 5 #include <pj/except.h> 6 6 #include <pj/os.h> 7 #include <pj/errno.h> 7 8 8 9 #define PJ_SCAN_IS_SPACE(c) ((c)==' ' || (c)=='\t') … … 16 17 } 17 18 18 PJ_DEF(void) pj_cs_init( pj_char_spec cs) 19 { 20 PJ_CHECK_STACK(); 21 memset(cs, 0, sizeof(cs)); 22 } 23 24 PJ_DEF(void) pj_cs_set( pj_char_spec cs, int c) 25 { 26 PJ_CHECK_STACK(); 27 cs[c] = 1; 28 } 29 30 PJ_DEF(void) pj_cs_add_range( pj_char_spec cs, int cstart, int cend) 31 { 32 PJ_CHECK_STACK(); 33 while (cstart != cend) 34 cs[cstart++] = 1; 35 } 36 37 PJ_DEF(void) pj_cs_add_alpha( pj_char_spec cs) 38 { 39 pj_cs_add_range( cs, 'a', 'z'+1); 40 pj_cs_add_range( cs, 'A', 'Z'+1); 41 } 42 43 PJ_DEF(void) pj_cs_add_num( pj_char_spec cs) 44 { 45 pj_cs_add_range( cs, '0', '9'+1); 46 } 47 48 PJ_DEF(void) pj_cs_add_str( pj_char_spec cs, const char *str) 49 { 50 PJ_CHECK_STACK(); 19 PJ_DEF(void) pj_cis_buf_init( pj_cis_buf_t *cis_buf) 20 { 21 pj_memset(cis_buf->cis_buf, 0, sizeof(cis_buf->cis_buf)); 22 cis_buf->use_mask = 0; 23 } 24 25 PJ_DEF(pj_status_t) pj_cis_init(pj_cis_buf_t *cis_buf, pj_cis_t *cis) 26 { 27 unsigned i; 28 29 cis->cis_buf = cis_buf->cis_buf; 30 31 for (i=0; i<PJ_CIS_MAX_INDEX; ++i) { 32 if ((cis_buf->use_mask & (1 << i)) == 0) { 33 cis->cis_index = i; 34 return PJ_SUCCESS; 35 } 36 } 37 38 cis->cis_index = PJ_CIS_MAX_INDEX; 39 return PJ_ETOOMANY; 40 } 41 42 PJ_DEF(pj_status_t) pj_cis_dup( pj_cis_t *new_cis, pj_cis_t *existing) 43 { 44 pj_status_t status; 45 unsigned i; 46 47 status = pj_cis_init(existing->cis_buf, new_cis); 48 if (status != PJ_SUCCESS) 49 return status; 50 51 for (i=0; i<256; ++i) { 52 if (PJ_CIS_ISSET(existing, i)) 53 PJ_CIS_SET(new_cis, i); 54 else 55 PJ_CIS_CLR(new_cis, i); 56 } 57 58 return PJ_SUCCESS; 59 } 60 61 PJ_DEF(void) pj_cis_add_range(pj_cis_t *cis, int cstart, int cend) 62 { 63 while (cstart != cend) { 64 PJ_CIS_SET(cis, cstart); 65 ++cstart; 66 } 67 } 68 69 PJ_DEF(void) pj_cis_add_alpha(pj_cis_t *cis) 70 { 71 pj_cis_add_range( cis, 'a', 'z'+1); 72 pj_cis_add_range( cis, 'A', 'Z'+1); 73 } 74 75 PJ_DEF(void) pj_cis_add_num(pj_cis_t *cis) 76 { 77 pj_cis_add_range( cis, '0', '9'+1); 78 } 79 80 PJ_DEF(void) pj_cis_add_str( pj_cis_t *cis, const char *str) 81 { 51 82 while (*str) { 52 cs[(int)*str] = 1;83 PJ_CIS_SET(cis, *str); 53 84 ++str; 54 85 } 55 86 } 56 87 57 PJ_DEF(void) pj_c s_del_range( pj_char_spec cs, int cstart, int cend)58 { 59 PJ_CHECK_STACK();60 while (cstart != cend)61 cs[cstart++] = 0;62 }63 64 PJ_DEF(void) pj_cs_del_str( pj_char_spec cs, const char *str) 65 { 66 PJ_CHECK_STACK(); 88 PJ_DEF(void) pj_cis_del_range( pj_cis_t *cis, int cstart, int cend) 89 { 90 while (cstart != cend) { 91 PJ_CIS_CLR(cis, cstart); 92 cstart++; 93 } 94 } 95 96 PJ_DEF(void) pj_cis_del_str( pj_cis_t *cis, const char *str) 97 { 67 98 while (*str) { 68 cs[(int)*str] = 0;99 PJ_CIS_CLR(cis, *str); 69 100 ++str; 70 101 } 71 102 } 72 103 73 PJ_DEF(void) pj_c s_invert( pj_char_spec cs )104 PJ_DEF(void) pj_cis_invert( pj_cis_t *cis ) 74 105 { 75 106 unsigned i; 76 PJ_CHECK_STACK(); 77 for (i=0; i<sizeof(pj_char_spec)/sizeof(cs[0]); ++i) { 78 cs[i] = (pj_char_spec_element_t) !cs[i]; 107 for (i=0; i<256; ++i) { 108 if (PJ_CIS_ISSET(cis,i)) 109 PJ_CIS_CLR(cis,i); 110 else 111 PJ_CIS_SET(cis,i); 79 112 } 80 113 } … … 166 199 167 200 PJ_DEF(int) pj_scan_peek( pj_scanner *scanner, 168 const pj_char_specspec, pj_str_t *out)201 const pj_cis_t *spec, pj_str_t *out) 169 202 { 170 203 register char *s = scanner->curptr; … … 178 211 } 179 212 180 while (PJ_SCAN_CHECK_EOF(s) && pj_c s_match(spec, *s))213 while (PJ_SCAN_CHECK_EOF(s) && pj_cis_match(spec, *s)) 181 214 ++s; 182 215 … … 204 237 205 238 PJ_DEF(int) pj_scan_peek_until( pj_scanner *scanner, 206 const pj_char_specspec,207 239 const pj_cis_t *spec, 240 pj_str_t *out) 208 241 { 209 242 register char *s = scanner->curptr; … … 217 250 } 218 251 219 while (PJ_SCAN_CHECK_EOF(s) && !pj_c s_match( spec, *s))252 while (PJ_SCAN_CHECK_EOF(s) && !pj_cis_match( spec, *s)) 220 253 ++s; 221 254 … … 226 259 227 260 PJ_DEF(void) pj_scan_get( pj_scanner *scanner, 228 const pj_char_specspec, pj_str_t *out)261 const pj_cis_t *spec, pj_str_t *out) 229 262 { 230 263 register char *s = scanner->curptr; … … 234 267 PJ_CHECK_STACK(); 235 268 236 if (pj_scan_is_eof(scanner) || !pj_c s_match(spec, *s)) {269 if (pj_scan_is_eof(scanner) || !pj_cis_match(spec, *s)) { 237 270 pj_scan_syntax_err(scanner); 238 271 return; … … 241 274 do { 242 275 ++s; 243 } while (PJ_SCAN_CHECK_EOF(s) && pj_c s_match(spec, *s));276 } while (PJ_SCAN_CHECK_EOF(s) && pj_cis_match(spec, *s)); 244 277 245 278 pj_strset3(out, scanner->curptr, s); … … 396 429 397 430 PJ_DEF(void) pj_scan_get_until( pj_scanner *scanner, 398 const pj_char_specspec, pj_str_t *out)431 const pj_cis_t *spec, pj_str_t *out) 399 432 { 400 433 register char *s = scanner->curptr; … … 409 442 } 410 443 411 while (PJ_SCAN_CHECK_EOF(s) && !pj_c s_match(spec, *s)) {444 while (PJ_SCAN_CHECK_EOF(s) && !pj_cis_match(spec, *s)) { 412 445 ++s; 413 446 } … … 425 458 426 459 PJ_DEF(void) pj_scan_get_until_ch( pj_scanner *scanner, 427 460 int until_char, pj_str_t *out) 428 461 { 429 462 register char *s = scanner->curptr;
Note: See TracChangeset
for help on using the changeset viewer.