#include <sc_lv_base.h>
sc_lv_base.h の 74 行で定義されています。
sc_lv_base.h の 88 行で定義されています。
sc_dt::sc_lv_base::sc_lv_base | ( | int | length_ = sc_length_param().len() |
) | [inline, explicit] |
sc_dt::sc_lv_base::sc_lv_base | ( | const sc_logic & | a, | |
int | length_ = sc_length_param().len() | |||
) | [inline, explicit] |
sc_dt::sc_lv_base::sc_lv_base | ( | const char * | a | ) |
sc_lv_base.cpp の 113 行で定義されています。
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.cpp の 121 行で定義されています。
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 }
sc_dt::sc_lv_base::sc_lv_base | ( | const sc_proxy< X > & | a | ) | [inline] |
sc_lv_base.h の 107 行で定義されています。
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.cpp の 128 行で定義されています。
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] |
void sc_dt::sc_lv_base::init | ( | int | length_, | |
const sc_logic & | init_value = SC_LOGIC_X | |||
) | [private] |
sc_lv_base.cpp の 67 行で定義されています。
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.cpp の 91 行で定義されています。
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 }
sc_lv_base& sc_dt::sc_lv_base::operator= | ( | const sc_proxy< X > & | a | ) | [inline] |
sc_dt::sc_lv< W >で再定義されています。
sc_lv_base.h の 143 行で定義されています。
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 & sc_dt::sc_lv_base::operator= | ( | const char * | a | ) |
sc_dt::sc_lv< W >で再定義されています。
sc_lv_base.cpp の 146 行で定義されています。
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.h の 151 行で定義されています。
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.h の 154 行で定義されています。
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.h の 157 行で定義されています。
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.h の 160 行で定義されています。
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.h の 163 行で定義されています。
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.h の 166 行で定義されています。
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.h の 169 行で定義されています。
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.h の 172 行で定義されています。
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.h の 175 行で定義されています。
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.h の 178 行で定義されています。
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.h の 181 行で定義されています。
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.h の 184 行で定義されています。
00185 { base_type::assign_( a ); return *this; }
int sc_dt::sc_lv_base::length | ( | ) | const [inline] |
int sc_dt::sc_lv_base::size | ( | ) | const [inline] |
sc_logic_value_t sc_dt::sc_lv_base::get_bit | ( | int | i | ) | const [inline] |
sc_lv_base.h の 305 行で定義されています。
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.h の 315 行で定義されています。
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] |
void sc_dt::sc_lv_base::set_word | ( | int | wi, | |
sc_digit | w | |||
) | [inline] |
sc_digit sc_dt::sc_lv_base::get_cword | ( | int | wi | ) | const [inline] |
void sc_dt::sc_lv_base::set_cword | ( | int | wi, | |
sc_digit | w | |||
) | [inline] |
void sc_dt::sc_lv_base::clean_tail | ( | ) | [inline] |
sc_lv_base.h の 329 行で定義されています。
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.cpp の 156 行で定義されています。
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.h の 77 行で定義されています。
int sc_dt::sc_lv_base::m_len [protected] |
sc_lv_base.h の 268 行で定義されています。
int sc_dt::sc_lv_base::m_size [protected] |
sc_lv_base.h の 269 行で定義されています。
sc_digit* sc_dt::sc_lv_base::m_data [protected] |
sc_lv_base.h の 270 行で定義されています。
sc_digit* sc_dt::sc_lv_base::m_ctrl [protected] |
sc_lv_base.h の 271 行で定義されています。