75 #ifndef SC_CONCATREF_H
76 #define SC_CONCATREF_H
114 m_len_r = right.concat_length(&right_xz);
128 m_len_r = right.concat_length(&right_xz);
144 #ifdef SC_DT_DEPRECATED
160 m_left_p->concat_clear_data(to_ones);
166 bool rnz =
m_right_p->concat_get_ctrl( dst_p, low_i );
173 bool rnz =
m_right_p->concat_get_data( dst_p, low_i );
231 result = result & ~(mask <<
m_len);
242 result_p->nbits = result_p->num_bits(
m_len);
243 result_p->ndigits =
DIV_CEIL(result_p->nbits);
245 sizeof(
sc_digit)*result_p->ndigits );
246 #if defined(_MSC_VER)
248 memset( result_p->digit, 0,
sizeof(
sc_digit)*result_p->ndigits );
250 result_p->digit[result_p->ndigits-1] = 0;
252 right_non_zero =
m_right_p->concat_get_data( result_p->digit, 0 );
254 if ( left_non_zero || right_non_zero )
277 { target =
value(); }
280 { target =
value(); }
428 void print( ::std::ostream& os = ::std::cout )
const
429 { os << this->
value(); }
431 void scan( ::std::istream& is )
515 return target.
value() << (int)shift;
520 return target.
value() << (int)shift;
526 return target.
value() << (int)shift;
532 return target.
value() << shift;
538 return target.
value() << (int)shift;
543 return target.
value() << (int)shift;
548 return target.
value() >> (int)shift;
553 return target.
value() >> (int)shift;
559 return target.
value() >> (int)shift;
565 return target.
value() >> shift;
571 return target.
value() >> (int)shift;
576 return target.
value() >> (int)shift;
586 return os << v.
value();
638 if ( xz_present_p ) *xz_present_p =
false;
646 dst_p[word_i] &= ~bit;
655 dst_p[word_i] |= bit;
657 dst_p[word_i] &= ~bit;
672 #define SC_CONCAT_OP_TYPE(RESULT,OP,OTHER_TYPE) \
673 inline RESULT operator OP ( const sc_concatref& a, OTHER_TYPE b ) \
675 return a.value() OP b; \
677 inline RESULT operator OP ( OTHER_TYPE a, const sc_concatref& b ) \
679 return a OP b.value(); \
683 #define SC_CONCAT_OP(RESULT,OP) \
684 inline RESULT operator OP ( const sc_concatref& a, const sc_concatref& b ) \
686 return a.value() OP b.value(); \
688 SC_CONCAT_OP_TYPE(const sc_signed,OP,int) \
689 SC_CONCAT_OP_TYPE(const sc_signed,OP,long) \
690 SC_CONCAT_OP_TYPE(const sc_signed,OP,int64) \
691 SC_CONCAT_OP_TYPE(RESULT,OP,unsigned int) \
692 SC_CONCAT_OP_TYPE(RESULT,OP,unsigned long) \
693 SC_CONCAT_OP_TYPE(RESULT,OP,uint64) \
694 SC_CONCAT_OP_TYPE(const sc_signed,OP,const sc_int_base&) \
695 SC_CONCAT_OP_TYPE(RESULT,OP,const sc_uint_base&) \
696 SC_CONCAT_OP_TYPE(const sc_signed,OP,const sc_signed&) \
697 SC_CONCAT_OP_TYPE(RESULT,OP,const sc_unsigned&) \
698 inline RESULT operator OP ( const sc_concatref& a, bool b ) \
700 return a.value() OP (int)b; \
702 inline RESULT operator OP ( bool a, const sc_concatref& b ) \
704 return (int)a OP b.value(); \
707 #define SC_CONCAT_BOOL_OP(OP) \
708 inline bool operator OP ( const sc_concatref& a, const sc_concatref& b ) \
710 return a.value() OP b.value(); \
712 SC_CONCAT_OP_TYPE(bool,OP,int) \
713 SC_CONCAT_OP_TYPE(bool,OP,long) \
714 SC_CONCAT_OP_TYPE(bool,OP,int64) \
715 SC_CONCAT_OP_TYPE(bool,OP,unsigned int) \
716 SC_CONCAT_OP_TYPE(bool,OP,unsigned long) \
717 SC_CONCAT_OP_TYPE(bool,OP,uint64) \
718 SC_CONCAT_OP_TYPE(bool,OP,const sc_int_base&) \
719 SC_CONCAT_OP_TYPE(bool,OP,const sc_uint_base&) \
720 SC_CONCAT_OP_TYPE(bool,OP,const sc_signed&) \
721 SC_CONCAT_OP_TYPE(bool,OP,const sc_unsigned&) \
722 inline bool operator OP ( const sc_concatref& a, bool b ) \
724 return a.value() OP (int)b; \
726 inline bool operator OP ( bool a, const sc_concatref& b ) \
728 return (int)a OP b.value(); \
747 #undef SC_CONCAT_OP_TYPE
852 #endif // SC_CONCATREF_H
virtual uint64 concat_get_uint64() const
sc_value_base * m_right_p
virtual bool concat_get_ctrl(sc_digit *dst_p, int low_i) const
virtual void concat_set(const sc_unsigned &src, int low_i)
virtual bool concat_get_data(sc_digit *dst_p, int low_i) const
virtual uint64 concat_get_uint64() const
virtual bool concat_get_data(sc_digit *dst_p, int low_i) const
#define SC_CONCAT_BOOL_OP(OP)
sc_logic_value_t nand_reduce(const sc_proxy< X > &a)
virtual void concat_set(const sc_signed &src, int low_i)
sc_unsigned operator+() const
sc_logic_value_t xor_reduce(const sc_proxy< X > &a)
void scan(::std::istream &is)
uint64 const sc_uint_base int b
#define SC_CONCAT_OP(RESULT, OP)
sc_unsigned operator~() const
void initialize(sc_value_base &left, sc_value_base &right)
void print(::std::ostream &os=::std::cout) const
virtual int concat_length(bool *xz_present_p) const
sc_logic_value_t nor_reduce(const sc_proxy< X > &a)
const sc_unsigned & value() const
const std::string to_string(sc_numrep numrep=SC_DEC) const
inline::std::istream & operator>>(::std::istream &is, sc_bit &a)
void initialize(const sc_value_base &left, const sc_value_base &right)
static sc_core::sc_vpool< sc_concatref > m_pool
sc_logic_value_t or_reduce(const sc_proxy< X > &a)
static sc_core::sc_vpool< sc_unsigned > m_pool
void to_sc_signed(sc_signed &target) const
const std::string to_string(sc_numrep numrep=SC_DEC) const
const sc_concatref & operator=(int v)
virtual bool concat_get_ctrl(sc_digit *dst_p, int low_i) const
static sc_concat_bool * allocate(bool v)
sc_signed operator-() const
virtual void concat_clear_data(bool to_ones)
void scan(::std::istream &is=::std::cin)
unsigned int to_uint() const
sc_byte_heap sc_temp_heap
unsigned int length() const
virtual int concat_length(bool *xz_present_p) const
static sc_core::sc_vpool< sc_concat_bool > m_pool
sc_logic_value_t xnor_reduce(const sc_proxy< X > &a)
inline::std::ostream & operator<<(::std::ostream &os, const sc_bit &a)
sc_logic_value_t and_reduce(const sc_proxy< X > &a)
virtual void concat_set(int64 src, int low_i)
const std::string to_string(sc_numrep numrep, bool w_prefix) const
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > concat(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
virtual ~sc_concat_bool()
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > operator,(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
unsigned long to_ulong() const
void to_sc_unsigned(sc_unsigned &target) const
virtual void concat_set(uint64 src, int low_i)