クラス sc_core::sc_prim_channel_registry

#include <sc_prim_channel.h>

すべてのメンバ一覧

Public メソッド

void insert (sc_prim_channel &)
void remove (sc_prim_channel &)
int size () const
void request_update (sc_prim_channel &)
bool pending_updates () const

Private メソッド

 sc_prim_channel_registry (sc_simcontext &simc_)
 ~sc_prim_channel_registry ()
void perform_update ()
void construction_done ()
void elaboration_done ()
void start_simulation ()
void simulation_done ()
 sc_prim_channel_registry ()
 sc_prim_channel_registry (const sc_prim_channel_registry &)
sc_prim_channel_registryoperator= (const sc_prim_channel_registry &)

Private 変数

sc_simcontextm_simc
std::vector< sc_prim_channel * > m_prim_channel_vec
sc_prim_channelm_update_list_p

フレンド

class sc_simcontext


説明

sc_prim_channel.h251 行で定義されています。


コンストラクタとデストラクタ

sc_core::sc_prim_channel_registry::sc_prim_channel_registry ( sc_simcontext simc_  )  [explicit, private]

sc_prim_channel.cpp204 行で定義されています。

00205 : m_simc( &simc_ ), m_update_list_p((sc_prim_channel*)sc_prim_channel::list_end)
00206 {
00207 }

sc_core::sc_prim_channel_registry::~sc_prim_channel_registry (  )  [private]

sc_prim_channel.cpp212 行で定義されています。

00213 {
00214 }

sc_core::sc_prim_channel_registry::sc_prim_channel_registry (  )  [private]

sc_core::sc_prim_channel_registry::sc_prim_channel_registry ( const sc_prim_channel_registry  )  [private]


関数

void sc_core::sc_prim_channel_registry::insert ( sc_prim_channel prim_channel_  ) 

sc_prim_channel.cpp163 行で定義されています。

00164 {
00165     if( sc_is_running() ) {
00166         SC_REPORT_ERROR( SC_ID_INSERT_PRIM_CHANNEL_, "simulation running" );
00167     }
00168 
00169 #ifdef DEBUG_SYSTEMC
00170     // check if prim_channel_ is already inserted
00171     for( int i = 0; i < size(); ++ i ) {
00172         if( &prim_channel_ == m_prim_channel_vec[i] ) {
00173             SC_REPORT_ERROR( SC_ID_INSERT_PRIM_CHANNEL_, "already inserted" );
00174         }
00175     }
00176 #endif
00177 
00178     // insert
00179     m_prim_channel_vec.push_back( &prim_channel_ );
00180 
00181 }

void sc_core::sc_prim_channel_registry::remove ( sc_prim_channel prim_channel_  ) 

sc_prim_channel.cpp184 行で定義されています。

00185 {
00186     int i;
00187     for( i = 0; i < size(); ++ i ) {
00188         if( &prim_channel_ == m_prim_channel_vec[i] ) {
00189             break;
00190         }
00191     }
00192     if( i == size() ) {
00193         SC_REPORT_ERROR( SC_ID_REMOVE_PRIM_CHANNEL_, 0 );
00194     }
00195 
00196     // remove
00197     m_prim_channel_vec[i] = m_prim_channel_vec[size() - 1];
00198     m_prim_channel_vec.resize(size()-1);
00199 }

int sc_core::sc_prim_channel_registry::size (  )  const [inline]

sc_prim_channel.h261 行で定義されています。

00262         { return m_prim_channel_vec.size(); }

void sc_core::sc_prim_channel_registry::request_update ( sc_prim_channel prim_channel_  )  [inline]

sc_prim_channel.h319 行で定義されています。

00320 {
00321     prim_channel_.m_update_next_p = m_update_list_p;
00322     m_update_list_p = &prim_channel_;
00323 }

bool sc_core::sc_prim_channel_registry::pending_updates (  )  const [inline]

sc_prim_channel.h266 行で定義されています。

00267         { return m_update_list_p != 
00268                 (sc_prim_channel*)sc_prim_channel::list_end; 
00269         }

void sc_core::sc_prim_channel_registry::perform_update (  )  [inline, private]

sc_prim_channel.h330 行で定義されています。

00331 {
00332     sc_prim_channel* next_p; // Next update to perform.
00333     sc_prim_channel* now_p;  // Update now performing.
00334 
00335     now_p = m_update_list_p;
00336     m_update_list_p = (sc_prim_channel*)sc_prim_channel::list_end;
00337     for ( ; now_p != (sc_prim_channel*)sc_prim_channel::list_end; 
00338         now_p = next_p )
00339     {
00340         next_p = now_p->m_update_next_p;
00341         now_p->perform_update();
00342     }
00343 }

void sc_core::sc_prim_channel_registry::construction_done (  )  [private]

sc_prim_channel.cpp219 行で定義されています。

00220 {
00221     for( int i = 0; i < size(); ++ i ) {
00222         m_prim_channel_vec[i]->construction_done();
00223     }
00224 }

void sc_core::sc_prim_channel_registry::elaboration_done (  )  [private]

sc_prim_channel.cpp230 行で定義されています。

00231 {
00232     for( int i = 0; i < size(); ++ i ) {
00233         m_prim_channel_vec[i]->elaboration_done();
00234     }
00235 }

void sc_core::sc_prim_channel_registry::start_simulation (  )  [private]

sc_prim_channel.cpp240 行で定義されています。

00241 {
00242     for( int i = 0; i < size(); ++ i ) {
00243         m_prim_channel_vec[i]->start_simulation();
00244     }
00245 }

void sc_core::sc_prim_channel_registry::simulation_done (  )  [private]

sc_prim_channel.cpp250 行で定義されています。

00251 {
00252     for( int i = 0; i < size(); ++ i ) {
00253         m_prim_channel_vec[i]->simulation_done();
00254     }
00255 }

sc_prim_channel_registry& sc_core::sc_prim_channel_registry::operator= ( const sc_prim_channel_registry  )  [private]


フレンドと関連する関数

friend class sc_simcontext [friend]

sc_prim_channel.h253 行で定義されています。


変数

sc_prim_channel.h301 行で定義されています。

sc_prim_channel.h302 行で定義されています。

sc_prim_channel.h304 行で定義されています。


このクラスの説明は次のファイルから生成されました:

SystemCに対してFri Jun 6 20:11:47 2008に生成されました。  doxygen 1.5.6