86class sc_uint_bitref_r;
88class sc_uint_subref_r;
96class sc_signed_subref_r;
97class sc_unsigned_subref_r;
127 friend class sc_uint_signal;
134 sc_value_base(init), m_index(init.m_index), m_obj_p(init.m_obj_p)
159 {
if ( xz_present_p ) *xz_present_p =
false;
return 1; }
165 dst_p[word_i] &= ~bit_mask;
176 dst_p[word_i] |= bit_mask;
181 dst_p[word_i] &= ~bit_mask;
187 {
return operator uint64(); }
194#ifdef SC_DT_DEPRECATED
203 bool operator ! ()
const;
210 {
return operator uint64 (); }
213 {
return operator uint64 (); }
218 void print( ::std::ostream& os = ::std::cout )
const
282 void scan( ::std::istream& is = ::std::cin );
309 sc_value_base(init), m_left(init.m_left), m_obj_p(init.m_obj_p),
310 m_right(init.m_right)
336 {
return ( m_left - m_right + 1 ); }
338#ifdef SC_DT_DEPRECATED
346 {
if ( xz_present_p ) *xz_present_p =
false;
return length(); }
383 unsigned int to_uint()
const;
384 long to_long()
const;
385 unsigned long to_ulong()
const;
386 int64 to_int64()
const;
388 double to_double()
const;
399 void print( ::std::ostream& os = ::std::cout )
const
453 {
return operator = ( a.operator
uint_type() ); }
456 {
return operator = ( a.operator
uint_type() ); }
460 {
return operator = ( a->to_uint64() ); }
496 void scan( ::std::istream& is = ::std::cin );
523 void invalid_length()
const;
524 void invalid_index(
int i )
const;
525 void invalid_range(
int l,
int r )
const;
527 void check_length()
const
528 {
if( m_len <= 0 || m_len >
SC_INTWIDTH ) { invalid_length(); } }
530 void check_index(
int i )
const
531 {
if( i < 0 || i >= m_len ) { invalid_index( i ); } }
533 void check_range(
int l,
int r )
const
534 {
if( r < 0 || l >= m_len || l < r ) { invalid_range( l, r ); } }
536 void check_value()
const;
543 m_val &= ( ~UINT_ZERO >> m_ulen );
551 : m_val( 0 ), m_len( w ), m_ulen(
SC_INTWIDTH - m_len )
555 : m_val( v ), m_len( w ), m_ulen(
SC_INTWIDTH - m_len )
556 { check_length(); extend_sign(); }
559 :
sc_value_base(a), m_val(a.m_val), m_len(a.m_len), m_ulen(a.m_ulen)
563 : m_val( a ), m_len( a.length() ),
569 : m_val( a->to_uint64() ), m_len( a->length() ),
571 { check_length(); extend_sign(); }
591 { m_val = v; extend_sign();
return *
this; }
594 { m_val = a.
m_val; extend_sign();
return *
this; }
597 { m_val = a; extend_sign();
return *
this; }
601 { m_val = a->to_uint64(); extend_sign();
return *
this; }
622 { m_val = a; extend_sign();
return *
this; }
625 { m_val = a; extend_sign();
return *
this; }
628 { m_val = a; extend_sign();
return *
this; }
631 { m_val = a; extend_sign();
return *
this; }
634 { m_val = a; extend_sign();
return *
this; }
637 { m_val = (
uint_type) a; extend_sign();
return *
this; }
643 { m_val += v; extend_sign();
return *
this; }
646 { m_val -= v; extend_sign();
return *
this; }
649 { m_val *= v; extend_sign();
return *
this; }
652 { m_val /= v; extend_sign();
return *
this; }
655 { m_val %= v; extend_sign();
return *
this; }
661 { m_val &= v; extend_sign();
return *
this; }
664 { m_val |= v; extend_sign();
return *
this; }
667 { m_val ^= v; extend_sign();
return *
this; }
671 { m_val <<= v; extend_sign();
return *
this; }
674 { m_val >>= v;
return *
this; }
680 { ++ m_val; extend_sign();
return *
this; }
683 {
sc_uint_base tmp( *
this ); ++ m_val; extend_sign();
return tmp; }
686 { -- m_val; extend_sign();
return *
this; }
689 {
sc_uint_base tmp( *
this ); -- m_val; extend_sign();
return tmp; }
746 {
return ( 0 != (m_val & (
UINT_ONE << i)) ); }
760#ifdef SC_DT_DEPRECATED
768 {
if ( xz_present_p ) *xz_present_p =
false;
return length(); }
810 {
return (
int) m_val; }
813 {
return (
unsigned int) m_val; }
816 {
return (
long) m_val; }
819 {
return (
unsigned long) m_val; }
822 {
return (
int64) m_val; }
825 {
return (
uint64) m_val; }
845 void print( ::std::ostream& os = ::std::cout )
const
848 void scan( ::std::istream& is = ::std::cin );
878sc_uint_bitref_r::operator
uint64 ()
const
880 return m_obj_p->test( m_index );
995 return ( (val & (~
UINT_ZERO >> uleft)) >> m_right );
1179 return ( *
this = aa = a );
1249 check_range( left, right );
1259 check_range( left, right );
1270 check_range( left, right );
1280 check_range( left, right );
#define SC_DIGIT_INDEX(BIT_INDEX)
#define SC_BIT_INDEX(BIT)
bool operator>=(const sc_int_base &a, const sc_int_base &b)
sc_numrep sc_io_base(systemc_ostream &stream_object, sc_numrep def_base)
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
bool sc_io_show_base(systemc_ostream &stream_object)
double uint64_to_double(uint64 a)
sc_proxy< X >::value_type or_reduce(const sc_proxy< X > &a)
sc_proxy< X >::value_type xor_reduce(const sc_proxy< X > &a)
constexpr uint64 UINT_ONE
X & operator^=(sc_proxy< X > &px, const sc_proxy< Y > &py)
constexpr uint64 UINT64_32ONES
unsigned long long uint64
bool operator==(const sc_bit &a, const sc_bit &b)
bool operator<(const sc_int_base &a, const sc_int_base &b)
sc_proxy< X >::value_type nor_reduce(const sc_proxy< X > &a)
SC_API std::string to_string(sc_enc)
bool operator<=(const sc_int_base &a, const sc_int_base &b)
constexpr uint64 UINT_ZERO
X & operator&=(sc_proxy< X > &px, const sc_proxy< Y > &py)
bool operator!=(const sc_bit &a, const sc_bit &b)
inline::std::istream & operator>>(::std::istream &is, sc_bit &a)
sc_proxy< X >::value_type and_reduce(const sc_proxy< X > &a)
SC_API const uint_type mask_int[SC_INTWIDTH][SC_INTWIDTH]
bool operator>(const sc_int_base &a, const sc_int_base &b)
inline::std::ostream & operator<<(::std::ostream &os, const sc_bit &a)
uint64 const sc_uint_base int b
sc_proxy< X >::value_type xnor_reduce(const sc_proxy< X > &a)
sc_proxy< X >::value_type nand_reduce(const sc_proxy< X > &a)
sc_bit operator~(const sc_bit &a)
void print(::std::ostream &os=::std::cout) const
virtual uint64 concat_get_uint64() const
virtual int concat_length(bool *xz_present_p) const
void initialize(const sc_uint_base *obj_p, int index_)
virtual bool concat_get_ctrl(sc_digit *dst_p, int low_i) const
virtual bool concat_get_data(sc_digit *dst_p, int low_i) const
sc_uint_bitref_r(const sc_uint_bitref_r &init)
virtual ~sc_uint_bitref_r()
sc_uint_bitref & operator&=(bool b)
virtual void concat_set(const sc_unsigned &src, int low_i)
sc_uint_bitref(const sc_uint_bitref &init)
sc_uint_bitref & operator=(const sc_uint_bitref_r &b)
virtual void concat_set(int64 src, int low_i)
sc_uint_bitref & operator|=(bool b)
virtual void concat_set(uint64 src, int low_i)
void scan(::std::istream &is=::std::cin)
sc_uint_bitref & operator^=(bool b)
virtual void concat_set(const sc_signed &src, int low_i)
virtual bool concat_get_ctrl(sc_digit *dst_p, int low_i) const
virtual int concat_length(bool *xz_present_p) const
void initialize(const sc_uint_base *obj_p, int left_i, int right_i)
virtual bool concat_get_data(sc_digit *dst_p, int low_i) const
sc_uint_subref_r(const sc_uint_subref_r &init)
const std::string to_string(sc_numrep numrep=SC_DEC) const
virtual uint64 concat_get_uint64() const
unsigned long to_ulong() const
unsigned int to_uint() const
void print(::std::ostream &os=::std::cout) const
virtual ~sc_uint_subref_r()
sc_uint_subref & operator=(uint_type v)
virtual void concat_set(const sc_unsigned &src, int low_i)
void scan(::std::istream &is=::std::cin)
virtual void concat_set(uint64 src, int low_i)
virtual void concat_set(const sc_signed &src, int low_i)
virtual void concat_set(int64 src, int low_i)
sc_uint_subref(const sc_uint_subref &init)
virtual void concat_set(int64 src, int low_i)
sc_uint_base(const sc_uint_subref_r &a)
sc_uint_base(uint_type v, int w)
sc_uint_base(const sc_generic_base< T > &a)
sc_uint_bitref & operator[](int i)
sc_uint_subref & range(int left, int right)
unsigned long to_ulong() const
sc_uint_base(int w=sc_length_param().len())
void scan(::std::istream &is=::std::cin)
sc_uint_base(const sc_bv_base &v)
sc_uint_base(const sc_unsigned_subref_r &v)
virtual void concat_set(const sc_unsigned &src, int low_i)
void print(::std::ostream &os=::std::cout) const
sc_uint_subref * temporary_subref() const
sc_uint_bitref * temporary_bitref() const
sc_uint_base(const sc_signed &a)
virtual int concat_length(bool *xz_present_p) const
const std::string to_string(sc_numrep numrep, bool w_prefix) const
sc_uint_base(const sc_int_subref_r &v)
sc_uint_base(const sc_lv_base &v)
virtual bool concat_get_ctrl(sc_digit *dst_p, int low_i) const
sc_uint_subref & operator()(int left, int right)
sc_uint_base(const sc_unsigned &a)
virtual void concat_set(uint64 src, int low_i)
unsigned int to_uint() const
sc_uint_bitref & bit(int i)
virtual void concat_set(const sc_signed &src, int low_i)
const std::string to_string(sc_numrep numrep=SC_DEC) const
sc_uint_base(const sc_signed_subref_r &v)
virtual bool concat_get_data(sc_digit *dst_p, int low_i) const
virtual uint64 concat_get_uint64() const
sc_uint_base(const sc_uint_base &a)