クラス sc_dt::sc_lv_base

#include <sc_lv_base.h>

sc_dt::sc_lv_baseに対する継承グラフ

Inheritance graph
[凡例]

すべてのメンバ一覧

Public 型

typedef sc_proxy< sc_lv_basebase_type

Public メソッド

 sc_lv_base (int length_=sc_length_param().len())
 sc_lv_base (const sc_logic &a, int length_=sc_length_param().len())
 sc_lv_base (const char *a)
 sc_lv_base (const char *a, int length_)
template<class X>
 sc_lv_base (const sc_proxy< X > &a)
 sc_lv_base (const sc_lv_base &a)
virtual ~sc_lv_base ()
template<class X>
sc_lv_baseoperator= (const sc_proxy< X > &a)
sc_lv_baseoperator= (const sc_lv_base &a)
sc_lv_baseoperator= (const char *a)
sc_lv_baseoperator= (const bool *a)
sc_lv_baseoperator= (const sc_logic *a)
sc_lv_baseoperator= (const sc_unsigned &a)
sc_lv_baseoperator= (const sc_signed &a)
sc_lv_baseoperator= (const sc_uint_base &a)
sc_lv_baseoperator= (const sc_int_base &a)
sc_lv_baseoperator= (unsigned long a)
sc_lv_baseoperator= (long a)
sc_lv_baseoperator= (unsigned int a)
sc_lv_baseoperator= (int a)
sc_lv_baseoperator= (uint64 a)
sc_lv_baseoperator= (int64 a)
int length () const
int size () const
sc_logic_value_t get_bit (int i) const
void set_bit (int i, sc_logic_value_t value)
sc_digit get_word (int wi) const
void set_word (int wi, sc_digit w)
sc_digit get_cword (int wi) const
void set_cword (int wi, sc_digit w)
void clean_tail ()
bool is_01 () const

Protected 変数

int m_len
int m_size
sc_digitm_data
sc_digitm_ctrl

Private メソッド

void init (int length_, const sc_logic &init_value=SC_LOGIC_X)
void assign_from_string (const std::string &)

フレンド

class sc_bv_base


説明

sc_lv_base.h74 行で定義されています。


型定義

sc_lv_base.h88 行で定義されています。


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

sc_dt::sc_lv_base::sc_lv_base ( int  length_ = sc_length_param().len()  )  [inline, explicit]

sc_lv_base.h93 行で定義されています。

00094         : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
00095         { init( length_ ); }

sc_dt::sc_lv_base::sc_lv_base ( const sc_logic a,
int  length_ = sc_length_param().len() 
) [inline, explicit]

sc_lv_base.h97 行で定義されています。

00099         : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
00100         { init( length_, a ); }

sc_dt::sc_lv_base::sc_lv_base ( const char *  a  ) 

sc_lv_base.cpp113 行で定義されています。

00114     : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
00115 {
00116     std::string s = convert_to_bin( a );
00117     init( s.length() - 1 );
00118     assign_from_string( s );
00119 }

sc_dt::sc_lv_base::sc_lv_base ( const char *  a,
int  length_ 
)

sc_lv_base.cpp121 行で定義されています。

00122     : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
00123 {
00124     init( length_ );
00125     assign_from_string( convert_to_bin( a ) );
00126 }

template<class X>
sc_dt::sc_lv_base::sc_lv_base ( const sc_proxy< X > &  a  )  [inline]

sc_lv_base.h107 行で定義されています。

00108         : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
00109         { init( a.back_cast().length() ); base_type::assign_( a ); }

sc_dt::sc_lv_base::sc_lv_base ( const sc_lv_base a  ) 

sc_lv_base.cpp128 行で定義されています。

00129     : m_len( a.m_len ),
00130       m_size( a.m_size ),
00131       m_data( new sc_digit[m_size * 2] ),
00132       m_ctrl( m_data + m_size )
00133 {
00134     // copy the bits
00135     int sz = m_size;
00136     for( int i = 0; i < sz; ++ i ) {
00137         m_data[i] = a.m_data[i];
00138         m_ctrl[i] = a.m_ctrl[i];
00139     }
00140 }

virtual sc_dt::sc_lv_base::~sc_lv_base (  )  [inline, virtual]

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

00137         { if( m_data != 0 ) delete [] m_data; }


関数

void sc_dt::sc_lv_base::init ( int  length_,
const sc_logic init_value = SC_LOGIC_X 
) [private]

sc_lv_base.cpp67 行で定義されています。

00068 {
00069     // check the length
00070     if( length_ <= 0 ) {
00071         SC_REPORT_ERROR( sc_core::SC_ID_ZERO_LENGTH_, 0 );
00072     }
00073     // allocate memory for the data and control words
00074     m_len = length_;
00075     m_size = (m_len - 1) / SC_DIGIT_SIZE + 1;
00076     m_data = new sc_digit[m_size * 2];
00077     m_ctrl = m_data + m_size;
00078     // initialize the bits to 'init_value'
00079     sc_digit dw = data_array[init_value.value()];
00080     sc_digit cw = ctrl_array[init_value.value()];
00081     int sz = m_size;
00082     for( int i = 0; i < sz; ++ i ) {
00083         m_data[i] = dw;
00084         m_ctrl[i] = cw;
00085     }
00086     clean_tail();
00087 }

void sc_dt::sc_lv_base::assign_from_string ( const std::string &  s  )  [private]

sc_lv_base.cpp91 行で定義されています。

