| /***************************************************************************** |
| |
| Licensed to Accellera Systems Initiative Inc. (Accellera) under one or |
| more contributor license agreements. See the NOTICE file distributed |
| with this work for additional information regarding copyright ownership. |
| Accellera licenses this file to you under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with the |
| License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| implied. See the License for the specific language governing |
| permissions and limitations under the License. |
| |
| *****************************************************************************/ |
| |
| /***************************************************************************** |
| |
| sc_report_handler.h - |
| |
| Original Author: Alex Riesen, Synopsys, Inc. |
| see also sc_report.h |
| |
| CHANGE LOG AT END OF FILE |
| *****************************************************************************/ |
| |
| #ifndef SC_REPORT_HANDLER_H |
| #define SC_REPORT_HANDLER_H |
| |
| namespace sc_core { |
| |
| // ---------------------------------------------------------------------------- |
| // STRUCT : sc_msg_def |
| // |
| // Exception message definition structure |
| // ---------------------------------------------------------------------------- |
| |
| struct sc_msg_def |
| { |
| const char* msg_type; |
| sc_actions actions; |
| sc_actions sev_actions[SC_MAX_SEVERITY]; |
| unsigned limit; |
| unsigned sev_limit[SC_MAX_SEVERITY]; |
| unsigned limit_mask; // 0 - limit, 1..4 - sev_limit |
| unsigned call_count; |
| unsigned sev_call_count[SC_MAX_SEVERITY]; |
| char* msg_type_data; |
| |
| int id; // backward compatibility with 2.0+ |
| }; |
| |
| typedef void (* sc_report_handler_proc)(const sc_report&, const sc_actions &); |
| class sc_report; |
| extern bool sc_report_close_default_log(); |
| class sc_report_handler |
| { |
| public: |
| static void report(sc_severity, |
| const char* msg_type, |
| const char* msg, |
| const char* file, |
| int line); |
| |
| static void report( sc_severity, |
| const char* msg_type, |
| const char* msg, |
| int verbosity, |
| const char* file, |
| int line ); |
| |
| static sc_actions set_actions(sc_severity, |
| sc_actions = SC_UNSPECIFIED); |
| |
| static sc_actions set_actions(const char * msg_type, |
| sc_actions = SC_UNSPECIFIED); |
| |
| static sc_actions set_actions(const char * msg_type, |
| sc_severity, |
| sc_actions = SC_UNSPECIFIED); |
| |
| static int stop_after(sc_severity, int limit = -1); |
| static int stop_after(const char* msg_type, int limit = -1); |
| static int stop_after(const char* msg_type, sc_severity, int limit = -1); |
| |
| static sc_actions suppress(sc_actions); |
| static sc_actions suppress(); |
| static sc_actions force(sc_actions); |
| static sc_actions force(); |
| |
| static int get_count(sc_severity severity_); |
| static int get_count(const char* msg_type_); |
| static int get_count(const char* msg_type_, sc_severity severity_); |
| |
| static int get_verbosity_level(); |
| static int set_verbosity_level( int level ); |
| |
| |
| static void initialize(); // just reset counters |
| static void release(); // initialize() needed for reports after it |
| |
| static sc_report_handler_proc set_handler(sc_report_handler_proc); |
| static sc_report_handler_proc get_handler(); |
| // use set_handler(NULL); to restore default handler |
| static void default_handler(const sc_report&, const sc_actions&); |
| |
| static sc_actions get_new_action_id(); |
| |
| static sc_report* get_cached_report(); |
| static void clear_cached_report(); |
| |
| // if filename is NULL, the previous log file name will be removed. |
| // The provider of a report_handler supposed to handle this. |
| // Return false if filename is not NULL and filename is already set. |
| static bool set_log_file_name(const char* filename); |
| static const char* get_log_file_name(); |
| |
| public: // private, actually |
| |
| struct msg_def_items |
| { |
| sc_msg_def* md; // have to point to sc_msg_def-s |
| int count; // set to number of items in md[] |
| bool allocated; // used internally, previous value ignored |
| msg_def_items* next; // used internally, previous value ignored |
| }; |
| |
| static void add_static_msg_types(msg_def_items *); |
| static sc_msg_def* add_msg_type(const char * msg_type); |
| |
| protected: |
| |
| static void cache_report(const sc_report&); |
| static sc_actions execute(sc_msg_def*, sc_severity); |
| |
| static sc_actions suppress_mask; |
| static sc_actions force_mask; |
| static sc_actions sev_actions[SC_MAX_SEVERITY]; |
| static unsigned sev_limit[SC_MAX_SEVERITY]; |
| static unsigned sev_call_count[SC_MAX_SEVERITY]; |
| static sc_report* last_global_report; |
| static sc_actions available_actions; |
| static char* log_file_name; |
| static int verbosity_level; |
| |
| static msg_def_items* messages; |
| static msg_def_items msg_terminator; |
| |
| static sc_report_handler_proc handler; |
| |
| static sc_msg_def* mdlookup(const char* msg_type); |
| |
| private: // backward compatibility with 2.0+ |
| |
| friend class sc_report; |
| static sc_msg_def* mdlookup(int id); |
| |
| public: |
| |
| static void report(sc_severity, |
| int id, |
| const char* add_msg, |
| const char* file, |
| int line); |
| |
| }; |
| |
| } // namespace sc_core |
| |
| // $Log: sc_report_handler.h,v $ |
| // Revision 1.5 2011/08/26 20:46:19 acg |
| // Andy Goodrich: moved the modification log to the end of the file to |
| // eliminate source line number skew when check-ins are done. |
| // |
| // Revision 1.4 2011/03/23 16:16:49 acg |
| // Andy Goodrich: finish message verbosity support. |
| // |
| // Revision 1.3 2011/02/18 20:38:44 acg |
| // Andy Goodrich: Updated Copyright notice. |
| // |
| // Revision 1.2 2011/02/01 23:02:05 acg |
| // Andy Goodrich: IEEE 1666 2011 changes. |
| // |
| // Revision 1.1.1.1 2006/12/15 20:20:06 acg |
| // SystemC 2.3 |
| // |
| // Revision 1.3 2006/01/13 18:53:11 acg |
| // Andy Goodrich: Added $Log command so that CVS comments are reproduced in |
| // the source. |
| // |
| |
| #endif |
| |
| // Taf! |