diff options
Diffstat (limited to 'src/systemc/tlm_utils')
-rw-r--r-- | src/systemc/tlm_utils/convenience_socket_bases.cpp | 68 | ||||
-rw-r--r-- | src/systemc/tlm_utils/instance_specific_extensions.cpp | 275 |
2 files changed, 181 insertions, 162 deletions
diff --git a/src/systemc/tlm_utils/convenience_socket_bases.cpp b/src/systemc/tlm_utils/convenience_socket_bases.cpp index 5d03fd23f..ba38d6c79 100644 --- a/src/systemc/tlm_utils/convenience_socket_bases.cpp +++ b/src/systemc/tlm_utils/convenience_socket_bases.cpp @@ -17,68 +17,70 @@ *****************************************************************************/ -#include "tlm_utils/convenience_socket_bases.h" +#include <tlm_utils/convenience_socket_bases.h> -#include "sysc/kernel/sc_object.h" -#include "sysc/kernel/sc_simcontext.h" -#include "sysc/utils/sc_report.h" #include <sstream> +#include <systemc> -namespace tlm_utils { +namespace tlm_utils +{ void -convenience_socket_base::display_warning(const char* text) const +convenience_socket_base::display_warning(const char *text) const { - std::stringstream s; - s << get_socket()->name() << ": " << text; - SC_REPORT_WARNING(get_report_type(), s.str().c_str()); + std::stringstream s; + s << get_socket()->name() << ": " << text; + SC_REPORT_WARNING(get_report_type(), s.str().c_str()); } void -convenience_socket_base::display_error(const char* text) const +convenience_socket_base::display_error(const char *text) const { - std::stringstream s; - s << get_socket()->name() << ": " << text; - SC_REPORT_ERROR(get_report_type(), s.str().c_str()); + std::stringstream s; + s << get_socket()->name() << ": " << text; + SC_REPORT_ERROR(get_report_type(), s.str().c_str()); } -//simple helpers for warnings an errors to shorten in code notation +// Simple helpers for warnings an errors to shorten in code notation. void -convenience_socket_cb_holder::display_warning(const char* msg) const +convenience_socket_cb_holder::display_warning(const char *msg) const { - m_owner->display_warning(msg); + m_owner->display_warning(msg); } void -convenience_socket_cb_holder::display_error(const char* msg) const +convenience_socket_cb_holder::display_error(const char *msg) const { - m_owner->display_error(msg); + m_owner->display_error(msg); } -const char* -simple_socket_base::get_report_type() const { - return "/OSCI_TLM-2/simple_socket"; +const char * +simple_socket_base::get_report_type() const +{ + return "/OSCI_TLM-2/simple_socket"; } void -simple_socket_base::elaboration_check(const char* action) const +simple_socket_base::elaboration_check(const char *action) const { - if (sc_core::sc_get_curr_simcontext()->elaboration_done()) { - std::stringstream s; - s << " elaboration completed, " << action << " not allowed"; - display_error(s.str().c_str()); - } + if (sc_core::sc_get_curr_simcontext()->elaboration_done()) { + std::stringstream s; + s << " elaboration completed, " << action << " not allowed"; + display_error(s.str().c_str()); + } } -const char* -passthrough_socket_base::get_report_type() const { - return "/OSCI_TLM-2/passthrough_socket"; +const char * +passthrough_socket_base::get_report_type() const +{ + return "/OSCI_TLM-2/passthrough_socket"; } -const char* -multi_socket_base::get_report_type() const { - return "/OSCI_TLM-2/multi_socket"; +const char * +multi_socket_base::get_report_type() const +{ + return "/OSCI_TLM-2/multi_socket"; } } // namespace tlm_utils diff --git a/src/systemc/tlm_utils/instance_specific_extensions.cpp b/src/systemc/tlm_utils/instance_specific_extensions.cpp index 9406dc8da..c0836cd67 100644 --- a/src/systemc/tlm_utils/instance_specific_extensions.cpp +++ b/src/systemc/tlm_utils/instance_specific_extensions.cpp @@ -17,233 +17,250 @@ *****************************************************************************/ -#include "tlm_utils/instance_specific_extensions_int.h" -#include "sysc/utils/sc_typeindex.h" // sc_typeindex +#include <tlm_utils/instance_specific_extensions_int.h> -#include <map> #include <iostream> +#include <map> +#include <systemc> +#include <tlm> + +namespace tlm +{ + +template class tlm_array<tlm_utils::ispex_base *>; -namespace tlm { -template class SC_API tlm_array<tlm_utils::ispex_base*>; } // namespace tlm -namespace tlm_utils { -/* anonymous */ namespace { -class ispex_registry // copied from tlm_gp.cpp -{ - typedef unsigned int key_type; - typedef std::map<sc_core::sc_type_index, key_type> type_map; -public: - static ispex_registry& instance() - { - if (!instance_) // don't cleanup registry - instance_ = new ispex_registry(); - return *instance_; - } - - unsigned int register_extension(sc_core::sc_type_index type) - { - type_map::const_iterator it = ids_.find( type ); - - if( it == ids_.end() ) { // new extension - generate/store ID - type_map::value_type v( type, static_cast<key_type>(ids_.size()) ); - ids_.insert( v ); - return v.second; +namespace tlm_utils +{ + +namespace +{ + +class ispex_registry // Copied from tlm_gp.cpp. +{ + typedef unsigned int key_type; + typedef std::map<sc_core::sc_type_index, key_type> type_map; + + public: + static ispex_registry & + instance() + { + if (!instance_) { + // Don't cleanup registry. + instance_ = new ispex_registry(); + } + return *instance_; } - return it->second; - } - static unsigned int max_num_extensions() - { return (instance_) ? instance().ids_.size() : 0; } + unsigned int + register_extension(sc_core::sc_type_index type) + { + type_map::const_iterator it = ids_.find(type); + + if (it == ids_.end()) { + // New extension - generate/store ID. + type_map::value_type v(type, static_cast<key_type>(ids_.size())); + ids_.insert(v); + return v.second; + } + return it->second; + } -private: - static ispex_registry* instance_; - type_map ids_; - ispex_registry() /* = default */ {} + static unsigned int + max_num_extensions() + { + return (instance_) ? instance().ids_.size() : 0; + } -}; // class ispex_registry + private: + static ispex_registry *instance_; + type_map ids_; + ispex_registry() {} +}; + +ispex_registry *ispex_registry::instance_ = nullptr; -ispex_registry* ispex_registry::instance_ = NULL; } // anonymous namespace unsigned int -ispex_base::register_private_extension(const std::type_info& type) +ispex_base::register_private_extension(const std::type_info &type) { - return ispex_registry::instance().register_extension(type); + return ispex_registry::instance().register_extension(type); } -//Helper to do the numbering of private extension accessors -static unsigned int max_num_ispex_accessors(bool increment=false) +// Helper to do the numbering of private extension accessors. +static unsigned int +max_num_ispex_accessors(bool increment=false) { static unsigned int max_num = 0; - if (increment) ++max_num; + if (increment) + ++max_num; return max_num; } // ---------------------------------------------------------------------------- -//the pool for the container, plain as can be +// The pool for the container, plain as can be. class instance_specific_extension_container_pool { - instance_specific_extension_container_pool() - : unused(NULL){} - - ~instance_specific_extension_container_pool(); - -public: - static instance_specific_extension_container_pool& instance() - { - static instance_specific_extension_container_pool inst; - return inst; - } + instance_specific_extension_container_pool() : unused(nullptr) {} + ~instance_specific_extension_container_pool(); + + public: + static instance_specific_extension_container_pool & + instance() + { + static instance_specific_extension_container_pool inst; + return inst; + } - instance_specific_extension_container* create(); - void free(instance_specific_extension_container*); + instance_specific_extension_container *create(); + void free(instance_specific_extension_container *); -private: - instance_specific_extension_container* unused; -}; // class instance_specific_extension_container_pool + private: + instance_specific_extension_container *unused; +}; -instance_specific_extension_container* +instance_specific_extension_container * instance_specific_extension_container_pool::create() { - if (!unused) { - unused =new instance_specific_extension_container(); - } - instance_specific_extension_container* tmp = unused; - unused = unused->next; - return tmp; + if (!unused) { + unused = new instance_specific_extension_container(); + } + instance_specific_extension_container *tmp = unused; + unused = unused->next; + return tmp; } void -instance_specific_extension_container_pool:: - free(instance_specific_extension_container* cont) +instance_specific_extension_container_pool::free( + instance_specific_extension_container *cont) { - cont->next=unused; - unused=cont; + cont->next = unused; + unused = cont; } instance_specific_extension_container_pool:: - ~instance_specific_extension_container_pool() + ~instance_specific_extension_container_pool() { - while(unused) { - instance_specific_extension_container* tmp = unused; - unused=unused->next; - delete tmp; - } + while (unused) { + instance_specific_extension_container *tmp = unused; + unused = unused->next; + delete tmp; + } } // ---------------------------------------------------------------------------- -instance_specific_extension_container* +instance_specific_extension_container * instance_specific_extension_container::create() { - return instance_specific_extension_container_pool::instance().create(); + return instance_specific_extension_container_pool::instance().create(); } -instance_specific_extension_container::instance_specific_extension_container() - : use_count(0) - , m_txn(NULL) - , m_release_fn(NULL) - , m_carrier(NULL) - , next(NULL) +instance_specific_extension_container:: + instance_specific_extension_container() : + use_count(0), m_txn(NULL), m_release_fn(NULL), m_carrier(NULL), next(NULL) { - resize(); + resize(); } void instance_specific_extension_container:: - attach_carrier(instance_specific_extension_carrier* carrier, - void* txn, release_fn* rel_fn) + attach_carrier(instance_specific_extension_carrier *carrier, + void *txn, release_fn *rel_fn) { - m_txn = txn; - m_release_fn = rel_fn; - m_carrier = carrier; + m_txn = txn; + m_release_fn = rel_fn; + m_carrier = carrier; } void instance_specific_extension_container::resize() { - m_ispex_per_accessor.resize( max_num_ispex_accessors() ); + m_ispex_per_accessor.resize(max_num_ispex_accessors()); - for (unsigned int i=0; i < m_ispex_per_accessor.size(); ++i) { - m_ispex_per_accessor[i] = new instance_specific_extensions_per_accessor(this); - m_ispex_per_accessor[i]->resize_extensions(); - } + for (unsigned int i = 0; i < m_ispex_per_accessor.size(); ++i) { + m_ispex_per_accessor[i] = + new instance_specific_extensions_per_accessor(this); + m_ispex_per_accessor[i]->resize_extensions(); + } } instance_specific_extension_container:: - ~instance_specific_extension_container() + ~instance_specific_extension_container() { - for (unsigned int i=0; i<m_ispex_per_accessor.size(); ++i) - delete m_ispex_per_accessor[i]; + for (unsigned int i = 0; i < m_ispex_per_accessor.size(); ++i) + delete m_ispex_per_accessor[i]; } void instance_specific_extension_container::inc_use_count() { - use_count++; + use_count++; } void instance_specific_extension_container::dec_use_count() { - if ((--use_count)==0) { // if this container isn't used any more - // we release the carrier extension - m_release_fn(m_carrier, m_txn); - // we send it back to our pool - instance_specific_extension_container_pool::instance().free(this); - } + if ((--use_count) == 0) { + // If this container isn't used any more we release the carrier + // extension. + m_release_fn(m_carrier, m_txn); + // We send it back to our pool. + instance_specific_extension_container_pool::instance().free(this); + } } -instance_specific_extensions_per_accessor* +instance_specific_extensions_per_accessor * instance_specific_extension_container::get_accessor(unsigned int idx) { - return m_ispex_per_accessor[idx]; + return m_ispex_per_accessor[idx]; } // ---------------------------------------------------------------------------- // non-templatized version with manual index: -ispex_base* -instance_specific_extensions_per_accessor:: - set_extension(unsigned int index, ispex_base* ext) +ispex_base * +instance_specific_extensions_per_accessor::set_extension( + unsigned int index, ispex_base *ext) { - resize_extensions(); - ispex_base* tmp = m_extensions[index]; - m_extensions[index] = ext; - if (!tmp && ext) m_container->inc_use_count(); - return tmp; + resize_extensions(); + ispex_base *tmp = m_extensions[index]; + m_extensions[index] = ext; + if (!tmp && ext) + m_container->inc_use_count(); + return tmp; } -ispex_base* -instance_specific_extensions_per_accessor:: - get_extension(unsigned int index) const +ispex_base * +instance_specific_extensions_per_accessor::get_extension( + unsigned int index) const { - return (index < m_extensions.size()) ? m_extensions[index] : NULL; + return (index < m_extensions.size()) ? m_extensions[index] : nullptr; } void -instance_specific_extensions_per_accessor:: - clear_extension(unsigned int index) +instance_specific_extensions_per_accessor::clear_extension(unsigned int index) { - if (index < m_extensions.size()) - { - if (m_extensions[index]) m_container->dec_use_count(); - m_extensions[index] = static_cast<ispex_base*>(0); - } + if (index < m_extensions.size()) { + if (m_extensions[index]) + m_container->dec_use_count(); + m_extensions[index] = static_cast<ispex_base *>(nullptr); + } } void instance_specific_extensions_per_accessor::resize_extensions() { - m_extensions.expand(ispex_registry::max_num_extensions()); + m_extensions.expand(ispex_registry::max_num_extensions()); } // ---------------------------------------------------------------------------- -instance_specific_extension_accessor::instance_specific_extension_accessor() - : m_index(max_num_ispex_accessors(true)-1) +instance_specific_extension_accessor::instance_specific_extension_accessor() : + m_index(max_num_ispex_accessors(true) - 1) {} } // namespace tlm_utils |