SRD errors - Errors, warnings and notes

Replaced the "details" flag with a type which indicates whether an error
record contains an actual error, a warning or just a note.
This commit is contained in:
Emmanuel BENOîT 2017-12-02 09:16:17 +01:00
parent 86a3fe34b4
commit 53feddb4ee
3 changed files with 22 additions and 13 deletions

View file

@ -116,20 +116,28 @@ M_LSHIFT_OP( T_StringBuilder , T_SRDLocation const& ) noexcept;
/*= ERRORS ===================================================================*/
// An error that occurred during SRD processing
// Type of an error record
enum class E_SRDErrorType {
ERROR ,
WARNING ,
NOTE
};
// An error that occurred during SRD processing. Also includes warnings and
// notes.
class T_SRDError
{
private:
T_String error_;
T_SRDLocation location_;
bool isDetails_;
E_SRDErrorType type_;
public:
T_SRDError( ) = delete;
T_SRDError( T_String error ,
T_SRDLocation location ,
bool details = false ) noexcept;
E_SRDErrorType type = E_SRDErrorType::ERROR ) noexcept;
T_SRDError( T_SRDError const& other ) noexcept;
T_SRDError& operator= ( T_SRDError const& other ) noexcept;
@ -143,7 +151,7 @@ class T_SRDError
T_String const& error( ) const noexcept;
T_SRDLocation const& location( ) const noexcept;
bool isDetails( ) const noexcept;
E_SRDErrorType type( ) const noexcept;
};
M_DECLARE_SWAP( T_SRDError );

View file

@ -117,10 +117,10 @@ inline T_SRDLocationChaining const& T_SRDLocation::chaining( ) const noexcept
inline T_SRDError::T_SRDError(
T_String error ,
T_SRDLocation location ,
const bool details ) noexcept
const E_SRDErrorType type ) noexcept
: error_( std::move( error ) ) ,
location_( std::move( location ) ) ,
isDetails_( details )
type_( type )
{ }
/*----------------------------------------------------------------------------*/
@ -129,7 +129,7 @@ inline T_SRDError::T_SRDError(
T_SRDError const& other ) noexcept
: error_( other.error_ ) ,
location_( other.location_ ) ,
isDetails_( other.isDetails_ )
type_( other.type_ )
{ }
inline T_SRDError& T_SRDError::operator= (
@ -137,7 +137,7 @@ inline T_SRDError& T_SRDError::operator= (
{
error_ = other.error_;
location_ = other.location_;
isDetails_ = other.isDetails_;
type_ = other.type_;
return *this;
}
@ -164,7 +164,7 @@ inline M_DECLARE_SWAP( T_SRDError )
using std::swap;
swap( lhs.error_ , rhs.error_ );
swap( lhs.location_ , rhs.location_ );
swap( lhs.isDetails_ , rhs.isDetails_ );
swap( lhs.type_ , rhs.type_ );
}
/*----------------------------------------------------------------------------*/
@ -179,9 +179,9 @@ inline T_SRDLocation const& T_SRDError::location( ) const noexcept
return location_;
}
inline bool T_SRDError::isDetails( ) const noexcept
inline E_SRDErrorType T_SRDError::type( ) const noexcept
{
return isDetails_;
return type_;
}

View file

@ -104,7 +104,8 @@ T_StringBuilder& ebcl::operator<< (
void T_SRDErrors::checkAdded(
T_SRDError const& last )
{
if ( last.isDetails( ) || errCount_ >= MAX_ERRORS ) {
if ( last.type( ) != E_SRDErrorType::ERROR
|| errCount_ >= MAX_ERRORS ) {
return;
}
errCount_ ++;
@ -128,7 +129,7 @@ void T_SRDErrors::addAll(
RPC_SRDLocation lastLocation = nullptr;
for ( uint32_t i = 0 ; i < nErrors ; i ++ ) {
errors_.add( source[ i ] );
if ( !source[ i ].isDetails( ) ) {
if ( source[ i ].type( ) == E_SRDErrorType::ERROR ) {
lastLocation = &source[ i ].location( );
}
}