⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sc_uint_base.h

📁 system C源码 一种替代verilog的语言
💻 H
📖 第 1 页 / 共 2 页
字号:
    // prefix and postfix increment and decrement operators    sc_uint_base& operator ++ () // prefix	{ ++ m_val; extend_sign(); return *this; }    const sc_uint_base operator ++ ( int ) // postfix	{ sc_uint_base tmp( *this ); ++ m_val; extend_sign(); return tmp; }    sc_uint_base& operator -- () // prefix	{ -- m_val; extend_sign(); return *this; }    const sc_uint_base operator -- ( int ) // postfix	{ sc_uint_base tmp( *this ); -- m_val; extend_sign(); return tmp; }    // relational operators    friend bool operator == ( const sc_uint_base& a, const sc_uint_base& b )	{ return a.m_val == b.m_val; }    friend bool operator != ( const sc_uint_base& a, const sc_uint_base& b )	{ return a.m_val != b.m_val; }    friend bool operator <  ( const sc_uint_base& a, const sc_uint_base& b )	{ return a.m_val < b.m_val; }    friend bool operator <= ( const sc_uint_base& a, const sc_uint_base& b )	{ return a.m_val <= b.m_val; }    friend bool operator >  ( const sc_uint_base& a, const sc_uint_base& b )	{ return a.m_val > b.m_val; }    friend bool operator >= ( const sc_uint_base& a, const sc_uint_base& b )	{ return a.m_val >= b.m_val; }    // bit selection    sc_uint_bitref&         operator [] ( int i );    const sc_uint_bitref_r& operator [] ( int i ) const;    sc_uint_bitref&         bit( int i );    const sc_uint_bitref_r& bit( int i ) const;    // part selection    sc_uint_subref&         operator () ( int left, int right );    const sc_uint_subref_r& operator () ( int left, int right ) const;    sc_uint_subref&         range( int left, int right );    const sc_uint_subref_r& range( int left, int right ) const;    // bit access, without bounds checking or sign extension    bool test( int i ) const	{ return ( 0 != (m_val & (UINT_ONE << i)) ); }    void set( int i )	{ m_val |= (UINT_ONE << i); }    void set( int i, bool v )	{ v ? m_val |= (UINT_ONE << i) : m_val &= ~(UINT_ONE << i); }    // capacity    int length() const	{ return m_len; }#ifdef SC_DT_DEPRECATED    int bitwidth() const	{ return length(); }#endif    // concatenation support    virtual int concat_length(bool* xz_present_p) const	{ if ( xz_present_p ) *xz_present_p = false; return length(); }    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;    virtual uint64 concat_get_uint64() const        { return m_val; }    virtual void concat_set(int64 src, int low_i);    virtual void concat_set(const sc_signed& src, int low_i);    virtual void concat_set(const sc_unsigned& src, int low_i);    virtual void concat_set(uint64 src, int low_i);    // reduce methods    bool and_reduce() const;    bool nand_reduce() const	{ return ( ! and_reduce() ); }    bool or_reduce() const;    bool nor_reduce() const	{ return ( ! or_reduce() ); }    bool xor_reduce() const;    bool xnor_reduce() const	{ return ( ! xor_reduce() ); }    // implicit conversion to uint_type    operator uint_type() const	{ return m_val; }    // explicit conversions    uint_type value() const	{ return operator uint_type(); }    int to_int() const	{ return (int) m_val; }    unsigned int to_uint() const	{ return (unsigned int) m_val; }    long to_long() const	{ return (long) m_val; }    unsigned long to_ulong() const	{ return (unsigned long) m_val; }    int64 to_int64() const	{ return (int64) m_val; }    uint64 to_uint64() const	{ return (uint64) m_val; }    double to_double() const        { return uint64_to_double( m_val ); }#ifndef _32BIT_    long long_low() const	{ return (long) (m_val & UINT64_32ONES); }    long long_high() const	{ return (long) ((m_val >> 32) & UINT64_32ONES); }#endif    // explicit conversion to character string    const std::string to_string( sc_numrep numrep = SC_DEC ) const;    const std::string to_string( sc_numrep numrep, bool w_prefix ) const;    // other methods    void print( ::std::ostream& os = ::std::cout ) const	{ os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); }    void scan( ::std::istream& is = ::std::cin );protected:    uint_type m_val;   // value    int       m_len;   // length    int       m_ulen;  // unused length};inline::std::ostream&operator << ( ::std::ostream&, const sc_uint_base& );inline::std::istream&operator >> ( ::std::istream&, sc_uint_base& );// ----------------------------------------------------------------------------//  CLASS : sc_uint_bitref_r////  Proxy class for sc_uint bit selection (r-value only).// ----------------------------------------------------------------------------// implicit conversion to boolinlinesc_uint_bitref_r::operator uint64 () const{    return m_obj_p->test( m_index );}inlineboolsc_uint_bitref_r::operator ! () const{    return ! m_obj_p->test( m_index );}inlineboolsc_uint_bitref_r::operator ~ () const{    return ! m_obj_p->test( m_index );}inline::std::ostream&operator << ( ::std::ostream& os, const sc_uint_bitref_r& a ){    a.print( os );    return os;}// ----------------------------------------------------------------------------//  CLASS : sc_uint_bitref////  Proxy class for sc_uint bit selection (r-value and l-value).// ----------------------------------------------------------------------------// assignment operatorsinlinesc_uint_bitref&sc_uint_bitref::operator = ( const sc_uint_bitref_r& b ){    m_obj_p->set( m_index, b.to_bool() );    return *this;}inlinesc_uint_bitref&sc_uint_bitref::operator = ( const sc_uint_bitref& b ){    m_obj_p->set( m_index, b.to_bool() );    return *this;}inlinesc_uint_bitref&sc_uint_bitref::operator = ( bool b ){    m_obj_p->set( m_index, b );    return *this;}inlinesc_uint_bitref&sc_uint_bitref::operator &= ( bool b ){    if( ! b ) {	m_obj_p->set( m_index, b );    }    return *this;}inlinesc_uint_bitref&sc_uint_bitref::operator |= ( bool b ){    if( b ) {	m_obj_p->set( m_index, b );    }    return *this;}inlinesc_uint_bitref&sc_uint_bitref::operator ^= ( bool b ){    if( b ) {	m_obj_p->m_val ^= (UINT_ONE << m_index);    }    return *this;}inline::std::istream&operator >> ( ::std::istream& is, sc_uint_bitref& a ){    a.scan( is );    return is;}// ----------------------------------------------------------------------------//  CLASS : sc_uint_subref_r////  Proxy class for sc_uint part selection (r-value only).// ----------------------------------------------------------------------------// implicit conversion to uint_typeinlinesc_uint_subref_r::operator uint_type() const{    uint_type val = m_obj_p->m_val;    int uleft = SC_INTWIDTH - (m_left + 1);    return ( (val & (~UINT_ZERO >> uleft)) >> m_right );}// reduce methodsinlineboolsc_uint_subref_r::and_reduce() const{    sc_uint_base a( *this );    return a.and_reduce();}inlineboolsc_uint_subref_r::or_reduce() const{    sc_uint_base a( *this );    return a.or_reduce();}inlineboolsc_uint_subref_r::xor_reduce() const{    sc_uint_base a( *this );    return a.xor_reduce();}// explicit conversionsinlineintsc_uint_subref_r::to_int() const{    sc_uint_base a( *this );    return a.to_int();}inlineunsigned intsc_uint_subref_r::to_uint() const{    sc_uint_base a( *this );    return a.to_uint();}inlinelongsc_uint_subref_r::to_long() const{    sc_uint_base a( *this );    return a.to_long();}inlineunsigned longsc_uint_subref_r::to_ulong() const{    sc_uint_base a( *this );    return a.to_ulong();}inlineint64sc_uint_subref_r::to_int64() const{    sc_uint_base a( *this );    return a.to_int64();}inlineuint64sc_uint_subref_r::to_uint64() const{    sc_uint_base a( *this );    return a.to_uint64();}inlinedoublesc_uint_subref_r::to_double() const{    sc_uint_base a( *this );    return a.to_double();}// explicit conversion to character stringinlineconst std::stringsc_uint_subref_r::to_string( sc_numrep numrep ) const{    sc_uint_base a( *this );    return a.to_string( numrep );}inlineconst std::stringsc_uint_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const{    sc_uint_base a( *this );    return a.to_string( numrep, w_prefix );}// functional notation for the reduce methodsinlinebooland_reduce( const sc_uint_subref_r& a ){    return a.and_reduce();}inlineboolnand_reduce( const sc_uint_subref_r& a ){    return a.nand_reduce();}inlineboolor_reduce( const sc_uint_subref_r& a ){    return a.or_reduce();}inlineboolnor_reduce( const sc_uint_subref_r& a ){    return a.nor_reduce();}inlineboolxor_reduce( const sc_uint_subref_r& a ){    return a.xor_reduce();}inlineboolxnor_reduce( const sc_uint_subref_r& a ){    return a.xnor_reduce();}inline::std::ostream&operator << ( ::std::ostream& os, const sc_uint_subref_r& a ){    a.print( os );    return os;}// ----------------------------------------------------------------------------//  CLASS : sc_uint_subref////  Proxy class for sc_uint part selection (r-value and l-value).// ----------------------------------------------------------------------------// assignment operatorsinlinesc_uint_subref&sc_uint_subref::operator = ( const sc_uint_base& a ){    return operator = ( a.operator uint_type() );}inlinesc_uint_subref&sc_uint_subref::operator = ( const char* a ){    sc_uint_base aa( length() );    return ( *this = aa = a );}inline::std::istream&operator >> ( ::std::istream& is, sc_uint_subref& a ){    a.scan( is );    return is;}// ----------------------------------------------------------------------------//  CLASS : sc_uint_base////  Base class for sc_uint.// ----------------------------------------------------------------------------// bit selectioninlinesc_uint_bitref&sc_uint_base::operator [] ( int i ){    check_index( i );    sc_uint_bitref* result_p = sc_uint_bitref::m_pool.allocate();    result_p->initialize(this, i);    return *result_p;}inlineconst sc_uint_bitref_r&sc_uint_base::operator [] ( int i ) const{    check_index( i );    sc_uint_bitref* result_p = sc_uint_bitref::m_pool.allocate();    result_p->initialize(this, i);    return *result_p;}inlinesc_uint_bitref&sc_uint_base::bit( int i ){    check_index( i );    sc_uint_bitref* result_p = sc_uint_bitref::m_pool.allocate();    result_p->initialize(this, i);    return *result_p;}inlineconst sc_uint_bitref_r&sc_uint_base::bit( int i ) const{    check_index( i );    sc_uint_bitref* result_p = sc_uint_bitref::m_pool.allocate();    result_p->initialize(this, i);    return *result_p;}// part selectioninlinesc_uint_subref&sc_uint_base::operator () ( int left, int right ){    check_range( left, right );    sc_uint_subref* result_p = sc_uint_subref::m_pool.allocate();    result_p->initialize(this, left, right);    return *result_p;}inlineconst sc_uint_subref_r&sc_uint_base::operator () ( int left, int right ) const{    check_range( left, right );    sc_uint_subref* result_p = sc_uint_subref::m_pool.allocate();    result_p->initialize(this, left, right);    return *result_p;}inlinesc_uint_subref&sc_uint_base::range( int left, int right ){    check_range( left, right );    sc_uint_subref* result_p = sc_uint_subref::m_pool.allocate();    result_p->initialize(this, left, right);    return *result_p;}inlineconst sc_uint_subref_r&sc_uint_base::range( int left, int right ) const{    check_range( left, right );    sc_uint_subref* result_p = sc_uint_subref::m_pool.allocate();    result_p->initialize(this, left, right);    return *result_p;}// functional notation for the reduce methodsinlinebooland_reduce( const sc_uint_base& a ){    return a.and_reduce();}inlineboolnand_reduce( const sc_uint_base& a ){    return a.nand_reduce();}inlineboolor_reduce( const sc_uint_base& a ){    return a.or_reduce();}inlineboolnor_reduce( const sc_uint_base& a ){    return a.nor_reduce();}inlineboolxor_reduce( const sc_uint_base& a ){    return a.xor_reduce();}inlineboolxnor_reduce( const sc_uint_base& a ){    return a.xnor_reduce();}inline::std::ostream&operator << ( ::std::ostream& os, const sc_uint_base& a ){    a.print( os );    return os;}inline::std::istream&operator >> ( ::std::istream& is, sc_uint_base& a ){    a.scan( is );    return is;}} // namespace sc_dt#endif// Taf!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -