95 void assign_from_string(
const std::string& );
108 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
113 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
114 { init( length_, a ); }
122 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
123 { init( a.
back_cast().length() ); base_type::assign_( a ); }
127#ifdef SC_DT_DEPRECATED
130 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
131 { init( a.
length() ); base_type::assign_( a ); }
134 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
135 { init( a.
length() ); base_type::assign_( a ); }
137 explicit sc_lv_base(
const sc_uint_base& a )
138 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
139 { init( a.length() ); base_type::assign_( a ); }
141 explicit sc_lv_base(
const sc_int_base& a )
142 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
143 { init( a.length() ); base_type::assign_( a ); }
151 {
if ( m_data != m_base_vec ) {
delete [] m_data; } }
166 { base_type::assign_( a );
return *
this; }
169 { base_type::assign_( a );
return *
this; }
172 { base_type::assign_( a );
return *
this; }
175 { base_type::assign_( a );
return *
this; }
178 { base_type::assign_( a );
return *
this; }
181 { base_type::assign_( a );
return *
this; }
184 { base_type::assign_( a );
return *
this; }
187 { base_type::assign_( a );
return *
this; }
190 { base_type::assign_( a );
return *
this; }
193 { base_type::assign_( a );
return *
this; }
196 { base_type::assign_( a );
return *
this; }
199 { base_type::assign_( a );
return *
this; }
209 value_type get_bit(
int i )
const;
210 void set_bit(
int i, value_type
value );
213 {
return m_data[wi]; }
220 {
sc_assert ( wi < m_size ); m_data[wi] = w; }
224 {
return m_ctrl[wi]; }
227 {
sc_assert( wi < m_size ); m_ctrl[wi] = w; }
337template <
class X,
class Y>
349#define DEFN_BITWISE_AND_ASN_OP_T(tp) \
353sc_proxy<X>::operator &= ( tp b ) \
355 X& x = back_cast(); \
356 sc_lv_base a( x.length() ); \
358 return b_and_assign_( x, a ); \
371#undef DEFN_BITWISE_AND_ASN_OP_T
374template <
class X,
class Y>
381 if ( x.length() >= y.length() ) {
391#define DEFN_BITWISE_AND_OP_T_NATIVE(tp) \
395sc_proxy<X>::operator & ( tp b ) const \
397 sc_lv_base x( back_cast() ); \
406#undef DEFN_BITWISE_AND_OP_T_NATIVE
408#define DEFN_BITWISE_AND_OP_T_SYSTEMC(tp) \
412sc_proxy<X>::operator & ( tp b ) const \
414 sc_lv_base x( back_cast() ); \
415 sc_lv_base y( b.length() ); \
423#undef DEFN_BITWISE_AND_OP_T_SYSTEMC
426#define DEFN_BITWISE_AND_OP_T_A(tp) \
430sc_proxy<X>::operator & ( tp b ) const \
432 sc_lv_base a( back_cast() ); \
440#undef DEFN_BITWISE_AND_OP_T_A
443#define DEFN_BITWISE_AND_OP_T_B(tp) \
447operator & ( tp b, const sc_proxy<X>& px ) \
466#undef DEFN_BITWISE_AND_OP_T_B
471template <
class X,
class Y>
483#define DEFN_BITWISE_OR_ASN_OP_T(tp) \
487sc_proxy<X>::operator |= ( tp b ) \
489 X& x = back_cast(); \
490 sc_lv_base a( x.length() ); \
492 return b_or_assign_( x, a ); \
505#undef DEFN_BITWISE_OR_ASN_OP_T
508template <
class X,
class Y>
515 if ( x.length() >= y.length() ) {
525#define DEFN_BITWISE_OR_OP_T_NATIVE(tp) \
529sc_proxy<X>::operator | ( tp b ) const \
531 sc_lv_base x( back_cast() ); \
532 if ( sizeof(tp)*8 > static_cast<unsigned>(x.length()) ) { \
533 sc_lv_base y( sizeof(tp)*8 ); \
546#undef DEFN_BITWISE_OR_OP_T_NATIVE
548#define DEFN_BITWISE_OR_OP_T_SYSTEMC(tp) \
552sc_proxy<X>::operator | ( tp b ) const \
554 sc_lv_base x( back_cast() ); \
555 sc_lv_base y( b.length() ); \
563#undef DEFN_BITWISE_OR_OP_T_SYSTEMC
565#define DEFN_BITWISE_OR_OP_T_A(tp) \
569sc_proxy<X>::operator | ( tp b ) const \
571 sc_lv_base a( back_cast() ); \
579#undef DEFN_BITWISE_OR_OP_T_A
582#define DEFN_BITWISE_OR_OP_T_B(tp) \
586operator | ( tp b, const sc_proxy<X>& px ) \
605#undef DEFN_BITWISE_OR_OP_T_B
610template <
class X,
class Y>
622#define DEFN_BITWISE_XOR_ASN_OP_T(tp) \
626sc_proxy<X>::operator ^= ( tp b ) \
628 X& x = back_cast(); \
629 sc_lv_base a( x.length() ); \
631 return b_xor_assign_( x, a ); \
644#undef DEFN_BITWISE_XOR_ASN_OP_T
647template <
class X,
class Y>
654 if ( x.length() >= y.length() ) {
664#define DEFN_BITWISE_XOR_OP_T_NATIVE(tp) \
668sc_proxy<X>::operator ^ ( tp b ) const \
670 sc_lv_base x( back_cast() ); \
671 if ( sizeof(tp)*8 > static_cast<unsigned>(x.length()) ) { \
672 sc_lv_base y( sizeof(tp)*8 ); \
685#undef DEFN_BITWISE_XOR_OP_T_NATIVE
687#define DEFN_BITWISE_XOR_OP_T_SYSTEMC(tp) \
691sc_proxy<X>::operator ^ ( tp b ) const \
693 sc_lv_base x( back_cast() ); \
694 sc_lv_base y( b.length() ); \
702#undef DEFN_BITWISE_XOR_OP_T_SYSTEMC
705#define DEFN_BITWISE_XOR_OP_T_A(tp) \
709sc_proxy<X>::operator ^ ( tp b ) const \
711 sc_lv_base a( back_cast() ); \
719#undef DEFN_BITWISE_XOR_OP_T_A
722#define DEFN_BITWISE_XOR_OP_T_B(tp) \
726operator ^ ( tp b, const sc_proxy<X>& px ) \
745#undef DEFN_BITWISE_XOR_OP_T_B
783 "positive rotate values, rotate value = ", n );
786 int len = x.length();
792 for(
int i = 0; i < sz; ++ i ) {
793 x.set_word( i, a.
get_word( i ) |
b.get_word( i ) );
794 x.set_cword( i, a.
get_cword( i ) |
b.get_cword( i ) );
820 "positive rotate values, rotate value = ", n );
823 int len = x.length();
829 for(
int i = 0; i < sz; ++ i ) {
830 x.set_word( i, a.
get_word( i ) |
b.get_word( i ) );
831 x.set_cword( i, a.
get_cword( i ) |
b.get_cword( i ) );
861template <
class X,
class Y>
868 int x_len = x.length();
869 int y_len = y.length();
870 if( x_len != y_len ) {
874 for(
int i = 0; i < sz; ++ i ) {
875 if( x.get_word( i ) != y.get_word( i ) ||
876 x.get_cword( i ) != y.get_cword( i ) ) {
884#define DEFN_REL_OP_T(tp) \
888sc_proxy<X>::operator == ( tp b ) const \
890 const X& x = back_cast(); \
891 sc_lv_base y( x.length() ); \
923sc_concref_r<sc_bitref_r<T>,sc_lv_base>
932sc_concref_r<sc_lv_base,sc_bitref_r<T> >
941sc_concref_r<sc_bitref_r<T>,sc_lv_base>
950sc_concref_r<sc_lv_base,sc_bitref_r<T> >
959sc_concref_r<sc_bitref_r<T>,sc_bv_base>
968sc_concref_r<sc_bv_base,sc_bitref_r<T> >
978sc_concref_r<sc_bitref_r<T>,sc_lv_base>
987sc_concref_r<sc_lv_base,sc_bitref_r<T> >
996sc_concref_r<sc_bitref_r<T>,sc_lv_base>
1005sc_concref_r<sc_lv_base,sc_bitref_r<T> >
1014sc_concref_r<sc_bitref_r<T>,sc_bv_base>
1023sc_concref_r<sc_bv_base,sc_bitref_r<T> >
1031#ifdef SC_DT_MIXED_COMMA_OPERATORS
1035sc_concref_r<sc_bitref_r<T>,sc_lv_base>
1044sc_concref_r<sc_lv_base,sc_bitref_r<T> >
1053sc_concref_r<sc_bitref_r<T>,sc_lv_base>
1062sc_concref_r<sc_lv_base,sc_bitref_r<T> >
1071sc_concref_r<sc_bitref_r<T>,sc_bv_base>
1080sc_concref_r<sc_bv_base,sc_bitref_r<T> >
1090sc_concref_r<sc_bitref_r<T>,sc_lv_base>
1099sc_concref_r<sc_lv_base,sc_bitref_r<T> >
1108sc_concref_r<sc_bitref_r<T>,sc_lv_base>
1117sc_concref_r<sc_lv_base,sc_bitref_r<T> >
1126sc_concref_r<sc_bitref_r<T>,sc_bv_base>
1135sc_concref_r<sc_bv_base,sc_bitref_r<T> >
1155sc_concref_r<sc_subref_r<T>,sc_lv_base>
1164sc_concref_r<sc_lv_base,sc_subref_r<T> >
1173sc_concref_r<sc_subref_r<T>,sc_lv_base>
1182sc_concref_r<sc_lv_base,sc_subref_r<T> >
1191sc_concref_r<sc_subref_r<T>,sc_bv_base>
1200sc_concref_r<sc_bv_base,sc_subref_r<T> >
1210sc_concref_r<sc_subref_r<T>,sc_lv_base>
1219sc_concref_r<sc_lv_base,sc_subref_r<T> >
1228sc_concref_r<sc_subref_r<T>,sc_lv_base>
1237sc_concref_r<sc_lv_base,sc_subref_r<T> >
1246sc_concref_r<sc_subref_r<T>,sc_bv_base>
1255sc_concref_r<sc_bv_base,sc_subref_r<T> >
1263#ifdef SC_DT_MIXED_COMMA_OPERATORS
1267sc_concref_r<sc_subref_r<T>,sc_lv_base>
1276sc_concref_r<sc_lv_base,sc_subref_r<T> >
1285sc_concref_r<sc_subref_r<T>,sc_lv_base>
1294sc_concref_r<sc_lv_base,sc_subref_r<T> >
1303sc_concref_r<sc_subref_r<T>,sc_bv_base>
1312sc_concref_r<sc_bv_base,sc_subref_r<T> >
1322sc_concref_r<sc_subref_r<T>,sc_lv_base>
1331sc_concref_r<sc_lv_base,sc_subref_r<T> >
1340sc_concref_r<sc_subref_r<T>,sc_lv_base>
1349sc_concref_r<sc_lv_base,sc_subref_r<T> >
1358sc_concref_r<sc_subref_r<T>,sc_bv_base>
1367sc_concref_r<sc_bv_base,sc_subref_r<T> >
1390 if( ! this->reversed() ) {
1391 for(
int i = len - 1; i >= 0; -- i ) {
1392 this->m_obj.set_bit( this->m_lo + i, t[i].
value() );
1395 for(
int i = len - 1; i >= 0; -- i ) {
1396 this->m_obj.set_bit( this->m_lo - i, t[i].
value() );
1409 if( ! this->reversed() ) {
1410 for(
int i = len - 1; i >= 0; -- i ) {
1411 this->m_obj.set_bit( this->m_lo + i, t[i].
value() );
1414 for(
int i = len - 1; i >= 0; -- i ) {
1415 this->m_obj.set_bit( this->m_lo - i, t[i].
value() );
1430template <
class T1,
class T2>
1439template <
class T1,
class T2>
1441sc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
1448template <
class T1,
class T2>
1450sc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
1457template <
class T1,
class T2>
1459sc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
1466template <
class T1,
class T2>
1468sc_concref_r<sc_concref_r<T1,T2>,sc_bv_base>
1475template <
class T1,
class T2>
1477sc_concref_r<sc_bv_base,sc_concref_r<T1,T2> >
1485template <
class T1,
class T2>
1487sc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
1494template <
class T1,
class T2>
1496sc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
1503template <
class T1,
class T2>
1505sc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
1512template <
class T1,
class T2>
1514sc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
1521template <
class T1,
class T2>
1523sc_concref_r<sc_concref_r<T1,T2>,sc_bv_base>
1530template <
class T1,
class T2>
1532sc_concref_r<sc_bv_base,sc_concref_r<T1,T2> >
1540#ifdef SC_DT_MIXED_COMMA_OPERATORS
1542template <
class T1,
class T2>
1544sc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
1551template <
class T1,
class T2>
1553sc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
1560template <
class T1,
class T2>
1562sc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
1569template <
class T1,
class T2>
1571sc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
1578template <
class T1,
class T2>
1580sc_concref_r<sc_concref_r<T1,T2>,sc_bv_base>
1587template <
class T1,
class T2>
1589sc_concref_r<sc_bv_base,sc_concref_r<T1,T2> >
1597template <
class T1,
class T2>
1599sc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
1606template <
class T1,
class T2>
1608sc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
1615template <
class T1,
class T2>
1617sc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
1624template <
class T1,
class T2>
1626sc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
1633template <
class T1,
class T2>
1635sc_concref_r<sc_concref_r<T1,T2>,sc_bv_base>
1642template <
class T1,
class T2>
1644sc_concref_r<sc_bv_base,sc_concref_r<T1,T2> >
1665sc_concref_r<T,sc_lv_base>
1674sc_concref_r<sc_lv_base,T>
1683sc_concref_r<T,sc_lv_base>
1692sc_concref_r<sc_lv_base,T>
1701sc_concref_r<T,sc_bv_base>
1710sc_concref_r<sc_bv_base,T>
1720sc_concref_r<T,sc_lv_base>
1729sc_concref_r<sc_lv_base,T>
1738sc_concref_r<T,sc_lv_base>
1747sc_concref_r<sc_lv_base,T>
1756sc_concref_r<T,sc_bv_base>
1765sc_concref_r<sc_bv_base,T>
1773#ifdef SC_DT_MIXED_COMMA_OPERATORS
1777sc_concref_r<T,sc_lv_base>
1786sc_concref_r<sc_lv_base,T>
1795sc_concref_r<T,sc_lv_base>
1804sc_concref_r<sc_lv_base,T>
1813sc_concref_r<T,sc_bv_base>
1822sc_concref_r<sc_bv_base,T>
1832sc_concref_r<T,sc_lv_base>
1841sc_concref_r<sc_lv_base,T>
1850sc_concref_r<T,sc_lv_base>
1859sc_concref_r<sc_lv_base,T>
1868sc_concref_r<T,sc_bv_base>
1877sc_concref_r<sc_bv_base,T>
#define DEFN_BITWISE_AND_OP_T_B(tp)
#define DEFN_BITWISE_AND_OP_T_A(tp)
#define DEFN_BITWISE_AND_ASN_OP_T(tp)
#define DEFN_BITWISE_AND_OP_T_NATIVE(tp)
#define DEFN_BITWISE_XOR_OP_T_SYSTEMC(tp)
#define DEFN_BITWISE_OR_OP_T_B(tp)
#define DEFN_BITWISE_OR_OP_T_A(tp)
#define DEFN_BITWISE_XOR_ASN_OP_T(tp)
#define DEFN_BITWISE_XOR_OP_T_A(tp)
#define DEFN_BITWISE_AND_OP_T_SYSTEMC(tp)
#define DEFN_BITWISE_OR_OP_T_NATIVE(tp)
#define DEFN_BITWISE_XOR_OP_T_B(tp)
#define DEFN_BITWISE_XOR_OP_T_NATIVE(tp)
#define DEFN_BITWISE_OR_ASN_OP_T(tp)
#define DEFN_REL_OP_T(tp)
#define DEFN_BITWISE_OR_OP_T_SYSTEMC(tp)
#define SC_BASE_VEC_DIGITS
#define SC_API_TEMPLATE_DECL_
const sc_digit SC_DIGIT_ONE
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_lv_base lrotate(const sc_proxy< X > &x, int n)
SC_API const sc_logic SC_LOGIC_X
X & b_or_assign_(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_bit operator&(const sc_bit &a, const sc_bit &b)
sc_bit operator^(const sc_bit &a, const sc_bit &b)
X & operator^=(sc_proxy< X > &px, const sc_proxy< Y > &py)
template class SC_API sc_proxy< sc_bv_base >
unsigned long long uint64
bool operator==(const sc_bit &a, const sc_bit &b)
const T sc_min(const T &a, const T &b)
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > concat(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > operator,(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
SC_API void sc_proxy_out_of_bounds(const char *msg=NULL, int64 val=0)
X & b_and_assign_(sc_proxy< X > &px, const sc_proxy< Y > &py)
template class SC_API sc_proxy< sc_lv_base >
sc_lv_base reverse(const sc_proxy< X > &x)
X & b_xor_assign_(sc_proxy< X > &a, const sc_proxy< Y > &b)
sc_lv_base rrotate(const sc_proxy< X > &x, int n)
void assign_p_(sc_proxy< X > &px, const sc_proxy< Y > &py)
X & operator&=(sc_proxy< X > &px, const sc_proxy< Y > &py)
const sc_digit SC_DIGIT_TWO
uint64 const sc_uint_base int b
sc_bit operator|(const sc_bit &a, const sc_bit &b)
sc_core::sc_signal_in_if< T > & value(const T &val)
sc_bitref_r< T > * clone() const
sc_bitref< X > * clone() const
sc_subref_r< X > * clone() const
sc_subref< X > & operator=(const sc_proxy< Y > &a)
sc_subref< X > * clone() const
sc_concref_r< X, Y > * clone() const
sc_concref< X, Y > * clone() const
sc_proxy< sc_lv_base > base_type
void set_bit(int i, value_type value)
sc_digit get_word(int wi) const
base_type::value_type value_type
void set_word(int wi, sc_digit w)
sc_digit get_cword(int wi) const
sc_lv_base(int length_=sc_length_param().len())
void set_cword(int wi, sc_digit w)
sc_lv_base(const sc_proxy< X > &a)
sc_lv_base(const char *a, int length_)
sc_lv_base(const char *a)
sc_lv_base(const sc_logic &a, int length_=sc_length_param().len())
value_type get_bit(int i) const
sc_lv_base(const sc_lv_base &a)
sc_lv_base operator>>(int n) const
sc_lv_base operator<<(int n) const
sc_lv_base operator~() const