99 void assign_from_string(
const std::string& );
112 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
117 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
118 { init( length_, a ); }
126 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
127 { init( a.
back_cast().length() ); base_type::assign_( a ); }
131 #ifdef SC_DT_DEPRECATED 134 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
135 { init( a.
length() ); base_type::assign_( a ); }
138 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
139 { init( a.
length() ); base_type::assign_( a ); }
142 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
143 { init( a.
length() ); base_type::assign_( a ); }
146 : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 )
147 { init( a.
length() ); base_type::assign_( a ); }
155 {
delete [] m_data; }
170 { base_type::assign_( a );
return *
this; }
173 { base_type::assign_( a );
return *
this; }
176 { base_type::assign_( a );
return *
this; }
179 { base_type::assign_( a );
return *
this; }
182 { base_type::assign_( a );
return *
this; }
185 { base_type::assign_( a );
return *
this; }
188 { base_type::assign_( a );
return *
this; }
191 { base_type::assign_( a );
return *
this; }
194 { base_type::assign_( a );
return *
this; }
197 { base_type::assign_( a );
return *
this; }
200 { base_type::assign_( a );
return *
this; }
203 { base_type::assign_( a );
return *
this; }
213 value_type get_bit(
int i )
const;
214 void set_bit(
int i, value_type
value );
217 {
return m_data[wi]; }
224 {
sc_assert ( wi < m_size ); m_data[wi] = w; }
228 {
return m_ctrl[wi]; }
231 {
sc_assert ( wi < m_size ); m_ctrl[wi] = w; }
283 return value_type( ((m_data[wi] >> bi) &
SC_DIGIT_ONE) |
296 m_data[wi] &= value << bi | ~mask;
297 m_ctrl[wi] &= value >> 1 << bi | ~mask;
339 template <
class X,
class Y>
351 #define DEFN_BITWISE_AND_ASN_OP_T(tp) \ 355 sc_proxy<X>::operator &= ( tp b ) \ 357 X& x = back_cast(); \ 358 sc_lv_base a( x.length() ); \ 360 return b_and_assign_( x, a ); \ 373 #undef DEFN_BITWISE_AND_ASN_OP_T 376 template <
class X,
class Y>
386 #define DEFN_BITWISE_AND_OP_T_A(tp) \ 390 sc_proxy<X>::operator & ( tp b ) const \ 392 sc_lv_base a( back_cast() ); \ 410 #undef DEFN_BITWISE_AND_OP_T_A 413 #define DEFN_BITWISE_AND_OP_T_B(tp) \ 417 operator & ( tp b, const sc_proxy<X>& px ) \ 436 #undef DEFN_BITWISE_AND_OP_T_B 441 template <
class X,
class Y>
453 #define DEFN_BITWISE_OR_ASN_OP_T(tp) \ 457 sc_proxy<X>::operator |= ( tp b ) \ 459 X& x = back_cast(); \ 460 sc_lv_base a( x.length() ); \ 462 return b_or_assign_( x, a ); \ 475 #undef DEFN_BITWISE_OR_ASN_OP_T 478 template <
class X,
class Y>
488 #define DEFN_BITWISE_OR_OP_T_A(tp) \ 492 sc_proxy<X>::operator | ( tp b ) const \ 494 sc_lv_base a( back_cast() ); \ 512 #undef DEFN_BITWISE_OR_OP_T_A 515 #define DEFN_BITWISE_OR_OP_T_B(tp) \ 519 operator | ( tp b, const sc_proxy<X>& px ) \ 538 #undef DEFN_BITWISE_OR_OP_T_B 543 template <
class X,
class Y>
555 #define DEFN_BITWISE_XOR_ASN_OP_T(tp) \ 559 sc_proxy<X>::operator ^= ( tp b ) \ 561 X& x = back_cast(); \ 562 sc_lv_base a( x.length() ); \ 564 return b_xor_assign_( x, a ); \ 577 #undef DEFN_BITWISE_XOR_ASN_OP_T 580 template <
class X,
class Y>
590 #define DEFN_BITWISE_XOR_OP_T_A(tp) \ 594 sc_proxy<X>::operator ^ ( tp b ) const \ 596 sc_lv_base a( back_cast() ); \ 614 #undef DEFN_BITWISE_XOR_OP_T_A 617 #define DEFN_BITWISE_XOR_OP_T_B(tp) \ 621 operator ^ ( tp b, const sc_proxy<X>& px ) \ 640 #undef DEFN_BITWISE_XOR_OP_T_B 678 "positive rotate values, rotate value = ", n );
681 int len = x.length();
687 for(
int i = 0; i < sz; ++ i ) {
701 return a.lrotate( n );
715 "positive rotate values, rotate value = ", n );
718 int len = x.length();
724 for(
int i = 0; i < sz; ++ i ) {
738 return a.rrotate( n );
756 template <
class X,
class Y>
763 int x_len = x.length();
764 int y_len = y.length();
765 if( x_len != y_len ) {
769 for(
int i = 0; i < sz; ++ i ) {
770 if( x.get_word( i ) != y.get_word( i ) ||
771 x.get_cword( i ) != y.get_cword( i ) ) {
779 #define DEFN_REL_OP_T(tp) \ 783 sc_proxy<X>::operator == ( tp b ) const \ 785 const X& x = back_cast(); \ 786 sc_lv_base y( x.length() ); \ 818 sc_concref_r<sc_bitref_r<T>,sc_lv_base>
821 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
839 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
857 return sc_concref_r<sc_bitref_r<T>,
sc_bv_base>
876 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
894 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
912 return sc_concref_r<sc_bitref_r<T>,
sc_bv_base>
926 #ifdef SC_DT_MIXED_COMMA_OPERATORS 933 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
951 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
969 return sc_concref_r<sc_bitref_r<T>,
sc_bv_base>
988 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
1006 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
1024 return sc_concref_r<sc_bitref_r<T>,
sc_bv_base>
1053 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1071 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1089 return sc_concref_r<sc_subref_r<T>,
sc_bv_base>
1108 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1126 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1144 return sc_concref_r<sc_subref_r<T>,
sc_bv_base>
1158 #ifdef SC_DT_MIXED_COMMA_OPERATORS 1165 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1183 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1201 return sc_concref_r<sc_subref_r<T>,
sc_bv_base>
1220 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1238 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1256 return sc_concref_r<sc_subref_r<T>,
sc_bv_base>
1285 if( ! this->reversed() ) {
1286 for(
int i = len - 1; i >= 0; -- i ) {
1287 this->m_obj.set_bit( this->m_lo + i, t[i].
value() );
1290 for(
int i = len - 1; i >= 0; -- i ) {
1291 this->m_obj.set_bit( this->m_lo - i, t[i].
value() );
1304 if( ! this->reversed() ) {
1305 for(
int i = len - 1; i >= 0; -- i ) {
1306 this->m_obj.set_bit( this->m_lo + i, t[i].
value() );
1309 for(
int i = len - 1; i >= 0; -- i ) {
1310 this->m_obj.set_bit( this->m_lo - i, t[i].
value() );
1325 template <
class T1,
class T2>
1334 template <
class T1,
class T2>
1343 template <
class T1,
class T2>
1348 return sc_concref_r<sc_concref_r<T1,T2>,
sc_lv_base>(
1352 template <
class T1,
class T2>
1361 template <
class T1,
class T2>
1366 return sc_concref_r<sc_concref_r<T1,T2>,
sc_bv_base>
1370 template <
class T1,
class T2>
1380 template <
class T1,
class T2>
1385 return sc_concref_r<sc_concref_r<T1,T2>,
sc_lv_base>
1389 template <
class T1,
class T2>
1398 template <
class T1,
class T2>
1403 return sc_concref_r<sc_concref_r<T1,T2>,
sc_lv_base>
1407 template <
class T1,
class T2>
1416 template <
class T1,
class T2>
1421 return sc_concref_r<sc_concref_r<T1,T2>,
sc_bv_base>
1425 template <
class T1,
class T2>
1435 #ifdef SC_DT_MIXED_COMMA_OPERATORS 1437 template <
class T1,
class T2>
1442 return sc_concref_r<sc_concref_r<T1,T2>,
sc_lv_base>
1446 template <
class T1,
class T2>
1455 template <
class T1,
class T2>
1460 return sc_concref_r<sc_concref_r<T1,T2>,
sc_lv_base>
1464 template <
class T1,
class T2>
1473 template <
class T1,
class T2>
1478 return sc_concref_r<sc_concref_r<T1,T2>,
sc_bv_base>
1482 template <
class T1,
class T2>
1492 template <
class T1,
class T2>
1497 return sc_concref_r<sc_concref_r<T1,T2>,
sc_lv_base>
1501 template <
class T1,
class T2>
1510 template <
class T1,
class T2>
1515 return sc_concref_r<sc_concref_r<T1,T2>,
sc_lv_base>
1519 template <
class T1,
class T2>
1528 template <
class T1,
class T2>
1533 return sc_concref_r<sc_concref_r<T1,T2>,
sc_bv_base>
1537 template <
class T1,
class T2>
1582 ( a.back_cast(), *
new sc_lv_base( b, 1 ), 2 );
1591 ( *
new sc_lv_base( a, 1 ), b.back_cast(), 1 );
1600 ( a.back_cast(), *
new sc_bv_base( b, 1 ), 2 );
1609 ( *
new sc_bv_base( a, 1 ), b.back_cast(), 1 );
1637 ( a.back_cast(), *
new sc_lv_base( b, 1 ), 2 );
1646 ( *
new sc_lv_base( a, 1 ), b.back_cast(), 1 );
1655 ( a.back_cast(), *
new sc_bv_base( b, 1 ), 2 );
1664 ( *
new sc_bv_base( a, 1 ), b.back_cast(), 1 );
1668 #ifdef SC_DT_MIXED_COMMA_OPERATORS 1694 ( a.back_cast(), *
new sc_lv_base( b, 1 ), 2 );
1703 ( *
new sc_lv_base( a, 1 ), b.back_cast(), 1 );
1712 ( a.back_cast(), *
new sc_bv_base( b, 1 ), 2 );
1721 ( *
new sc_bv_base( a, 1 ), b.back_cast(), 1 );
1749 ( a.back_cast(), *
new sc_lv_base( b, 1 ), 2 );
1758 ( *
new sc_lv_base( a, 1 ), b.back_cast(), 1 );
1767 ( a.back_cast(), *
new sc_bv_base( b, 1 ), 2 );
1776 ( *
new sc_bv_base( a, 1 ), b.back_cast(), 1 );
base_type::value_type value_type
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > concat(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
const sc_digit SC_DIGIT_TWO
sc_concref_r< X, Y > * clone() const
void set_word(int wi, sc_digit w)
SC_API const sc_logic SC_LOGIC_X
const T sc_min(const T &a, const T &b)
SC_API void sc_proxy_out_of_bounds(const char *msg=NULL, int64 val=0)
bool operator==(const sc_bit &a, const sc_bit &b)
#define DEFN_BITWISE_OR_OP_T_B(tp)
Base class template for bit/logic vector classes.
#define DEFN_BITWISE_XOR_ASN_OP_T(tp)
sc_subref_r< X > * clone() const
Proxy class for sc_proxy part selection (r-value and l-value).
X & operator&=(sc_proxy< X > &px, const sc_proxy< Y > &py)
const sc_lv_base operator~() const
#define DEFN_BITWISE_XOR_OP_T_B(tp)
value_type get_bit(int i) const
sc_digit get_cword(int wi) const
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
Arbitrary precision signed number.
const sc_digit SC_DIGIT_ONE
Proxy class for sc_proxy part selection (r-value only).
Base class template for bit/logic vector classes.
Arbitrary precision unsigned number.
X & b_and_assign_(sc_proxy< X > &px, const sc_proxy< Y > &py)
uint64 const sc_uint_base int b
const sc_lv_base operator<<(int n) const
const sc_bit operator|(const sc_bit &a, const sc_bit &b)
const sc_lv_base lrotate(const sc_proxy< X > &x, int n)
sc_lv_base(int length_=sc_length_param().len())
#define DEFN_BITWISE_OR_OP_T_A(tp)
#define DEFN_BITWISE_AND_ASN_OP_T(tp)
Arbitrary size logic vector base class.
#define DEFN_BITWISE_AND_OP_T_A(tp)
sc_subref< X > * clone() const
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > operator,(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
Arbitrary size bit vector class.
const sc_lv_base operator>>(int n) const
const sc_lv_base reverse(const sc_proxy< X > &x)
sc_clock period is zero sc_clock low time is zero sc_fifo< T > cannot have more than one writer bind interface to port failed complete binding failed remove port failed insert primitive channel failed sc_signal< T > cannot have more than one driver resolved port not bound to resolved signal sc_semaphore requires an initial value
X & b_or_assign_(sc_proxy< X > &px, const sc_proxy< Y > &py)
void set_bit(int i, value_type value)
#define DEFN_REL_OP_T(tp)
#define DEFN_BITWISE_OR_ASN_OP_T(tp)
void set_cword(int wi, sc_digit w)
const sc_bit operator^(const sc_bit &a, const sc_bit &b)
Proxy class for sc_proxy bit selection (r-value only).
X & operator^=(sc_proxy< X > &px, const sc_proxy< Y > &py)
C++ implementation of logic type. Behaves.
Report ids for the datatypes/bit code.
const sc_digit SC_DIGIT_ZERO
#define SC_API_TEMPLATE_DECL_
sc_subref< X > & operator=(const sc_proxy< Y > &a)
sc_lv_base(const sc_proxy< X > &a)
void assign_p_(sc_proxy< X > &px, const sc_proxy< Y > &py)
X & b_xor_assign_(sc_proxy< X > &a, const sc_proxy< Y > &b)
const sc_lv_base rrotate(const sc_proxy< X > &x, int n)
const sc_bit operator&(const sc_bit &a, const sc_bit &b)
#define DEFN_BITWISE_XOR_OP_T_A(tp)
sc_digit get_word(int wi) const
sc_concref< X, Y > * clone() const
#define DEFN_BITWISE_AND_OP_T_B(tp)
sc_bitref< X > * clone() const
Arbitrary size bit vector base class.
sc_lv_base(const sc_logic &a, int length_=sc_length_param().len())
sc_proxy< sc_lv_base > base_type