| 1 | /*
|
| 2 | * Log.h
|
| 3 | *
|
| 4 | * This file is part of the XShaderCompiler project (Copyright (c) 2014-2017 by Lukas Hermanns)
|
| 5 | * See "LICENSE.txt" for license information.
|
| 6 | */
|
| 7 |
|
| 8 | #ifndef XSC_LOG_H
|
| 9 | #define XSC_LOG_H
|
| 10 |
|
| 11 |
|
| 12 | #include "IndentHandler.h"
|
| 13 | #include "Report.h"
|
| 14 | #include <vector>
|
| 15 | #include <string>
|
| 16 |
|
| 17 |
|
| 18 | namespace Xsc
|
| 19 | {
|
| 20 |
|
| 21 |
|
| 22 | /* ===== Public classes ===== */
|
| 23 |
|
| 24 | //! Log base class.
|
| 25 | class XSC_EXPORT Log
|
| 26 | {
|
| 27 |
|
| 28 | public:
|
| 29 |
|
| 30 | //! Submits the specified report.
|
| 31 | virtual void SubmitReport(const Report& report) = 0;
|
| 32 |
|
| 33 | //! Sets the next indentation string. By default two spaces.
|
| 34 | inline void SetIndent(const std::string& indent)
|
| 35 | {
|
| 36 | indentHandler_.SetIndent(indent);
|
| 37 | }
|
| 38 |
|
| 39 | //! Increments the indentation.
|
| 40 | inline void IncIndent()
|
| 41 | {
|
| 42 | indentHandler_.IncIndent();
|
| 43 | }
|
| 44 |
|
| 45 | //! Decrements the indentation.
|
| 46 | inline void DecIndent()
|
| 47 | {
|
| 48 | indentHandler_.DecIndent();
|
| 49 | }
|
| 50 |
|
| 51 | protected:
|
| 52 |
|
| 53 | Log() = default;
|
| 54 |
|
| 55 | //! Returns the current full indentation string.
|
| 56 | inline const std::string& FullIndent() const
|
| 57 | {
|
| 58 | return indentHandler_.FullIndent();
|
| 59 | }
|
| 60 |
|
| 61 | private:
|
| 62 |
|
| 63 | IndentHandler indentHandler_;
|
| 64 |
|
| 65 | };
|
| 66 |
|
| 67 | //! Standard output log (uses std::cout to submit a report).
|
| 68 | class XSC_EXPORT StdLog : public Log
|
| 69 | {
|
| 70 |
|
| 71 | public:
|
| 72 |
|
| 73 | //! Implements the base class interface.
|
| 74 | void SubmitReport(const Report& report) override;
|
| 75 |
|
| 76 | //! Prints all submitted reports to the standard output.
|
| 77 | void PrintAll(bool verbose = true);
|
| 78 |
|
| 79 | private:
|
| 80 |
|
| 81 | struct IndentReport
|
| 82 | {
|
| 83 | std::string indent;
|
| 84 | Report report;
|
| 85 | };
|
| 86 |
|
| 87 | using IndentReportList = std::vector<IndentReport>;
|
| 88 |
|
| 89 | void PrintReport(const IndentReport& r, bool verbose);
|
| 90 | void PrintAndClearReports(IndentReportList& reports, bool verbose, const std::string& headline = "" );
|
| 91 |
|
| 92 | IndentReportList infos_;
|
| 93 | IndentReportList warnings_;
|
| 94 | IndentReportList errors_;
|
| 95 |
|
| 96 | };
|
| 97 |
|
| 98 |
|
| 99 | } // /namespace Xsc
|
| 100 |
|
| 101 |
|
| 102 | #endif
|
| 103 |
|
| 104 |
|
| 105 |
|
| 106 | // ================================================================================ |