sc_report.hh revision 13128
1/* 2 * Copyright 2018 Google, Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer; 8 * redistributions in binary form must reproduce the above copyright 9 * notice, this list of conditions and the following disclaimer in the 10 * documentation and/or other materials provided with the distribution; 11 * neither the name of the copyright holders nor the names of its 12 * contributors may be used to endorse or promote products derived from 13 * this software without specific prior written permission. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * Authors: Gabe Black 28 */ 29 30#ifndef __SYSTEMC_EXT_UTIL_SC_REPORT_HH__ 31#define __SYSTEMC_EXT_UTIL_SC_REPORT_HH__ 32 33#include <exception> 34#include <string> 35 36#include "../core/sc_time.hh" 37 38namespace sc_core 39{ 40 41enum sc_severity 42{ 43 SC_INFO = 0, 44 SC_WARNING, 45 SC_ERROR, 46 SC_FATAL, 47 SC_MAX_SEVERITY 48}; 49 50enum sc_verbosity 51{ 52 SC_NONE = 0, 53 SC_LOW = 100, 54 SC_MEDIUM = 200, 55 SC_HIGH = 300, 56 SC_FULL = 400, 57 SC_DEBUG = 500 58}; 59 60class sc_report_handler; 61 62class sc_report : public std::exception 63{ 64 public: 65 sc_report(const sc_report &); 66 sc_report &operator = (const sc_report &); 67 virtual ~sc_report() throw(); 68 69 sc_severity get_severity() const { return _severity; } 70 const char *get_msg_type() const { return _msgType; } 71 const char *get_msg() const { return _msg; } 72 int get_verbosity() const { return _verbosity; } 73 const char *get_file_name() const { return _fileName; } 74 int get_line_number() const { return _lineNumber; } 75 76 const sc_time &get_time() const { return _time; } 77 const char *get_process_name() const { return _processName; } 78 79 virtual const char *what() const throw(); 80 81 // Deprecated 82 static const char *get_message(int id); 83 static bool is_suppressed(int id); 84 static void make_warnings_errors(bool); 85 static void register_id(int id, const char *msg); 86 static void suppress_id(int id, bool); // Only for info or warning. 87 static void suppress_infos(bool); 88 static void suppress_warnings(bool); 89 int get_id() const { return _id; } 90 91 private: 92 friend class sc_report_handler; 93 94 sc_report(sc_severity _severity, 95 const char *_msgType, 96 const char *_msg, 97 int _verbosity, 98 const char *_fileName, 99 int _lineNumber, 100 sc_time _time, 101 const char *_processName, 102 int _id); 103 104 sc_severity _severity; 105 const char *_msgType; 106 const char *_msg; 107 int _verbosity; 108 const char *_fileName; 109 int _lineNumber; 110 sc_time _time; 111 const char *_processName; 112 int _id; 113 std::string _what; 114}; 115 116// A non-standard function the Accellera datatypes rely on. 117[[noreturn]] void sc_abort(); 118 119} // namespace sc_core 120 121#endif //__SYSTEMC_EXT_UTIL_SC_REPORT_HH__ 122