I have just looked over the code ( this one, right?) and it seems to me that a better approach can be used to check for separators.
Currently you check at every character for the two possibilities (single or multi-byte separator):
if (c == csv->sep_char || is_SEPX (c)) {
A better way would be to consider the multi-byte separator as a single-byte separator plus a tail:
/* somewhere on the object constructor */
csv->sep_tail_len = sep_len - 1;
csv->sep_tail = sep + 1;
csv->sep_char = *sep;
...
/* then, on the parser */
if (c == csv->sep_char) {
if (!csv->sep_tail_len ||
((csv->size - csv->used >= csv->sep_tail_len) &&
!memcmp(csv->bptr + csv->used, csv->sep_tail, csv->sep_tail_l
+en))) {
/* you have a separator! */
I think that would minimize the impact of supporting the extra multi-byte checks on the common single-byte separator case.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|