クラス テンプレート sc_core::sc_signal< T >

#include <sc_signal.h>

sc_core::sc_signal< T >に対する継承グラフ

Inheritance graph
[凡例]

すべてのメンバ一覧

Public メソッド

 sc_signal ()
 sc_signal (const char *name_)
virtual ~sc_signal ()
virtual void register_port (sc_port_base &, const char *)
virtual const sc_eventdefault_event () const
virtual const sc_eventvalue_changed_event () const
virtual const T & read () const
virtual const T & get_data_ref () const
virtual bool event () const
virtual void write (const T &)
 operator const T & () const
sc_signal< T > & operator= (const T &a)
sc_signal< T > & operator= (const sc_signal< T > &a)
const T & get_new_value () const
void trace (sc_trace_file *tf) const
virtual void print (::std::ostream &=::std::cout) const
virtual void dump (::std::ostream &=::std::cout) const
virtual const char * kind () const

Protected メソッド

virtual void update ()

Protected 変数

sc_eventm_change_event_p
m_cur_val
sc_dt::uint64 m_delta
m_new_val
sc_port_basem_output
sc_objectm_writer

Private メソッド

 sc_signal (const sc_signal< T > &)


説明

template<class T>
class sc_core::sc_signal< T >

sc_signal.h65 行で定義されています。


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

template<class T>
sc_core::sc_signal< T >::sc_signal (  )  [inline]

sc_signal.h71 行で定義されています。

00072         : sc_prim_channel( sc_gen_unique_name( "signal" ) ),
00073           m_change_event_p( 0 ), m_cur_val( T() ), 
00074           m_delta( ~sc_dt::UINT64_ONE ), m_new_val( T() ), m_output( 0 ), 
00075           m_writer( 0 ) 
00076         {}

template<class T>
sc_core::sc_signal< T >::sc_signal ( const char *  name_  )  [inline, explicit]

sc_signal.h78 行で定義されています。

00079         : sc_prim_channel( name_ ),
00080           m_change_event_p( 0 ), m_cur_val( T() ), 
00081           m_delta( ~sc_dt::UINT64_ONE ), m_new_val( T() ), m_output( 0 ), 
00082           m_writer( 0 ) 
00083     {}

template<class T>
virtual sc_core::sc_signal< T >::~sc_signal (  )  [inline, virtual]

sc_signal.h86 行で定義されています。

00087         {
00088             if ( !m_change_event_p ) delete m_change_event_p;
00089         }

template<class T>
sc_core::sc_signal< T >::sc_signal ( const sc_signal< T > &   )  [private]


関数

template<class T>
void sc_core::sc_signal< T >::register_port ( sc_port_base port_,
const char *  if_typename_ 
) [inline, virtual]

sc_core::sc_interfaceを再定義しています。

sc_core::sc_signal_rv< W >で再定義されています。

sc_signal.h190 行で定義されています。

00191 {
00192     if ( sc_get_curr_simcontext()->write_check() )
00193     {
00194         std::string nm( if_typename_ );
00195         if( nm == typeid( sc_signal_inout_if<T> ).name() ) {
00196             // an out or inout port; only one can be connected
00197             if( m_output != 0) {
00198                 sc_signal_invalid_writer( this, m_output, &port_ );
00199             }
00200             m_output = &port_;
00201         }
00202     }
00203 }

template<class T>
virtual const sc_event& sc_core::sc_signal< T >::default_event (  )  const [inline, virtual]

sc_core::sc_interfaceを再定義しています。

sc_signal.h98 行で定義されています。

00099         { 
00100             if ( !m_change_event_p ) m_change_event_p = new sc_event; 
00101             return *m_change_event_p; 
00102         }

template<class T>
virtual const sc_event& sc_core::sc_signal< T >::value_changed_event (  )  const [inline, virtual]

sc_core::sc_signal_in_if< T >を実装しています。

sc_signal.h106 行で定義されています。

00107         { 
00108             if ( !m_change_event_p ) m_change_event_p = new sc_event; 
00109             return *m_change_event_p; 
00110         }

template<class T>
virtual const T& sc_core::sc_signal< T >::read (  )  const [inline, virtual]

sc_core::sc_signal_in_if< T >を実装しています。

sc_signal.h114 行で定義されています。

00115         { return m_cur_val; }

template<class T>
virtual const T& sc_core::sc_signal< T >::get_data_ref (  )  const [inline, virtual]

sc_core::sc_signal_in_if< T >を実装しています。

sc_signal.h118 行で定義されています。

