29#ifndef SC_BIT_PROXIES_H
30#define SC_BIT_PROXIES_H
43#pragma warning(disable:4806)
50template <
class X,
class Traits>
class sc_bitref_conv_r;
51template <
class X>
class sc_bitref_r;
52template <
class X>
class sc_bitref;
53template <
class X>
class sc_subref_r;
54template <
class X>
class sc_subref;
55template <
class X,
class Y>
class sc_concref_r;
56template <
class X,
class Y>
class sc_concref;
63template<
class T,
class Traits =
typename T::traits_type>
71#if IEEE_1666_CPLUSPLUS >= 201103L
73 explicit operator bool()
const {
153 explicit operator bool ()
const
175 void print( ::std::ostream& os = ::std::cout )
const
195template <
class T1,
class T2>
203template <
class T1,
class T2>
211template <
class T1,
class T2>
219template <
class T1,
class T2>
224template <
class T1,
class T2>
232template <
class T1,
class T2>
237template <
class T1,
class T2>
242template <
class T1,
class T2,
class T3>
247template <
class T1,
class T2>
283template <
class T1,
class T2>
288template <
class T1,
class T2>
293template <
class T1,
class T2,
class T3>
298template <
class T1,
class T2>
334#ifdef SC_DT_MIXED_COMMA_OPERATORS
336template <
class T1,
class T2>
341template <
class T1,
class T2>
346template <
class T1,
class T2>
351template <
class T1,
class T2>
356template <
class T1,
class T2,
class T3>
361template <
class T1,
class T2,
class T3>
366template <
class T1,
class T2>
371template <
class T1,
class T2>
407template <
class T1,
class T2>
412template <
class T1,
class T2>
417template <
class T1,
class T2>
422template <
class T1,
class T2>
427template <
class T1,
class T2,
class T3>
432template <
class T1,
class T2,
class T3>
437template <
class T1,
class T2>
442template <
class T1,
class T2>
525 { *
this =
sc_logic( v );
return *
this; }
528 { *
this =
sc_logic( a );
return *
this; }
531 { *
this =
sc_logic( a );
return *
this; }
534 { *
this =
sc_logic( a );
return *
this; }
537 { *
this =
sc_logic( a );
return *
this; }
546 { *
this &=
sc_logic( v );
return *
this; }
549 { *
this &=
sc_logic( a );
return *
this; }
552 { *
this &=
sc_logic( a );
return *
this; }
555 { *
this &=
sc_logic( a );
return *
this; }
562 { *
this |=
sc_logic( v );
return *
this; }
565 { *
this |=
sc_logic( a );
return *
this; }
568 { *
this |=
sc_logic( a );
return *
this; }
571 { *
this |=
sc_logic( a );
return *
this; }
578 { *
this ^=
sc_logic( v );
return *
this; }
581 { *
this ^=
sc_logic( a );
return *
this; }
584 { *
this ^=
sc_logic( a );
return *
this; }
587 { *
this ^=
sc_logic( a );
return *
this; }
605 { this->
m_obj.clean_tail(); }
610 void scan( ::std::istream& is = ::std::cin );
621template <
class T1,
class T2>
623sc_concref<sc_bitref<T1>,sc_bitref<T2> >
626template <
class T1,
class T2>
628sc_concref<sc_bitref<T1>,sc_subref<T2> >
631template <
class T1,
class T2,
class T3>
633sc_concref<sc_bitref<T1>,sc_concref<T2,T3> >
634operator , ( sc_bitref<T1>, sc_concref<T2,T3> );
636template <
class T1,
class T2>
638sc_concref<sc_bitref<T1>,T2>
642template <
class T1,
class T2>
644sc_concref<sc_bitref<T1>,sc_bitref<T2> >
645concat( sc_bitref<T1>, sc_bitref<T2> );
647template <
class T1,
class T2>
649sc_concref<sc_bitref<T1>,sc_subref<T2> >
650concat( sc_bitref<T1>, sc_subref<T2> );
652template <
class T1,
class T2,
class T3>
654sc_concref<sc_bitref<T1>,sc_concref<T2,T3> >
655concat( sc_bitref<T1>, sc_concref<T2,T3> );
657template <
class T1,
class T2>
659sc_concref<sc_bitref<T1>,T2>
660concat( sc_bitref<T1>, sc_proxy<T2>& );
721 {
m_obj.clean_tail(); }
748template <
class T1,
class T2>
753template <
class T1,
class T2>
758template <
class T1,
class T2,
class T3>
763template <
class T1,
class T2>
799template <
class T1,
class T2>
804template <
class T1,
class T2>
809template <
class T1,
class T2,
class T3>
814template <
class T1,
class T2>
850#ifdef SC_DT_MIXED_COMMA_OPERATORS
852template <
class T1,
class T2>
857template <
class T1,
class T2>
862template <
class T1,
class T2>
867template <
class T1,
class T2>
872template <
class T1,
class T2,
class T3>
877template <
class T1,
class T2,
class T3>
882template <
class T1,
class T2>
887template <
class T1,
class T2>
923template <
class T1,
class T2>
928template <
class T1,
class T2>
933template <
class T1,
class T2>
938template <
class T1,
class T2>
943template <
class T1,
class T2,
class T3>
948template <
class T1,
class T2,
class T3>
953template <
class T1,
class T2>
958template <
class T1,
class T2>
1084 void scan( ::std::istream& = ::std::cin );
1095template <
class T1,
class T2>
1097sc_concref<sc_subref<T1>,sc_bitref<T2> >
1100template <
class T1,
class T2>
1102sc_concref<sc_subref<T1>,sc_subref<T2> >
1105template <
class T1,
class T2,
class T3>
1107sc_concref<sc_subref<T1>,sc_concref<T2,T3> >
1108operator , ( sc_subref<T1>, sc_concref<T2,T3> );
1110template <
class T1,
class T2>
1112sc_concref<sc_subref<T1>,T2>
1116template <
class T1,
class T2>
1118sc_concref<sc_subref<T1>,sc_bitref<T2> >
1119concat( sc_subref<T1>, sc_bitref<T2> );
1121template <
class T1,
class T2>
1123sc_concref<sc_subref<T1>,sc_subref<T2> >
1124concat( sc_subref<T1>, sc_subref<T2> );
1126template <
class T1,
class T2,
class T3>
1128sc_concref<sc_subref<T1>,sc_concref<T2,T3> >
1129concat( sc_subref<T1>, sc_concref<T2,T3> );
1131template <
class T1,
class T2>
1133sc_concref<sc_subref<T1>,T2>
1134concat( sc_subref<T1>, sc_proxy<T2>& );
1149template <
class X,
class Y>
1151 :
public sc_proxy<sc_concref_r<X,Y> >
1159 :
m_left( const_cast<X&>( left_ ) ),
m_right( const_cast<Y&>( right_ ) ),
1226template <
class T1,
class T2,
class T3>
1231template <
class T1,
class T2,
class T3>
1236template <
class T1,
class T2,
class T3,
class T4>
1241template <
class T1,
class T2,
class T3>
1246template <
class T1,
class T2>
1251template <
class T1,
class T2>
1256template <
class T1,
class T2>
1261template <
class T1,
class T2>
1266template <
class T1,
class T2>
1271template <
class T1,
class T2>
1277template <
class T1,
class T2,
class T3>
1282template <
class T1,
class T2,
class T3>
1287template <
class T1,
class T2,
class T3,
class T4>
1292template <
class T1,
class T2,
class T3>
1297template <
class T1,
class T2>
1302template <
class T1,
class T2>
1307template <
class T1,
class T2>
1312template <
class T1,
class T2>
1317template <
class T1,
class T2>
1322template <
class T1,
class T2>
1328#ifdef SC_DT_MIXED_COMMA_OPERATORS
1330template <
class T1,
class T2,
class T3>
1335template <
class T1,
class T2,
class T3>
1340template <
class T1,
class T2,
class T3>
1345template <
class T1,
class T2,
class T3>
1350template <
class T1,
class T2,
class T3,
class T4>
1355template <
class T1,
class T2,
class T3,
class T4>
1360template <
class T1,
class T2,
class T3>
1365template <
class T1,
class T2,
class T3>
1370template <
class T1,
class T2>
1375template <
class T1,
class T2>
1380template <
class T1,
class T2>
1385template <
class T1,
class T2>
1390template <
class T1,
class T2>
1395template <
class T1,
class T2>
1401template <
class T1,
class T2,
class T3>
1406template <
class T1,
class T2,
class T3>
1411template <
class T1,
class T2,
class T3>
1416template <
class T1,
class T2,
class T3>
1421template <
class T1,
class T2,
class T3,
class T4>
1426template <
class T1,
class T2,
class T3,
class T4>
1431template <
class T1,
class T2,
class T3>
1436template <
class T1,
class T2,
class T3>
1441template <
class T1,
class T2>
1446template <
class T1,
class T2>
1451template <
class T1,
class T2>
1456template <
class T1,
class T2>
1461template <
class T1,
class T2>
1466template <
class T1,
class T2>
1480template <
class X,
class Y>
1562 void scan( ::std::istream& = ::std::cin );
1573template <
class T1,
class T2,
class T3>
1575sc_concref<sc_concref<T1,T2>,sc_bitref<T3> >
1576operator , ( sc_concref<T1,T2>, sc_bitref<T3> );
1578template <
class T1,
class T2,
class T3>
1580sc_concref<sc_concref<T1,T2>,sc_subref<T3> >
1581operator , ( sc_concref<T1,T2>, sc_subref<T3> );
1583template <
class T1,
class T2,
class T3,
class T4>
1585sc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >
1586operator , ( sc_concref<T1,T2>, sc_concref<T3,T4> );
1588template <
class T1,
class T2,
class T3>
1590sc_concref<sc_concref<T1,T2>,T3>
1591operator , ( sc_concref<T1,T2>, sc_proxy<T3>& );
1594template <
class T1,
class T2,
class T3>
1596sc_concref<sc_concref<T1,T2>,sc_bitref<T3> >
1597concat( sc_concref<T1,T2>, sc_bitref<T3> );
1599template <
class T1,
class T2,
class T3>
1601sc_concref<sc_concref<T1,T2>,sc_subref<T3> >
1602concat( sc_concref<T1,T2>, sc_subref<T3> );
1604template <
class T1,
class T2,
class T3,
class T4>
1606sc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >
1607concat( sc_concref<T1,T2>, sc_concref<T3,T4> );
1609template <
class T1,
class T2,
class T3>
1611sc_concref<sc_concref<T1,T2>,T3>
1612concat( sc_concref<T1,T2>, sc_proxy<T3>& );
1615template <
class T1,
class T2>
1630template <
class T1,
class T2>
1635template <
class T1,
class T2>
1640template <
class T1,
class T2,
class T3>
1645template <
class T1,
class T2>
1681template <
class T1,
class T2>
1686template <
class T1,
class T2>
1691template <
class T1,
class T2,
class T3>
1696template <
class T1,
class T2>
1732#ifdef SC_DT_MIXED_COMMA_OPERATORS
1734template <
class T1,
class T2>
1739template <
class T1,
class T2>
1744template <
class T1,
class T2>
1749template <
class T1,
class T2>
1754template <
class T1,
class T2,
class T3>
1759template <
class T1,
class T2,
class T3>
1764template <
class T1,
class T2>
1769template <
class T1,
class T2>
1805template <
class T1,
class T2>
1810template <
class T1,
class T2>
1815template <
class T1,
class T2>
1820template <
class T1,
class T2>
1825template <
class T1,
class T2,
class T3>
1830template <
class T1,
class T2,
class T3>
1835template <
class T1,
class T2>
1840template <
class T1,
class T2>
1880template <
class T1,
class T2>
1885template <
class T1,
class T2>
1890template <
class T1,
class T2,
class T3>
1895template <
class T1,
class T2>
1901template <
class T1,
class T2>
1906template <
class T1,
class T2>
1911template <
class T1,
class T2,
class T3>
1916template <
class T1,
class T2>
1934template <
class T1,
class T2>
1945template <
class T1,
class T2>
1956template <
class T1,
class T2>
1967template <
class T1,
class T2>
1975template <
class T1,
class T2>
1992 return m_obj.get_bit( m_index );
2029template <
class T1,
class T2>
2035 *a.
clone(), *
b.clone(), 3 );
2038template <
class T1,
class T2>
2040sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
2044 *a.
clone(), *
b.clone(), 3 );
2047template <
class T1,
class T2,
class T3>
2049sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
2053 *a.
clone(), *
b.clone(), 3 );
2056template <
class T1,
class T2>
2058sc_concref_r<sc_bitref_r<T1>,T2>
2062 *a.
clone(),
b.back_cast(), 1 );
2066template <
class T1,
class T2>
2068sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
2072 *a.
clone(), *
b.clone(), 3 );
2075template <
class T1,
class T2>
2077sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
2081 *a.
clone(), *
b.clone(), 3 );
2084template <
class T1,
class T2,
class T3>
2086sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
2090 *a.
clone(), *
b.clone(), 3 );
2093template <
class T1,
class T2>
2095sc_concref_r<sc_bitref_r<T1>,T2>
2099 *a.
clone(),
b.back_cast(), 1 );
2103#ifdef SC_DT_MIXED_COMMA_OPERATORS
2105template <
class T1,
class T2>
2107sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
2111 *a.
clone(), *
b.clone(), 3 );
2114template <
class T1,
class T2>
2116sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
2120 *a.
clone(), *
b.clone(), 3 );
2123template <
class T1,
class T2>
2125sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
2129 *a.
clone(), *
b.clone(), 3 );
2132template <
class T1,
class T2>
2134sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
2138 *a.
clone(), *
b.clone(), 3 );
2141template <
class T1,
class T2,
class T3>
2143sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
2147 *a.
clone(), *
b.clone(), 3 );
2150template <
class T1,
class T2,
class T3>
2152sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
2156 *a.
clone(), *
b.clone(), 3 );
2159template <
class T1,
class T2>
2161sc_concref_r<sc_bitref_r<T1>,T2>
2165 *a.
clone(),
b.back_cast(), 1 );
2168template <
class T1,
class T2>
2170sc_concref_r<sc_bitref_r<T1>,T2>
2174 *a.
clone(),
b.back_cast(), 1 );
2178template <
class T1,
class T2>
2180sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
2184 *a.
clone(), *
b.clone(), 3 );
2187template <
class T1,
class T2>
2189sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
2193 *a.
clone(), *
b.clone(), 3 );
2196template <
class T1,
class T2>
2198sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
2202 *a.
clone(), *
b.clone(), 3 );
2205template <
class T1,
class T2>
2207sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
2211 *a.
clone(), *
b.clone(), 3 );
2214template <
class T1,
class T2,
class T3>
2216sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
2220 *a.
clone(), *
b.clone(), 3 );
2223template <
class T1,
class T2,
class T3>
2225sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
2229 *a.
clone(), *
b.clone(), 3 );
2232template <
class T1,
class T2>
2234sc_concref_r<sc_bitref_r<T1>,T2>
2238 *a.
clone(),
b.back_cast(), 1 );
2241template <
class T1,
class T2>
2243sc_concref_r<sc_bitref_r<T1>,T2>
2247 *a.
clone(),
b.back_cast(), 1 );
2266 this->m_obj.set_bit( this->m_index, a.
value() );
2276 this->m_obj.set_bit( this->m_index, a.
value() );
2290 this->m_obj.set_bit( this->m_index,
2301 this->m_obj.set_bit( this->m_index,
2313 this->m_obj.set_bit( this->m_index,
2324 this->m_obj.set_bit( this->m_index,
2336 this->m_obj.set_bit( this->m_index,
2347 this->m_obj.set_bit( this->m_index,
2362 this->m_obj.set_bit( this->m_index,
2376 this->m_obj.set_bit( this->m_index,
value );
2387 unsigned int bi = this->m_index % (8*
sizeof(
sc_digit));
2389 unsigned int wi = this->m_index / (8*
sizeof(
sc_digit));
2391 temp = this->m_obj.get_word(wi);
2392 temp = (temp & ~(1 << bi)) | ((w&1) << bi);
2393 this->m_obj.set_word(wi, temp);
2405 unsigned int bi = this->m_index % (8*
sizeof(
sc_digit));
2407 unsigned int wi = this->m_index / (8*
sizeof(
sc_digit));
2409 temp = this->m_obj.get_cword(wi);
2410 temp = (temp & ~(1 << bi)) | ((w&1) << bi);
2411 this->m_obj.set_cword(wi, temp);
2432template <
class T1,
class T2>
2438 *a.
clone(), *
b.clone(), 3 );
2441template <
class T1,
class T2>
2443sc_concref<sc_bitref<T1>,sc_subref<T2> >
2447 *a.
clone(), *
b.clone(), 3 );
2450template <
class T1,
class T2,
class T3>
2452sc_concref<sc_bitref<T1>,sc_concref<T2,T3> >
2456 *a.
clone(), *
b.clone(), 3 );
2459template <
class T1,
class T2>
2461sc_concref<sc_bitref<T1>,T2>
2465 *a.
clone(),
b.back_cast(), 1 );
2469template <
class T1,
class T2>
2471sc_concref<sc_bitref<T1>,sc_bitref<T2> >
2475 *a.
clone(), *
b.clone(), 3 );
2478template <
class T1,
class T2>
2480sc_concref<sc_bitref<T1>,sc_subref<T2> >
2484 *a.
clone(), *
b.clone(), 3 );
2487template <
class T1,
class T2,
class T3>
2489sc_concref<sc_bitref<T1>,sc_concref<T2,T3> >
2493 *a.
clone(), *
b.clone(), 3 );
2496template <
class T1,
class T2>
2498sc_concref<sc_bitref<T1>,T2>
2502 *a.
clone(),
b.back_cast(), 1 );
2525sc_subref_r<X>::check_bounds()
2527 int len = m_obj.length();
2528 if( m_hi < 0 || m_hi >= len || m_lo < 0 || m_lo >= len ) {
2533 m_len = m_lo - m_hi + 1;
2535 m_len = m_hi - m_lo + 1;
2548 return m_obj.get_bit( m_lo - n );
2550 return m_obj.get_bit( m_lo + n );
2560 m_obj.set_bit( m_lo - n,
value );
2562 m_obj.set_bit( m_lo + n,
value );
2579 for(
int n = n1; n > n2; n -- ) {
2585 for(
int n = n1; n < n2; n ++ ) {
2603 for(
int n = n1; n > n2; n -- ) {
2611 for(
int n = n1; n < n2; n ++ ) {
2632 for(
int n = n1; n > n2; n -- ) {
2633 result |= ((m_obj[n].value() &
SC_DIGIT_TWO) >> 1) << k ++;
2638 for(
int n = n1; n < n2; n ++ ) {
2639 result |= ((m_obj[n].value() &
SC_DIGIT_TWO) >> 1) << k ++;
2656 for(
int n = n1; n > n2; n -- ) {
2664 for(
int n = n1; n < n2; n ++ ) {
2681 for(
int i = 0; i < sz; ++ i ) {
2692template <
class T1,
class T2>
2698 *a.
clone(), *
b.clone(), 3 );
2701template <
class T1,
class T2>
2703sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
2707 *a.
clone(), *
b.clone(), 3 );
2710template <
class T1,
class T2,
class T3>
2712sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
2716 *a.
clone(), *
b.clone(), 3 );
2719template <
class T1,
class T2>
2721sc_concref_r<sc_subref_r<T1>,T2>
2725 *a.
clone(),
b.back_cast(), 1 );
2729template <
class T1,
class T2>
2731sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
2735 *a.
clone(), *
b.clone(), 3 );
2738template <
class T1,
class T2>
2740sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
2744 *a.
clone(), *
b.clone(), 3 );
2747template <
class T1,
class T2,
class T3>
2749sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
2753 *a.
clone(), *
b.clone(), 3 );
2756template <
class T1,
class T2>
2758sc_concref_r<sc_subref_r<T1>,T2>
2762 *a.
clone(),
b.back_cast(), 1 );
2766#ifdef SC_DT_MIXED_COMMA_OPERATORS
2768template <
class T1,
class T2>
2770sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
2774 *a.
clone(), *
b.clone(), 3 );
2777template <
class T1,
class T2>
2779sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
2783 *a.
clone(), *
b.clone(), 3 );
2786template <
class T1,
class T2>
2788sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
2792 *a.
clone(), *
b.clone(), 3 );
2795template <
class T1,
class T2>
2797sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
2801 *a.
clone(), *
b.clone(), 3 );
2804template <
class T1,
class T2,
class T3>
2806sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
2810 *a.
clone(), *
b.clone(), 3 );
2813template <
class T1,
class T2,
class T3>
2815sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
2819 *a.
clone(), *
b.clone(), 3 );
2822template <
class T1,
class T2>
2824sc_concref_r<sc_subref_r<T1>,T2>
2828 *a.
clone(),
b.back_cast(), 1 );
2831template <
class T1,
class T2>
2833sc_concref_r<sc_subref_r<T1>,T2>
2837 *a.
clone(),
b.back_cast(), 1 );
2841template <
class T1,
class T2>
2843sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
2847 *a.
clone(), *
b.clone(), 3 );
2850template <
class T1,
class T2>
2852sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
2856 *a.
clone(), *
b.clone(), 3 );
2859template <
class T1,
class T2>
2861sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
2865 *a.
clone(), *
b.clone(), 3 );
2868template <
class T1,
class T2>
2870sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
2874 *a.
clone(), *
b.clone(), 3 );
2877template <
class T1,
class T2,
class T3>
2879sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
2883 *a.
clone(), *
b.clone(), 3 );
2886template <
class T1,
class T2,
class T3>
2888sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
2892 *a.
clone(), *
b.clone(), 3 );
2895template <
class T1,
class T2>
2897sc_concref_r<sc_subref_r<T1>,T2>
2901 *a.
clone(),
b.back_cast(), 1 );
2904template <
class T1,
class T2>
2906sc_concref_r<sc_subref_r<T1>,T2>
2910 *a.
clone(),
b.back_cast(), 1 );
2943template <
class T1,
class T2>
2949 *a.
clone(), *
b.clone(), 3 );
2952template <
class T1,
class T2>
2954sc_concref<sc_subref<T1>,sc_subref<T2> >
2958 *a.
clone(), *
b.clone(), 3 );
2961template <
class T1,
class T2,
class T3>
2963sc_concref<sc_subref<T1>,sc_concref<T2,T3> >
2967 *a.
clone(), *
b.clone(), 3 );
2970template <
class T1,
class T2>
2972sc_concref<sc_subref<T1>,T2>
2976 *a.
clone(),
b.back_cast(), 1 );
2980template <
class T1,
class T2>
2982sc_concref<sc_subref<T1>,sc_bitref<T2> >
2986 *a.
clone(), *
b.clone(), 3 );
2989template <
class T1,
class T2>
2991sc_concref<sc_subref<T1>,sc_subref<T2> >
2995 *a.
clone(), *
b.clone(), 3 );
2998template <
class T1,
class T2,
class T3>
3000sc_concref<sc_subref<T1>,sc_concref<T2,T3> >
3004 *a.
clone(), *
b.clone(), 3 );
3007template <
class T1,
class T2>
3009sc_concref<sc_subref<T1>,T2>
3013 *a.
clone(),
b.back_cast(), 1 );
3035template <
class X,
class Y>
3039 if( -- m_refs == 0 ) {
3041 if( m_delete == 0 ) {
3044 if( m_delete & 1 ) {
3047 if( m_delete & 2 ) {
3056template <
class X,
class Y>
3061 int r_len = m_right.length();
3064 }
else if( n < r_len + m_left.length() ) {
3065 return value_type(m_left.get_bit( n - r_len ));
3072template <
class X,
class Y>
3077 int r_len = m_right.length();
3079 m_right.set_bit( n,
typename Y::value_type(v) );
3080 }
else if( n < r_len + m_left.length() ) {
3081 m_left.set_bit( n - r_len,
typename X::value_type(v) );
3088template <
class X,
class Y>
3093 if( i < 0 || i >= size() ) {
3098 int r_len = r.length();
3101 return r.get_word( i );
3108 return l.get_word( j );
3113 sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift;
3114 return ( (r.get_word( i ) & rl_mask) | (l.get_word( 0 ) << shift) );
3118 return ( (l.get_word( j - 1 ) >> nshift) | (l.get_word( j ) << shift) );
3120 return (l.get_word( j - 1 ) >> nshift);
3123template <
class X,
class Y>
3128 if( i < 0 || i >= size() ) {
3133 int r_len = r.length();
3149 sc_digit lh_mask = ~SC_DIGIT_ZERO << nshift;
3151 sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift;
3152 r.set_word( i, w & rl_mask );
3153 l.set_word( 0, (l.get_word( 0 ) & lh_mask) | (w >> shift) );
3157 sc_digit ll_mask = ~SC_DIGIT_ZERO >> shift;
3158 l.set_word( j - 1, (l.get_word( j - 1 ) & ll_mask) | (w << nshift) );
3160 l.set_word( j, (l.get_word( j ) & lh_mask) | (w >> shift) );
3164template <
class X,
class Y>
3169 if( i < 0 || i >= size() ) {
3174 int r_len = r.length();
3177 return r.get_cword( i );
3184 return l.get_cword( j );
3189 sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift;
3190 return ( (r.get_cword( i ) & rl_mask) | (l.get_cword( 0 ) << shift) );
3194 return ( (l.get_cword(j - 1) >> nshift) | (l.get_cword(j) << shift) );
3196 return (l.get_cword( j - 1 ) >> nshift);
3199template <
class X,
class Y>
3204 if( i < 0 || i >= size() ) {
3209 int r_len = r.length();
3212 r.set_cword( i, w );
3220 l.set_cword( j, w );
3225 sc_digit lh_mask = ~SC_DIGIT_ZERO << nshift;
3227 sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift;
3228 r.set_cword( i, w & rl_mask );
3229 l.set_cword( 0, (l.get_cword( 0 ) & lh_mask) | (w >> shift) );
3233 sc_digit ll_mask = ~SC_DIGIT_ZERO >> shift;
3234 l.set_cword( j - 1, (l.get_cword( j - 1 ) & ll_mask) | (w << nshift) );
3236 l.set_cword( j, (l.get_cword( j ) & lh_mask) | (w >> shift) );
3242template <
class T1,
class T2,
class T3>
3248 *a.
clone(), *
b.clone(), 3 );
3251template <
class T1,
class T2,
class T3>
3253sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
3257 *a.
clone(), *
b.clone(), 3 );
3260template <
class T1,
class T2,
class T3,
class T4>
3262sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
3266 *a.
clone(), *
b.clone(), 3 );
3269template <
class T1,
class T2,
class T3>
3271sc_concref_r<sc_concref_r<T1,T2>,T3>
3275 *a.
clone(),
b.back_cast(), 1 );
3279template <
class T1,
class T2,
class T3>
3281sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
3285 *a.
clone(), *
b.clone(), 3 );
3288template <
class T1,
class T2,
class T3>
3290sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
3294 *a.
clone(), *
b.clone(), 3 );
3297template <
class T1,
class T2,
class T3,
class T4>
3299sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
3303 *a.
clone(), *
b.clone(), 3 );
3306template <
class T1,
class T2,
class T3>
3308sc_concref_r<sc_concref_r<T1,T2>,T3>
3312 *a.
clone(),
b.back_cast(), 1 );
3316#ifdef SC_DT_MIXED_COMMA_OPERATORS
3318template <
class T1,
class T2,
class T3>
3320sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
3324 *a.
clone(), *
b.clone(), 3 );
3327template <
class T1,
class T2,
class T3>
3329sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
3333 *a.
clone(), *
b.clone(), 3 );
3336template <
class T1,
class T2,
class T3>
3338sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
3342 *a.
clone(), *
b.clone(), 3 );
3345template <
class T1,
class T2,
class T3>
3347sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
3351 *a.
clone(), *
b.clone(), 3 );
3354template <
class T1,
class T2,
class T3,
class T4>
3356sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
3360 *a.
clone(), *
b.clone(), 3 );
3363template <
class T1,
class T2,
class T3,
class T4>
3365sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
3369 *a.
clone(), *
b.clone(), 3 );
3372template <
class T1,
class T2,
class T3>
3374sc_concref_r<sc_concref_r<T1,T2>,T3>
3378 *a.
clone(),
b.back_cast(), 1 );
3381template <
class T1,
class T2,
class T3>
3383sc_concref_r<sc_concref_r<T1,T2>,T3>
3387 *a.
clone(),
b.back_cast(), 1 );
3391template <
class T1,
class T2,
class T3>
3393sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
3397 *a.
clone(), *
b.clone(), 3 );
3400template <
class T1,
class T2,
class T3>
3402sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
3406 *a.
clone(), *
b.clone(), 3 );
3409template <
class T1,
class T2,
class T3>
3411sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
3415 *a.
clone(), *
b.clone(), 3 );
3418template <
class T1,
class T2,
class T3>
3420sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
3424 *a.
clone(), *
b.clone(), 3 );
3427template <
class T1,
class T2,
class T3,
class T4>
3429sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
3433 *a.
clone(), *
b.clone(), 3 );
3436template <
class T1,
class T2,
class T3,
class T4>
3438sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
3442 *a.
clone(), *
b.clone(), 3 );
3445template <
class T1,
class T2,
class T3>
3447sc_concref_r<sc_concref_r<T1,T2>,T3>
3451 *a.
clone(),
b.back_cast(), 1 );
3454template <
class T1,
class T2,
class T3>
3456sc_concref_r<sc_concref_r<T1,T2>,T3>
3460 *a.
clone(),
b.back_cast(), 1 );
3474template <
class T1,
class T2>
3487template <
class T1,
class T2,
class T3>
3493 *a.
clone(), *
b.clone(), 3 );
3496template <
class T1,
class T2,
class T3>
3498sc_concref<sc_concref<T1,T2>,sc_subref<T3> >
3502 *a.
clone(), *
b.clone(), 3 );
3505template <
class T1,
class T2,
class T3,
class T4>
3507sc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >
3511 *a.
clone(), *
b.clone(), 3 );
3514template <
class T1,
class T2,
class T3>
3516sc_concref<sc_concref<T1,T2>,T3>
3520 *a.
clone(),
b.back_cast(), 1 );
3524template <
class T1,
class T2,
class T3>
3526sc_concref<sc_concref<T1,T2>,sc_bitref<T3> >
3530 *a.
clone(), *
b.clone(), 3 );
3533template <
class T1,
class T2,
class T3>
3535sc_concref<sc_concref<T1,T2>,sc_subref<T3> >
3539 *a.
clone(), *
b.clone(), 3 );
3542template <
class T1,
class T2,
class T3,
class T4>
3544sc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >
3548 *a.
clone(), *
b.clone(), 3 );
3551template <
class T1,
class T2,
class T3>
3553sc_concref<sc_concref<T1,T2>,T3>
3557 *a.
clone(),
b.back_cast(), 1 );
3561template <
class X,
class Y>
3580template <
class T1,
class T2>
3582sc_concref_r<T1,sc_bitref_r<T2> >
3589template <
class T1,
class T2>
3591sc_concref_r<T1,sc_subref_r<T2> >
3598template <
class T1,
class T2,
class T3>
3600sc_concref_r<T1,sc_concref_r<T2,T3> >
3607template <
class T1,
class T2>
3617template <
class T1,
class T2>
3619sc_concref_r<T1,sc_bitref_r<T2> >
3626template <
class T1,
class T2>
3628sc_concref_r<T1,sc_subref_r<T2> >
3635template <
class T1,
class T2,
class T3>
3637sc_concref_r<T1,sc_concref_r<T2,T3> >
3644template <
class T1,
class T2>
3654#ifdef SC_DT_MIXED_COMMA_OPERATORS
3656template <
class T1,
class T2>
3658sc_concref_r<T1,sc_bitref_r<T2> >
3665template <
class T1,
class T2>
3667sc_concref_r<T1,sc_bitref_r<T2> >
3674template <
class T1,
class T2>
3676sc_concref_r<T1,sc_subref_r<T2> >
3683template <
class T1,
class T2>
3685sc_concref_r<T1,sc_subref_r<T2> >
3692template <
class T1,
class T2,
class T3>
3694sc_concref_r<T1,sc_concref_r<T2,T3> >
3701template <
class T1,
class T2,
class T3>
3703sc_concref_r<T1,sc_concref_r<T2,T3> >
3710template <
class T1,
class T2>
3719template <
class T1,
class T2>
3729template <
class T1,
class T2>
3731sc_concref_r<T1,sc_bitref_r<T2> >
3738template <
class T1,
class T2>
3740sc_concref_r<T1,sc_bitref_r<T2> >
3747template <
class T1,
class T2>
3749sc_concref_r<T1,sc_subref_r<T2> >
3756template <
class T1,
class T2>
3758sc_concref_r<T1,sc_subref_r<T2> >
3765template <
class T1,
class T2,
class T3>
3767sc_concref_r<T1,sc_concref_r<T2,T3> >
3774template <
class T1,
class T2,
class T3>
3776sc_concref_r<T1,sc_concref_r<T2,T3> >
3783template <
class T1,
class T2>
3792template <
class T1,
class T2>
3806template <
class T1,
class T2>
3808sc_concref<T1,sc_bitref<T2> >
3815template <
class T1,
class T2>
3817sc_concref<T1,sc_subref<T2> >
3824template <
class T1,
class T2,
class T3>
3826sc_concref<T1,sc_concref<T2,T3> >
3833template <
class T1,
class T2>
3843template <
class T1,
class T2>
3845sc_concref<T1,sc_bitref<T2> >
3852template <
class T1,
class T2>
3854sc_concref<T1,sc_subref<T2> >
3861template <
class T1,
class T2,
class T3>
3863sc_concref<T1,sc_concref<T2,T3> >
3870template <
class T1,
class T2>
#define SC_REPORT_ERROR(msg_type, msg)
SC_API const char SC_ID_OUT_OF_BOUNDS_[]
const sc_digit SC_DIGIT_ONE
sc_bit operator&(const sc_bit &a, const sc_bit &b)
sc_bit operator^(const sc_bit &a, const sc_bit &b)
const sc_digit SC_DIGIT_ZERO
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 >)
const T sc_max(const T &a, const T &b)
const sc_digit SC_DIGIT_TWO
bool operator!=(const sc_bit &a, const sc_bit &b)
inline::std::istream & operator>>(::std::istream &is, sc_bit &a)
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)
T::traits_type traits_type
sc_bitref_r(const sc_bitref_r< T > &a)
sc_digit get_word(int i) const
traits_type::bit_type bit_type
sc_bitref_r(const T &obj_, int index_)
bit_type operator~() const
sc_bitref_r< T > * clone() const
sc_digit get_cword(int i) const
void print(::std::ostream &os=::std::cout) const
value_type get_bit(int n) const
traits_type::value_type value_type
sc_bitref(const sc_bitref< X > &a)
sc_bitref_r< X >::value_type value_type
sc_bitref< X > & operator&=(const sc_bitref_r< X > &a)
void set_bit(int n, value_type value)
sc_bitref< X > & operator^=(const sc_bitref_r< X > &a)
sc_bitref< X > & operator|=(const sc_bitref_r< X > &a)
void set_cword(int i, sc_digit w)
sc_bitref(X &obj_, int index_)
void scan(::std::istream &is=::std::cin)
sc_bitref< X > * clone() const
sc_bitref< X > & operator=(const sc_bitref_r< X > &a)
void set_word(int i, sc_digit w)
void set_bit(int n, value_type value)
sc_subref_r< X > * clone() const
void set_word(int i, sc_digit w)
sc_digit get_word(int i) const
sc_digit get_cword(int i) const
value_type get_bit(int n) const
sc_subref_r(const sc_subref_r< X > &a)
sc_subref_r(const X &obj_, int hi_, int lo_)
void set_cword(int i, sc_digit w)
sc_proxy< sc_subref_r< X > >::value_type value_type
sc_subref< X > & operator=(const sc_proxy< Y > &a)
sc_subref_r< X > base_type
void scan(::std::istream &=::std::cin)
sc_subref< X > * clone() const
sc_subref(const sc_subref< X > &a)
sc_subref(X &obj_, int hi_, int lo_)
value_type get_bit(int n) const
sc_concref_r(const X &left_, const Y &right_, int delete_=0)
void set_cword(int i, sc_digit w)
sc_concref_r(const sc_concref_r< X, Y > &a)
sc_proxy< sc_concref_r< X, Y > >::value_type value_type
sc_concref_r< X, Y > * clone() const
void set_word(int i, sc_digit w)
sc_digit get_cword(int i) const
void set_bit(int n, value_type value)
sc_digit get_word(int i) const
sc_concref< X, Y > * clone() const
sc_concref< X, Y > & operator=(const sc_proxy< Z > &a)
void scan(::std::istream &=::std::cin)
sc_concref(const sc_concref< X, Y > &a)
sc_concref(X &left_, Y &right_, int delete_=0)
sc_concref_r< X, Y > base_type
static const sc_logic_value_t or_table[4][4]
static const sc_logic_value_t xor_table[4][4]
static const sc_logic_value_t and_table[4][4]
static const sc_logic_value_t not_table[4]
sc_logic_value_t value() const
sc_subref_r< X > & assign_(const sc_proxy< Y > &a)