#include <sc_object_manager.h>
Public 型 | |
typedef sc_phash< const char *, sc_object * > | object_table_type |
typedef sc_pvector< sc_object * > | object_vector_type |
typedef sc_plist< sc_object * > | object_hierarchy_type |
Public メソッド | |
sc_object_manager () | |
~sc_object_manager () | |
sc_object * | find_object (const char *name) |
sc_object * | first_object () |
sc_object * | next_object () |
void | hierarchy_push (sc_object *mdl) |
sc_object * | hierarchy_pop () |
sc_object * | hierarchy_curr () |
int | hierarchy_size () |
void | push_module_name (sc_module_name *mod_name) |
sc_module_name * | pop_module_name () |
sc_module_name * | top_of_module_name_stack () |
void | insert_object (const char *name, sc_object *obj) |
void | remove_object (const char *name) |
Private 変数 | |
object_table_type * | m_object_table |
object_vector_type * | m_ordered_object_vector |
bool | m_ordered_object_vector_dirty |
int | m_next_object_index |
object_hierarchy_type * | m_object_hierarchy |
sc_module_name * | m_module_name_stack |
フレンド | |
class | sc_simcontext |
sc_object_manager.h の 61 行で定義されています。
typedef sc_phash<const char*, sc_object*> sc_core::sc_object_manager::object_table_type |
sc_object_manager.h の 67 行で定義されています。
sc_object_manager.h の 68 行で定義されています。
sc_object_manager.h の 69 行で定義されています。
sc_core::sc_object_manager::sc_object_manager | ( | ) |
sc_object_manager.cpp の 74 行で定義されています。
00075 { 00076 m_ordered_object_vector = new object_vector_type; 00077 00078 m_object_table = new object_table_type; 00079 m_object_table->set_hash_fn(default_str_hash_fn); 00080 m_object_table->set_cmpr_fn(strcmp_void); 00081 00082 m_object_hierarchy = new object_hierarchy_type; 00083 m_ordered_object_vector_dirty = true; 00084 m_next_object_index = 0; 00085 m_module_name_stack = 0; 00086 }
sc_core::sc_object_manager::~sc_object_manager | ( | ) |
sc_object_manager.cpp の 88 行で定義されています。
00089 { 00090 delete m_object_hierarchy; 00091 00092 /* Go through each object in the table, and 00093 mark the m_simc field of the object NULL */ 00094 object_table_type::iterator it(m_object_table); 00095 for ( ; !it.empty(); it++) { 00096 sc_object* obj = it.contents(); 00097 obj->m_simc = 0; 00098 } 00099 delete m_object_table; 00100 delete m_ordered_object_vector; 00101 }
sc_object * sc_core::sc_object_manager::find_object | ( | const char * | name | ) |
sc_object * sc_core::sc_object_manager::first_object | ( | ) |
sc_object_manager.cpp の 120 行で定義されています。
00121 { 00122 if (m_ordered_object_vector_dirty) { 00123 m_ordered_object_vector->erase_all(); 00124 object_table_type::iterator it(m_object_table); 00125 while (! it.empty()) { 00126 sc_object* obj = it.contents(); 00127 m_ordered_object_vector->push_back(obj); 00128 it++; 00129 } 00130 m_ordered_object_vector->sort(object_name_compare); 00131 m_ordered_object_vector_dirty = false; 00132 } 00133 m_next_object_index = 0; 00134 return next_object(); 00135 }
sc_object * sc_core::sc_object_manager::next_object | ( | ) |
sc_object_manager.cpp の 138 行で定義されています。
00139 { 00140 assert( ! m_ordered_object_vector_dirty ); 00141 if ( m_next_object_index >= m_ordered_object_vector->size() ) 00142 return 0; 00143 else 00144 return (*m_ordered_object_vector)[m_next_object_index++]; 00145 }
void sc_core::sc_object_manager::hierarchy_push | ( | sc_object * | mdl | ) |
sc_object * sc_core::sc_object_manager::hierarchy_pop | ( | ) |
sc_object_manager.cpp の 154 行で定義されています。
00155 { 00156 return m_object_hierarchy->pop_front(); 00157 }
sc_object * sc_core::sc_object_manager::hierarchy_curr | ( | ) |
sc_object_manager.cpp の 160 行で定義されています。
00161 { 00162 return m_object_hierarchy->empty() ? 0 : m_object_hierarchy->front(); 00163 }
int sc_core::sc_object_manager::hierarchy_size | ( | ) |
void sc_core::sc_object_manager::push_module_name | ( | sc_module_name * | mod_name | ) |
sc_object_manager.cpp の 172 行で定義されています。
00173 { 00174 mod_name->m_next = m_module_name_stack; 00175 m_module_name_stack = mod_name; 00176 }
sc_module_name * sc_core::sc_object_manager::pop_module_name | ( | ) |
sc_object_manager.cpp の 179 行で定義されています。
00180 { 00181 sc_module_name* mod_name = m_module_name_stack; 00182 m_module_name_stack = m_module_name_stack->m_next; 00183 mod_name->m_next = 0; 00184 return mod_name; 00185 }
sc_module_name * sc_core::sc_object_manager::top_of_module_name_stack | ( | ) |
sc_object_manager.cpp の 188 行で定義されています。
00189 { 00190 if( m_module_name_stack == 0 ) { 00191 SC_REPORT_ERROR( SC_ID_MODULE_NAME_STACK_EMPTY_, 0 ); 00192 } 00193 return m_module_name_stack; 00194 }
void sc_core::sc_object_manager::insert_object | ( | const char * | name, | |
sc_object * | obj | |||
) |
sc_object_manager.cpp の 197 行で定義されています。
00198 { 00199 m_object_table->insert(name, obj); 00200 m_ordered_object_vector_dirty = true; 00201 }
void sc_core::sc_object_manager::remove_object | ( | const char * | name | ) |
sc_object_manager.cpp の 204 行で定義されています。
00205 { 00206 m_object_table->remove(name); 00207 m_ordered_object_vector_dirty = true; 00208 }
friend class sc_simcontext [friend] |
sc_object_manager.h の 63 行で定義されています。
sc_object_manager.h の 92 行で定義されています。
sc_object_manager.h の 93 行で定義されています。
bool sc_core::sc_object_manager::m_ordered_object_vector_dirty [private] |
sc_object_manager.h の 94 行で定義されています。
int sc_core::sc_object_manager::m_next_object_index [private] |
sc_object_manager.h の 95 行で定義されています。
sc_object_manager.h の 96 行で定義されています。
sc_object_manager.h の 97 行で定義されています。