template<class T>
virtual bool sc_core::sc_signal< T >::event (  )  const [inline, virtual]

sc_core::sc_signal_in_if< T >を実装しています。

sc_signal.h123 行で定義されています。

00124         { return simcontext()->event_occurred(m_delta); }

template<class T>
void sc_core::sc_signal< T >::write ( const T &  value_  )  [inline, virtual]

sc_core::sc_signal_write_if< T >を実装しています。

sc_core::sc_buffer< T >で再定義されています。

sc_signal.h211 行で定義されています。

00212 {
00213     sc_object* writer = sc_get_curr_simcontext()->get_current_writer();
00214     if( m_writer == 0 ) {
00215         m_writer = writer;
00216     } else if( m_writer != writer ) {
00217         sc_signal_invalid_writer( this, m_writer, writer );
00218     }
00219 
00220     m_new_val = value_;
00221     if( !( m_new_val == m_cur_val ) ) {
00222         request_update();
00223     }
00224 }

template<class T>
sc_core::sc_signal< T >::operator const T & (  )  const [inline]

sc_signal.h132 行で定義されています。

00133         { return read(); }

template<class T>
sc_signal<T>& sc_core::sc_signal< T >::operator= ( const T &  a  )  [inline]

sc_core::sc_buffer< T >で再定義されています。

sc_signal.h136 行で定義されています。

00137         { write( a ); return *this; }

template<class T>
sc_signal<T>& sc_core::sc_signal< T >::operator= ( const sc_signal< T > &  a  )  [inline]

sc_signal.h139 行で定義されています。

00140         { write( a.read() ); return *this; }

template<class T>
const T& sc_core::sc_signal< T >::get_new_value (  )  const [inline]

sc_signal.h143 行で定義されています。

00144         { return m_new_val; }

template<class T>
void sc_core::sc_signal< T >::trace ( sc_trace_file tf  )  const [inline, virtual]

sc_core::sc_objectを再定義しています。

sc_signal.h147 行で定義されています。

00148         { 
00149             sc_deprecated_trace();
00150 #           ifdef DEBUG_SYSTEMC
00151                 sc_trace( tf, read(), name() ); 
00152 #           endif
00153         }

template<class T>
void sc_core::sc_signal< T >::print ( ::std::ostream &  os = ::std::cout  )  const [inline, virtual]

sc_core::sc_objectを再定義しています。

sc_signal.h230 行で定義されています。

00231 {
00232     os << m_cur_val;
00233 }

template<class T>
void sc_core::sc_signal< T >::dump ( ::std::ostream &  os = ::std::cout  )  const [inline, virtual]

sc_core::sc_objectを再定義しています。

sc_signal.h238 行で定義されています。

00239 {
00240     os << "     name = " << name() << ::std::endl;
00241     os << "    value = " << m_cur_val << ::std::endl;
00242     os << "new value = " << m_new_val << ::std::endl;
00243 }

template<class T>
virtual const char* sc_core::sc_signal< T >::kind (  )  const [inline, virtual]

sc_core::sc_prim_channelを再定義しています。

sc_core::sc_buffer< T >, と sc_core::sc_signal_rv< W >で再定義されています。

sc_signal.h159 行で定義されています。

00160         { return "sc_signal"; }

template<class T>
void sc_core::sc_signal< T >::update (  )  [inline, protected, virtual]

sc_core::sc_prim_channelを再定義しています。

sc_core::sc_buffer< T >, と sc_core::sc_signal_rv< W >で再定義されています。

sc_signal.h249 行で定義されています。

00250 {
00251     if( !( m_new_val == m_cur_val ) ) {
00252         m_cur_val = m_new_val;
00253         if ( m_change_event_p ) m_change_event_p->notify_next_delta();
00254         m_delta = delta_count();
00255     }
00256 }


変数

template<class T>
sc_event* sc_core::sc_signal< T >::m_change_event_p [mutable, protected]

sc_signal.h168 行で定義されています。

template<class T>
T sc_core::sc_signal< T >::m_cur_val [protected]

sc_signal.h169 行で定義されています。

template<class T>
sc_dt::uint64 sc_core::sc_signal< T >::m_delta [protected]

sc_signal.h170 行で定義されています。

template<class T>
T sc_core::sc_signal< T >::m_new_val [protected]

sc_signal.h171 行で定義されています。

template<class T>
sc_port_base* sc_core::sc_signal< T >::m_output [protected]

sc_signal.h172 行で定義されています。

template<class T>
sc_object* sc_core::sc_signal< T >::m_writer [protected]

sc_signal.h173 行で定義されています。


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

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