Strings - T_Character is now mostly constexpr

This commit is contained in:
Emmanuel BENOîT 2018-12-20 22:30:44 +01:00
parent ee02f9c5c7
commit af1648dcb4
2 changed files with 56 additions and 54 deletions

View file

@ -69,39 +69,39 @@ struct T_Character
const uint32_t codepoint; const uint32_t codepoint;
T_Character( ) noexcept; constexpr T_Character( ) noexcept;
T_Character( T_Character const& other ) noexcept; constexpr T_Character( T_Character const& other ) noexcept;
M_WITH_INT( T ) T_Character( T codepoint ) noexcept; M_WITH_INT( T ) constexpr T_Character( T codepoint ) noexcept;
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
bool isValid( ) const; constexpr bool isValid( ) const;
bool isAscii( ) const; constexpr bool isAscii( ) const;
bool isControl( ) const; constexpr bool isControl( ) const;
bool isUppercase( ) const; constexpr bool isUppercase( ) const;
bool isLowercase( ) const; constexpr bool isLowercase( ) const;
bool isAlpha( ) const; constexpr bool isAlpha( ) const;
bool isNumeric( ) const; constexpr bool isNumeric( ) const;
bool isAlphanumeric( ) const; constexpr bool isAlphanumeric( ) const;
bool isWhitespace( ) const; constexpr bool isWhitespace( ) const;
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
bool operator== ( T_Character const& other ) const; constexpr bool operator== ( T_Character const& other ) const;
bool operator!= ( T_Character const& other ) const; constexpr bool operator!= ( T_Character const& other ) const;
bool operator< ( T_Character const& other ) const; constexpr bool operator< ( T_Character const& other ) const;
bool operator> ( T_Character const& other ) const; constexpr bool operator> ( T_Character const& other ) const;
bool operator<= ( T_Character const& other ) const; constexpr bool operator<= ( T_Character const& other ) const;
bool operator>= ( T_Character const& other ) const; constexpr bool operator>= ( T_Character const& other ) const;
M_WITH_INT( T ) bool operator== ( T other ) const; M_WITH_INT( T ) constexpr bool operator== ( T other ) const;
M_WITH_INT( T ) bool operator!= ( T other ) const; M_WITH_INT( T ) constexpr bool operator!= ( T other ) const;
M_WITH_INT( T ) bool operator< ( T other ) const; M_WITH_INT( T ) constexpr bool operator< ( T other ) const;
M_WITH_INT( T ) bool operator<= ( T other ) const; M_WITH_INT( T ) constexpr bool operator<= ( T other ) const;
M_WITH_INT( T ) bool operator> ( T other ) const; M_WITH_INT( T ) constexpr bool operator> ( T other ) const;
M_WITH_INT( T ) bool operator>= ( T other ) const; M_WITH_INT( T ) constexpr bool operator>= ( T other ) const;
operator uint32_t ( ) const; constexpr operator uint32_t ( ) const;
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
@ -109,8 +109,8 @@ struct T_Character
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
T_Character toUpper( ) const; constexpr T_Character toUpper( ) const;
T_Character toLower( ) const; constexpr T_Character toLower( ) const;
}; };

View file

