sc_uint_base.h

来自「基于4个mips核的noc设计」· C头文件 代码 · 共 2,628 行 · 第 1/5 页

H
2,628
字号
// ----------------------------------------------------------------------------class sc_uint_bitref_r{    friend class sc_uint_base;protected:    // constructor    sc_uint_bitref_r( const sc_uint_base& obj_, int index_ )        : m_obj( CCAST<sc_uint_base&>( obj_ ) ), m_index( index_ )        {}public:    // copy constructor    sc_uint_bitref_r( const sc_uint_bitref_r& a )        : m_obj( a.m_obj ), m_index( a.m_index )        {}    // cloning    sc_uint_bitref_r* clone() const        { return new sc_uint_bitref_r( *this ); }    // capacity    int length() const	{ return 1; }#ifdef SC_DT_DEPRECATED    int bitwidth() const	{ return length(); }#endif    // implicit conversion to bool    operator bool () const;    bool operator ! () const;    bool operator ~ () const;    // explicit conversions    bool value() const	{ return operator bool (); }    bool to_bool() const	{ return operator bool (); }    // other methods    void print( ostream& os = cout ) const	{ os << to_bool(); }protected:    sc_uint_base& m_obj;    int           m_index;private:    // disabled    sc_uint_bitref_r();    sc_uint_bitref_r& operator = ( const sc_uint_bitref_r& );};// r-value concatenation operators and functionstemplate <class T1, class T2>inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_concref_r<T1,T2> >operator , ( sc_uint_bitref_r, sc_uint_concref_r<T1,T2> );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_bitref_r>operator , ( sc_uint_bitref_r, sc_uint_bitref_r );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_subref_r>operator , ( sc_uint_bitref_r, sc_uint_subref_r );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>operator , ( sc_uint_bitref_r, const sc_uint_base& );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>operator , ( sc_uint_bitref_r, bool );inlinesc_uint_concref_r<sc_uint_base,sc_uint_bitref_r>operator , ( bool, sc_uint_bitref_r );template <class T1, class T2>inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_concref_r<T1,T2> >concat( sc_uint_bitref_r, sc_uint_concref_r<T1,T2> );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_bitref_r>concat( sc_uint_bitref_r, sc_uint_bitref_r );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_subref_r>concat( sc_uint_bitref_r, sc_uint_subref_r );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>concat( sc_uint_bitref_r, const sc_uint_base& );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>concat( sc_uint_bitref_r, bool );inlinesc_uint_concref_r<sc_uint_base,sc_uint_bitref_r>concat( bool, sc_uint_bitref_r );#ifdef SC_DT_MIXED_COMMA_OPERATORStemplate <class T1, class T2>inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_concref_r<T1,T2> >operator , ( sc_uint_bitref_r, sc_uint_concref<T1,T2> );template <class T1, class T2>inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_concref_r<T1,T2> >operator , ( sc_uint_bitref, sc_uint_concref_r<T1,T2> );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_bitref_r>operator , ( sc_uint_bitref_r, sc_uint_bitref );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_bitref_r>operator , ( sc_uint_bitref, sc_uint_bitref_r );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_subref_r>operator , ( sc_uint_bitref_r, sc_uint_subref );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_subref_r>operator , ( sc_uint_bitref, sc_uint_subref_r );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>operator , ( sc_uint_bitref_r, sc_uint_base& );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>operator , ( sc_uint_bitref, const sc_uint_base& );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>operator , ( sc_uint_bitref, bool );inlinesc_uint_concref_r<sc_uint_base,sc_uint_bitref_r>operator , ( bool, sc_uint_bitref );template <class T1, class T2>inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_concref_r<T1,T2> >concat( sc_uint_bitref_r, sc_uint_concref<T1,T2> );template <class T1, class T2>inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_concref_r<T1,T2> >concat( sc_uint_bitref, sc_uint_concref_r<T1,T2> );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_bitref_r>concat( sc_uint_bitref_r, sc_uint_bitref );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_bitref_r>concat( sc_uint_bitref, sc_uint_bitref_r );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_subref_r>concat( sc_uint_bitref_r, sc_uint_subref );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_subref_r>concat( sc_uint_bitref, sc_uint_subref_r );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>concat( sc_uint_bitref_r, sc_uint_base& );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>concat( sc_uint_bitref, const sc_uint_base& );inlinesc_uint_concref_r<sc_uint_bitref_r,sc_uint_base>concat( sc_uint_bitref, bool );inlinesc_uint_concref_r<sc_uint_base,sc_uint_bitref_r>concat( bool, sc_uint_bitref );#endifinlineostream&operator << ( ostream&, const sc_uint_bitref_r& );// ----------------------------------------------------------------------------//  CLASS : sc_uint_bitref////  Proxy class for sc_uint bit selection (r-value and l-value).// ----------------------------------------------------------------------------class sc_uint_bitref    : public sc_uint_bitref_r{    friend class sc_uint_base;    // constructor    sc_uint_bitref( sc_uint_base& obj_, int index_ )	: sc_uint_bitref_r( obj_, index_ )	{}public:    // copy constructor    sc_uint_bitref( const sc_uint_bitref& a )	: sc_uint_bitref_r( a )        {}    // cloning    sc_uint_bitref* clone() const        { return new sc_uint_bitref( *this ); }    // assignment operators    sc_uint_bitref& operator = ( const sc_uint_bitref_r& b );    sc_uint_bitref& operator = ( const sc_uint_bitref& b );    sc_uint_bitref& operator = ( bool b );    sc_uint_bitref& operator &= ( bool b );    sc_uint_bitref& operator |= ( bool b );    sc_uint_bitref& operator ^= ( bool b );    // other methods    void scan( istream& is = cin );private:    // disabled    sc_uint_bitref();};// l-value concatenation operators and functionstemplate <class T1, class T2>inlinesc_uint_concref<sc_uint_bitref,sc_uint_concref<T1,T2> >operator , ( sc_uint_bitref, sc_uint_concref<T1,T2> );inlinesc_uint_concref<sc_uint_bitref,sc_uint_bitref>operator , ( sc_uint_bitref, sc_uint_bitref );inlinesc_uint_concref<sc_uint_bitref,sc_uint_subref>operator , ( sc_uint_bitref, sc_uint_subref );inlinesc_uint_concref<sc_uint_bitref,sc_uint_base>operator , ( sc_uint_bitref, sc_uint_base& );template <class T1, class T2>inlinesc_uint_concref<sc_uint_bitref,sc_uint_concref<T1,T2> >concat( sc_uint_bitref, sc_uint_concref<T1,T2> );inlinesc_uint_concref<sc_uint_bitref,sc_uint_bitref>concat( sc_uint_bitref, sc_uint_bitref );inlinesc_uint_concref<sc_uint_bitref,sc_uint_subref>concat( sc_uint_bitref, sc_uint_subref );inlinesc_uint_concref<sc_uint_bitref,sc_uint_base>concat( sc_uint_bitref, sc_uint_base& );inlineistream&operator >> ( istream&, sc_uint_bitref& );// ----------------------------------------------------------------------------//  CLASS : sc_uint_subref_r////  Proxy class for sc_uint part selection (r-value only).// ----------------------------------------------------------------------------class sc_uint_subref_r{    friend class sc_uint_base;protected:    // constructor    sc_uint_subref_r( const sc_uint_base& obj_, int left_, int right_ )        : m_obj( CCAST<sc_uint_base&>( obj_ ) ),	  m_left( left_ ), m_right( right_ )        {}  public:    // copy constructor    sc_uint_subref_r( const sc_uint_subref_r& a )        : m_obj( a.m_obj ), m_left( a.m_left ), m_right( a.m_right )        {}    // cloning    sc_uint_subref_r* clone() const        { return new sc_uint_subref_r( *this ); }    // capacity    int length() const	{ return ( m_left - m_right + 1 ); }#ifdef SC_DT_DEPRECATED    int bitwidth() const	{ return length(); }#endif    // 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;    // explicit conversions    uint_type value() const	{ return operator uint_type(); }    int           to_int() const;    unsigned int  to_uint() const;    long          to_long() const;    unsigned long to_ulong() const;    int64         to_int64() const;    uint64        to_uint64() const;    double        to_double() const;    // explicit conversion to character string    const sc_string to_string( sc_numrep numrep = SC_DEC ) const;    const sc_string to_string( sc_numrep numrep, bool w_prefix ) const;    // other methods    void print( ostream& os = cout ) const	{ os << to_string(); }protected:    sc_uint_base& m_obj;    int           m_left;    int           m_right;private:    // disabled    sc_uint_subref_r();    sc_uint_subref_r& operator = ( const sc_uint_subref_r& );};// r-value concatenation operators and functionstemplate <class T1, class T2>inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_concref_r<T1,T2> >operator , ( sc_uint_subref_r, sc_uint_concref_r<T1,T2> );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_bitref_r>operator , ( sc_uint_subref_r, sc_uint_bitref_r );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_subref_r>operator , ( sc_uint_subref_r, sc_uint_subref_r );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_base>operator , ( sc_uint_subref_r, const sc_uint_base& );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_base>operator , ( sc_uint_subref_r, bool );inlinesc_uint_concref_r<sc_uint_base,sc_uint_subref_r>operator , ( bool, sc_uint_subref_r );template <class T1, class T2>inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_concref_r<T1,T2> >concat( sc_uint_subref_r, sc_uint_concref_r<T1,T2> );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_bitref_r>concat( sc_uint_subref_r, sc_uint_bitref_r );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_subref_r>concat( sc_uint_subref_r, sc_uint_subref_r );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_base>concat( sc_uint_subref_r, const sc_uint_base& );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_base>concat( sc_uint_subref_r, bool );inlinesc_uint_concref_r<sc_uint_base,sc_uint_subref_r>concat( bool, sc_uint_subref_r );#ifdef SC_DT_MIXED_COMMA_OPERATORStemplate <class T1, class T2>inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_concref_r<T1,T2> >operator , ( sc_uint_subref_r, sc_uint_concref<T1,T2> );template <class T1, class T2>inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_concref_r<T1,T2> >operator , ( sc_uint_subref, sc_uint_concref_r<T1,T2> );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_bitref_r>operator , ( sc_uint_subref_r, sc_uint_bitref );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_bitref_r>operator , ( sc_uint_subref, sc_uint_bitref_r );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_subref_r>operator , ( sc_uint_subref_r, sc_uint_subref );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_subref_r>operator , ( sc_uint_subref, sc_uint_subref_r );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_base>operator , ( sc_uint_subref_r, sc_uint_base& );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_base>operator , ( sc_uint_subref, const sc_uint_base& );inlinesc_uint_concref_r<sc_uint_subref_r,sc_uint_base>operator , ( sc_uint_subref, bool );inlinesc_uint_concref_r<sc_uint_base,sc_uint_subref_r>operator , ( bool, sc_uint_subref );

⌨️ 快捷键说明

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