namespace std {
template<>
class ctype<char> : public locale::facet, public ctype_base {
public:
using char_type = char;
explicit ctype(const mask* tab = nullptr, bool del = false, size_t refs = 0);
bool is(mask m, char c) const;
const char* is(const char* low, const char* high, mask* vec) const;
const char* scan_is (mask m, const char* low, const char* high) const;
const char* scan_not(mask m, const char* low, const char* high) const;
char toupper(char c) const;
const char* toupper(char* low, const char* high) const;
char tolower(char c) const;
const char* tolower(char* low, const char* high) const;
char widen(char c) const;
const char* widen(const char* low, const char* high, char* to) const;
char narrow(char c, char dfault) const;
const char* narrow(const char* low, const char* high, char dfault, char* to) const;
static locale::id id;
static const size_t table_size = implementation-defined;
const mask* table() const noexcept;
static const mask* classic_table() noexcept;
protected:
~ctype();
virtual char do_toupper(char c) const;
virtual const char* do_toupper(char* low, const char* high) const;
virtual char do_tolower(char c) const;
virtual const char* do_tolower(char* low, const char* high) const;
virtual char do_widen(char c) const;
virtual const char* do_widen(const char* low, const char* high, char* to) const;
virtual char do_narrow(char c, char dfault) const;
virtual const char* do_narrow(const char* low, const char* high,
char dfault, char* to) const;
};
}
A specialization
ctype<char>
is provided so that the member functions on type
char
can be implemented
inline
.
The
implementation-defined value of member
table_size
is at least 256
.Effects:
If the constructor's first argument was nonzero, and its second argument
was
true, does
delete [] table(). In the following member descriptions, for
unsigned char
values
v where
v >= table_size,
table()[v] is assumed to have an
implementation-specific value (possibly different for each
such value
v) without performing the array lookup
. explicit ctype(const mask* tbl = nullptr, bool del = false, size_t refs = 0);
Preconditions:
Either
tbl == nullptr is
true or
[tbl, tbl+table_size) is a valid range
. Effects:
Passes its
refs argument to its base class constructor
. bool is(mask m, char c) const;
const char* is(const char* low, const char* high, mask* vec) const;
Effects:
The second form, for all
*p
in the range
[low, high),
assigns
into
vec[p - low]
the value
table()[(unsigned char)*p]. Returns:
The first form returns
table()[(unsigned char)c] & m;
the second form returns
high. const char* scan_is(mask m, const char* low, const char* high) const;
Returns:
The smallest
p
in the range
[low, high)
such that
table()[(unsigned char) *p] & m
is
true. const char* scan_not(mask m, const char* low, const char* high) const;
Returns:
The smallest
p
in the range
[low, high)
such that
table()[(unsigned char) *p] & m
is
false. char toupper(char c) const;
const char* toupper(char* low, const char* high) const;
Returns:
do_toupper(c)
or
do_toupper(low, high),
respectively
. char tolower(char c) const;
const char* tolower(char* low, const char* high) const;
Returns:
do_tolower(c)
or
do_tolower(low, high),
respectively
. char widen(char c) const;
const char* widen(const char* low, const char* high, char* to) const;
Returns:
do_widen(c)
or
do_widen(low, high, to),
respectively
. char narrow(char c, char dfault) const;
const char* narrow(const char* low, const char* high, char dfault, char* to) const;
Returns:
do_narrow(c, dfault)
or
do_narrow(low, high, dfault, to),
respectively
. const mask* table() const noexcept;
Returns:
The first constructor argument, if it was nonzero, otherwise
classic_table(). static const mask* classic_table() noexcept;
Returns:
A pointer to the initial element of an array of size
table_size
which represents the classifications of characters in the
"C" locale
.
char do_toupper(char) const;
const char* do_toupper(char* low, const char* high) const;
char do_tolower(char) const;
const char* do_tolower(char* low, const char* high) const;
virtual char do_widen(char c) const;
virtual const char* do_widen(const char* low, const char* high, char* to) const;
virtual char do_narrow(char c, char dfault) const;
virtual const char* do_narrow(const char* low, const char* high,
char dfault, char* to) const;