diff options
Diffstat (limited to 'src/support/error_handler.cc')
-rw-r--r-- | src/support/error_handler.cc | 63 |
1 files changed, 40 insertions, 23 deletions
diff --git a/src/support/error_handler.cc b/src/support/error_handler.cc index 9a898a6..db54225 100644 --- a/src/support/error_handler.cc +++ b/src/support/error_handler.cc @@ -6,38 +6,55 @@ #include "support/xerces_string_guard.h" +namespace { + +inline std::string getMessage(const xercesc::SAXParseException& exception) { + return std::string( + *InputXSLT::XercesStringGuard<char>(exception.getMessage()) + ); +} + +} + namespace InputXSLT { -ErrorHandler::ErrorHandler(const std::string& transformation): - transformation_path_(transformation) { } +ErrorHandler::ErrorHandler(): + error_cache_{} { } + +void ErrorHandler::warning(const xercesc::SAXParseException& exception) { + this->constructErrorCache(); -void ErrorHandler::warning(const xercesc::SAXParseException& e) { - std::cerr << "Warning in " - << "'" - << this->transformation_path_ - << "': " - << *XercesStringGuard<char>(e.getMessage()) - << std::endl; + this->error_cache_->emplace_back( + "Warning: " + getMessage(exception) + ); } -void ErrorHandler::error(const xercesc::SAXParseException& e) { - std::cerr << "Error in " - << "'" - << this->transformation_path_ - << "': " - << *XercesStringGuard<char>(e.getMessage()) - << std::endl; +void ErrorHandler::error(const xercesc::SAXParseException& exception) { + this->constructErrorCache(); + + this->error_cache_->emplace_back( + "Error: " + getMessage(exception) + ); } -void ErrorHandler::fatalError(const xercesc::SAXParseException& e) { - std::cerr << "Fatal error in " - << "'" - << this->transformation_path_ - << "': " - << *XercesStringGuard<char>(e.getMessage()) - << std::endl; +void ErrorHandler::fatalError(const xercesc::SAXParseException& exception) { + this->constructErrorCache(); + + this->error_cache_->emplace_back( + "Fatal error: " + getMessage(exception) + ); } void ErrorHandler::resetErrors() { } +auto ErrorHandler::getCachedErrors() -> error_cache_ptr { + return error_cache_ptr(this->error_cache_.release()); +} + +void ErrorHandler::constructErrorCache() { + if ( !this->error_cache_ ) { + this->error_cache_.reset(new error_cache()); + } +} + } |