@ -10,16 +10,18 @@ namespace ebcl {
/*= T_Character ==============================================================*/ /*= T_Character ==============================================================*/
inline T_Character::T_Character( ) noexcept inline constexpr T_Character::T_Character( ) noexcept
: codepoint( 0 ) : codepoint( 0 )
{ } { }
inline T_Character::T_Character( const T_Character& other ) noexcept inline constexpr T_Character::T_Character(
const T_Character& other ) noexcept
: codepoint( other.codepoint ) : codepoint( other.codepoint )
{ } { }
template< typename T , typename > template< typename T , typename >
inline T_Character::T_Character( T codepoint ) noexcept inline constexpr T_Character::T_Character(
T codepoint ) noexcept
: codepoint( uint32_t( codepoint ) ) : codepoint( uint32_t( codepoint ) )
{ {
assert( codepoint >= 0 ); assert( codepoint >= 0 );
@ -27,47 +29,47 @@ inline T_Character::T_Character( T codepoint ) noexcept
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
inline bool T_Character::isValid( ) const inline constexpr bool T_Character::isValid( ) const
{ {
return codepoint < 0x110000; return codepoint < 0x110000;
} }
inline bool T_Character::isAscii( ) const inline constexpr bool T_Character::isAscii( ) const
{ {
return codepoint < 128; return codepoint < 128;
} }
inline bool T_Character::isControl( ) const inline constexpr bool T_Character::isControl( ) const
{ {
return codepoint < 32; return codepoint < 32;
} }
inline bool T_Character::isUppercase( ) const inline constexpr bool T_Character::isUppercase( ) const
{ {
return codepoint >= 'A' && codepoint <= 'Z'; return codepoint >= 'A' && codepoint <= 'Z';
} }
inline bool T_Character::isLowercase( ) const inline constexpr bool T_Character::isLowercase( ) const
{ {
return codepoint >= 'a' && codepoint <= 'z'; return codepoint >= 'a' && codepoint <= 'z';
} }
inline bool T_Character::isAlpha( ) const inline constexpr bool T_Character::isAlpha( ) const
{ {
return isUppercase( ) || isLowercase( ); return isUppercase( ) || isLowercase( );
} }
inline bool T_Character::isNumeric( ) const inline constexpr bool T_Character::isNumeric( ) const
{ {
return codepoint >= '0' && codepoint <= '9'; return codepoint >= '0' && codepoint <= '9';
} }
inline bool T_Character::isAlphanumeric( ) const inline constexpr bool T_Character::isAlphanumeric( ) const
{ {
return isAlpha( ) || isNumeric( ); return isAlpha( ) || isNumeric( );
} }
inline bool T_Character::isWhitespace( ) const inline constexpr bool T_Character::isWhitespace( ) const
{ {
return codepoint == 32 || codepoint == '\t' return codepoint == 32 || codepoint == '\t'
|| codepoint == '\n' || codepoint == '\r'; || codepoint == '\n' || codepoint == '\r';
@ -75,32 +77,32 @@ inline bool T_Character::isWhitespace( ) const
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
inline bool T_Character::operator== ( T_Character const& other ) const inline constexpr bool T_Character::operator== ( T_Character const& other ) const
{ {
return codepoint == other.codepoint; return codepoint == other.codepoint;
} }
inline bool T_Character::operator!= ( T_Character const& other ) const inline constexpr bool T_Character::operator!= ( T_Character const& other ) const
{ {
return codepoint != other.codepoint; return codepoint != other.codepoint;
} }
inline bool T_Character::operator< ( T_Character const& other ) const inline constexpr bool T_Character::operator< ( T_Character const& other ) const
{ {
return codepoint < other.codepoint; return codepoint < other.codepoint;
} }
inline bool T_Character::operator> ( T_Character const& other ) const inline constexpr bool T_Character::operator> ( T_Character const& other ) const
{ {
return codepoint > other.codepoint; return codepoint > other.codepoint;
} }
inline bool T_Character::operator<= ( T_Character const& other ) const inline constexpr bool T_Character::operator<= ( T_Character const& other ) const
{ {
return codepoint <= other.codepoint; return codepoint <= other.codepoint;
} }
inline bool T_Character::operator>= ( T_Character const& other ) const inline constexpr bool T_Character::operator>= ( T_Character const& other ) const
{ {
return codepoint >= other.codepoint; return codepoint >= other.codepoint;
} }
@ -108,44 +110,44 @@ inline bool T_Character::operator>= ( T_Character const& other ) const
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
template< typename T , typename > template< typename T , typename >
inline bool T_Character::operator== ( T other ) const inline constexpr bool T_Character::operator== ( T other ) const
{ {
return codepoint == uint32_t( other ); return codepoint == uint32_t( other );
} }
template< typename T , typename > template< typename T , typename >
inline bool T_Character::operator!= ( T other ) const inline constexpr bool T_Character::operator!= ( T other ) const
{ {
return codepoint != uint32_t( other ); return codepoint != uint32_t( other );
} }
template< typename T , typename > template< typename T , typename >
inline bool T_Character::operator< ( T other ) const inline constexpr bool T_Character::operator< ( T other ) const
{ {
return codepoint < uint32_t( other ); return codepoint < uint32_t( other );
} }
template< typename T , typename > template< typename T , typename >
inline bool T_Character::operator<= ( T other ) const inline constexpr bool T_Character::operator<= ( T other ) const
{ {
return codepoint <= uint32_t( other ); return codepoint <= uint32_t( other );
} }
template< typename T , typename > template< typename T , typename >
inline bool T_Character::operator> ( T other ) const inline constexpr bool T_Character::operator> ( T other ) const
{ {
return codepoint > uint32_t( other ); return codepoint > uint32_t( other );
} }
template< typename T , typename > template< typename T , typename >
inline bool T_Character::operator>= ( T other ) const inline constexpr bool T_Character::operator>= ( T other ) const
{ {
return codepoint >= uint32_t( other ); return codepoint >= uint32_t( other );
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
inline T_Character::operator uint32_t ( ) const inline constexpr T_Character::operator uint32_t ( ) const
{ {
return codepoint; return codepoint;
} }
@ -159,7 +161,7 @@ inline uint32_t T_Character::writeTo( char* output , uint32_t avail ) const
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
inline T_Character T_Character::toUpper( ) const inline constexpr T_Character T_Character::toUpper( ) const
{ {
if ( isLowercase( ) ) { if ( isLowercase( ) ) {
return *this & (~0x20); return *this & (~0x20);
@ -168,7 +170,7 @@ inline T_Character T_Character::toUpper( ) const
} }
} }
inline T_Character T_Character::toLower( ) const inline constexpr T_Character T_Character::toLower( ) const
{ {
if ( isUppercase( ) ) { if ( isUppercase( ) ) {
return *this | 0x20; return *this | 0x20;