ctype<char> class — Facet for classifying narrow characters
template <> class ctype<char> : public locale::facet, public ctype_base { ... public: explicit ctype(const mask* tab = 0, bool del = false, size_t refs = 0); static const size_t table_size = . . . ; inline bool is(mask m, char c) const; inline const char* is(const char* low, const char* high, mask* vec) const; inline const char* scan_is(mask m, const char* low, const char* high) const; inline const char* scan_not(mask m, const char* low, const char* high) const; protected: virtual ~ctype( ); inline const mask* table( ) const throw( ); inline static const mask* classic_table( ) throw( ); };
The ctype<>
class
template is specialized for type char
(but not signed
char
or unsigned
char
) so the member functions can be
implemented as inline functions. The standard requires the
implementation to have the protected member functions table
and classic_table
. Each of these functions
returns an array of mask values indexed by characters cast to
unsigned
char
. The number of elements in a table
must be at least table_size
,
which is an implementation-defined constant value.
The following are the key member functions:
explicit
ctype
(const mask* tab = 0, bool
del = false, size_t refs = 0)
Initializes the table(
)
pointer with tab
. If tab
is a null pointer, table( )
is set to classic_table( )
. If tab
is not null, and del
is true, the ctype
object owns the table, and
when the ctype
destructor
is called, it will delete the table. The refs
parameter is passed to the base
class, as with any facet.
virtual
~ctype
( )
If the constructor's del
flag was true, and tab
was not a null pointer, performs
delete[]
tab
.
inline bool
is
(mask m, charT c)
const
, inline const
charT*
is
(const
charT*
low,
const
charT*
high
, mask*
dest)
const
Tests character classifications. The first form returns:
(table( )[static_cast<unsigned char>(c)] & m) != 0
The second form stores the following in dest
for each element c
of the range [low
, high
):
table( )[static_cast<unsigned char>(c)]
Note that is
does not
call do_is
, so is
can be implemented as an inline
function.
inline static const
mask*
classic_table
( ) throw(
)
Returns a table that corresponds to the "C
" locale.
inline const char*
scan_is
(mask m, const char*
low, const char* high) const
Searches the sequence of characters [low
, high
) for the first character that
matches m
, that is, for
which is(m
, c)
is true
. The return value is a pointer
to the first matching character, or high
if no characters match m
.
inline const char*
scan_not
(mask m, const char*
low, const char* high) const
Searches the sequence of characters [low
, high
) for the first character that
does not match m
, that is,
for which is(m
, c)
is false
. The return value is a pointer
to the first matching character, or high
if every character matches
m
.
inline const mask*
table
( ) throw(
)
Returns the value that was passed to the constructor as
the tab
parameter, or, if
tab
was null, classic_table( )
is returned.