//===- DiagnosticPrinter.h ------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_DIAGNOSTIC_PRINTER_H
#define MCLD_DIAGNOSTIC_PRINTER_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif
#include <mcld/LD/DiagnosticEngine.h>
#include <mcld/LD/Diagnostic.h>

namespace mcld
{

/** \class DiagnosticPrinter
 *  \brief DiagnosticPrinter provides the interface to customize diagnostic
 *  messages and output.
 */
class DiagnosticPrinter
{
public:
  DiagnosticPrinter();

  virtual ~DiagnosticPrinter();

  virtual void beginInput(const Input& pInput, const MCLDInfo& pLDInfo) {}

  virtual void endInput() {}

  virtual void finish() {}

  virtual void clear()
  { m_NumErrors = m_NumWarnings = 0; }

  /// HandleDiagnostic - Handle this diagnostic, reporting it to the user or
  /// capturing it to a log as needed.
  virtual void handleDiagnostic(DiagnosticEngine::Severity pSeverity,
                                const Diagnostic& pInfo);

  unsigned int getNumErrors() const
  { return m_NumErrors; }

  unsigned int getNumWarnings() const
  { return m_NumWarnings; }

protected:
  unsigned int m_NumErrors;
  unsigned int m_NumWarnings;
};

} // namespace of mcld

#endif

