summaryrefslogtreecommitdiff
path: root/ext/systemc/src/sysc/utils/sc_report_handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/systemc/src/sysc/utils/sc_report_handler.h')
-rw-r--r--ext/systemc/src/sysc/utils/sc_report_handler.h197
1 files changed, 197 insertions, 0 deletions
diff --git a/ext/systemc/src/sysc/utils/sc_report_handler.h b/ext/systemc/src/sysc/utils/sc_report_handler.h
new file mode 100644
index 000000000..799985a1f
--- /dev/null
+++ b/ext/systemc/src/sysc/utils/sc_report_handler.h
@@ -0,0 +1,197 @@
+/*****************************************************************************
+
+ 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!