sc_bit_proxies.h
来自「基于4个mips核的noc设计」· C头文件 代码 · 共 2,859 行 · 第 1/5 页
H
2,859 行
int size() const { return ( (length() - 1) / UL_SIZE + 1 ); } sc_logic_value_t get_bit( int n ) const; void set_bit( int n, sc_logic_value_t value ); unsigned long get_word( int i ) const; void set_word( int i, unsigned long w ); unsigned long get_cword( int i ) const; void set_cword( int i, unsigned long 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( istream& = 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>inlineistream&operator >> ( 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>concat( const sc_proxy<T>&, const sc_logic& );template <class T>inlinesc_concref_r<sc_lv_base,T>concat( const sc_logic&, const sc_proxy<T>& );template <class T>inlinesc_concref_r<T,sc_lv_base>concat( const sc_proxy<T>&, bool );template <class T>inlinesc_concref_r<sc_lv_base,T>concat( bool, const sc_proxy<T>& );#ifdef SC_DT_MIXED_COMMA_OPERATORStemplate <class T1, class T2>inlinesc_concref_r<T1,sc_bitref_r<T2> >operator , ( const sc_proxy<T1>&, sc_bitref<T2> );template <class T1, class T2>inlinesc_concref_r<T1,sc_bitref_r<T2> >operator , ( 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<T2> );template <class T1, class T2>inlinesc_concref_r<T1,sc_subref_r<T2> >operator , ( 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<T2,T3> );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?