T_FSPathStyle - Most methods made constexpr
This commit is contained in:
parent
af1648dcb4
commit
96d81b9cd3
3 changed files with 54 additions and 42 deletions
|
@ -36,34 +36,41 @@ class T_FSPathStyle
|
||||||
// - whether it is case-sensitive,
|
// - whether it is case-sensitive,
|
||||||
// - whether is can use a drive letter as its root,
|
// - whether is can use a drive letter as its root,
|
||||||
// - which separators it supports
|
// - which separators it supports
|
||||||
T_FSPathStyle( bool cs , bool hdl , T_Flags< E_FSPathSeparator > ps ) noexcept;
|
constexpr T_FSPathStyle( bool cs , bool hdl ,
|
||||||
|
T_Flags< E_FSPathSeparator > ps ) noexcept;
|
||||||
|
|
||||||
// Default copy/move constructors/assignement operators
|
// Default copy/move constructors/assignement operators
|
||||||
T_FSPathStyle( T_FSPathStyle const& ) noexcept = default;
|
constexpr T_FSPathStyle( T_FSPathStyle const& ) noexcept = default;
|
||||||
T_FSPathStyle& operator =( T_FSPathStyle const& ) noexcept = default;
|
constexpr T_FSPathStyle& operator =( T_FSPathStyle const& ) noexcept = default;
|
||||||
T_FSPathStyle( T_FSPathStyle&& ) noexcept = default;
|
constexpr T_FSPathStyle( T_FSPathStyle&& ) noexcept = default;
|
||||||
T_FSPathStyle& operator =( T_FSPathStyle&& ) noexcept = default;
|
constexpr T_FSPathStyle& operator =( T_FSPathStyle&& ) noexcept = default;
|
||||||
|
|
||||||
T_FSPathStyle& swap( T_FSPathStyle& other ) noexcept;
|
T_FSPathStyle& swap( T_FSPathStyle& other ) noexcept;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// Accessors
|
// Accessors
|
||||||
|
|
||||||
bool caseSensitive( ) const noexcept;
|
constexpr bool caseSensitive( ) const noexcept;
|
||||||
T_FSPathStyle& caseSensitive( bool cs ) noexcept;
|
constexpr T_FSPathStyle& caseSensitive( bool cs ) noexcept;
|
||||||
|
|
||||||
bool hasDriveLetter( ) const noexcept;
|
constexpr bool hasDriveLetter( ) const noexcept;
|
||||||
T_FSPathStyle& hasDriveLetter( bool hdl ) noexcept;
|
constexpr T_FSPathStyle& hasDriveLetter( bool hdl ) noexcept;
|
||||||
|
|
||||||
T_Flags< E_FSPathSeparator > pathSeparators( ) const noexcept;
|
constexpr T_Flags< E_FSPathSeparator > pathSeparators( ) const noexcept;
|
||||||
T_FSPathStyle& pathSeparator( T_Flags< E_FSPathSeparator > ps ) noexcept;
|
constexpr T_FSPathStyle& pathSeparator( T_Flags< E_FSPathSeparator > ps ) noexcept;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Checks
|
||||||
|
|
||||||
|
constexpr bool isSeparator( T_Character chr ) const noexcept;
|
||||||
|
bool isValidRoot( T_String const& string ) const noexcept;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// Pre-initialised styles
|
// Pre-initialised styles
|
||||||
|
|
||||||
static T_FSPathStyle Unix( );
|
static constexpr T_FSPathStyle Unix( );
|
||||||
static T_FSPathStyle Windows( );
|
static constexpr T_FSPathStyle Windows( );
|
||||||
static T_FSPathStyle System( );
|
static constexpr T_FSPathStyle System( );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace ebcl {
|
||||||
|
|
||||||
/*= T_FSPathStyle ============================================================*/
|
/*= T_FSPathStyle ============================================================*/
|
||||||
|
|
||||||
inline T_FSPathStyle::T_FSPathStyle(
|
inline constexpr T_FSPathStyle::T_FSPathStyle(
|
||||||
bool cs ,
|
bool cs ,
|
||||||
bool hdl ,
|
bool hdl ,
|
||||||
T_Flags< E_FSPathSeparator > ps ) noexcept
|
T_Flags< E_FSPathSeparator > ps ) noexcept
|
||||||
|
@ -34,34 +34,34 @@ inline T_FSPathStyle& T_FSPathStyle::swap(
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
inline bool T_FSPathStyle::caseSensitive( ) const noexcept
|
inline constexpr bool T_FSPathStyle::caseSensitive( ) const noexcept
|
||||||
{
|
{
|
||||||
return caseSensitive_;
|
return caseSensitive_;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline T_FSPathStyle& T_FSPathStyle::caseSensitive( bool cs ) noexcept
|
inline constexpr T_FSPathStyle& T_FSPathStyle::caseSensitive( bool cs ) noexcept
|
||||||
{
|
{
|
||||||
caseSensitive_ = cs;
|
caseSensitive_ = cs;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool T_FSPathStyle::hasDriveLetter( ) const noexcept
|
inline constexpr bool T_FSPathStyle::hasDriveLetter( ) const noexcept
|
||||||
{
|
{
|
||||||
return hasDriveLetter_;
|
return hasDriveLetter_;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline T_FSPathStyle& T_FSPathStyle::hasDriveLetter( bool hdl ) noexcept
|
inline constexpr T_FSPathStyle& T_FSPathStyle::hasDriveLetter( bool hdl ) noexcept
|
||||||
{
|
{
|
||||||
hasDriveLetter_ = hdl;
|
hasDriveLetter_ = hdl;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline T_Flags< E_FSPathSeparator > T_FSPathStyle::pathSeparators( ) const noexcept
|
inline constexpr T_Flags< E_FSPathSeparator > T_FSPathStyle::pathSeparators( ) const noexcept
|
||||||
{
|
{
|
||||||
return pathSeparators_;
|
return pathSeparators_;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline T_FSPathStyle& T_FSPathStyle::pathSeparator(
|
inline constexpr T_FSPathStyle& T_FSPathStyle::pathSeparator(
|
||||||
T_Flags< E_FSPathSeparator > ps ) noexcept
|
T_Flags< E_FSPathSeparator > ps ) noexcept
|
||||||
{
|
{
|
||||||
assert( ps );
|
assert( ps );
|
||||||
|
@ -71,19 +71,28 @@ inline T_FSPathStyle& T_FSPathStyle::pathSeparator(
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
inline T_FSPathStyle T_FSPathStyle::Unix( )
|
inline constexpr bool T_FSPathStyle::isSeparator(
|
||||||
|
const T_Character chr ) const noexcept
|
||||||
|
{
|
||||||
|
return ( ( pathSeparators_ & E_FSPathSeparator::SLASH ) && chr == '/' )
|
||||||
|
|| ( ( pathSeparators_ & E_FSPathSeparator::SLASH ) && chr == '\\' );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
inline constexpr T_FSPathStyle T_FSPathStyle::Unix( )
|
||||||
{
|
{
|
||||||
return T_FSPathStyle{ true , false ,
|
return T_FSPathStyle{ true , false ,
|
||||||
T_Flags< E_FSPathSeparator >{ E_FSPathSeparator::SLASH } };
|
T_Flags< E_FSPathSeparator >{ E_FSPathSeparator::SLASH } };
|
||||||
}
|
}
|
||||||
|
|
||||||
inline T_FSPathStyle T_FSPathStyle::Windows( )
|
inline constexpr T_FSPathStyle T_FSPathStyle::Windows( )
|
||||||
{
|
{
|
||||||
return T_FSPathStyle{ false , true ,
|
return T_FSPathStyle{ false , true ,
|
||||||
T_Flags< E_FSPathSeparator >{ E_FSPathSeparator::BACKSLASH } };
|
T_Flags< E_FSPathSeparator >{ E_FSPathSeparator::BACKSLASH } };
|
||||||
}
|
}
|
||||||
|
|
||||||
inline T_FSPathStyle T_FSPathStyle::System( )
|
inline constexpr T_FSPathStyle T_FSPathStyle::System( )
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
return T_FSPathStyle::Windows( );
|
return T_FSPathStyle::Windows( );
|
||||||
|
|
|
@ -14,27 +14,23 @@ using namespace ebcl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*= T_FSPath =================================================================*/
|
/*= T_FSPathStyle ============================================================*/
|
||||||
|
|
||||||
bool T_FSPath::IsValidRoot(
|
bool T_FSPathStyle::isValidRoot(
|
||||||
T_String const& str ) noexcept
|
T_String const& string ) const noexcept
|
||||||
{
|
{
|
||||||
if ( !str ) {
|
const auto sl( string.length( ) );
|
||||||
return true;
|
return ( sl == 0 )
|
||||||
|
|| ( sl == 1 && isSeparator( string[ 0 ] ) )
|
||||||
|
|| ( hasDriveLetter_
|
||||||
|
&& string.length( ) == 3
|
||||||
|
&& string[ 0 ].isAlpha( )
|
||||||
|
&& string[ 1 ] == ':'
|
||||||
|
&& isSeparator( string[ 2 ] ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
// TODO: support for network names (\\server\path)
|
/*= T_FSPath =================================================================*/
|
||||||
if ( str.length( ) == 3 && ( str.endsWith( ":\\" )
|
|
||||||
|| str.endsWith( ":/" ) ) ) {
|
|
||||||
return str[ 0 ].isAlpha( );
|
|
||||||
} else {
|
|
||||||
return ( str == "/" || str == "\\" );
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
return ( str == "/" || str == "\\" );
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool T_FSPath::IsValidComponent(
|
bool T_FSPath::IsValidComponent(
|
||||||
T_String const& str ) noexcept
|
T_String const& str ) noexcept
|
||||||
|
|
Loading…
Reference in a new issue