Previous: Index Home: Next: Rule

CharSet

A CharSet is a unary predicate which is invocable with this equivalent signature:

bool( char ch ) const noexcept;

The predicate returns true if ch is a member of the set, or false otherwise.

Requirements

In this table:

  • T is a type meeting the requirements of CharSet

  • t is a const value of type T

  • c is a value of type char

  • first, last are values of type cpp:char const*[]

Expression Type Semantics, Pre/Post-conditions

t(c)

bool

This function returns true if c is a member of the character set, otherwise it returns false.

t.find_if(first,last)

cpp:char const*[]

This optional member function examines the valid range of characters in cpp:// [first, last)[] and returns a pointer to the first occurrence of a character which is in the set, or returns last if no such character.

The implementation of grammar::find_if calls this function if provided by the character set, allowing optimized or otherwise performant implementations to be developed. If this member function is not provided, a default implementation is used which calls operator().

t.find_if_not(first,last)

cpp:char const*[]

This optional member function examines the valid range of characters in cpp:[first, last)[] and returns a pointer to the first occurrence of a character which is not in the set, or returns last if no such character.

The implementation of grammar::find_if_not calls this function if provided by the character set, allowing optimized or otherwise performant implementations to be developed. If this member function is not provided, a default implementation is used which calls operator().

Exemplar

For best results, it is suggested that all constructors and member functions for character sets be marked constexpr.

struct CharSet
{
    bool operator()( char c ) const noexcept;

    // These are both optional. If either or both are left
    // unspecified, a default implementation will be used.
    //
    char const* find_if( char const* first, char const* last ) const noexcept;
    char const* find_if_not( char const* first, char const* last ) const noexcept;
};