diff options
Diffstat (limited to 'src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_array.h')
-rw-r--r-- | src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_array.h | 96 |
1 files changed, 34 insertions, 62 deletions
diff --git a/src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_array.h b/src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_array.h index 1a49b0895..9890a2a2c 100644 --- a/src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_array.h +++ b/src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_array.h @@ -17,23 +17,13 @@ *****************************************************************************/ -#ifndef TLM_CORE_TLM2_TLM_ARRAY_H_INCLUDED_ -#define TLM_CORE_TLM2_TLM_ARRAY_H_INCLUDED_ +#ifndef __SYSTEMC_EXT_TLM_CORE_TLM_2_TLM_GENERIC_PAYLOADS_TLM_ARRAY_H__ +#define __SYSTEMC_EXT_TLM_CORE_TLM_2_TLM_GENERIC_PAYLOADS_TLM_ARRAY_H__ #include <vector> -#if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) -#pragma warning(push) -#pragma warning(disable: 4251) // DLL import for std::string,vector -#endif - -namespace tlm { - -// -// To the LRM writer: the below class is an artifact of the tlm_generic_payload -// implementation and not part of the core TLM standard -// - +namespace tlm +{ // This implements a lean and fast array class that supports array expansion on // request. The class is primarily used in the tlm_generic_payload class for @@ -48,79 +38,61 @@ namespace tlm { // may invalidate all direct pointers into the array. -//the tlm_array shall always be used with T=tlm_extension_base* +// The tlm_array shall always be used with T=tlm_extension_base*. template <typename T> -class tlm_array - : private std::vector<T> +class tlm_array : private std::vector<T> { - typedef std::vector<T> base_type; + private: + typedef std::vector<T> base_type; typedef typename base_type::size_type size_type; -public: - - // constructor: - tlm_array(size_type size = 0) - : base_type(size) - , m_entries() - { - //m_entries.reserve(size); // optional - } - // copy constructor: - // tlm_array(const tlm_array& orig) = default; + public: + tlm_array(size_type size=0) : base_type(size), m_entries() {} - // destructor: - // ~tlm_array() = default; + // Operators for dereferencing: + using base_type::operator []; - // operators for dereferencing: - using base_type::operator[]; - - // array size: + // Array size: using base_type::size; - // expand the array if needed: - void expand(size_type new_size) + // Expand the array if needed: + void + expand(size_type new_size) { if (new_size > size()) - { base_type::resize(new_size); - //m_entries.reserve(new_size); // optional - } } - static const char* const kind_string; - const char* kind() const { return kind_string; } + static const char *const kind_string; + const char *kind() const { return kind_string; } - //this function shall get a pointer to a array slot + // This function shall get a pointer to an array slot // it stores this slot in a cache of active slots - void insert_in_cache(T* p) - { - //sc_assert( (p-&(*this)[0]) < size() ); - m_entries.push_back( p-&(*this)[0] ); - } + void insert_in_cache(T *p) { m_entries.push_back(p - &(*this)[0]); } - //this functions clears all active slots of the array - void free_entire_cache() + // This functions clears all active slots of the array. + void + free_entire_cache() { - while(m_entries.size()) - { - if ((*this)[m_entries.back()]) //we make sure no one cleared the slot manually - (*this)[m_entries.back()]->free();//...and then we call free on the content of the slot - (*this)[m_entries.back()]=0; //afterwards we set the slot to NULL + while (m_entries.size()) { + // We make sure no one cleared the slot manually. + if ((*this)[m_entries.back()]) { + // ...and then we call free on the content of the slot + (*this)[m_entries.back()]->free(); + } + // Afterwards we set the slot to NULL + (*this)[m_entries.back()] = nullptr; m_entries.pop_back(); } } -protected: + protected: std::vector<size_type> m_entries; }; template <typename T> -const char* const tlm_array<T>::kind_string = "tlm_array"; - -#if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) -#pragma warning(pop) -#endif +const char *const tlm_array<T>::kind_string = "tlm_array"; } // namespace tlm -#endif /* TLM_CORE_TLM2_TLM_ARRAY_H_INCLUDED_ */ +#endif /* __SYSTEMC_EXT_TLM_CORE_TLM_2_TLM_GENERIC_PAYLOADS_TLM_ARRAY_H__ */ |