29 #ifndef __SYSTEMC_EXT_DT_BIT_SC_BIT_PROXIES_HH__ 30 #define __SYSTEMC_EXT_DT_BIT_SC_BIT_PROXIES_HH__ 34 #include "../../utils/messages.hh" 41 template <
class X,
class Traits>
51 template <
class X,
class Y>
53 template <
class X,
class Y>
61 template <
class T,
class Traits=
typename T::traits_type>
69 #if __cplusplus >= 201103L // explicit operator needs C++11 71 explicit operator bool()
const 105 m_obj(const_cast<T &>(obj_)), m_index(index_)
125 operator bit_type()
const {
return bit_type(m_obj.get_bit(m_index)); }
128 value_type
value()
const {
return m_obj.get_bit(m_index); }
137 value_type get_bit(
int n)
const;
143 void print(::std::ostream &
os=::std::cout)
const {
os << to_char(); }
158 template <
class T1,
class T2>
164 template <
class T1,
class T2>
169 template <
class T1,
class T2>
174 template <
class T1,
class T2>
177 template <
class T1,
class T2>
181 template <
class T1,
class T2>
185 template <
class T1,
class T2>
189 template <
class T1,
class T2,
class T3>
193 template <
class T1,
class T2>
222 template <
class T1,
class T2>
226 template <
class T1,
class T2>
230 template <
class T1,
class T2,
class T3>
234 template <
class T1,
class T2>
263 template <
class T1,
class T2>
267 template <
class T1,
class T2>
271 template <
class T1,
class T2>
275 template <
class T1,
class T2>
279 template <
class T1,
class T2,
class T3>
283 template <
class T1,
class T2,
class T3>
287 template <
class T1,
class T2>
291 template <
class T1,
class T2>
320 template <
class T1,
class T2>
324 template <
class T1,
class T2>
328 template <
class T1,
class T2>
332 template <
class T1,
class T2>
336 template <
class T1,
class T2,
class T3>
340 template <
class T1,
class T2,
class T3>
344 template <
class T1,
class T2>
348 template <
class T1,
class T2>
545 void set_bit(
int n, value_type value);
553 void scan(::std::istream &
is=::std::cin);
563 template <
class T1,
class T2>
567 template <
class T1,
class T2>
571 template <
class T1,
class T2,
class T3>
575 template <
class T1,
class T2>
580 template <
class T1,
class T2>
584 template <
class T1,
class T2>
588 template <
class T1,
class T2,
class T3>
592 template <
class T1,
class T2>
616 m_obj(const_cast<
X &>(obj_)), m_hi(hi_), m_lo(lo_), m_len(0)
621 m_obj(a.m_obj), m_hi(a.m_hi), m_lo(a.m_lo), m_len(a.m_len)
632 value_type get_bit(
int n)
const;
633 void set_bit(
int n, value_type value);
662 template <
class T1,
class T2>
666 template <
class T1,
class T2>
670 template <
class T1,
class T2,
class T3>
674 template <
class T1,
class T2>
703 template <
class T1,
class T2>
707 template <
class T1,
class T2>
711 template <
class T1,
class T2,
class T3>
715 template <
class T1,
class T2>
742 template <
class T1,
class T2>
746 template <
class T1,
class T2>
750 template <
class T1,
class T2>
754 template <
class T1,
class T2>
758 template <
class T1,
class T2,
class T3>
762 template <
class T1,
class T2,
class T3>
766 template <
class T1,
class T2>
770 template <
class T1,
class T2>
799 template <
class T1,
class T2>
803 template <
class T1,
class T2>
807 template <
class T1,
class T2>
811 template <
class T1,
class T2>
815 template <
class T1,
class T2,
class T3>
819 template <
class T1,
class T2,
class T3>
823 template <
class T1,
class T2>
827 template <
class T1,
class T2>
881 base_type::assign_(a);
889 operator = (
const char *a)
891 base_type::assign_(a);
896 operator = (
const bool *a)
898 base_type::assign_(a);
905 base_type::assign_(a);
912 base_type::assign_(a);
919 base_type::assign_(a);
926 base_type::assign_(a);
933 base_type::assign_(a);
938 operator = (
unsigned long a)
940 base_type::assign_(a);
947 base_type::assign_(a);
952 operator = (
unsigned int a)
954 base_type::assign_(a);
961 base_type::assign_(a);
968 base_type::assign_(a);
975 base_type::assign_(a);
980 void scan(::std::istream & =::std::cin);
990 template <
class T1,
class T2>
994 template <
class T1,
class T2>
998 template <
class T1,
class T2,
class T3>
1002 template <
class T1,
class T2>
1007 template <
class T1,
class T2>
1011 template <
class T1,
class T2>
1015 template <
class T1,
class T2,
class T3>
1019 template <
class T1,
class T2>
1033 template <
class X,
class Y>
1041 m_left(const_cast<
X &>(left_)), m_right(const_cast<Y &>(right_)),
1042 m_delete(delete_), m_refs(*new int(1))
1047 m_left(a.m_left), m_right(a.m_right),
1048 m_delete(a.m_delete), m_refs(a.m_refs)
1058 int length()
const {
return (m_left.length() + m_right.length()); }
1062 value_type get_bit(
int n)
const;
1063 void set_bit(
int n, value_type value);
1074 bool is_01()
const {
return (m_left.is_01() && m_right.is_01()); }
1091 template <
class T1,
class T2,
class T3>
1095 template <
class T1,
class T2,
class T3>
1099 template <
class T1,
class T2,
class T3,
class T4>
1103 template <
class T1,
class T2,
class T3>
1107 template <
class T1,
class T2>
1111 template <
class T1,
class T2>
1115 template <
class T1,
class T2>
1119 template <
class T1,
class T2>
1123 template <
class T1,
class T2>
1127 template <
class T1,
class T2>
1132 template <
class T1,
class T2,
class T3>
1136 template <
class T1,
class T2,
class T3>
1140 template <
class T1,
class T2,
class T3,
class T4>
1144 template <
class T1,
class T2,
class T3>
1148 template <
class T1,
class T2>
1152 template <
class T1,
class T2>
1156 template <
class T1,
class T2>
1160 template <
class T1,
class T2>
1164 template <
class T1,
class T2>
1168 template <
class T1,
class T2>
1173 template <
class T1,
class T2,
class T3>
1177 template <
class T1,
class T2,
class T3>
1181 template <
class T1,
class T2,
class T3>
1185 template <
class T1,
class T2,
class T3>
1189 template <
class T1,
class T2,
class T3,
class T4>
1193 template <
class T1,
class T2,
class T3,
class T4>
1197 template <
class T1,
class T2,
class T3>
1201 template <
class T1,
class T2,
class T3>
1205 template <
class T1,
class T2>
1209 template <
class T1,
class T2>
1213 template <
class T1,
class T2>
1217 template <
class T1,
class T2>
1221 template <
class T1,
class T2>
1225 template <
class T1,
class T2>
1230 template <
class T1,
class T2,
class T3>
1234 template <
class T1,
class T2,
class T3>
1238 template <
class T1,
class T2,
class T3>
1242 template <
class T1,
class T2,
class T3>
1246 template <
class T1,
class T2,
class T3,
class T4>
1250 template <
class T1,
class T2,
class T3,
class T4>
1254 template <
class T1,
class T2,
class T3>
1258 template <
class T1,
class T2,
class T3>
1262 template <
class T1,
class T2>
1266 template <
class T1,
class T2>
1270 template <
class T1,
class T2>
1274 template <
class T1,
class T2>
1278 template <
class T1,
class T2>
1282 template <
class T1,
class T2>
1293 template <
class X,
class Y>
1316 base_type::assign_(a);
1323 base_type::assign_(a);
1328 operator = (
const char *
a)
1330 base_type::assign_(a);
1335 operator = (
const bool *
a)
1337 base_type::assign_(a);
1344 base_type::assign_(a);
1351 base_type::assign_(a);
1358 base_type::assign_(a);
1365 base_type::assign_(a);
1372 base_type::assign_(a);
1377 operator = (
unsigned long a)
1379 base_type::assign_(a);
1386 base_type::assign_(a);
1391 operator = (
unsigned int a)
1393 base_type::assign_(a);
1400 base_type::assign_(a);
1407 base_type::assign_(a);
1414 base_type::assign_(a);
1419 void scan(::std::istream & =::std::cin);
1429 template <
class T1,
class T2,
class T3>
1433 template <
class T1,
class T2,
class T3>
1437 template <
class T1,
class T2,
class T3,
class T4>
1441 template <
class T1,
class T2,
class T3>
1446 template <
class T1,
class T2,
class T3>
1450 template <
class T1,
class T2,
class T3>
1454 template <
class T1,
class T2,
class T3,
class T4>
1458 template <
class T1,
class T2,
class T3>
1463 template <
class T1,
class T2>
1476 template <
class T1,
class T2>
1480 template <
class T1,
class T2>
1484 template <
class T1,
class T2,
class T3>
1488 template <
class T1,
class T2>
1515 template <
class T1,
class T2>
1519 template <
class T1,
class T2>
1523 template <
class T1,
class T2,
class T3>
1527 template <
class T1,
class T2>
1551 template <
class T1,
class T2>
1555 template <
class T1,
class T2>
1559 template <
class T1,
class T2>
1563 template <
class T1,
class T2>
1567 template <
class T1,
class T2,
class T3>
1571 template <
class T1,
class T2,
class T3>
1575 template <
class T1,
class T2>
1578 template <
class T1,
class T2>
1602 template <
class T1,
class T2>
1606 template <
class T1,
class T2>
1610 template <
class T1,
class T2>
1614 template <
class T1,
class T2>
1618 template <
class T1,
class T2,
class T3>
1622 template <
class T1,
class T2,
class T3>
1626 template <
class T1,
class T2>
1629 template <
class T1,
class T2>
1652 template <
class T1,
class T2>
1656 template <
class T1,
class T2>
1660 template <
class T1,
class T2,
class T3>
1664 template <
class T1,
class T2>
1668 template <
class T1,
class T2>
1671 template <
class T1,
class T2>
1674 template <
class T1,
class T2,
class T3>
1678 template <
class T1,
class T2>
1693 template <
class T1,
class T2>
1701 template <
class T1,
class T2>
1709 template <
class T1,
class T2>
1717 template <
class T1,
class T2>
1724 template <
class T1,
class T2>
1737 return m_obj.get_bit(m_index);
1769 template <
class T1,
class T2>
1777 template <
class T1,
class T2>
1785 template <
class T1,
class T2,
class T3>
1793 template <
class T1,
class T2>
1794 inline sc_concref_r<sc_bitref_r<T1>, T2>
1797 return sc_concref_r<sc_bitref_r<T1>, T2>(
1802 template <
class T1,
class T2>
1811 template <
class T1,
class T2>
1819 template <
class T1,
class T2,
class T3>
1827 template <
class T1,
class T2>
1828 inline sc_concref_r<sc_bitref_r<T1>, T2>
1831 return sc_concref_r<sc_bitref_r<T1>, T2>(
1836 template <
class T1,
class T2>
1844 template <
class T1,
class T2>
1852 template <
class T1,
class T2>
1860 template <
class T1,
class T2>
1868 template <
class T1,
class T2,
class T3>
1876 template <
class T1,
class T2,
class T3>
1884 template <
class T1,
class T2>
1885 inline sc_concref_r<sc_bitref_r<T1>, T2>
1888 return sc_concref_r<sc_bitref_r<T1>, T2>(
1892 template <
class T1,
class T2>
1893 inline sc_concref_r<sc_bitref_r<T1>, T2>
1896 return sc_concref_r<sc_bitref_r<T1>, T2>(
1901 template <
class T1,
class T2>
1909 template <
class T1,
class T2>
1917 template <
class T1,
class T2>
1925 template <
class T1,
class T2>
1933 template <
class T1,
class T2,
class T3>
1941 template <
class T1,
class T2,
class T3>
1949 template <
class T1,
class T2>
1950 inline sc_concref_r<sc_bitref_r<T1>, T2>
1953 return sc_concref_r<sc_bitref_r<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
1956 template <
class T1,
class T2>
1957 inline sc_concref_r<sc_bitref_r<T1>, T2>
1960 return sc_concref_r<sc_bitref_r<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
1975 this->m_obj.set_bit(this->m_index, a.
value());
1984 this->m_obj.set_bit(this->m_index, a.
value());
1996 this->m_obj.set_bit(
2006 this->m_obj.set_bit(
2017 this->m_obj.set_bit(
2027 this->m_obj.set_bit(
2038 this->m_obj.set_bit(
2048 this->m_obj.set_bit(
2070 this->m_obj.set_bit(this->m_index, value);
2080 unsigned int bi = this->m_index % (8 *
sizeof(
sc_digit));
2082 unsigned int wi = this->m_index / (8 *
sizeof(
sc_digit));
2084 temp = this->m_obj.get_word(wi);
2085 temp = (temp & ~(1 <<
bi)) | ((w & 1) << bi);
2086 this->m_obj.set_word(wi, temp);
2096 unsigned int bi = this->m_index % (8 *
sizeof(
sc_digit));
2098 unsigned int wi = this->m_index / (8 *
sizeof(
sc_digit));
2100 temp = this->m_obj.get_cword(wi);
2101 temp = (temp & ~(1 <<
bi)) | ((w & 1) << bi);
2102 this->m_obj.set_cword(wi, temp);
2119 template <
class T1,
class T2>
2127 template <
class T1,
class T2>
2135 template <
class T1,
class T2,
class T3>
2143 template <
class T1,
class T2>
2144 inline sc_concref<sc_bitref<T1>, T2>
2147 return sc_concref<sc_bitref<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2151 template <
class T1,
class T2>
2159 template <
class T1,
class T2>
2167 template <
class T1,
class T2,
class T3>
2175 template <
class T1,
class T2>
2176 inline sc_concref<sc_bitref<T1>, T2>
2179 return sc_concref<sc_bitref<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2183 inline ::std::istream &
2201 int len = m_obj.length();
2202 if (m_hi < 0 || m_hi >= len || m_lo < 0 || m_lo >= len) {
2207 m_len = m_lo - m_hi + 1;
2209 m_len = m_hi - m_lo + 1;
2219 return m_obj.get_bit(m_lo - n);
2221 return m_obj.get_bit(m_lo + n);
2230 m_obj.set_bit(m_lo - n, value);
2232 m_obj.set_bit(m_lo + n, value);
2246 n2 =
sc_max(n1 - SC_DIGIT_SIZE, m_hi - 1);
2247 for (
int n = n1;
n > n2;
n--) {
2252 n2 =
sc_min(n1 + SC_DIGIT_SIZE, m_hi + 1);
2253 for (
int n = n1;
n < n2;
n++) {
2269 n2 =
sc_max(n1 - SC_DIGIT_SIZE, m_hi - 1);
2270 for (
int n = n1;
n > n2;
n--) {
2277 n2 =
sc_min(n1 + SC_DIGIT_SIZE, m_hi + 1);
2278 for (
int n = n1;
n < n2;
n++) {
2297 n2 =
sc_max(n1 - SC_DIGIT_SIZE, m_hi - 1);
2298 for (
int n = n1;
n > n2;
n--) {
2303 n2 =
sc_min(n1 + SC_DIGIT_SIZE, m_hi + 1);
2304 for (
int n = n1;
n < n2;
n++) {
2320 n2 =
sc_max(n1 - SC_DIGIT_SIZE, m_hi - 1);
2321 for (
int n = n1;
n > n2;
n--) {
2328 n2 =
sc_min(n1 + SC_DIGIT_SIZE, m_hi + 1);
2329 for (
int n = n1;
n < n2;
n++) {
2343 for (
int i = 0;
i < sz; ++
i) {
2352 template <
class T1,
class T2>
2360 template <
class T1,
class T2>
2368 template <
class T1,
class T2,
class T3>
2376 template <
class T1,
class T2>
2377 inline sc_concref_r<sc_subref_r<T1>, T2>
2380 return sc_concref_r<sc_subref_r<T1>, T2>(
2385 template <
class T1,
class T2>
2393 template <
class T1,
class T2>
2401 template <
class T1,
class T2,
class T3>
2409 template <
class T1,
class T2>
2410 inline sc_concref_r<sc_subref_r<T1>, T2>
2413 return sc_concref_r<sc_subref_r<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2417 template <
class T1,
class T2>
2425 template <
class T1,
class T2>
2433 template <
class T1,
class T2>
2441 template <
class T1,
class T2>
2449 template <
class T1,
class T2,
class T3>
2458 template <
class T1,
class T2,
class T3>
2466 template <
class T1,
class T2>
2467 inline sc_concref_r<sc_subref_r<T1>, T2>
2470 return sc_concref_r<sc_subref_r<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2473 template <
class T1,
class T2>
2474 inline sc_concref_r<sc_subref_r<T1>, T2>
2477 return sc_concref_r<sc_subref_r<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2481 template <
class T1,
class T2>
2489 template <
class T1,
class T2>
2497 template <
class T1,
class T2>
2505 template <
class T1,
class T2>
2513 template <
class T1,
class T2,
class T3>
2521 template <
class T1,
class T2,
class T3>
2529 template <
class T1,
class T2>
2530 inline sc_concref_r<sc_subref_r<T1>, T2>
2533 return sc_concref_r<sc_subref_r<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2536 template <
class T1,
class T2>
2537 inline sc_concref_r<sc_subref_r<T1>, T2>
2540 return sc_concref_r<sc_subref_r<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2565 template <
class T1,
class T2>
2574 template <
class T1,
class T2>
2582 template <
class T1,
class T2,
class T3>
2590 template <
class T1,
class T2>
2591 inline sc_concref<sc_subref<T1>, T2>
2594 return sc_concref<sc_subref<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2598 template <
class T1,
class T2>
2606 template <
class T1,
class T2>
2614 template <
class T1,
class T2,
class T3>
2622 template <
class T1,
class T2>
2623 inline sc_concref<sc_subref<T1>, T2>
2626 return sc_concref<sc_subref<T1>, T2>(*a.
clone(), b.
back_cast(), 1);
2630 inline ::std::istream &
2644 template <
class X,
class Y>
2647 if (--m_refs == 0) {
2649 if (m_delete == 0) {
2662 template <
class X,
class Y>
2666 int r_len = m_right.length();
2669 }
else if (n < r_len + m_left.length()) {
2670 return value_type(m_left.get_bit(n - r_len));
2677 template <
class X,
class Y>
2681 int r_len = m_right.length();
2683 m_right.set_bit(n,
typename Y::value_type(v));
2684 }
else if (n < r_len + m_left.length()) {
2685 m_left.set_bit(n - r_len,
typename X::value_type(v));
2691 template <
class X,
class Y>
2695 if (i < 0 || i >= size()) {
2700 int r_len = r.length();
2703 return r.get_word(i);
2710 return l.get_word(j);
2716 return ((r.get_word(i) & rl_mask) | (l.get_word(0) <<
shift));
2720 return ((l.get_word(j - 1) >> nshift) | (l.get_word(j) <<
shift));
2722 return (l.get_word(j - 1) >> nshift);
2725 template <
class X,
class Y>
2729 if (i < 0 || i >= size()) {
2734 int r_len = r.length();
2753 r.set_word(i, w & rl_mask);
2754 l.set_word(0, (l.get_word(0) & lh_mask) | (w >> shift));
2759 l.set_word(j - 1, (l.get_word(j - 1) & ll_mask) | (w << nshift));
2761 l.set_word(j, (l.get_word(j) & lh_mask) | (w >> shift));
2764 template <
class X,
class Y>
2768 if (i < 0 || i >= size()) {
2773 int r_len = r.length();
2776 return r.get_cword(i);
2783 return l.get_cword(j);
2789 return ((r.get_cword(i) & rl_mask) | (l.get_cword(0) <<
shift));
2793 return ((l.get_cword(j - 1) >> nshift) | (l.get_cword(j) <<
shift));
2795 return (l.get_cword( j - 1 ) >> nshift);
2798 template <
class X,
class Y>
2802 if (i < 0 || i >= size()) {
2807 int r_len = r.length();
2826 r.set_cword(i, w & rl_mask);
2827 l.set_cword(0, (l.get_cword(0) & lh_mask) | (w >> shift));
2832 l.set_cword(j - 1, (l.get_cword(j - 1) & ll_mask) | (w << nshift));
2834 l.set_cword(j, (l.get_cword(j) & lh_mask) | (w >> shift));
2838 template <
class T1,
class T2,
class T3>
2846 template <
class T1,
class T2,
class T3>
2854 template <
class T1,
class T2,
class T3,
class T4>
2862 template <
class T1,
class T2,
class T3>
2863 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
2866 return sc_concref_r<sc_concref_r<T1, T2>, T3>(
2871 template <
class T1,
class T2,
class T3>
2879 template <
class T1,
class T2,
class T3>
2887 template <
class T1,
class T2,
class T3,
class T4>
2895 template <
class T1,
class T2,
class T3>
2896 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
2899 return sc_concref_r<sc_concref_r<T1, T2>, T3>(
2904 template <
class T1,
class T2,
class T3>
2912 template <
class T1,
class T2,
class T3>
2920 template <
class T1,
class T2,
class T3>
2929 template <
class T1,
class T2,
class T3>
2937 template <
class T1,
class T2,
class T3,
class T4>
2945 template <
class T1,
class T2,
class T3,
class T4>
2953 template <
class T1,
class T2,
class T3>
2954 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
2957 return sc_concref_r<sc_concref_r<T1, T2>, T3>(
2961 template <
class T1,
class T2,
class T3>
2962 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
2965 return sc_concref_r<sc_concref_r<T1, T2>, T3>(
2970 template <
class T1,
class T2,
class T3>
2978 template <
class T1,
class T2,
class T3>
2986 template <
class T1,
class T2,
class T3>
2994 template <
class T1,
class T2,
class T3>
3002 template <
class T1,
class T2,
class T3,
class T4>
3010 template <
class T1,
class T2,
class T3,
class T4>
3018 template <
class T1,
class T2,
class T3>
3019 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
3022 return sc_concref_r<sc_concref_r<T1, T2>, T3>(
3026 template <
class T1,
class T2,
class T3>
3027 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
3030 return sc_concref_r<sc_concref_r<T1, T2>, T3>(
3042 template <
class T1,
class T2>
3052 template <
class T1,
class T2,
class T3>
3060 template <
class T1,
class T2,
class T3>
3068 template <
class T1,
class T2,
class T3,
class T4>
3076 template <
class T1,
class T2,
class T3>
3077 inline sc_concref<sc_concref<T1, T2>, T3>
3080 return sc_concref<sc_concref<T1, T2>, T3>(
3085 template <
class T1,
class T2,
class T3>
3093 template <
class T1,
class T2,
class T3>
3101 template <
class T1,
class T2,
class T3,
class T4>
3109 template <
class T1,
class T2,
class T3>
3110 inline sc_concref<sc_concref<T1, T2>, T3>
3113 return sc_concref<sc_concref<T1, T2>, T3>(
3117 template <
class X,
class Y>
3118 inline ::std::istream &
3135 template <
class T1,
class T2>
3143 template <
class T1,
class T2>
3151 template <
class T1,
class T2,
class T3>
3159 template <
class T1,
class T2>
3167 template <
class T1,
class T2>
3174 template <
class T1,
class T2>
3181 template <
class T1,
class T2,
class T3>
3189 template <
class T1,
class T2>
3197 template <
class T1,
class T2>
3204 template <
class T1,
class T2>
3211 template <
class T1,
class T2>
3218 template <
class T1,
class T2>
3225 template <
class T1,
class T2,
class T3>
3233 template <
class T1,
class T2,
class T3>
3241 template <
class T1,
class T2>
3248 template <
class T1,
class T2>
3256 template <
class T1,
class T2>
3263 template <
class T1,
class T2>
3270 template <
class T1,
class T2>
3277 template <
class T1,
class T2>
3284 template <
class T1,
class T2,
class T3>
3292 template <
class T1,
class T2,
class T3>
3300 template <
class T1,
class T2>
3307 template <
class T1,
class T2>
3317 template <
class T1,
class T2>
3324 template <
class T1,
class T2>
3331 template <
class T1,
class T2,
class T3>
3338 template <
class T1,
class T2>
3346 template <
class T1,
class T2>
3353 template <
class T1,
class T2>
3360 template <
class T1,
class T2,
class T3>
3367 template <
class T1,
class T2>
3420 #endif // __SYSTEMC_EXT_DT_BIT_SC_BIT_PROXIES_HH__
static const sc_logic_value_t and_table[4][4]
sc_bitref< X > & operator|=(const sc_bitref_r< X > &a)
sc_bitref< X > * clone() const
X & operator^=(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_subref_r< X > base_type
void scan(::std::istream &is=::std::cin)
CLASS_TYPE operator~(const CLASS_TYPE &u)
sc_digit get_cword(int i) const
static const sc_logic_value_t xor_table[4][4]
X & operator&=(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_bitref< X > & operator&=(const sc_bitref_r< X > &a)
void set_bit(int n, value_type value)
sc_bitref_r(const T &obj_, int index_)
sc_subref< X > * clone() const
sc_digit get_word(int i) const
const T sc_max(const T &a, const T &b)
void set_word(int i, sc_digit w)
sc_concref(X &left_, Y &right_, int delete_=0)
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]
const sc_digit SC_DIGIT_ZERO
sc_bitref< X > & operator=(const sc_bitref_r< X > &a)
void set_word(int i, sc_digit w)
sc_bitref_r< T > * clone() const
sc_bitref(X &obj_, int index_)
bool operator!=(const sc_signed &u, const sc_int_base &v)
const T sc_min(const T &a, const T &b)
sc_bitref_r< X >::value_type value_type
void set_cword(int i, sc_digit w)
static const sc_logic_value_t or_table[4][4]
void set_bit(int n, value_type value)
sc_subref_r< X > * clone() const
sc_digit get_word(int i) const
void scan(::std::istream &=::std::cin)
value_type get_bit(int n) const
sc_logic_value_t value() const
void set_cword(int i, sc_digit w)
const char SC_ID_OUT_OF_BOUNDS_[]
sc_subref(const sc_subref< X > &a)
sc_digit get_cword(int i) const
sc_proxy< sc_concref_r< X, Y > >::value_type value_type
sc_digit get_word(int i) const
sc_bitref_r(const sc_bitref_r< T > &a)
sc_signed operator>>(const sc_signed &u, const sc_int_base &v)
traits_type::bit_type bit_type
void set_cword(int i, sc_digit w)
const sc_digit SC_DIGIT_TWO
sc_concref_r< X, Y > * clone() const
sc_bitref(const sc_bitref< X > &a)
const sc_bit b_not(const sc_bit &a)
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_bitref< X > & operator^=(const sc_bitref_r< X > &a)
const sc_digit SC_DIGIT_ONE
bool operator==(const sc_signed &u, const sc_int_base &v)
sc_subref_r(const sc_subref_r< X > &a)
sc_concref_r(const X &left_, const Y &right_, int delete_=0)
void set_word(int i, sc_digit w)
void print(::std::ostream &os=::std::cout) const
sc_concref< X, Y > * clone() const
traits_type::value_type value_type
value_type get_bit(int n) const
sc_proxy< sc_subref_r< X > >::value_type value_type
#define SC_REPORT_ERROR(msg_type, msg)
sc_concref_r(const sc_concref_r< X, Y > &a)
void scan(::std::istream &=::std::cin)
sc_digit get_cword(int i) const
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > concat(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
sc_concref(const sc_concref< X, Y > &a)
T::traits_type traits_type
sc_signed operator|(const sc_unsigned &u, const sc_int_base &v)
sc_signed operator^(const sc_unsigned &u, const sc_int_base &v)
value_type get_bit(int n) const
sc_subref(X &obj_, int hi_, int lo_)
sc_signed operator&(const sc_unsigned &u, const sc_int_base &v)
sc_subref_r(const X &obj_, int hi_, int lo_)
void set_bit(int n, value_type value)
sc_concref_r< X, Y > base_type