sc_lv_base.h
来自「system C源码 一种替代verilog的语言」· C头文件 代码 · 共 1,815 行 · 第 1/4 页
H
1,815 行
template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >concat( const char* a, sc_bitref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( a ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_bitref_r<T>,sc_lv_base>concat( sc_bitref_r<T> a, const sc_logic& b ){ return sc_concref_r<sc_bitref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ) );}template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >concat( const sc_logic& a, sc_bitref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( a, 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_bitref_r<T>,sc_lv_base>concat( sc_bitref_r<T> a, bool b ){ return sc_concref_r<sc_bitref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( sc_logic( b ), 1 ) );}template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >concat( bool a, sc_bitref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( sc_logic( a ), 1 ), *b.clone(), 3 );}#ifdef SC_DT_MIXED_COMMA_OPERATORStemplate <class T>inlinesc_concref_r<sc_bitref_r<T>,sc_lv_base>operator , ( sc_bitref<T> a, const char* b ){ return sc_concref_r<sc_bitref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >operator , ( const char* a, sc_bitref<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( a ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_bitref_r<T>,sc_lv_base>operator , ( sc_bitref<T> a, const sc_logic& b ){ return sc_concref_r<sc_bitref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ) );}template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >operator , ( const sc_logic& a, sc_bitref<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( a, 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_bitref_r<T>,sc_lv_base>operator , ( sc_bitref<T> a, bool b ){ return sc_concref_r<sc_bitref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( sc_logic( b ), 1 ) );}template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >operator , ( bool a, sc_bitref<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( sc_logic( a ), 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_bitref_r<T>,sc_lv_base>concat( sc_bitref<T> a, const char* b ){ return sc_concref_r<sc_bitref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >concat( const char* a, sc_bitref<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( a ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_bitref_r<T>,sc_lv_base>concat( sc_bitref<T> a, const sc_logic& b ){ return sc_concref_r<sc_bitref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ) );}template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >concat( const sc_logic& a, sc_bitref<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( a, 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_bitref_r<T>,sc_lv_base>concat( sc_bitref<T> a, bool b ){ return sc_concref_r<sc_bitref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( sc_logic( b ), 1 ) );}template <class T>inlinesc_concref_r<sc_lv_base,sc_bitref_r<T> >concat( bool a, sc_bitref<T> b ){ return sc_concref_r<sc_lv_base,sc_bitref_r<T> >( *new sc_lv_base( sc_logic( a ), 1 ), *b.clone(), 3 );}#endif// ----------------------------------------------------------------------------// CLASS TEMPLATE : sc_subref_r<X>//// Proxy class for sc_proxy part selection (r-value only).// ----------------------------------------------------------------------------// r-value concatenation operators and functionstemplate <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>operator , ( sc_subref_r<T> a, const char* b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >operator , ( const char* a, sc_subref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( a ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>operator , ( sc_subref_r<T> a, const sc_logic& b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >operator , ( const sc_logic& a, sc_subref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( a, 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>operator , ( sc_subref_r<T> a, bool b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( sc_logic( b ), 1 ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >operator , ( bool a, sc_subref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( sc_logic( a ), 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>concat( sc_subref_r<T> a, const char* b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >concat( const char* a, sc_subref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( a ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>concat( sc_subref_r<T> a, const sc_logic& b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >concat( const sc_logic& a, sc_subref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( a, 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>concat( sc_subref_r<T> a, bool b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( sc_logic( b ), 1 ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >concat( bool a, sc_subref_r<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( sc_logic( a ), 1 ), *b.clone(), 3 );}#ifdef SC_DT_MIXED_COMMA_OPERATORStemplate <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>operator , ( sc_subref<T> a, const char* b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >operator , ( const char* a, sc_subref<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( a ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>operator , ( sc_subref<T> a, const sc_logic& b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >operator , ( const sc_logic& a, sc_subref<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( a, 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>operator , ( sc_subref<T> a, bool b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( sc_logic( b ), 1 ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >operator , ( bool a, sc_subref<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( sc_logic( a ), 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>concat( sc_subref<T> a, const char* b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >concat( const char* a, sc_subref<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( a ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>concat( sc_subref<T> a, const sc_logic& b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >concat( const sc_logic& a, sc_subref<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( a, 1 ), *b.clone(), 3 );}template <class T>inlinesc_concref_r<sc_subref_r<T>,sc_lv_base>concat( sc_subref<T> a, bool b ){ return sc_concref_r<sc_subref_r<T>,sc_lv_base>( *a.clone(), *new sc_lv_base( sc_logic( b ), 1 ), 3 );}template <class T>inlinesc_concref_r<sc_lv_base,sc_subref_r<T> >concat( bool a, sc_subref<T> b ){ return sc_concref_r<sc_lv_base,sc_subref_r<T> >( *new sc_lv_base( sc_logic( a ), 1 ), *b.clone(), 3 );}#endif// ----------------------------------------------------------------------------// CLASS TEMPLATE : sc_subref<X>//// Proxy class for sc_proxy part selection (r-value and l-value).// ----------------------------------------------------------------------------template <class X>inlinesc_subref<X>&sc_subref<X>::operator = ( const sc_subref_r<X>& b ){ sc_lv_base t( b ); // (partial) self assignment protection int len = sc_min( this->length(), t.length() ); if( ! this->reversed() ) { for( int i = len - 1; i >= 0; -- i ) { this->m_obj.set_bit( this->m_lo + i, t[i].value() ); } } else { for( int i = len - 1; i >= 0; -- i ) { this->m_obj.set_bit( this->m_lo - i, t[i].value() ); } } return *this;}template <class X>inlinesc_subref<X>&sc_subref<X>::operator = ( const sc_subref<X>& b ){ sc_lv_base t( b ); // (partial) self assignment protection int len = sc_min( this->length(), t.length() ); if( ! this->reversed() ) { for( int i = len - 1; i >= 0; -- i ) { this->m_obj.set_bit( this->m_lo + i, t[i].value() ); } } else { for( int i = len - 1; i >= 0; -- i ) { this->m_obj.set_bit( this->m_lo - i, t[i].value() ); } } return *this;}// ----------------------------------------------------------------------------// CLASS TEMPLATE : sc_concref_r<X,Y>//// Proxy class for sc_proxy concatenation (r-value only).// ----------------------------------------------------------------------------// r-value concatenation operators and functionstemplate <class T1, class T2>inlinesc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>operator , ( sc_concref_r<T1,T2> a, const char* b ){ return sc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 );}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?