69 #ifndef __SYSTEMC_EXT_DT_INT_SC_UINT_BASE_HH__ 70 #define __SYSTEMC_EXT_DT_INT_SC_UINT_BASE_HH__ 74 #include "../fx/scfx_ieee.hh" 75 #include "../misc/sc_value_base.hh" 76 #include "../sc_temporary.hh" 86 class sc_uint_bitref_r;
88 class sc_uint_subref_r;
95 class sc_int_subref_r;
96 class sc_signed_subref_r;
97 class sc_unsigned_subref_r;
111 extern template class sc_vpool<sc_dt::sc_uint_bitref>;
112 extern template class sc_vpool<sc_dt::sc_uint_subref>;
122 inline bool operator == (
const sc_uint_base &
a,
const sc_uint_base &
b);
123 inline bool operator != (
const sc_uint_base &
a,
const sc_uint_base &
b);
124 inline bool operator < (
const sc_uint_base &
a,
const sc_uint_base &
b);
125 inline bool operator <= (
const sc_uint_base &
a,
const sc_uint_base &
b);
126 inline bool operator > (
const sc_uint_base &
a,
const sc_uint_base &
b);
127 inline bool operator >= (
const sc_uint_base &
a,
const sc_uint_base &
b);
144 sc_value_base(init), m_index(init.m_index), m_obj_p(init.m_obj_p)
167 *xz_present_p =
false;
176 dst_p[word_i] &= ~bit_mask;
187 dst_p[word_i] |= bit_mask;
190 dst_p[word_i] &= ~bit_mask;
202 bool operator ! ()
const;
254 virtual void concat_set(
int64 src,
int low_i);
255 virtual void concat_set(
const sc_signed &src,
int low_i);
256 virtual void concat_set(
const sc_unsigned &src,
int low_i);
257 virtual void concat_set(
uint64 src,
int low_i);
260 void scan(::std::istream &
is=::std::cin);
283 sc_value_base(init), m_left(init.m_left), m_obj_p(init.m_obj_p),
284 m_right(init.m_right)
304 int length()
const {
return (m_left - m_right + 1); }
311 *xz_present_p =
false;
314 virtual bool concat_get_ctrl(
sc_digit *dst_p,
int low_i)
const;
315 virtual bool concat_get_data(
sc_digit *dst_p,
int low_i)
const;
337 unsigned int to_uint()
const;
338 long to_long()
const;
339 unsigned long to_ulong()
const;
340 int64 to_int64()
const;
342 double to_double()
const;
394 return operator = (a.operator
uint_type());
399 return operator = (a.operator
uint_type());
405 return operator = (a->to_uint64());
409 operator = (
unsigned long a)
419 operator = (
unsigned int a)
434 operator = (
double a)
444 virtual void concat_set(
int64 src,
int low_i);
445 virtual void concat_set(
const sc_signed &src,
int low_i);
446 virtual void concat_set(
const sc_unsigned &src,
int low_i);
447 virtual void concat_set(
uint64 src,
int low_i);
450 void scan(::std::istream &
is=::std::cin);
473 void invalid_length()
const;
474 void invalid_index(
int i)
const;
475 void invalid_range(
int l,
int r)
const;
488 if (i < 0 || i >= m_len) {
496 if (r < 0 || l >= m_len || l < r) {
497 invalid_range( l, r );
501 void check_value()
const;
528 sc_value_base(a), m_val(a.m_val), m_len(a.m_len), m_ulen(a.m_ulen)
539 m_val(a->to_uint64()), m_len(a->
length()),
583 m_val = a->to_uint64();
597 operator = (
unsigned long a)
611 operator = (
unsigned int a)
632 operator = (
double a)
810 *xz_present_p =
false;
813 virtual bool concat_get_ctrl(
sc_digit *dst_p,
int low_i)
const;
814 virtual bool concat_get_data(
sc_digit *dst_p,
int low_i)
const;
816 virtual void concat_set(
int64 src,
int low_i);
817 virtual void concat_set(
const sc_signed &src,
int low_i);
818 virtual void concat_set(
const sc_unsigned &src,
int low_i);
819 virtual void concat_set(
uint64 src,
int low_i);
835 int to_int()
const {
return (
int) m_val; }
836 unsigned int to_uint()
const {
return (
unsigned int)m_val; }
838 unsigned long to_ulong()
const {
return (
unsigned long)m_val; }
857 void scan(::std::istream &
is=::std::cin);
877 inline sc_uint_bitref_r::operator
uint64 ()
const 879 return m_obj_p->test(m_index);
885 return !m_obj_p->test(m_index);
891 return !m_obj_p->test(m_index);
894 inline ::std::ostream &
913 m_obj_p->set(m_index, b.
to_bool());
920 m_obj_p->set(m_index, b.
to_bool());
927 m_obj_p->set(m_index, b);
935 m_obj_p->set(m_index, b);
944 m_obj_p->set(m_index, b);
953 m_obj_p->m_val ^= (
UINT_ONE << m_index);
958 inline ::std::istream &
978 return ((val & (~
UINT_ZERO >> uleft)) >> m_right);
1021 inline unsigned long 1047 inline const std::string
1054 inline const std::string
1093 inline ::std::ostream &
1112 return operator = (a.operator
uint_type());
1119 return (*
this = aa = a);
1122 inline ::std::istream &
1177 check_range(left, right);
1186 check_range(left, right);
1195 check_range(left, right);
1204 check_range(left, right);
1242 inline ::std::ostream &
1249 inline ::std::istream &
1258 #endif // __SYSTEMC_EXT_DT_INT_SC_UINT_BASE_HH__
X & operator^=(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_uint_base(uint_type v, int w)
virtual bool concat_get_ctrl(sc_digit *dst_p, int low_i) const
bool to_bool(const std::string &value, bool &retval)
Turn a string representation of a boolean into a boolean value.
CLASS_TYPE operator~(const CLASS_TYPE &u)
sc_uint_bitref_r(const sc_uint_bitref_r &init)
sc_uint_base(int w=sc_length_param().len())
friend class sc_uint_subref_r
void print(::std::ostream &os=::std::cout) const
friend class sc_uint_bitref_r
sc_uint_base(const sc_uint_base &a)
bool sc_io_show_base(::std::ostream &os)
sc_proxy< X >::value_type xor_reduce(const sc_proxy< X > &a)
X & operator&=(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_signed operator<<(const sc_signed &u, const sc_int_base &v)
sc_uint_bitref & operator|=(bool b)
virtual int concat_length(bool *xz_present_p) const
static const uint64 UINT_ZERO
void print(::std::ostream &os=::std::cout) const
void initialize(const sc_uint_base *obj_p, int index_)
sc_proxy< X >::value_type or_reduce(const sc_proxy< X > &a)
friend class sc_uint_signal
bool operator!=(const sc_signed &u, const sc_int_base &v)
void print(::std::ostream &os=::std::cout) const
void check_range(int l, int r) const
sc_proxy< X >::value_type nand_reduce(const sc_proxy< X > &a)
double uint64_to_double(uint64 a)
sc_uint_subref & range(int left, int right)
void check_length() const
sc_uint_bitref & operator&=(bool b)
unsigned int to_uint() const
sc_uint_subref_r(const sc_uint_subref_r &init)
static const uint64 UINT64_32ONES
bool operator>=(const sc_signed &u, const sc_int_base &v)
void scan(::std::istream &is=::std::cin)
friend class sc_uint_base
friend class sc_uint_bitref
static const uint64 UINT_ONE
friend class sc_uint_subref
bool operator<=(const sc_signed &u, const sc_int_base &v)
virtual ~sc_uint_bitref_r()
sc_uint_base(const sc_generic_base< T > &a)
sc_uint_bitref(const sc_uint_bitref &init)
virtual uint64 concat_get_uint64() const
sc_numrep sc_io_base(::std::ostream &os, sc_numrep def_base)
sc_uint_bitref & bit(int i)
sc_proxy< X >::value_type xnor_reduce(const sc_proxy< X > &a)
friend class sc_uint_base
virtual int concat_length(bool *xz_present_p) const
sc_uint_subref(const sc_uint_subref &init)
sc_proxy< X >::value_type and_reduce(const sc_proxy< X > &a)
static sc_core::sc_vpool< sc_uint_bitref > m_pool
sc_signed operator>>(const sc_signed &u, const sc_int_base &v)
sc_uint_base(const sc_uint_subref_r &a)
void check_index(int i) const
unsigned long to_ulong() const
friend class sc_uint_base
virtual uint64 concat_get_uint64() const
void scan(::std::istream &is=::std::cin)
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
bool operator==(const sc_signed &u, const sc_int_base &v)
const std::string to_string(sc_numrep numrep=SC_DEC) const
const uint_type mask_int[SC_INTWIDTH][SC_INTWIDTH]
const std::string to_string(sc_numrep numrep=SC_DEC) const
bool operator>(const sc_signed &u, const sc_int_base &v)
sc_uint_subref & operator=(uint_type v)
bool operator<(const sc_signed &u, const sc_int_base &v)
sc_uint_bitref & operator=(const sc_uint_bitref_r &b)
virtual int concat_length(bool *xz_present_p) const
sc_uint_bitref & operator^=(bool b)
static sc_core::sc_vpool< sc_uint_subref > m_pool
friend class sc_uint_subref
sc_uint_bitref & operator[](int i)
virtual uint64 concat_get_uint64() const
sc_proxy< X >::value_type nor_reduce(const sc_proxy< X > &a)
virtual bool concat_get_data(sc_digit *dst_p, int low_i) const
void scan(::std::istream &is=::std::cin)
sc_uint_subref & operator()(int left, int right)
friend class sc_uint_base
void initialize(const sc_uint_base *obj_p, int left_i, int right_i)
const FlagsType init
This Stat is Initialized.
const std::string to_string(sc_enc enc)
unsigned long to_ulong() const
unsigned int to_uint() const
virtual ~sc_uint_subref_r()