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

📄 sc_bit_proxies.h

📁 system C源码 一种替代verilog的语言
💻 H
📖 第 1 页 / 共 5 页
字号:
template <class X, class Y>class sc_concref_r    : public sc_proxy<sc_concref_r<X,Y> >{public:    // constructor    sc_concref_r( const X& left_, const Y& right_, int delete_ = 0 )	: m_left( CCAST<X&>( left_ ) ), m_right( CCAST<Y&>( right_ ) ),	  m_delete( delete_ ), m_refs( *new int( 1 ) )	{}    // copy constructor    sc_concref_r( const sc_concref_r<X,Y>& a )	: m_left( a.m_left ), m_right( a.m_right ),	  m_delete( a.m_delete ), m_refs( a.m_refs )	{ ++ m_refs; }    // destructor    virtual ~sc_concref_r();    // cloning    sc_concref_r<X,Y>* clone() const	{ return new sc_concref_r<X,Y>( *this ); }    // common methods    int length() const	{ return ( m_left.length() + m_right.length() ); }    int size() const	{ return ( (length() - 1) / SC_DIGIT_SIZE + 1 ); }    sc_logic_value_t get_bit( int n ) const;    void set_bit( int n, sc_logic_value_t value );    sc_digit get_word( int i ) const;    void set_word( int i, sc_digit w );    sc_digit get_cword( int i ) const;    void set_cword( int i, sc_digit w );    void clean_tail()	{ m_left.clean_tail(); m_right.clean_tail(); }    // other methods    bool is_01() const	{ return ( m_left.is_01() && m_right.is_01() ); }protected:    mutable X&   m_left;    mutable Y&   m_right;    mutable int  m_delete;    mutable int& m_refs;private:    // disabled    sc_concref_r();    sc_concref_r<X,Y>& operator = ( const sc_concref_r<X,Y>& );};// r-value concatenation operators and functionstemplate <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >operator , ( sc_concref_r<T1,T2>, sc_bitref_r<T3> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >operator , ( sc_concref_r<T1,T2>, sc_subref_r<T3> );template <class T1, class T2, class T3, class T4>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >operator , ( sc_concref_r<T1,T2>, sc_concref_r<T3,T4> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,T3>operator , ( sc_concref_r<T1,T2>, const sc_proxy<T3>& );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>operator , ( sc_concref_r<T1,T2>, const char* );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >operator , ( const char*, sc_concref_r<T1,T2> );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>operator , ( sc_concref_r<T1,T2>, const sc_logic& );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >operator , ( const sc_logic&, sc_concref_r<T1,T2> );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>operator , ( sc_concref_r<T1,T2>, bool );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >operator , ( bool, sc_concref_r<T1,T2> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >concat( sc_concref_r<T1,T2>, sc_bitref_r<T3> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >concat( sc_concref_r<T1,T2>, sc_subref_r<T3> );template <class T1, class T2, class T3, class T4>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >concat( sc_concref_r<T1,T2>, sc_concref_r<T3,T4> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,T3>concat( sc_concref_r<T1,T2>, const sc_proxy<T3>& );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>concat( sc_concref_r<T1,T2>, const char* );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >concat( const char*, sc_concref_r<T1,T2> );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>concat( sc_concref_r<T1,T2>, const sc_logic& );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >concat( const sc_logic&, sc_concref_r<T1,T2> );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>concat( sc_concref_r<T1,T2>, bool );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >concat( bool, sc_concref_r<T1,T2> );#ifdef SC_DT_MIXED_COMMA_OPERATORStemplate <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >operator , ( sc_concref_r<T1,T2>, sc_bitref<T3> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >operator , ( sc_concref<T1,T2>, sc_bitref_r<T3> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >operator , ( sc_concref_r<T1,T2>, sc_subref<T3> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >operator , ( sc_concref<T1,T2>, sc_subref_r<T3> );template <class T1, class T2, class T3, class T4>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >operator , ( sc_concref_r<T1,T2>, sc_concref<T3,T4> );template <class T1, class T2, class T3, class T4>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >operator , ( sc_concref<T1,T2>, sc_concref_r<T3,T4> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,T3>operator , ( sc_concref<T1,T2>, const sc_proxy<T3>& );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,T3>operator , ( sc_concref_r<T1,T2>, sc_proxy<T3>& );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>operator , ( sc_concref<T1,T2>, const char* );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >operator , ( const char*, sc_concref<T1,T2> );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>operator , ( sc_concref<T1,T2>, const sc_logic& );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >operator , ( const sc_logic&, sc_concref<T1,T2> );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>operator , ( sc_concref<T1,T2>, bool );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >operator , ( bool, sc_concref<T1,T2> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >concat( sc_concref_r<T1,T2>, sc_bitref<T3> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >concat( sc_concref<T1,T2>, sc_bitref_r<T3> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >concat( sc_concref_r<T1,T2>, sc_subref<T3> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >concat( sc_concref<T1,T2>, sc_subref_r<T3> );template <class T1, class T2, class T3, class T4>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >concat( sc_concref_r<T1,T2>, sc_concref<T3,T4> );template <class T1, class T2, class T3, class T4>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >concat( sc_concref<T1,T2>, sc_concref_r<T3,T4> );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,T3>concat( sc_concref<T1,T2>, const sc_proxy<T3>& );template <class T1, class T2, class T3>inlinesc_concref_r<sc_concref_r<T1,T2>,T3>concat( sc_concref_r<T1,T2>, sc_proxy<T3>& );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>concat( sc_concref<T1,T2>, const char* );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >concat( const char*, sc_concref<T1,T2> );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>concat( sc_concref<T1,T2>, const sc_logic& );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >concat( const sc_logic&, sc_concref<T1,T2> );template <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>concat( sc_concref<T1,T2>, bool );template <class T1, class T2>inlinesc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >concat( bool, sc_concref<T1,T2> );#endif// ----------------------------------------------------------------------------//  CLASS TEMPLATE : sc_concref<X,Y>////  Proxy class for sc_proxy concatenation (r-value and l-value).// ----------------------------------------------------------------------------template <class X, class Y>class sc_concref    : public sc_concref_r<X,Y>{public:    // typedefs    typedef sc_concref_r<X,Y> base_type;    // constructor    sc_concref( X& left_, Y& right_, int delete_ = 0 )	: sc_concref_r<X,Y>( left_, right_, delete_ )	{}    // copy constructor    sc_concref( const sc_concref<X,Y>& a )	: sc_concref_r<X,Y>( a )	{}    // cloning    sc_concref<X,Y>* clone() const	{ return new sc_concref<X,Y>( *this ); }    // assignment operators    template <class Z>    sc_concref<X,Y>& operator = ( const sc_proxy<Z>& a )        { base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( const sc_concref<X,Y>& a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( const char* a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( const bool* a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( const sc_logic* a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( const sc_unsigned& a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( const sc_signed& a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( const sc_uint_base& a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( const sc_int_base& a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( unsigned long a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( long a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( unsigned int a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( int a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( uint64 a )	{ base_type::assign_( a ); return *this; }    sc_concref<X,Y>& operator = ( int64 a )	{ base_type::assign_( a ); return *this; }    // other methods    void scan( ::std::istream& = ::std::cin );private:    // disabled    sc_concref();};// l-value concatenation operators and functionstemplate <class T1, class T2, class T3>inlinesc_concref<sc_concref<T1,T2>,sc_bitref<T3> >operator , ( sc_concref<T1,T2>, sc_bitref<T3> );template <class T1, class T2, class T3>inlinesc_concref<sc_concref<T1,T2>,sc_subref<T3> >operator , ( sc_concref<T1,T2>, sc_subref<T3> );template <class T1, class T2, class T3, class T4>inlinesc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >operator , ( sc_concref<T1,T2>, sc_concref<T3,T4> );template <class T1, class T2, class T3>inlinesc_concref<sc_concref<T1,T2>,T3>operator , ( sc_concref<T1,T2>, sc_proxy<T3>& );template <class T1, class T2, class T3>inlinesc_concref<sc_concref<T1,T2>,sc_bitref<T3> >concat( sc_concref<T1,T2>, sc_bitref<T3> );template <class T1, class T2, class T3>inlinesc_concref<sc_concref<T1,T2>,sc_subref<T3> >concat( sc_concref<T1,T2>, sc_subref<T3> );template <class T1, class T2, class T3, class T4>inlinesc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >concat( sc_concref<T1,T2>, sc_concref<T3,T4> );template <class T1, class T2, class T3>inlinesc_concref<sc_concref<T1,T2>,T3>concat( sc_concref<T1,T2>, sc_proxy<T3>& );template <class T1, class T2>inline::std::istream&operator >> ( ::std::istream&, sc_concref<T1,T2> );// ----------------------------------------------------------------------------//  CLASS TEMPLATE : sc_proxy<T>////  Base class template for bit/logic vector classes.//  (Barton/Nackmann implementation)// ----------------------------------------------------------------------------// r-value concatenation operators and functionstemplate <class T1, class T2>inlinesc_concref_r<T1,sc_bitref_r<T2> >operator , ( const sc_proxy<T1>&, sc_bitref_r<T2> );template <class T1, class T2>inlinesc_concref_r<T1,sc_subref_r<T2> >operator , ( const sc_proxy<T1>&, sc_subref_r<T2> );template <class T1, class T2, class T3>inlinesc_concref_r<T1,sc_concref_r<T2,T3> >operator , ( const sc_proxy<T1>&, sc_concref_r<T2,T3> );template <class T1, class T2>inlinesc_concref_r<T1,T2>operator , ( const sc_proxy<T1>&, const sc_proxy<T2>& );template <class T>inlinesc_concref_r<T,sc_lv_base>operator , ( const sc_proxy<T>&, const char* );template <class T>inlinesc_concref_r<sc_lv_base,T>operator , ( const char*, const sc_proxy<T>& );template <class T>inlinesc_concref_r<T,sc_lv_base>operator , ( const sc_proxy<T>&, const sc_logic& );template <class T>inlinesc_concref_r<sc_lv_base,T>operator , ( const sc_logic&, const sc_proxy<T>& );template <class T>inlinesc_concref_r<T,sc_lv_base>operator , ( const sc_proxy<T>&, bool );template <class T>inlinesc_concref_r<sc_lv_base,T>operator , ( bool, const sc_proxy<T>& );template <class T1, class T2>inlinesc_concref_r<T1,sc_bitref_r<T2> >concat( const sc_proxy<T1>&, sc_bitref_r<T2> );template <class T1, class T2>inlinesc_concref_r<T1,sc_subref_r<T2> >concat( const sc_proxy<T1>&, sc_subref_r<T2> );template <class T1, class T2, class T3>inlinesc_concref_r<T1,sc_concref_r<T2,T3> >concat( const sc_proxy<T1>&, sc_concref_r<T2,T3> );template <class T1, class T2>inlinesc_concref_r<T1,T2>concat( const sc_proxy<T1>&, const sc_proxy<T2>& );template <class T>inlinesc_concref_r<T,sc_lv_base>concat( const sc_proxy<T>&, const char* );template <class T>inlinesc_concref_r<sc_lv_base,T>concat( const char*, const sc_proxy<T>& );template <class T>inlinesc_concref_r<T,sc_lv_base>

⌨️ 快捷键说明

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