On 15/10/2015 21:21, Marvin Humphrey wrote:
On Wed, Oct 7, 2015 at 4:10 AM, Nick Wellnhofer <[email protected]> wrote:
- Make stack strings public?

I'd say wait for now.  They're truly an expert API -- it's too easy to blow
the C stack by using them in a loop, etc.

OK.

- Make `Find` return a size_t.
   Requires special value for "not found".

Hmm, that's a toughie.  If the sentinel is SIZE_MAX, that might not fit in all
host numeric types.

Good point. The problem is not so much the byte size of the return type but the fact that a host language might not support unsigned integers. Maybe we should limit string sizes to SSIZE_MAX and make `Find` return an ssize_t. But this requires to emulate the ssize_t type on non-POSIX platforms.

In addition, I'd suggest:

*   Remove `Str_less_than`, replacing it in PolyLexicon with
     `Str_Compare_To(a, b) < 0`.
*   Remove `Str_compare` from the public API.

+1

*   Remove `new_from_char`.

-0.5

*   Remove `BaseX_To_I64`, optionally adding its functionality to
     StringHelper.

+0

*   Rename the argument to `Ends_With` from `postfix` to `suffix`.  Same with
     `Ends_With_Utf8`.
*   The return values for `Trim`, `Trim_Top`, and `Trim_Tail` should be
     `incremented`.

+1

StringIterator

- Rename StrIter_substring to Str_new_from_iter?

Hmm.  I see where you're going with that, but new_from_iter doesn't
communicate that there must be a single backing String for the two
StringIterator arguments.  Maybe `StrIter_crop`?

I'm also OK with either StrIter_substring ot StrIter_crop. I only thought it might be clearer to make this function a constructor of the String class.

- Make `Starts_With`, `Ends_With` skip over strings?
   I think this better matches current usage patterns.

Somehow I don't understand what you mean.

I mean that `Starts_With` should be named something like `Advance_If_Match` and make the iterator move past the prefix if it matches. Currently, most code that calls StrIter_Start_With looks like

    if (StrIter_Starts_With(iter, prefix)) {
        StrIter_Advance(iter, prefix_len);
        ...
    }

This could be replaced with a simpler and more efficient

    if (StrIter_Advance_If_Match(iter, prefix)) {
        ...
    }

- Find better names for `Skip_{Next|Prev}_Whitespace`?

`Advance_Whitespace` and `Recede_Whitespace`?

As a non-native speaker, I'm not really sure.

While preparing this reply, I also created the patch below with some doc
tweaks.

Looks good. I will start off with your patch.

Nick


Reply via email to