/*----------------------------------------------------------------------------*/ /* Copyright (c) FIRST 2008-2016. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ /*----------------------------------------------------------------------------*/ #pragma once #include "Base.h" #ifdef _WIN32 #include //Windows.h defines #define GetMessage GetMessageW, which is stupid and we don't want it. #undef GetMessage #endif #include #include #include "llvm/StringRef.h" // Forward declarations class ErrorBase; /** * Error object represents a library error. */ class Error { public: typedef int32_t Code; Error() = default; Error(const Error&) = delete; Error& operator=(const Error&) = delete; void Clone(const Error& error); Code GetCode() const; std::string GetMessage() const; std::string GetFilename() const; std::string GetFunction() const; uint32_t GetLineNumber() const; const ErrorBase* GetOriginatingObject() const; double GetTimestamp() const; void Clear(); void Set(Code code, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, uint32_t lineNumber, const ErrorBase* originatingObject); private: void Report(); Code m_code = 0; std::string m_message; std::string m_filename; std::string m_function; uint32_t m_lineNumber = 0; const ErrorBase* m_originatingObject = nullptr; double m_timestamp = 0.0; };