// Copyright (C) 2001-2009 Vivien Mallet
//
// This file is part of the linear-algebra library Seldon,
// http://seldon.sourceforge.net/.
//
// Seldon is free software; you can redistribute it and/or modify it under the
// terms of the GNU Lesser General Public License as published by the Free
// Software Foundation; either version 2.1 of the License, or (at your option)
// any later version.
//
// Seldon is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
// more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Seldon. If not, see http://www.gnu.org/licenses/.
#ifndef SELDON_FILE_ERRORS_CXX
#include "Errors.hxx"
namespace Seldon
{
///////////
// ERROR //
///////////
/****************
* CONSTRUCTORS *
****************/
//! Main constructor.
/*! Error associated with both a function and a comment.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
Error::Error(string function = "", string comment = "") throw():
description_("ERROR!\nAn undefined error occurred"),
function_(function), comment_(comment)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
//! Alternative constructor.
/*! Error associated with a description, a function and a comment.
\param description short description of the error.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
Error::Error(string description, string function, string comment) throw():
description_("ERROR!\n" + description),
function_(function), comment_(comment)
{
}
/**************
* DESTRUCTOR *
**************/
//! Destructor.
/*!
\note Empty.
*/
Error::~Error() throw()
{
}
/***********
* METHODS *
***********/
//! Delivers information about the error.
/*! Displays available information, i.e. the error description, the function
and/or a comment.
*/
string Error::What()
{
string message(description_);
if (!function_.empty())
message += " in " + function_;
message += ".\n";
if (!comment_.empty())
message += " " + comment_;
return message;
}
//! Delivers information about the error.
/*! Displays available information, i.e. the error description, the function
and/or a comment.
*/
void Error::CoutWhat()
{
cout << this->What() << endl;
}
///////////////////
// WRONGARGUMENT //
///////////////////
//! Main constructor.
/*! Error associated with both a function and a comment.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
WrongArgument::WrongArgument(string function = "", string comment = "")
throw(): Error("Wrong argument given to ", function, comment)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
//! Delivers information about the error.
/*! Displays available information, i.e.
the error description, the function and/or the comment.
*/
string WrongArgument::What()
{
string message(this->description_);
if (!this->function_.empty())
message += this->function_;
message += ".\n";
if (!this->comment_.empty())
message += " " + this->comment_;
return message;
}
//////////////
// NOMEMORY //
//////////////
//! Main constructor.
/*! Error associated with both a function and a comment.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
NoMemory::NoMemory(string function = "", string comment = "") throw():
Error("Out of memory", function, comment)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
//////////////
// WRONGDIM //
//////////////
//! Main constructor.
/*! Error associated with both a function and a comment.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
WrongDim::WrongDim(string function = "", string comment = "") throw():
Error("Wrong dimensions involved", function, comment)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
////////////////
// WRONGINDEX //
////////////////
//! Main constructor.
/*! Error associated with both a function and a comment.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
WrongIndex::WrongIndex(string function = "", string comment = "") throw():
Error("Index out of range", function, comment)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
//////////////
// WRONGROW //
//////////////
//! Main constructor.
/*! Error associated with both a function and a comment.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
WrongRow::WrongRow(string function = "", string comment = "") throw():
Error("Row index out of range", function, comment)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
//////////////
// WRONGCOL //
//////////////
//! Main constructor.
/*! Error associated with both a function and a comment.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
WrongCol::WrongCol(string function = "", string comment = "") throw():
Error("Column index out of range", function, comment)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
/////////////
// IOERROR //
/////////////
//! Main constructor.
/*! Error associated with both a function and a comment.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
IOError::IOError(string function = "", string comment = "") throw():
Error("Error while performing an I/O operation", function, comment)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
/////////////////
// LAPACKERROR //
/////////////////
//! Main constructor.
/*! Error associated with a diagnostic integer, a function and a comment.
\param info Lapack diagnostic integer.
\param function function with which the error is associated.
\param comment comment associated with the error.
*/
LapackError::LapackError(int info, string function = "",
string comment = "")
throw(): Error("Error returned by Lapack", function, comment), info_(info)
{
#ifdef SELDON_WITH_ABORT
this->CoutWhat();
abort();
#endif
}
//! Delivers information about the error.
/*! Displays available information, i.e.
the error description, the function and/or the comment.
*/
string LapackError::What()
{
string message(this->description_);
if (!this->function_.empty())
message += " in " + this->function_;
message += ".\n";
if (!this->comment_.empty())
message += " " + this->comment_;
message += " Diagnostic integer (\"info\"): " + to_str(info_)
+ ".\n";
return message;
}
} // namespace Seldon.
#define SELDON_FILE_ERRORS_CXX
#endif