33 #ifndef SC_BIT_PROXIES_H 34 #define SC_BIT_PROXIES_H 47 #pragma warning(disable:4806) 67 template<
class T,
class Traits =
typename T::traits_type>
75 #if IEEE_1666_CPLUSPLUS >= 201103L // explicit operator needs C++11 77 explicit operator bool()
const {
112 : m_obj( const_cast<T&>( obj_ ) ), m_index( index_ )
119 : m_obj( a.m_obj ), m_index( a.m_index )
138 operator bit_type()
const 139 {
return bit_type( m_obj.get_bit( m_index ) ); }
145 {
return m_obj.get_bit( m_index ); }
166 value_type get_bit(
int n )
const;
174 void print( ::std::ostream& os = ::std::cout )
const 194 template <
class T1,
class T2>
202 template <
class T1,
class T2>
210 template <
class T1,
class T2>
218 template <
class T1,
class T2>
223 template <
class T1,
class T2>
231 template <
class T1,
class T2>
236 template <
class T1,
class T2>
241 template <
class T1,
class T2,
class T3>
246 template <
class T1,
class T2>
282 template <
class T1,
class T2>
287 template <
class T1,
class T2>
292 template <
class T1,
class T2,
class T3>
297 template <
class T1,
class T2>
333 #ifdef SC_DT_MIXED_COMMA_OPERATORS 335 template <
class T1,
class T2>
340 template <
class T1,
class T2>
345 template <
class T1,
class T2>
350 template <
class T1,
class T2>
355 template <
class T1,
class T2,
class T3>
360 template <
class T1,
class T2,
class T3>
365 template <
class T1,
class T2>
370 template <
class T1,
class T2>
406 template <
class T1,
class T2>
411 template <
class T1,
class T2>
416 template <
class T1,
class T2>
421 template <
class T1,
class T2>
426 template <
class T1,
class T2,
class T3>
431 template <
class T1,
class T2,
class T3>
436 template <
class T1,
class T2>
441 template <
class T1,
class T2>
521 { this->m_obj.set_bit( this->m_index, a.
value() );
return *
this; }
524 { *
this =
sc_logic( v );
return *
this; }
527 { *
this =
sc_logic( a );
return *
this; }
530 { *
this =
sc_logic( a );
return *
this; }
533 { *
this =
sc_logic( a );
return *
this; }
536 { *
this =
sc_logic( a );
return *
this; }
545 { *
this &=
sc_logic( v );
return *
this; }
548 { *
this &=
sc_logic( a );
return *
this; }
551 { *
this &=
sc_logic( a );
return *
this; }
554 { *
this &=
sc_logic( a );
return *
this; }
561 { *
this |=
sc_logic( v );
return *
this; }
564 { *
this |=
sc_logic( a );
return *
this; }
567 { *
this |=
sc_logic( a );
return *
this; }
570 { *
this |=
sc_logic( a );
return *
this; }
577 { *
this ^=
sc_logic( v );
return *
this; }
580 { *
this ^=
sc_logic( a );
return *
this; }
583 { *
this ^=
sc_logic( a );
return *
this; }
586 { *
this ^=
sc_logic( a );
return *
this; }
598 void set_bit(
int n, value_type
value );
601 void set_cword(
int i,
sc_digit w );
604 { this->m_obj.clean_tail(); }
609 void scan( ::std::istream& is = ::std::cin );
620 template <
class T1,
class T2>
625 template <
class T1,
class T2>
630 template <
class T1,
class T2,
class T3>
635 template <
class T1,
class T2>
641 template <
class T1,
class T2>
646 template <
class T1,
class T2>
651 template <
class T1,
class T2,
class T3>
656 template <
class T1,
class T2>
685 : m_obj( const_cast<X&>( obj_ ) ), m_hi( hi_ ), m_lo( lo_ ), m_len( 0 )
692 : m_obj( a.m_obj ), m_hi( a.m_hi ), m_lo( a.m_lo ), m_len( a.m_len )
710 value_type get_bit(
int n )
const;
711 void set_bit(
int n, value_type
value );
717 void set_cword(
int i,
sc_digit w );
720 { m_obj.clean_tail(); }
728 {
return m_lo > m_hi; }
747 template <
class T1,
class T2>
752 template <
class T1,
class T2>
757 template <
class T1,
class T2,
class T3>
762 template <
class T1,
class T2>
798 template <
class T1,
class T2>
803 template <
class T1,
class T2>
808 template <
class T1,
class T2,
class T3>
813 template <
class T1,
class T2>
849 #ifdef SC_DT_MIXED_COMMA_OPERATORS 851 template <
class T1,
class T2>
856 template <
class T1,
class T2>
861 template <
class T1,
class T2>
866 template <
class T1,
class T2>
871 template <
class T1,
class T2,
class T3>
876 template <
class T1,
class T2,
class T3>
881 template <
class T1,
class T2>
886 template <
class T1,
class T2>
922 template <
class T1,
class T2>
927 template <
class T1,
class T2>
932 template <
class T1,
class T2>
937 template <
class T1,
class T2>
942 template <
class T1,
class T2,
class T3>
947 template <
class T1,
class T2,
class T3>
952 template <
class T1,
class T2>
957 template <
class T1,
class T2>
1036 { base_type::assign_( a );
return *
this; }
1042 { base_type::assign_( a );
return *
this; }
1045 { base_type::assign_( a );
return *
this; }
1048 { base_type::assign_( a );
return *
this; }
1051 { base_type::assign_( a );
return *
this; }
1054 { base_type::assign_( a );
return *
this; }
1057 { base_type::assign_( a );
return *
this; }
1060 { base_type::assign_( a );
return *
this; }
1063 { base_type::assign_( a );
return *
this; }
1066 { base_type::assign_( a );
return *
this; }
1069 { base_type::assign_( a );
return *
this; }
1072 { base_type::assign_( a );
return *
this; }
1075 { base_type::assign_( a );
return *
this; }
1078 { base_type::assign_( a );
return *
this; }
1083 void scan( ::std::istream& = ::std::cin );
1094 template <
class T1,
class T2>
1099 template <
class T1,
class T2>
1104 template <
class T1,
class T2,
class T3>
1109 template <
class T1,
class T2>
1115 template <
class T1,
class T2>
1120 template <
class T1,
class T2>
1125 template <
class T1,
class T2,
class T3>
1130 template <
class T1,
class T2>
1148 template <
class X,
class Y>
1150 :
public sc_proxy<sc_concref_r<X,Y> >
1158 : m_left( const_cast<X&>( left_ ) ), m_right( const_cast<Y&>( right_ ) ),
1159 m_delete( delete_ ), m_refs( *new int( 1 ) )
1166 : m_left( a.m_left ), m_right( a.m_right ),
1167 m_delete( a.m_delete ), m_refs( a.m_refs )
1185 {
return ( m_left.length() + m_right.length() ); }
1190 value_type get_bit(
int n )
const;
1191 void set_bit(
int n, value_type
value );
1194 void set_word(
int i,
sc_digit w );
1197 void set_cword(
int i,
sc_digit w );
1200 { m_left.clean_tail(); m_right.clean_tail(); }
1206 {
return ( m_left.is_01() && m_right.is_01() ); }
1225 template <
class T1,
class T2,
class T3>
1230 template <
class T1,
class T2,
class T3>
1235 template <
class T1,
class T2,
class T3,
class T4>
1240 template <
class T1,
class T2,
class T3>
1245 template <
class T1,
class T2>
1250 template <
class T1,
class T2>
1255 template <
class T1,
class T2>
1260 template <
class T1,
class T2>
1265 template <
class T1,
class T2>
1270 template <
class T1,
class T2>
1276 template <
class T1,
class T2,
class T3>
1281 template <
class T1,
class T2,
class T3>
1286 template <
class T1,
class T2,
class T3,
class T4>
1291 template <
class T1,
class T2,
class T3>
1296 template <
class T1,
class T2>
1301 template <
class T1,
class T2>
1306 template <
class T1,
class T2>
1311 template <
class T1,
class T2>
1316 template <
class T1,
class T2>
1321 template <
class T1,
class T2>
1327 #ifdef SC_DT_MIXED_COMMA_OPERATORS 1329 template <
class T1,
class T2,
class T3>
1334 template <
class T1,
class T2,
class T3>
1339 template <
class T1,
class T2,
class T3>
1344 template <
class T1,
class T2,
class T3>
1349 template <
class T1,
class T2,
class T3,
class T4>
1354 template <
class T1,
class T2,
class T3,
class T4>
1359 template <
class T1,
class T2,
class T3>
1364 template <
class T1,
class T2,
class T3>
1369 template <
class T1,
class T2>
1374 template <
class T1,
class T2>
1379 template <
class T1,
class T2>
1384 template <
class T1,
class T2>
1389 template <
class T1,
class T2>
1394 template <
class T1,
class T2>
1400 template <
class T1,
class T2,
class T3>
1405 template <
class T1,
class T2,
class T3>
1410 template <
class T1,
class T2,
class T3>
1415 template <
class T1,
class T2,
class T3>
1420 template <
class T1,
class T2,
class T3,
class T4>
1425 template <
class T1,
class T2,
class T3,
class T4>
1430 template <
class T1,
class T2,
class T3>
1435 template <
class T1,
class T2,
class T3>
1440 template <
class T1,
class T2>
1445 template <
class T1,
class T2>
1450 template <
class T1,
class T2>
1455 template <
class T1,
class T2>
1460 template <
class T1,
class T2>
1465 template <
class T1,
class T2>
1479 template <
class X,
class Y>
1514 { base_type::assign_( a );
return *
this; }
1517 { base_type::assign_( a );
return *
this; }
1520 { base_type::assign_( a );
return *
this; }
1523 { base_type::assign_( a );
return *
this; }
1526 { base_type::assign_( a );
return *
this; }
1529 { base_type::assign_( a );
return *
this; }
1532 { base_type::assign_( a );
return *
this; }
1535 { base_type::assign_( a );
return *
this; }
1538 { base_type::assign_( a );
return *
this; }
1541 { base_type::assign_( a );
return *
this; }
1544 { base_type::assign_( a );
return *
this; }
1547 { base_type::assign_( a );
return *
this; }
1550 { base_type::assign_( a );
return *
this; }
1553 { base_type::assign_( a );
return *
this; }
1556 { base_type::assign_( a );
return *
this; }
1561 void scan( ::std::istream& = ::std::cin );
1572 template <
class T1,
class T2,
class T3>
1577 template <
class T1,
class T2,
class T3>
1582 template <
class T1,
class T2,
class T3,
class T4>
1587 template <
class T1,
class T2,
class T3>
1593 template <
class T1,
class T2,
class T3>
1598 template <
class T1,
class T2,
class T3>
1603 template <
class T1,
class T2,
class T3,
class T4>
1608 template <
class T1,
class T2,
class T3>
1614 template <
class T1,
class T2>
1629 template <
class T1,
class T2>
1634 template <
class T1,
class T2>
1639 template <
class T1,
class T2,
class T3>
1644 template <
class T1,
class T2>
1680 template <
class T1,
class T2>
1685 template <
class T1,
class T2>
1690 template <
class T1,
class T2,
class T3>
1695 template <
class T1,
class T2>
1731 #ifdef SC_DT_MIXED_COMMA_OPERATORS 1733 template <
class T1,
class T2>
1738 template <
class T1,
class T2>
1743 template <
class T1,
class T2>
1748 template <
class T1,
class T2>
1753 template <
class T1,
class T2,
class T3>
1758 template <
class T1,
class T2,
class T3>
1763 template <
class T1,
class T2>
1768 template <
class T1,
class T2>
1804 template <
class T1,
class T2>
1809 template <
class T1,
class T2>
1814 template <
class T1,
class T2>
1819 template <
class T1,
class T2>
1824 template <
class T1,
class T2,
class T3>
1829 template <
class T1,
class T2,
class T3>
1834 template <
class T1,
class T2>
1839 template <
class T1,
class T2>
1879 template <
class T1,
class T2>
1884 template <
class T1,
class T2>
1889 template <
class T1,
class T2,
class T3>
1894 template <
class T1,
class T2>
1900 template <
class T1,
class T2>
1905 template <
class T1,
class T2>
1910 template <
class T1,
class T2,
class T3>
1915 template <
class T1,
class T2>
1933 template <
class T1,
class T2>
1944 template <
class T1,
class T2>
1955 template <
class T1,
class T2>
1966 template <
class T1,
class T2>
1974 template <
class T1,
class T2>
1991 return m_obj.get_bit( m_index );
2028 template <
class T1,
class T2>
2037 template <
class T1,
class T2>
2046 template <
class T1,
class T2,
class T3>
2055 template <
class T1,
class T2>
2057 sc_concref_r<sc_bitref_r<T1>,T2>
2060 return sc_concref_r<sc_bitref_r<T1>,T2>(
2065 template <
class T1,
class T2>
2074 template <
class T1,
class T2>
2083 template <
class T1,
class T2,
class T3>
2092 template <
class T1,
class T2>
2094 sc_concref_r<sc_bitref_r<T1>,T2>
2097 return sc_concref_r<sc_bitref_r<T1>,T2>(
2102 #ifdef SC_DT_MIXED_COMMA_OPERATORS 2104 template <
class T1,
class T2>
2113 template <
class T1,
class T2>
2122 template <
class T1,
class T2>
2131 template <
class T1,
class T2>
2140 template <
class T1,
class T2,
class T3>
2149 template <
class T1,
class T2,
class T3>
2158 template <
class T1,
class T2>
2160 sc_concref_r<sc_bitref_r<T1>,T2>
2163 return sc_concref_r<sc_bitref_r<T1>,T2>(
2167 template <
class T1,
class T2>
2169 sc_concref_r<sc_bitref_r<T1>,T2>
2172 return sc_concref_r<sc_bitref_r<T1>,T2>(
2177 template <
class T1,
class T2>
2186 template <
class T1,
class T2>
2195 template <
class T1,
class T2>
2204 template <
class T1,
class T2>
2213 template <
class T1,
class T2,
class T3>
2222 template <
class T1,
class T2,
class T3>
2231 template <
class T1,
class T2>
2233 sc_concref_r<sc_bitref_r<T1>,T2>
2236 return sc_concref_r<sc_bitref_r<T1>,T2>(
2240 template <
class T1,
class T2>
2242 sc_concref_r<sc_bitref_r<T1>,T2>
2245 return sc_concref_r<sc_bitref_r<T1>,T2>(
2265 this->m_obj.set_bit( this->m_index, a.
value() );
2275 this->m_obj.set_bit( this->m_index, a.value() );
2289 this->m_obj.set_bit( this->m_index,
2300 this->m_obj.set_bit( this->m_index,
2312 this->m_obj.set_bit( this->m_index,
2323 this->m_obj.set_bit( this->m_index,
2335 this->m_obj.set_bit( this->m_index,
2346 this->m_obj.set_bit( this->m_index,
2361 this->m_obj.set_bit( this->m_index,
2375 this->m_obj.set_bit( this->m_index, value );
2386 unsigned int bi = this->m_index % (8*
sizeof(
sc_digit));
2388 unsigned int wi = this->m_index / (8*
sizeof(
sc_digit));
2390 temp = this->m_obj.get_word(wi);
2391 temp = (temp & ~(1 << bi)) | ((w&1) << bi);
2392 this->m_obj.set_word(wi, temp);
2404 unsigned int bi = this->m_index % (8*
sizeof(
sc_digit));
2406 unsigned int wi = this->m_index / (8*
sizeof(
sc_digit));
2408 temp = this->m_obj.get_cword(wi);
2409 temp = (temp & ~(1 << bi)) | ((w&1) << bi);
2410 this->m_obj.set_cword(wi, temp);
2431 template <
class T1,
class T2>
2440 template <
class T1,
class T2>
2449 template <
class T1,
class T2,
class T3>
2458 template <
class T1,
class T2>
2460 sc_concref<sc_bitref<T1>,T2>
2463 return sc_concref<sc_bitref<T1>,T2>(
2468 template <
class T1,
class T2>
2477 template <
class T1,
class T2>
2486 template <
class T1,
class T2,
class T3>
2495 template <
class T1,
class T2>
2497 sc_concref<sc_bitref<T1>,T2>
2500 return sc_concref<sc_bitref<T1>,T2>(
2526 int len = m_obj.
length();
2527 if( m_hi < 0 || m_hi >= len || m_lo < 0 || m_lo >= len ) {
2532 m_len = m_lo - m_hi + 1;
2534 m_len = m_hi - m_lo + 1;
2547 return m_obj.get_bit( m_lo - n );
2549 return m_obj.get_bit( m_lo + n );
2559 m_obj.set_bit( m_lo - n, value );
2561 m_obj.set_bit( m_lo + n, value );
2577 n2 =
sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 );
2578 for(
int n = n1; n > n2; n -- ) {
2583 n2 =
sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 );
2584 for(
int n = n1; n < n2; n ++ ) {
2601 n2 =
sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 );
2602 for(
int n = n1; n > n2; n -- ) {
2609 n2 =
sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 );
2610 for(
int n = n1; n < n2; n ++ ) {
2630 n2 =
sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 );
2631 for(
int n = n1; n > n2; n -- ) {
2632 result |= ((m_obj[n].value() &
SC_DIGIT_TWO) >> 1) << k ++;
2636 n2 =
sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 );
2637 for(
int n = n1; n < n2; n ++ ) {
2638 result |= ((m_obj[n].value() &
SC_DIGIT_TWO) >> 1) << k ++;
2654 n2 =
sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 );
2655 for(
int n = n1; n > n2; n -- ) {
2662 n2 =
sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 );
2663 for(
int n = n1; n < n2; n ++ ) {
2680 for(
int i = 0; i < sz; ++ i ) {
2691 template <
class T1,
class T2>
2700 template <
class T1,
class T2>
2709 template <
class T1,
class T2,
class T3>
2718 template <
class T1,
class T2>
2720 sc_concref_r<sc_subref_r<T1>,T2>
2723 return sc_concref_r<sc_subref_r<T1>,T2>(
2728 template <
class T1,
class T2>
2737 template <
class T1,
class T2>
2746 template <
class T1,
class T2,
class T3>
2755 template <
class T1,
class T2>
2757 sc_concref_r<sc_subref_r<T1>,T2>
2760 return sc_concref_r<sc_subref_r<T1>,T2>(
2765 #ifdef SC_DT_MIXED_COMMA_OPERATORS 2767 template <
class T1,
class T2>
2776 template <
class T1,
class T2>
2785 template <
class T1,
class T2>
2794 template <
class T1,
class T2>
2803 template <
class T1,
class T2,
class T3>
2812 template <
class T1,
class T2,
class T3>
2821 template <
class T1,
class T2>
2823 sc_concref_r<sc_subref_r<T1>,T2>
2826 return sc_concref_r<sc_subref_r<T1>,T2>(
2830 template <
class T1,
class T2>
2832 sc_concref_r<sc_subref_r<T1>,T2>
2835 return sc_concref_r<sc_subref_r<T1>,T2>(
2840 template <
class T1,
class T2>
2849 template <
class T1,
class T2>
2858 template <
class T1,
class T2>
2867 template <
class T1,
class T2>
2876 template <
class T1,
class T2,
class T3>
2885 template <
class T1,
class T2,
class T3>
2894 template <
class T1,
class T2>
2896 sc_concref_r<sc_subref_r<T1>,T2>
2899 return sc_concref_r<sc_subref_r<T1>,T2>(
2903 template <
class T1,
class T2>
2905 sc_concref_r<sc_subref_r<T1>,T2>
2908 return sc_concref_r<sc_subref_r<T1>,T2>(
2942 template <
class T1,
class T2>
2951 template <
class T1,
class T2>
2960 template <
class T1,
class T2,
class T3>
2969 template <
class T1,
class T2>
2971 sc_concref<sc_subref<T1>,T2>
2974 return sc_concref<sc_subref<T1>,T2>(
2979 template <
class T1,
class T2>
2988 template <
class T1,
class T2>
2997 template <
class T1,
class T2,
class T3>
3006 template <
class T1,
class T2>
3008 sc_concref<sc_subref<T1>,T2>
3011 return sc_concref<sc_subref<T1>,T2>(
3034 template <
class X,
class Y>
3038 if( -- m_refs == 0 ) {
3040 if( m_delete == 0 ) {
3043 if( m_delete & 1 ) {
3046 if( m_delete & 2 ) {
3055 template <
class X,
class Y>
3060 int r_len = m_right.length();
3063 }
else if( n < r_len + m_left.length() ) {
3064 return value_type(m_left.get_bit( n - r_len ));
3071 template <
class X,
class Y>
3076 int r_len = m_right.length();
3078 m_right.set_bit( n,
typename Y::value_type(v) );
3079 }
else if( n < r_len + m_left.length() ) {
3080 m_left.set_bit( n - r_len,
typename X::value_type(v) );
3087 template <
class X,
class Y>
3092 if( i < 0 || i >= size() ) {
3097 int r_len = r.length();
3100 return r.get_word( i );
3107 return l.get_word( j );
3113 return ( (r.get_word( i ) & rl_mask) | (l.get_word( 0 ) << shift) );
3117 return ( (l.get_word( j - 1 ) >> nshift) | (l.get_word( j ) << shift) );
3119 return (l.get_word( j - 1 ) >> nshift);
3122 template <
class X,
class Y>
3127 if( i < 0 || i >= size() ) {
3132 int r_len = r.length();
3151 r.set_word( i, w & rl_mask );
3152 l.set_word( 0, (l.get_word( 0 ) & lh_mask) | (w >> shift) );
3157 l.set_word( j - 1, (l.get_word( j - 1 ) & ll_mask) | (w << nshift) );
3159 l.set_word( j, (l.get_word( j ) & lh_mask) | (w >> shift) );
3163 template <
class X,
class Y>
3168 if( i < 0 || i >= size() ) {
3173 int r_len = r.length();
3176 return r.get_cword( i );
3183 return l.get_cword( j );
3189 return ( (r.get_cword( i ) & rl_mask) | (l.get_cword( 0 ) << shift) );
3193 return ( (l.get_cword(j - 1) >> nshift) | (l.get_cword(j) << shift) );
3195 return (l.get_cword( j - 1 ) >> nshift);
3198 template <
class X,
class Y>
3203 if( i < 0 || i >= size() ) {
3208 int r_len = r.length();
3211 r.set_cword( i, w );
3219 l.set_cword( j, w );
3227 r.set_cword( i, w & rl_mask );
3228 l.set_cword( 0, (l.get_cword( 0 ) & lh_mask) | (w >> shift) );
3233 l.set_cword( j - 1, (l.get_cword( j - 1 ) & ll_mask) | (w << nshift) );
3235 l.set_cword( j, (l.get_cword( j ) & lh_mask) | (w >> shift) );
3241 template <
class T1,
class T2,
class T3>
3250 template <
class T1,
class T2,
class T3>
3259 template <
class T1,
class T2,
class T3,
class T4>
3268 template <
class T1,
class T2,
class T3>
3270 sc_concref_r<sc_concref_r<T1,T2>,T3>
3273 return sc_concref_r<sc_concref_r<T1,T2>,T3>(
3278 template <
class T1,
class T2,
class T3>
3287 template <
class T1,
class T2,
class T3>
3296 template <
class T1,
class T2,
class T3,
class T4>
3305 template <
class T1,
class T2,
class T3>
3307 sc_concref_r<sc_concref_r<T1,T2>,T3>
3310 return sc_concref_r<sc_concref_r<T1,T2>,T3>(
3315 #ifdef SC_DT_MIXED_COMMA_OPERATORS 3317 template <
class T1,
class T2,
class T3>
3326 template <
class T1,
class T2,
class T3>
3335 template <
class T1,
class T2,
class T3>
3344 template <
class T1,
class T2,
class T3>
3353 template <
class T1,
class T2,
class T3,
class T4>
3362 template <
class T1,
class T2,
class T3,
class T4>
3371 template <
class T1,
class T2,
class T3>
3373 sc_concref_r<sc_concref_r<T1,T2>,T3>
3376 return sc_concref_r<sc_concref_r<T1,T2>,T3>(
3380 template <
class T1,
class T2,
class T3>
3382 sc_concref_r<sc_concref_r<T1,T2>,T3>
3385 return sc_concref_r<sc_concref_r<T1,T2>,T3>(
3390 template <
class T1,
class T2,
class T3>
3399 template <
class T1,
class T2,
class T3>
3408 template <
class T1,
class T2,
class T3>
3417 template <
class T1,
class T2,
class T3>
3426 template <
class T1,
class T2,
class T3,
class T4>
3435 template <
class T1,
class T2,
class T3,
class T4>
3444 template <
class T1,
class T2,
class T3>
3446 sc_concref_r<sc_concref_r<T1,T2>,T3>
3449 return sc_concref_r<sc_concref_r<T1,T2>,T3>(
3453 template <
class T1,
class T2,
class T3>
3455 sc_concref_r<sc_concref_r<T1,T2>,T3>
3458 return sc_concref_r<sc_concref_r<T1,T2>,T3>(
3473 template <
class T1,
class T2>
3486 template <
class T1,
class T2,
class T3>
3495 template <
class T1,
class T2,
class T3>
3504 template <
class T1,
class T2,
class T3,
class T4>
3513 template <
class T1,
class T2,
class T3>
3515 sc_concref<sc_concref<T1,T2>,T3>
3518 return sc_concref<sc_concref<T1,T2>,T3>(
3523 template <
class T1,
class T2,
class T3>
3532 template <
class T1,
class T2,
class T3>
3541 template <
class T1,
class T2,
class T3,
class T4>
3550 template <
class T1,
class T2,
class T3>
3552 sc_concref<sc_concref<T1,T2>,T3>
3555 return sc_concref<sc_concref<T1,T2>,T3>(
3560 template <
class X,
class Y>
3579 template <
class T1,
class T2>
3588 template <
class T1,
class T2>
3597 template <
class T1,
class T2,
class T3>
3606 template <
class T1,
class T2>
3616 template <
class T1,
class T2>
3625 template <
class T1,
class T2>
3634 template <
class T1,
class T2,
class T3>
3643 template <
class T1,
class T2>
3653 #ifdef SC_DT_MIXED_COMMA_OPERATORS 3655 template <
class T1,
class T2>
3664 template <
class T1,
class T2>
3673 template <
class T1,
class T2>
3682 template <
class T1,
class T2>
3691 template <
class T1,
class T2,
class T3>
3700 template <
class T1,
class T2,
class T3>
3709 template <
class T1,
class T2>
3718 template <
class T1,
class T2>
3728 template <
class T1,
class T2>
3737 template <
class T1,
class T2>
3746 template <
class T1,
class T2>
3755 template <
class T1,
class T2>
3764 template <
class T1,
class T2,
class T3>
3773 template <
class T1,
class T2,
class T3>
3782 template <
class T1,
class T2>
3791 template <
class T1,
class T2>
3805 template <
class T1,
class T2>
3814 template <
class T1,
class T2>
3823 template <
class T1,
class T2,
class T3>
3832 template <
class T1,
class T2>
3842 template <
class T1,
class T2>
3851 template <
class T1,
class T2>
3860 template <
class T1,
class T2,
class T3>
3869 template <
class T1,
class T2>
3881 #pragma warning(pop) sc_concref_r(const X &left_, const Y &right_, int delete_=0)
Template traits helper to select the correct bit/value/vector_types for.
sc_subref_r(const X &obj_, int hi_, int lo_)
void set_bit(int n, value_type value)
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
traits_type::bit_type bit_type
void scan(::std::istream &=::std::cin)
sc_concref_r< X, Y > * clone() const
void set_cword(int i, sc_digit w)
static const sc_logic_value_t and_table[4][4]
sc_proxy< sc_concref_r< X, Y > >::value_type value_type
const T sc_min(const T &a, const T &b)
sc_concref_r(const sc_concref_r< X, Y > &a)
sc_bitref< X > & operator|=(const sc_bitref_r< X > &a)
bool operator==(const sc_bit &a, const sc_bit &b)
void print(::std::ostream &os=::std::cout) const
Base class template for bit/logic vector classes.
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)
void set_word(int i, sc_digit w)
sc_subref_r< X > base_type
sc_digit get_cword(int i) const
sc_digit get_word(int i) const
const T sc_max(const T &a, const T &b)
void scan(::std::istream &is=::std::cin)
Proxy class for sc_proxy concatenation (r-value and l-value).
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
Arbitrary precision signed number.
const sc_digit SC_DIGIT_ONE
T::traits_type traits_type
void set_cword(int i, sc_digit w)
Proxy class for sc_proxy part selection (r-value only).
void set_bit(int n, value_type value)
SC_API const char SC_ID_OUT_OF_BOUNDS_[]
Base class template for bit/logic vector classes.
Arbitrary precision unsigned number.
sc_subref(const sc_subref< X > &a)
sc_logic_value_t
Enumeration of values for sc_logic.
sc_concref(const sc_concref< X, Y > &a)
uint64 const sc_uint_base int b
sc_digit get_word(int i) const
sc_bitref_r(const sc_bitref_r< T > &a)
sc_digit get_word(int i) const
bool operator!=(const sc_bit &a, const sc_bit &b)
const sc_bit b_not(const sc_bit &a)
value_type get_bit(int n) const
const sc_bit operator|(const sc_bit &a, const sc_bit &b)
void scan(::std::istream &=::std::cin)
sc_bitref(const sc_bitref< X > &a)
Arbitrary size logic vector base class.
sc_bitref_r< X >::value_type value_type
sc_subref< X > * clone() const
sc_bitref< X > & operator=(const sc_bitref_r< X > &a)
traits_type::value_type value_type
static const sc_logic_value_t xor_table[4][4]
sc_logic_value_t value() const
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > operator,(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
static const sc_logic_value_t not_table[4]
Proxy class for sc_proxy bit selection (r-value and l-value).
sc_bitref_r< T > * clone() const
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
sc_digit get_cword(int i) const
sc_bitref_r(const T &obj_, int index_)
sc_bitref< X > & operator^=(const sc_bitref_r< X > &a)
void set_word(int i, sc_digit w)
sc_proxy< sc_subref_r< X > >::value_type value_type
const sc_bit operator^(const sc_bit &a, const sc_bit &b)
sc_subref(X &obj_, int hi_, int lo_)
sc_bitref< X > & operator&=(const sc_bitref_r< X > &a)
Proxy class for sc_proxy bit selection (r-value only).
sc_bitref(X &obj_, int index_)
void set_cword(int i, sc_digit w)
sc_subref_r(const sc_subref_r< X > &a)
X & operator^=(sc_proxy< X > &px, const sc_proxy< Y > &py)
Report ids for the datatypes/bit code.
const sc_digit SC_DIGIT_ZERO
value_type get_bit(int n) const
void set_word(int i, sc_digit w)
value_type get_bit(int n) const
void set_bit(int n, value_type value)
#define SC_REPORT_ERROR(msg_type, msg)
const sc_bit operator&(const sc_bit &a, const sc_bit &b)
Proxy class for sc_proxy concatenation (r-value only).
static const sc_logic_value_t or_table[4][4]
sc_concref< X, Y > * clone() const
sc_bitref< X > * clone() const
SC_NORETURN_ SC_API void sc_abort()
const sc_bit operator~(const sc_bit &a)
Arbitrary size bit vector base class.
sc_concref(X &left_, Y &right_, int delete_=0)
sc_digit get_cword(int i) const
inline ::std::istream & operator>>(::std::istream &is, sc_bit &a)
sc_concref_r< X, Y > base_type
Proxy base class for vector data types.