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>
42 class sc_bitref_conv_r;
51 template <
class X,
class Y>
53 template <
class X,
class Y>
61 template <
class T,
class Traits=
typename T::traits_type>
62 class sc_bitref_conv_r { };
69 #if __cplusplus >= 201103L // explicit operator needs C++11
71 explicit operator bool()
const
100 typedef typename traits_type::bit_type
bit_type;
101 typedef typename traits_type::value_type
value_type;
113 sc_bitref_r<T> *
clone()
const {
return new sc_bitref_r<T>(*
this); }
130 bool to_bool()
const {
return sc_logic(
value()).to_bool(); }
131 char to_char()
const {
return sc_logic(
value()).to_char(); }
134 int length()
const {
return 1; }
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>
397 sc_bitref<X> *
clone()
const {
return new sc_bitref<X>(*
this); }
400 sc_bitref<X> &
operator = (
const sc_bitref_r<X> &
a);
406 this->m_obj.set_bit(this->m_index,
a.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>
625 sc_subref_r<X> *
clone()
const {
return new sc_subref_r<X>(*
this); }
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>
874 sc_subref<X> *
clone()
const {
return new sc_subref<X>(*
this); }
881 base_type::assign_(
a);
885 sc_subref<X> &
operator = (
const sc_subref_r<X> &
a);
891 base_type::assign_(
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);
940 base_type::assign_(
a);
947 base_type::assign_(
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>
1040 sc_concref_r(
const X &left_,
const Y &right_,
int delete_=0) :
1041 m_left(const_cast<
X &>(left_)),
m_right(const_cast<Y &>(right_)),
1055 sc_concref_r<X, Y> *
clone()
const {
return new sc_concref_r<X, Y>(*
this); }
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>
1309 sc_concref<X, Y> *
clone()
const {
return new sc_concref<X, Y>(*
this); }
1316 base_type::assign_(
a);
1323 base_type::assign_(
a);
1330 base_type::assign_(
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);
1379 base_type::assign_(
a);
1386 base_type::assign_(
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>
1711 operator ^ (
const sc_bitref_r<T1> &
a,
const sc_bitref_r<T2> &
b)
1717 template <
class T1,
class T2>
1721 return ((
int)
a.value() ==
b.value());
1724 template <
class T1,
class T2>
1726 operator != (
const sc_bitref_r<T1> &
a,
const sc_bitref_r<T2> &
b)
1728 return ((
int)
a.value() !=
b.value());
1737 return m_obj.get_bit(m_index);
1769 template <
class T1,
class T2>
1774 *
a.clone(), *
b.clone(), 3);
1777 template <
class T1,
class T2>
1782 *
a.clone(), *
b.clone(), 3);
1785 template <
class T1,
class T2,
class T3>
1790 *
a.clone(), *
b.clone(), 3);
1793 template <
class T1,
class T2>
1794 inline sc_concref_r<sc_bitref_r<T1>, T2>
1798 *
a.clone(),
b.back_cast(), 1);
1802 template <
class T1,
class T2>
1808 *
a.clone(), *
b.clone(), 3);
1811 template <
class T1,
class T2>
1816 *
a.clone(), *
b.clone(), 3);
1819 template <
class T1,
class T2,
class T3>
1824 *
a.clone(), *
b.clone(), 3);
1827 template <
class T1,
class T2>
1828 inline sc_concref_r<sc_bitref_r<T1>, T2>
1832 *
a.clone(),
b.back_cast(), 1);
1836 template <
class T1,
class T2>
1841 *
a.clone(), *
b.clone(), 3);
1844 template <
class T1,
class T2>
1849 *
a.clone(), *
b.clone(), 3);
1852 template <
class T1,
class T2>
1857 *
a.clone(), *
b.clone(), 3);
1860 template <
class T1,
class T2>
1861 inline sc_concref_r<sc_bitref_r<T1>, sc_subref_r<T2> >
1865 *
a.clone(), *
b.clone(), 3);
1868 template <
class T1,
class T2,
class T3>
1869 inline sc_concref_r<sc_bitref_r<T1>, sc_concref_r<T2, T3> >
1873 *
a.clone(), *
b.clone(), 3);
1876 template <
class T1,
class T2,
class T3>
1877 inline sc_concref_r<sc_bitref_r<T1>, sc_concref_r<T2, T3> >
1881 *
a.clone(), *
b.clone(), 3);
1884 template <
class T1,
class T2>
1885 inline sc_concref_r<sc_bitref_r<T1>, T2>
1889 *
a.clone(),
b.back_cast(), 1);
1892 template <
class T1,
class T2>
1893 inline sc_concref_r<sc_bitref_r<T1>, T2>
1897 *
a.clone(),
b.back_cast(), 1);
1901 template <
class T1,
class T2>
1906 *
a.clone(), *
b.clone(), 3);
1909 template <
class T1,
class T2>
1914 *
a.clone(), *
b.clone(), 3);
1917 template <
class T1,
class T2>
1922 *
a.clone(), *
b.clone(), 3);
1925 template <
class T1,
class T2>
1926 inline sc_concref_r<sc_bitref_r<T1>, sc_subref_r<T2> >
1930 *
a.clone(), *
b.clone(), 3);
1933 template <
class T1,
class T2,
class T3>
1934 inline sc_concref_r<sc_bitref_r<T1>, sc_concref_r<T2, T3> >
1938 *
a.clone(), *
b.clone(), 3);
1941 template <
class T1,
class T2,
class T3>
1942 inline sc_concref_r<sc_bitref_r<T1>, sc_concref_r<T2, T3> >
1946 *
a.clone(), *
b.clone(), 3);
1949 template <
class T1,
class T2>
1950 inline sc_concref_r<sc_bitref_r<T1>, T2>
1956 template <
class T1,
class T2>
1957 inline sc_concref_r<sc_bitref_r<T1>, T2>
1958 concat(sc_bitref_r<T1>
a, sc_proxy<T2> &
b)
1975 this->m_obj.set_bit(this->m_index,
a.value());
1980 inline sc_bitref<X> &
1984 this->m_obj.set_bit(this->m_index,
a.value());
1992 inline sc_bitref<X> &
1996 this->m_obj.set_bit(
2003 inline sc_bitref<X> &
2006 this->m_obj.set_bit(
2017 this->m_obj.set_bit(
2024 inline sc_bitref<X> &
2027 this->m_obj.set_bit(
2038 this->m_obj.set_bit(
2045 inline sc_bitref<X> &
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>
2124 *
a.clone(), *
b.clone(), 3);
2127 template <
class T1,
class T2>
2132 *
a.clone(), *
b.clone(), 3);
2135 template <
class T1,
class T2,
class T3>
2140 *
a.clone(), *
b.clone(), 3);
2143 template <
class T1,
class T2>
2151 template <
class T1,
class T2>
2152 inline sc_concref<sc_bitref<T1>, sc_bitref<T2> >
2156 *
a.clone(), *
b.clone(), 3);
2159 template <
class T1,
class T2>
2160 inline sc_concref<sc_bitref<T1>, sc_subref<T2> >
2164 *
a.clone(), *
b.clone(), 3);
2167 template <
class T1,
class T2,
class T3>
2168 inline sc_concref<sc_bitref<T1>, sc_concref<T2, T3> >
2172 *
a.clone(), *
b.clone(), 3);
2175 template <
class T1,
class T2>
2176 inline sc_concref<sc_bitref<T1>, T2>
2183 inline ::std::istream &
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);
2247 for (
int n = n1;
n > n2;
n--) {
2253 for (
int n = n1;
n < n2;
n++) {
2270 for (
int n = n1;
n > n2;
n--) {
2278 for (
int n = n1;
n < n2;
n++) {
2298 for (
int n = n1;
n > n2;
n--) {
2304 for (
int n = n1;
n < n2;
n++) {
2321 for (
int n = n1;
n > n2;
n--) {
2329 for (
int n = n1;
n < n2;
n++) {
2343 for (
int i = 0;
i < sz; ++
i) {
2352 template <
class T1,
class T2>
2357 *
a.clone(), *
b.clone(), 3);
2360 template <
class T1,
class T2>
2361 inline sc_concref_r<sc_subref_r<T1>, sc_subref_r<T2> >
2365 *
a.clone(), *
b.clone(), 3);
2368 template <
class T1,
class T2,
class T3>
2373 *
a.clone(), *
b.clone(), 3);
2376 template <
class T1,
class T2>
2377 inline sc_concref_r<sc_subref_r<T1>, T2>
2381 *
a.clone(),
b.back_cast(), 1);
2385 template <
class T1,
class T2>
2390 *
a.clone(), *
b.clone(), 3);
2393 template <
class T1,
class T2>
2398 *
a.clone(), *
b.clone(), 3);
2401 template <
class T1,
class T2,
class T3>
2406 *
a.clone(), *
b.clone(), 3);
2409 template <
class T1,
class T2>
2410 inline sc_concref_r<sc_subref_r<T1>, T2>
2417 template <
class T1,
class T2>
2418 inline sc_concref_r<sc_subref_r<T1>, sc_bitref_r<T2> >
2422 *
a.clone(), *
b.clone(), 3);
2425 template <
class T1,
class T2>
2426 inline sc_concref_r<sc_subref_r<T1>, sc_bitref_r<T2> >
2430 *
a.clone(), *
b.clone(), 3);
2433 template <
class T1,
class T2>
2434 inline sc_concref_r<sc_subref_r<T1>, sc_subref_r<T2> >
2438 *
a.clone(), *
b.clone(), 3);
2441 template <
class T1,
class T2>
2442 inline sc_concref_r<sc_subref_r<T1>, sc_subref_r<T2> >
2446 *
a.clone(), *
b.clone(), 3);
2449 template <
class T1,
class T2,
class T3>
2455 *
a.clone(), *
b.clone(), 3);
2458 template <
class T1,
class T2,
class T3>
2463 *
a.clone(), *
b.clone(), 3);
2466 template <
class T1,
class T2>
2473 template <
class T1,
class T2>
2474 inline sc_concref_r<sc_subref_r<T1>, T2>
2481 template <
class T1,
class T2>
2482 inline sc_concref_r<sc_subref_r<T1>, sc_bitref_r<T2> >
2483 concat(sc_subref_r<T1>
a, sc_bitref<T2>
b)
2486 *
a.clone(), *
b.clone(), 3);
2489 template <
class T1,
class T2>
2490 inline sc_concref_r<sc_subref_r<T1>, sc_bitref_r<T2> >
2491 concat(sc_subref<T1>
a, sc_bitref_r<T2>
b)
2494 *
a.clone(), *
b.clone(), 3);
2497 template <
class T1,
class T2>
2498 inline sc_concref_r<sc_subref_r<T1>, sc_subref_r<T2> >
2502 *
a.clone(), *
b.clone(), 3);
2505 template <
class T1,
class T2>
2506 inline sc_concref_r<sc_subref_r<T1>, sc_subref_r<T2> >
2510 *
a.clone(), *
b.clone(), 3);
2513 template <
class T1,
class T2,
class T3>
2514 inline sc_concref_r<sc_subref_r<T1>, sc_concref_r<T2, T3> >
2518 *
a.clone(), *
b.clone(), 3);
2521 template <
class T1,
class T2,
class T3>
2522 inline sc_concref_r<sc_subref_r<T1>, sc_concref_r<T2, T3> >
2526 *
a.clone(), *
b.clone(), 3);
2529 template <
class T1,
class T2>
2530 inline sc_concref_r<sc_subref_r<T1>, T2>
2536 template <
class T1,
class T2>
2537 inline sc_concref_r<sc_subref_r<T1>, T2>
2538 concat(sc_subref_r<T1>
a, sc_proxy<T2> &
b)
2565 template <
class T1,
class T2>
2567 sc_concref<sc_subref<T1>, sc_bitref<T2> >
2570 return sc_concref<sc_subref<T1>, sc_bitref<T2> >(
2571 *
a.clone(), *
b.clone(), 3);
2574 template <
class T1,
class T2>
2575 inline sc_concref<sc_subref<T1>, sc_subref<T2> >
2578 return sc_concref<sc_subref<T1>, sc_subref<T2> >(
2579 *
a.clone(), *
b.clone(), 3);
2582 template <
class T1,
class T2,
class T3>
2587 *
a.clone(), *
b.clone(), 3);
2590 template <
class T1,
class T2>
2598 template <
class T1,
class T2>
2599 inline sc_concref<sc_subref<T1>, sc_bitref<T2> >
2603 *
a.clone(), *
b.clone(), 3);
2606 template <
class T1,
class T2>
2607 inline sc_concref<sc_subref<T1>, sc_subref<T2> >
2611 *
a.clone(), *
b.clone(), 3);
2614 template <
class T1,
class T2,
class T3>
2615 inline sc_concref<sc_subref<T1>, sc_concref<T2, T3> >
2619 *
a.clone(), *
b.clone(), 3);
2622 template <
class T1,
class T2>
2623 inline sc_concref<sc_subref<T1>, T2>
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();
2668 return value_type(m_right.get_bit(
n));
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();
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>
2839 inline sc_concref_r<sc_concref_r<T1, T2>,sc_bitref_r<T3> >
2842 return sc_concref_r<sc_concref_r<T1, T2>,sc_bitref_r<T3> >(
2843 *
a.clone(), *
b.clone(), 3);
2846 template <
class T1,
class T2,
class T3>
2847 inline sc_concref_r<sc_concref_r<T1, T2>, sc_subref_r<T3> >
2850 return sc_concref_r<sc_concref_r<T1, T2>, sc_subref_r<T3> >(
2851 *
a.clone(), *
b.clone(), 3);
2854 template <
class T1,
class T2,
class T3,
class T4>
2855 inline sc_concref_r<sc_concref_r<T1, T2>, sc_concref_r<T3, T4> >
2856 operator , (sc_concref_r<T1, T2>
a, sc_concref_r<T3, T4>
b)
2858 return sc_concref_r<sc_concref_r<T1, T2>,sc_concref_r<T3, T4> >(
2859 *
a.clone(), *
b.clone(), 3);
2862 template <
class T1,
class T2,
class T3>
2863 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
2867 *
a.clone(),
b.back_cast(), 1);
2871 template <
class T1,
class T2,
class T3>
2876 *
a.clone(), *
b.clone(), 3);
2879 template <
class T1,
class T2,
class T3>
2884 *
a.clone(), *
b.clone(), 3);
2887 template <
class T1,
class T2,
class T3,
class T4>
2892 *
a.clone(), *
b.clone(), 3);
2895 template <
class T1,
class T2,
class T3>
2896 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
2900 *
a.clone(),
b.back_cast(), 1);
2904 template <
class T1,
class T2,
class T3>
2909 *
a.clone(), *
b.clone(), 3);
2912 template <
class T1,
class T2,
class T3>
2917 *
a.clone(), *
b.clone(), 3);
2920 template <
class T1,
class T2,
class T3>
2926 *
a.clone(), *
b.clone(), 3);
2929 template <
class T1,
class T2,
class T3>
2934 *
a.clone(), *
b.clone(), 3);
2937 template <
class T1,
class T2,
class T3,
class T4>
2942 *
a.clone(), *
b.clone(), 3);
2945 template <
class T1,
class T2,
class T3,
class T4>
2946 inline sc_concref_r<sc_concref_r<T1, T2>, sc_concref_r<T3, T4> >
2950 *
a.clone(), *
b.clone(), 3);
2953 template <
class T1,
class T2,
class T3>
2954 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
2958 *
a.clone(),
b.back_cast(), 1);
2961 template <
class T1,
class T2,
class T3>
2962 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
2966 *
a.clone(),
b.back_cast(), 1);
2970 template <
class T1,
class T2,
class T3>
2975 *
a.clone(), *
b.clone(), 3);
2978 template <
class T1,
class T2,
class T3>
2983 *
a.clone(), *
b.clone(), 3);
2986 template <
class T1,
class T2,
class T3>
2991 *
a.clone(), *
b.clone(), 3);
2994 template <
class T1,
class T2,
class T3>
2995 inline sc_concref_r<sc_concref_r<T1, T2>, sc_subref_r<T3> >
2999 *
a.clone(), *
b.clone(), 3);
3002 template <
class T1,
class T2,
class T3,
class T4>
3003 inline sc_concref_r<sc_concref_r<T1, T2>, sc_concref_r<T3, T4> >
3007 *
a.clone(), *
b.clone(), 3);
3010 template <
class T1,
class T2,
class T3,
class T4>
3011 inline sc_concref_r<sc_concref_r<T1, T2>, sc_concref_r<T3, T4> >
3015 *
a.clone(), *
b.clone(), 3);
3018 template <
class T1,
class T2,
class T3>
3019 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
3023 *
a.clone(),
b.back_cast(), 1);
3026 template <
class T1,
class T2,
class T3>
3027 inline sc_concref_r<sc_concref_r<T1, T2>, T3>
3031 *
a.clone(),
b.back_cast(), 1);
3042 template <
class T1,
class T2>
3052 template <
class T1,
class T2,
class T3>
3057 *
a.clone(), *
b.clone(), 3);
3060 template <
class T1,
class T2,
class T3>
3061 inline sc_concref<sc_concref<T1, T2>, sc_subref<T3> >
3064 return sc_concref<sc_concref<T1, T2>, sc_subref<T3> >(
3065 *
a.clone(), *
b.clone(), 3);
3068 template <
class T1,
class T2,
class T3,
class T4>
3073 *
a.clone(), *
b.clone(), 3);
3076 template <
class T1,
class T2,
class T3>
3081 *
a.clone(),
b.back_cast(), 1);
3085 template <
class T1,
class T2,
class T3>
3090 *
a.clone(), *
b.clone(), 3);
3093 template <
class T1,
class T2,
class T3>
3098 *
a.clone(), *
b.clone(), 3);
3101 template <
class T1,
class T2,
class T3,
class T4>
3106 *
a.clone(), *
b.clone(), 3);
3109 template <
class T1,
class T2,
class T3>
3110 inline sc_concref<sc_concref<T1, T2>, T3>
3114 *
a.clone(),
b.back_cast(), 1);
3117 template <
class X,
class Y>
3118 inline ::std::istream &
3135 template <
class T1,
class T2>
3140 a.back_cast(), *
b.clone(), 2);
3143 template <
class T1,
class T2>
3148 a.back_cast(), *
b.clone(), 2);
3151 template <
class T1,
class T2,
class T3>
3152 inline sc_concref_r<T1, sc_concref_r<T2, T3> >
3153 operator , (
const sc_proxy<T1> &
a, sc_concref_r<T2, T3>
b)
3155 return sc_concref_r<T1, sc_concref_r<T2, T3> >(
3156 a.back_cast(), *
b.clone(), 2);
3159 template <
class T1,
class T2>
3160 inline sc_concref_r<T1, T2>
3167 template <
class T1,
class T2>
3168 inline sc_concref_r<T1, sc_bitref_r<T2> >
3174 template <
class T1,
class T2>
3175 inline sc_concref_r<T1, sc_subref_r<T2> >
3176 concat(
const sc_proxy<T1> &
a, sc_subref_r<T2>
b)
3181 template <
class T1,
class T2,
class T3>
3182 inline sc_concref_r<T1, sc_concref_r<T2, T3> >
3183 concat(
const sc_proxy<T1> &
a, sc_concref_r<T2, T3>
b )
3186 a.back_cast(), *
b.clone(), 2);
3189 template <
class T1,
class T2>
3190 inline sc_concref_r<T1, T2>
3191 concat(
const sc_proxy<T1> &
a,
const sc_proxy<T2> &
b)
3197 template <
class T1,
class T2>
3198 inline sc_concref_r<T1, sc_bitref_r<T2> >
3204 template <
class T1,
class T2>
3205 inline sc_concref_r<T1, sc_bitref_r<T2> >
3211 template <
class T1,
class T2>
3212 inline sc_concref_r<T1, sc_subref_r<T2> >
3218 template <
class T1,
class T2>
3219 inline sc_concref_r<T1, sc_subref_r<T2> >
3222 return sc_concref_r<T1, sc_subref_r<T2> >(
a.back_cast(), *
b.clone(), 2);
3225 template <
class T1,
class T2,
class T3>
3226 inline sc_concref_r<T1, sc_concref_r<T2, T3> >
3227 operator , (
const sc_proxy<T1> &
a, sc_concref<T2, T3>
b)
3229 return sc_concref_r<T1, sc_concref_r<T2, T3> >(
3230 a.back_cast(), *
b.clone(), 2);
3233 template <
class T1,
class T2,
class T3>
3234 inline sc_concref_r<T1, sc_concref_r<T2, T3> >
3238 a.back_cast(), *
b.clone(), 2);
3241 template <
class T1,
class T2>
3242 inline sc_concref_r<T1, T2>
3248 template <
class T1,
class T2>
3249 inline sc_concref_r<T1, T2>
3256 template <
class T1,
class T2>
3257 inline sc_concref_r<T1, sc_bitref_r<T2> >
3258 concat(
const sc_proxy<T1> &
a, sc_bitref<T2>
b)
3263 template <
class T1,
class T2>
3264 inline sc_concref_r<T1, sc_bitref_r<T2> >
3265 concat(sc_proxy<T1> &
a, sc_bitref_r<T2>
b)
3270 template <
class T1,
class T2>
3271 inline sc_concref_r<T1, sc_subref_r<T2> >
3272 concat(
const sc_proxy<T1> &
a, sc_subref<T2>
b)
3277 template <
class T1,
class T2>
3278 inline sc_concref_r<T1, sc_subref_r<T2> >
3279 concat(sc_proxy<T1> &
a, sc_subref_r<T2>
b)
3281 return sc_concref_r<T1, sc_subref_r<T2> >(
a.back_cast(), *
b.clone(), 2);
3284 template <
class T1,
class T2,
class T3>
3285 inline sc_concref_r<T1, sc_concref_r<T2, T3> >
3286 concat(
const sc_proxy<T1> &
a, sc_concref<T2, T3>
b)
3288 return sc_concref_r<T1, sc_concref_r<T2, T3> >(
3289 a.back_cast(), *
b.clone(), 2);
3292 template <
class T1,
class T2,
class T3>
3293 inline sc_concref_r<T1, sc_concref_r<T2, T3> >
3294 concat(sc_proxy<T1> &
a, sc_concref_r<T2, T3>
b)
3297 a.back_cast(), *
b.clone(), 2);
3300 template <
class T1,
class T2>
3301 inline sc_concref_r<T1, T2>
3302 concat(
const sc_proxy<T1> &
a, sc_proxy<T2> &
b)
3307 template <
class T1,
class T2>
3308 inline sc_concref_r<T1, T2>
3309 concat(sc_proxy<T1> &
a,
const sc_proxy<T2> &
b)
3317 template <
class T1,
class T2>
3324 template <
class T1,
class T2>
3325 inline sc_concref<T1, sc_subref<T2> >
3331 template <
class T1,
class T2,
class T3>
3332 inline sc_concref<T1, sc_concref<T2, T3> >
3338 template <
class T1,
class T2>
3339 inline sc_concref<T1, T2>
3342 return sc_concref<T1, T2>(
a.back_cast(),
b.back_cast());
3346 template <
class T1,
class T2>
3347 inline sc_concref<T1, sc_bitref<T2> >
3348 concat(sc_proxy<T1> &
a, sc_bitref<T2>
b)
3353 template <
class T1,
class T2>
3354 inline sc_concref<T1, sc_subref<T2> >
3355 concat(sc_proxy<T1> &
a, sc_subref<T2>
b)
3360 template <
class T1,
class T2,
class T3>
3361 inline sc_concref<T1, sc_concref<T2, T3> >
3362 concat(sc_proxy<T1> &
a, sc_concref<T2, T3>
b)
3367 template <
class T1,
class T2>
3368 inline sc_concref<T1, T2>
3369 concat(sc_proxy<T1> &
a, sc_proxy<T2> &
b)
3371 return sc_concref<T1, T2>(
a.back_cast(),
b.back_cast());
3420 #endif // __SYSTEMC_EXT_DT_BIT_SC_BIT_PROXIES_HH__