in reply to Re: Speeds vs functionality
in thread Speeds vs functionality
Looking at cx_Parse + stuff, some thoughts and questions arise:
Or possibly:enum { TXT, BIN, WSPACE, UTF8, QUOT, ESC, SEP, CR, NL_EOLX, ..., NN }; enum { EXFIELD, INFIELD = 1*NN, INQUOT = 2*NN, CRSEEN = 3*NN } state; while ((c = getc()) != EOF) { int ctype = cached->xlat[c]; if () ... /* perhaps peel the most likely case(s) */ switch (state + ctype) { case WSPACE: continue; /* nop: allow_whitespace test in xlat[] */ case BIN: error(); /* again, resolved when constructing xlat[] */ case TXT: state = INFIELD; putc(c); continue; case INFIELD+TXT: case INQUOT+TXT: case INQUOT+SEP: ... putc(c); ... case UTF8: case INFIELD+UTF8: ...accumulate/xlat... case CRSEEN+NL_EOLX: ...; state = 0; continue; case CRSEEN+...: error(); default: error(); } ...
enum { EXFIELD, INFIELD = 0x100, INQUOT = 0x200, CRS = 0x300 } sta +te; ... int action = cached->xlat[state + c]; decode(action); ...
Ultimately, the (handful of) UTF sequences may also be resolved by walking trie-like state tables.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Speeds vs functionality
by Tux (Canon) on Jul 30, 2014 at 12:21 UTC | |
by salva (Canon) on Jul 31, 2014 at 09:11 UTC | |
by Tux (Canon) on Jul 31, 2014 at 09:38 UTC | |
by Jim (Curate) on Jul 31, 2014 at 00:09 UTC | |
by farang (Chaplain) on Jul 31, 2014 at 23:50 UTC | |
by Jim (Curate) on Aug 01, 2014 at 01:38 UTC | |
by Anonymous Monk on Aug 01, 2014 at 02:32 UTC | |
by Jim (Curate) on Aug 01, 2014 at 18:23 UTC | |
by tye (Sage) on Jul 31, 2014 at 03:09 UTC | |
by Jim (Curate) on Jul 31, 2014 at 04:17 UTC | |
by tye (Sage) on Jul 31, 2014 at 07:33 UTC | |
| |
by Tux (Canon) on Jul 31, 2014 at 06:37 UTC | |
by Anonymous Monk on Jul 31, 2014 at 03:06 UTC |