sc_unsigned_bitref.inc revision 12027
112027Sjungma@eit.uni-kl.de/***************************************************************************** 212027Sjungma@eit.uni-kl.de 312027Sjungma@eit.uni-kl.de Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412027Sjungma@eit.uni-kl.de more contributor license agreements. See the NOTICE file distributed 512027Sjungma@eit.uni-kl.de with this work for additional information regarding copyright ownership. 612027Sjungma@eit.uni-kl.de Accellera licenses this file to you under the Apache License, Version 2.0 712027Sjungma@eit.uni-kl.de (the "License"); you may not use this file except in compliance with the 812027Sjungma@eit.uni-kl.de License. You may obtain a copy of the License at 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.de http://www.apache.org/licenses/LICENSE-2.0 1112027Sjungma@eit.uni-kl.de 1212027Sjungma@eit.uni-kl.de Unless required by applicable law or agreed to in writing, software 1312027Sjungma@eit.uni-kl.de distributed under the License is distributed on an "AS IS" BASIS, 1412027Sjungma@eit.uni-kl.de WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512027Sjungma@eit.uni-kl.de implied. See the License for the specific language governing 1612027Sjungma@eit.uni-kl.de permissions and limitations under the License. 1712027Sjungma@eit.uni-kl.de 1812027Sjungma@eit.uni-kl.de *****************************************************************************/ 1912027Sjungma@eit.uni-kl.de 2012027Sjungma@eit.uni-kl.de/***************************************************************************** 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.de sc_unsigned_bitref.h -- Proxy class that is declared in sc_unsigned.h. 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Ali Dasdan, Synopsys, Inc. 2512027Sjungma@eit.uni-kl.de 2612027Sjungma@eit.uni-kl.de *****************************************************************************/ 2712027Sjungma@eit.uni-kl.de 2812027Sjungma@eit.uni-kl.de/***************************************************************************** 2912027Sjungma@eit.uni-kl.de 3012027Sjungma@eit.uni-kl.de MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3112027Sjungma@eit.uni-kl.de changes you are making here. 3212027Sjungma@eit.uni-kl.de 3312027Sjungma@eit.uni-kl.de Name, Affiliation, Date: 3412027Sjungma@eit.uni-kl.de Description of Modification: 3512027Sjungma@eit.uni-kl.de 3612027Sjungma@eit.uni-kl.de *****************************************************************************/ 3712027Sjungma@eit.uni-kl.de 3812027Sjungma@eit.uni-kl.de 3912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4012027Sjungma@eit.uni-kl.de// CLASS : sc_unsigned_bitref_r 4112027Sjungma@eit.uni-kl.de// 4212027Sjungma@eit.uni-kl.de// Proxy class for sc_unsigned bit selection (r-value only). 4312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4412027Sjungma@eit.uni-kl.de 4512027Sjungma@eit.uni-kl.de// implicit conversion to uint64 4612027Sjungma@eit.uni-kl.de 4712027Sjungma@eit.uni-kl.desc_unsigned_bitref_r::operator uint64 () const 4812027Sjungma@eit.uni-kl.de{ 4912027Sjungma@eit.uni-kl.de return m_obj_p->test( m_index ); 5012027Sjungma@eit.uni-kl.de} 5112027Sjungma@eit.uni-kl.de 5212027Sjungma@eit.uni-kl.debool 5312027Sjungma@eit.uni-kl.desc_unsigned_bitref_r::operator ! () const 5412027Sjungma@eit.uni-kl.de{ 5512027Sjungma@eit.uni-kl.de return ( ! m_obj_p->test( m_index ) ); 5612027Sjungma@eit.uni-kl.de} 5712027Sjungma@eit.uni-kl.de 5812027Sjungma@eit.uni-kl.debool 5912027Sjungma@eit.uni-kl.desc_unsigned_bitref_r::operator ~ () const 6012027Sjungma@eit.uni-kl.de{ 6112027Sjungma@eit.uni-kl.de return ( ! m_obj_p->test( m_index ) ); 6212027Sjungma@eit.uni-kl.de} 6312027Sjungma@eit.uni-kl.de 6412027Sjungma@eit.uni-kl.de 6512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 6612027Sjungma@eit.uni-kl.de// CLASS : sc_unsigned_bitref 6712027Sjungma@eit.uni-kl.de// 6812027Sjungma@eit.uni-kl.de// Proxy class for sc_unsigned bit selection (r-value and l-value). 6912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 7012027Sjungma@eit.uni-kl.de 7112027Sjungma@eit.uni-kl.de// assignment operators 7212027Sjungma@eit.uni-kl.de 7312027Sjungma@eit.uni-kl.deconst sc_unsigned_bitref& 7412027Sjungma@eit.uni-kl.desc_unsigned_bitref::operator = ( const sc_unsigned_bitref_r& b ) 7512027Sjungma@eit.uni-kl.de{ 7612027Sjungma@eit.uni-kl.de m_obj_p->set( m_index, (bool) b ); 7712027Sjungma@eit.uni-kl.de return *this; 7812027Sjungma@eit.uni-kl.de} 7912027Sjungma@eit.uni-kl.de 8012027Sjungma@eit.uni-kl.deconst sc_unsigned_bitref& 8112027Sjungma@eit.uni-kl.desc_unsigned_bitref::operator = ( const sc_unsigned_bitref& b ) 8212027Sjungma@eit.uni-kl.de{ 8312027Sjungma@eit.uni-kl.de m_obj_p->set( m_index, (bool) b ); 8412027Sjungma@eit.uni-kl.de return *this; 8512027Sjungma@eit.uni-kl.de} 8612027Sjungma@eit.uni-kl.de 8712027Sjungma@eit.uni-kl.deconst sc_unsigned_bitref& 8812027Sjungma@eit.uni-kl.desc_unsigned_bitref::operator = ( bool b ) 8912027Sjungma@eit.uni-kl.de{ 9012027Sjungma@eit.uni-kl.de m_obj_p->set( m_index, b ); 9112027Sjungma@eit.uni-kl.de return *this; 9212027Sjungma@eit.uni-kl.de} 9312027Sjungma@eit.uni-kl.de 9412027Sjungma@eit.uni-kl.de 9512027Sjungma@eit.uni-kl.deconst sc_unsigned_bitref& 9612027Sjungma@eit.uni-kl.desc_unsigned_bitref::operator &= ( bool b ) 9712027Sjungma@eit.uni-kl.de{ 9812027Sjungma@eit.uni-kl.de if( ! b ) { 9912027Sjungma@eit.uni-kl.de m_obj_p->clear( m_index ); 10012027Sjungma@eit.uni-kl.de } 10112027Sjungma@eit.uni-kl.de return *this; 10212027Sjungma@eit.uni-kl.de} 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.deconst sc_unsigned_bitref& 10512027Sjungma@eit.uni-kl.desc_unsigned_bitref::operator |= ( bool b ) 10612027Sjungma@eit.uni-kl.de{ 10712027Sjungma@eit.uni-kl.de if( b ) { 10812027Sjungma@eit.uni-kl.de m_obj_p->set( m_index ); 10912027Sjungma@eit.uni-kl.de } 11012027Sjungma@eit.uni-kl.de return *this; 11112027Sjungma@eit.uni-kl.de} 11212027Sjungma@eit.uni-kl.de 11312027Sjungma@eit.uni-kl.deconst sc_unsigned_bitref& 11412027Sjungma@eit.uni-kl.desc_unsigned_bitref::operator ^= ( bool b ) 11512027Sjungma@eit.uni-kl.de{ 11612027Sjungma@eit.uni-kl.de if( b ) { 11712027Sjungma@eit.uni-kl.de m_obj_p->invert( m_index ); 11812027Sjungma@eit.uni-kl.de } 11912027Sjungma@eit.uni-kl.de return *this; 12012027Sjungma@eit.uni-kl.de} 12112027Sjungma@eit.uni-kl.de 12212027Sjungma@eit.uni-kl.de// #### OPTIMIZE 12312027Sjungma@eit.uni-kl.devoid sc_unsigned_bitref::concat_set(int64 src, int low_i) 12412027Sjungma@eit.uni-kl.de{ 12512027Sjungma@eit.uni-kl.de bool value = 1 & ((low_i < 64) ? (src >> low_i) : (src >> 63)); 12612027Sjungma@eit.uni-kl.de m_obj_p->set(low_i, value); 12712027Sjungma@eit.uni-kl.de} 12812027Sjungma@eit.uni-kl.de 12912027Sjungma@eit.uni-kl.devoid sc_unsigned_bitref::concat_set(const sc_signed& src, int low_i) 13012027Sjungma@eit.uni-kl.de{ 13112027Sjungma@eit.uni-kl.de if ( low_i < src.length() ) 13212027Sjungma@eit.uni-kl.de m_obj_p->set(low_i, src.test(low_i)); 13312027Sjungma@eit.uni-kl.de else 13412027Sjungma@eit.uni-kl.de m_obj_p->set(low_i, src<0); 13512027Sjungma@eit.uni-kl.de} 13612027Sjungma@eit.uni-kl.de 13712027Sjungma@eit.uni-kl.devoid sc_unsigned_bitref::concat_set(const sc_unsigned& src, int low_i) 13812027Sjungma@eit.uni-kl.de{ 13912027Sjungma@eit.uni-kl.de if ( low_i < src.nbits ) 14012027Sjungma@eit.uni-kl.de m_obj_p->set(low_i, src.test(low_i)); 14112027Sjungma@eit.uni-kl.de else 14212027Sjungma@eit.uni-kl.de m_obj_p->set(low_i, 0); 14312027Sjungma@eit.uni-kl.de} 14412027Sjungma@eit.uni-kl.de 14512027Sjungma@eit.uni-kl.devoid sc_unsigned_bitref::concat_set(uint64 src, int low_i) 14612027Sjungma@eit.uni-kl.de{ 14712027Sjungma@eit.uni-kl.de bool value = ((low_i < 64) ? (src >> low_i)&1 : 0); 14812027Sjungma@eit.uni-kl.de m_obj_p->set(low_i, value); 14912027Sjungma@eit.uni-kl.de} 15012027Sjungma@eit.uni-kl.de 15112027Sjungma@eit.uni-kl.de// other methods 15212027Sjungma@eit.uni-kl.de 15312027Sjungma@eit.uni-kl.devoid 15412027Sjungma@eit.uni-kl.desc_unsigned_bitref::scan( ::std::istream& is ) 15512027Sjungma@eit.uni-kl.de{ 15612027Sjungma@eit.uni-kl.de bool b; 15712027Sjungma@eit.uni-kl.de is >> b; 15812027Sjungma@eit.uni-kl.de *this = b; 15912027Sjungma@eit.uni-kl.de} 16012027Sjungma@eit.uni-kl.de 16112027Sjungma@eit.uni-kl.de 16212027Sjungma@eit.uni-kl.de// End of file 163