Alfie Richards <alfie.richa...@arm.com> writes:
> +/* string_slice inherits from array_slice, specifically to refer to a 
> substring
> +   of a character array.
> +   It includes some string like helpers.  */
> +class string_slice : public array_slice<const char>
> +{
> +public:
> +  string_slice () : array_slice<const char> () {}
> +  string_slice (const char *str) : array_slice (str, strlen (str)) {}
> +  explicit string_slice (const char *str, size_t len) :
> +    array_slice (str, len) {}
> +  explicit string_slice (const char *start, const char *end) :
> +    array_slice (start, end - start) {}

Sorry for the formatting nits, but I think the usual style is to put
the : on the next line:

  explicit string_slice (const char *str, size_t len)
    : array_slice (str, len) {}
  explicit string_slice (const char *start, const char *end)
    : array_slice (start, end - start) {}

> +
> +  friend bool operator== (const string_slice &lhs, const string_slice &rhs)
> +  {
> +    if (!lhs.is_valid () || !rhs.is_valid ())
> +      return false;
> +    if (lhs.size () != rhs.size ())
> +      return false;
> +    return memcmp (lhs.begin (), rhs.begin (), lhs.size ()) == 0;
> +  }
> +
> +  friend bool operator!= (const string_slice &lhs, const string_slice &rhs)
> +  {
> +    return !(lhs == rhs);
> +  }
> +
> +  /* Returns an invalid string_slice.  */
> +  static string_slice invalid ()
> +  {
> +    return string_slice (nullptr, ~0U);
> +  }
> +
> +  /* tokenize is used to split a string by some deliminator into
> +     strtok_slice's.  Similarly to the posix strtok_r.but without modifying 
> the

string_slices

OK with those changes, thanks.

Richard

> +     input string, and returning all tokens which may be empty in the case
> +     of an empty input string of consecutive deliminators.  */
> +  static string_slice tokenize (string_slice *str, string_slice delims);
> +
> +  /* Removes white space from the front and back of the string_slice.  */
> +  string_slice strip ();
> +
> +  /* Compares two string_slices in lexographical ordering.  */
> +  static int strcmp (string_slice str1, string_slice str2);
> +};
> +
>  #endif // GCC_VEC_H

Reply via email to