//===- MsgHandler.h -------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef MCLD_LD_MSGHANDLER_H_ #define MCLD_LD_MSGHANDLER_H_ #include "mcld/LD/DiagnosticEngine.h" #include "mcld/Support/Path.h" #include #include #include namespace mcld { /** \class MsgHandler * \brief MsgHandler controls the timing to output message. */ class MsgHandler { public: explicit MsgHandler(DiagnosticEngine& pEngine); ~MsgHandler(); bool emit(); void addString(llvm::StringRef pStr) const; void addString(const std::string& pStr) const; void addTaggedVal(intptr_t pValue, DiagnosticEngine::ArgumentKind pKind) const; private: void flushCounts() { m_Engine.state().numArgs = m_NumArgs; } private: DiagnosticEngine& m_Engine; mutable unsigned int m_NumArgs; }; inline const MsgHandler& operator<<(const MsgHandler& pHandler, llvm::StringRef pStr) { pHandler.addString(pStr); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, const std::string& pStr) { pHandler.addString(pStr); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, const sys::fs::Path& pPath) { pHandler.addString(pPath.native()); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, const char* pStr) { pHandler.addTaggedVal(reinterpret_cast(pStr), DiagnosticEngine::ak_c_string); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, int pValue) { pHandler.addTaggedVal(pValue, DiagnosticEngine::ak_sint); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, unsigned int pValue) { pHandler.addTaggedVal(pValue, DiagnosticEngine::ak_uint); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, long pValue) { pHandler.addTaggedVal(pValue, DiagnosticEngine::ak_sint); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, unsigned long pValue) { pHandler.addTaggedVal(pValue, DiagnosticEngine::ak_uint); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, unsigned long long pValue) { pHandler.addTaggedVal(pValue, DiagnosticEngine::ak_ulonglong); return pHandler; } inline const MsgHandler& operator<<(const MsgHandler& pHandler, bool pValue) { pHandler.addTaggedVal(pValue, DiagnosticEngine::ak_bool); return pHandler; } } // namespace mcld #endif // MCLD_LD_MSGHANDLER_H_