00092 {
00093     // s must have been converted to bin
00094     int len = m_len;
00095     int s_len = s.length() - 1;
00096     int min_len = sc_min( len, s_len );
00097     int i = 0;
00098     for( ; i < min_len; ++ i ) {
00099         char c = s[s_len - i - 1];
00100         set_bit( i, sc_logic::char_to_logic[(int)c] );
00101     }
00102     // if formatted, fill the rest with sign(s), otherwise fill with zeros
00103     sc_logic_value_t fill = (s[s_len] == 'F' ? sc_logic_value_t( s[0] - '0' )
00104                                              : sc_logic_value_t( 0 ));
00105     for( ; i < len; ++ i ) {
00106         set_bit( i, fill );
00107     }
00108 }

template<class X>
sc_lv_base& sc_dt::sc_lv_base::operator= ( const sc_proxy< X > &  a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

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

00144         { assign_p_( *this, a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( const sc_lv_base a  )  [inline]

sc_lv_base.h146 行で定義されています。

00147         { assign_p_( *this, a ); return *this; }

sc_lv_base & sc_dt::sc_lv_base::operator= ( const char *  a  ) 

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.cpp146 行で定義されています。

00147 {
00148     assign_from_string( convert_to_bin( a ) );
00149     return *this;
00150 }

sc_lv_base& sc_dt::sc_lv_base::operator= ( const bool *  a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h151 行で定義されています。

00152         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( const sc_logic a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h154 行で定義されています。

00155         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( const sc_unsigned a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h157 行で定義されています。

00158         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( const sc_signed a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h160 行で定義されています。

00161         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( const sc_uint_base a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h163 行で定義されています。

00164         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( const sc_int_base a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h166 行で定義されています。

00167         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( unsigned long  a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

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

00170         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( long  a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

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

00173         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( unsigned int  a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h175 行で定義されています。

00176         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( int  a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h178 行で定義されています。

00179         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( uint64  a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h181 行で定義されています。

00182         { base_type::assign_( a ); return *this; }

sc_lv_base& sc_dt::sc_lv_base::operator= ( int64  a  )  [inline]

sc_dt::sc_lv< W >で再定義されています。

sc_lv_base.h184 行で定義されています。

00185         { base_type::assign_( a ); return *this; }

int sc_dt::sc_lv_base::length (  )  const [inline]

sc_lv_base.h233 行で定義されています。

00234         { return m_len; }

int sc_dt::sc_lv_base::size (  )  const [inline]

sc_lv_base.h236 行で定義されています。

00237         { return m_size; }

sc_logic_value_t sc_dt::sc_lv_base::get_bit ( int  i  )  const [inline]

sc_lv_base.h305 行で定義されています。

00306 {
00307     int wi = i / SC_DIGIT_SIZE;
00308     int bi = i % SC_DIGIT_SIZE;
00309     return sc_logic_value_t( m_data[wi] >> bi & SC_DIGIT_ONE |
00310                              m_ctrl[wi] >> bi << 1 & SC_DIGIT_TWO );
00311 }

void sc_dt::sc_lv_base::set_bit ( int  i,
sc_logic_value_t  value 
) [inline]

sc_lv_base.h315 行で定義されています。

00316 {
00317     int wi = i / SC_DIGIT_SIZE; // word index
00318     int bi = i % SC_DIGIT_SIZE; // bit index
00319     sc_digit mask = SC_DIGIT_ONE << bi;
00320     m_data[wi] |= mask; // set bit to 1
00321     m_ctrl[wi] |= mask; // set bit to 1
00322     m_data[wi] &= value << bi | ~mask;
00323     m_ctrl[wi] &= value >> 1 << bi | ~mask;
00324 }

sc_digit sc_dt::sc_lv_base::get_word ( int  wi  )  const [inline]

sc_lv_base.h242 行で定義されています。

00243         { return m_data[wi]; }

void sc_dt::sc_lv_base::set_word ( int  wi,
sc_digit  w 
) [inline]

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

00250         { assert ( wi < m_size ); m_data[wi] = w; }

sc_digit sc_dt::sc_lv_base::get_cword ( int  wi  )  const [inline]

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

00254         { return m_ctrl[wi]; }

void sc_dt::sc_lv_base::set_cword ( int  wi,
sc_digit  w 
) [inline]

sc_lv_base.h256 行で定義されています。

00257         { assert ( wi < m_size ); m_ctrl[wi] = w; }

void sc_dt::sc_lv_base::clean_tail (  )  [inline]

sc_lv_base.h329 行で定義されています。

00330 {
00331     int wi = m_size - 1;
00332     int bi = m_len % SC_DIGIT_SIZE;
00333     sc_digit mask = ~SC_DIGIT_ZERO >> (SC_DIGIT_SIZE - bi);
00334         if ( mask )
00335         {
00336                 m_data[wi] &= mask;
00337                 m_ctrl[wi] &= mask;
00338         }
00339 }

bool sc_dt::sc_lv_base::is_01 (  )  const

sc_lv_base.cpp156 行で定義されています。

00157 {
00158     int sz = m_size;
00159     for( int i = 0; i < sz; ++ i ) {
00160         if( m_ctrl[i] != 0 ) {
00161             return false;
00162         }
00163     }
00164     return true;
00165 }


フレンドと関連する関数

friend class sc_bv_base [friend]

sc_lv_base.h77 行で定義されています。


変数

int sc_dt::sc_lv_base::m_len [protected]

sc_lv_base.h268 行で定義されています。

int sc_dt::sc_lv_base::m_size [protected]

sc_lv_base.h269 行で定義されています。

sc_lv_base.h270 行で定義されています。

sc_lv_base.h271 行で定義されています。


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

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