sc_biguint.h 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_biguint.h -- Template version of sc_unsigned. This class 2312027Sjungma@eit.uni-kl.de enables compile-time bit widths for sc_unsigned numbers. 2412027Sjungma@eit.uni-kl.de 2512027Sjungma@eit.uni-kl.de Original Author: Ali Dasdan, Synopsys, Inc. 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 3112027Sjungma@eit.uni-kl.de MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3212027Sjungma@eit.uni-kl.de changes you are making here. 3312027Sjungma@eit.uni-kl.de 3412027Sjungma@eit.uni-kl.de Name, Affiliation, Date: Gene Bushayev, Synopsys, Inc. 3512027Sjungma@eit.uni-kl.de Description of Modification: - Interface between sc_bigint and sc_bv/sc_lv. 3612027Sjungma@eit.uni-kl.de 3712027Sjungma@eit.uni-kl.de Name, Affiliation, Date: 3812027Sjungma@eit.uni-kl.de Description of Modification: 3912027Sjungma@eit.uni-kl.de 4012027Sjungma@eit.uni-kl.de *****************************************************************************/ 4112027Sjungma@eit.uni-kl.de 4212027Sjungma@eit.uni-kl.de// $Log: sc_biguint.h,v $ 4312027Sjungma@eit.uni-kl.de// Revision 1.2 2011/02/18 20:19:14 acg 4412027Sjungma@eit.uni-kl.de// Andy Goodrich: updating Copyright notice. 4512027Sjungma@eit.uni-kl.de// 4612027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:05 acg 4712027Sjungma@eit.uni-kl.de// SystemC 2.3 4812027Sjungma@eit.uni-kl.de// 4912027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:49:31 acg 5012027Sjungma@eit.uni-kl.de// Added $Log command so that CVS check in comments are reproduced in the 5112027Sjungma@eit.uni-kl.de// source. 5212027Sjungma@eit.uni-kl.de// 5312027Sjungma@eit.uni-kl.de 5412027Sjungma@eit.uni-kl.de#ifndef SC_BIGUINT_H 5512027Sjungma@eit.uni-kl.de#define SC_BIGUINT_H 5612027Sjungma@eit.uni-kl.de 5712027Sjungma@eit.uni-kl.de 5812027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_signed.h" 5912027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_unsigned.h" 6012027Sjungma@eit.uni-kl.de 6112027Sjungma@eit.uni-kl.denamespace sc_dt 6212027Sjungma@eit.uni-kl.de{ 6312027Sjungma@eit.uni-kl.de 6412027Sjungma@eit.uni-kl.de// classes defined in this module 6512027Sjungma@eit.uni-kl.detemplate <int W> class sc_biguint; 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.de// forward class declarations 6812027Sjungma@eit.uni-kl.declass sc_bv_base; 6912027Sjungma@eit.uni-kl.declass sc_lv_base; 7012027Sjungma@eit.uni-kl.declass sc_fxval; 7112027Sjungma@eit.uni-kl.declass sc_fxval_fast; 7212027Sjungma@eit.uni-kl.declass sc_fxnum; 7312027Sjungma@eit.uni-kl.declass sc_fxnum_fast; 7412027Sjungma@eit.uni-kl.de 7512027Sjungma@eit.uni-kl.de 7612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 7712027Sjungma@eit.uni-kl.de// CLASS TEMPLATE : sc_biguint<W> 7812027Sjungma@eit.uni-kl.de// 7912027Sjungma@eit.uni-kl.de// Arbitrary size unsigned integer type. 8012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 8112027Sjungma@eit.uni-kl.de 8212027Sjungma@eit.uni-kl.de#ifdef SC_MAX_NBITS 8312027Sjungma@eit.uni-kl.detemplate< int W = SC_MAX_NBITS > 8412027Sjungma@eit.uni-kl.de#else 8512027Sjungma@eit.uni-kl.detemplate< int W > 8612027Sjungma@eit.uni-kl.de#endif 8712027Sjungma@eit.uni-kl.declass sc_biguint 8812027Sjungma@eit.uni-kl.de : public sc_unsigned 8912027Sjungma@eit.uni-kl.de{ 9012027Sjungma@eit.uni-kl.depublic: 9112027Sjungma@eit.uni-kl.de 9212027Sjungma@eit.uni-kl.de // constructors 9312027Sjungma@eit.uni-kl.de 9412027Sjungma@eit.uni-kl.de sc_biguint() 9512027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 9612027Sjungma@eit.uni-kl.de {} 9712027Sjungma@eit.uni-kl.de 9812027Sjungma@eit.uni-kl.de sc_biguint( const sc_biguint<W>& v ) 9912027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 10012027Sjungma@eit.uni-kl.de { *this = v; } 10112027Sjungma@eit.uni-kl.de 10212027Sjungma@eit.uni-kl.de sc_biguint( const sc_unsigned& v ) 10312027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 10412027Sjungma@eit.uni-kl.de { *this = v; } 10512027Sjungma@eit.uni-kl.de 10612027Sjungma@eit.uni-kl.de sc_biguint( const sc_unsigned_subref& v ) 10712027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 10812027Sjungma@eit.uni-kl.de { *this = v; } 10912027Sjungma@eit.uni-kl.de 11012027Sjungma@eit.uni-kl.de template< class T > 11112027Sjungma@eit.uni-kl.de sc_biguint( const sc_generic_base<T>& a ) 11212027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 11312027Sjungma@eit.uni-kl.de { a->to_sc_unsigned(*this); } 11412027Sjungma@eit.uni-kl.de 11512027Sjungma@eit.uni-kl.de sc_biguint( const sc_signed& v ) 11612027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 11712027Sjungma@eit.uni-kl.de { *this = v; } 11812027Sjungma@eit.uni-kl.de 11912027Sjungma@eit.uni-kl.de sc_biguint( const sc_signed_subref& v ) 12012027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 12112027Sjungma@eit.uni-kl.de { *this = v; } 12212027Sjungma@eit.uni-kl.de 12312027Sjungma@eit.uni-kl.de sc_biguint( const char* v ) 12412027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 12512027Sjungma@eit.uni-kl.de { *this = v; } 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de sc_biguint( int64 v ) 12812027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 12912027Sjungma@eit.uni-kl.de { *this = v; } 13012027Sjungma@eit.uni-kl.de 13112027Sjungma@eit.uni-kl.de sc_biguint( uint64 v ) 13212027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 13312027Sjungma@eit.uni-kl.de { *this = v; } 13412027Sjungma@eit.uni-kl.de 13512027Sjungma@eit.uni-kl.de sc_biguint( long v ) 13612027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 13712027Sjungma@eit.uni-kl.de { *this = v; } 13812027Sjungma@eit.uni-kl.de 13912027Sjungma@eit.uni-kl.de sc_biguint( unsigned long v ) 14012027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 14112027Sjungma@eit.uni-kl.de { *this = v; } 14212027Sjungma@eit.uni-kl.de 14312027Sjungma@eit.uni-kl.de sc_biguint( int v ) 14412027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 14512027Sjungma@eit.uni-kl.de { *this = v; } 14612027Sjungma@eit.uni-kl.de 14712027Sjungma@eit.uni-kl.de sc_biguint( unsigned int v ) 14812027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 14912027Sjungma@eit.uni-kl.de { *this = v; } 15012027Sjungma@eit.uni-kl.de 15112027Sjungma@eit.uni-kl.de sc_biguint( double v ) 15212027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 15312027Sjungma@eit.uni-kl.de { *this = v; } 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.de sc_biguint( const sc_bv_base& v ) 15612027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 15712027Sjungma@eit.uni-kl.de { *this = v; } 15812027Sjungma@eit.uni-kl.de 15912027Sjungma@eit.uni-kl.de sc_biguint( const sc_lv_base& v ) 16012027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 16112027Sjungma@eit.uni-kl.de { *this = v; } 16212027Sjungma@eit.uni-kl.de 16312027Sjungma@eit.uni-kl.de#ifdef SC_INCLUDE_FX 16412027Sjungma@eit.uni-kl.de 16512027Sjungma@eit.uni-kl.de explicit sc_biguint( const sc_fxval& v ) 16612027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 16712027Sjungma@eit.uni-kl.de { *this = v; } 16812027Sjungma@eit.uni-kl.de 16912027Sjungma@eit.uni-kl.de explicit sc_biguint( const sc_fxval_fast& v ) 17012027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 17112027Sjungma@eit.uni-kl.de { *this = v; } 17212027Sjungma@eit.uni-kl.de 17312027Sjungma@eit.uni-kl.de explicit sc_biguint( const sc_fxnum& v ) 17412027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 17512027Sjungma@eit.uni-kl.de { *this = v; } 17612027Sjungma@eit.uni-kl.de 17712027Sjungma@eit.uni-kl.de explicit sc_biguint( const sc_fxnum_fast& v ) 17812027Sjungma@eit.uni-kl.de : sc_unsigned( W ) 17912027Sjungma@eit.uni-kl.de { *this = v; } 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de#endif 18212027Sjungma@eit.uni-kl.de 18312027Sjungma@eit.uni-kl.de 18412027Sjungma@eit.uni-kl.de#ifndef SC_MAX_NBITS 18512027Sjungma@eit.uni-kl.de 18612027Sjungma@eit.uni-kl.de // destructor 18712027Sjungma@eit.uni-kl.de 18812027Sjungma@eit.uni-kl.de ~sc_biguint() 18912027Sjungma@eit.uni-kl.de {} 19012027Sjungma@eit.uni-kl.de 19112027Sjungma@eit.uni-kl.de#endif 19212027Sjungma@eit.uni-kl.de 19312027Sjungma@eit.uni-kl.de 19412027Sjungma@eit.uni-kl.de // assignment operators 19512027Sjungma@eit.uni-kl.de 19612027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_biguint<W>& v ) 19712027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 19812027Sjungma@eit.uni-kl.de 19912027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_unsigned& v ) 20012027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 20112027Sjungma@eit.uni-kl.de 20212027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_unsigned_subref& v ) 20312027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 20412027Sjungma@eit.uni-kl.de 20512027Sjungma@eit.uni-kl.de template< class T > 20612027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_generic_base<T>& a ) 20712027Sjungma@eit.uni-kl.de { a->to_sc_unsigned(*this); return *this; } 20812027Sjungma@eit.uni-kl.de 20912027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_signed& v ) 21012027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 21112027Sjungma@eit.uni-kl.de 21212027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_signed_subref& v ) 21312027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 21412027Sjungma@eit.uni-kl.de 21512027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const char* v ) 21612027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 21712027Sjungma@eit.uni-kl.de 21812027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( int64 v ) 21912027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 22012027Sjungma@eit.uni-kl.de 22112027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( uint64 v ) 22212027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 22312027Sjungma@eit.uni-kl.de 22412027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( long v ) 22512027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 22612027Sjungma@eit.uni-kl.de 22712027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( unsigned long v ) 22812027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 22912027Sjungma@eit.uni-kl.de 23012027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( int v ) 23112027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 23212027Sjungma@eit.uni-kl.de 23312027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( unsigned int v ) 23412027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 23512027Sjungma@eit.uni-kl.de 23612027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( double v ) 23712027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 23812027Sjungma@eit.uni-kl.de 23912027Sjungma@eit.uni-kl.de 24012027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_bv_base& v ) 24112027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 24212027Sjungma@eit.uni-kl.de 24312027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_lv_base& v ) 24412027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 24512027Sjungma@eit.uni-kl.de 24612027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_int_base& v ) 24712027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 24812027Sjungma@eit.uni-kl.de 24912027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_uint_base& v ) 25012027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 25112027Sjungma@eit.uni-kl.de 25212027Sjungma@eit.uni-kl.de#ifdef SC_INCLUDE_FX 25312027Sjungma@eit.uni-kl.de 25412027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_fxval& v ) 25512027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 25612027Sjungma@eit.uni-kl.de 25712027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_fxval_fast& v ) 25812027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 25912027Sjungma@eit.uni-kl.de 26012027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_fxnum& v ) 26112027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 26212027Sjungma@eit.uni-kl.de 26312027Sjungma@eit.uni-kl.de sc_biguint<W>& operator = ( const sc_fxnum_fast& v ) 26412027Sjungma@eit.uni-kl.de { sc_unsigned::operator = ( v ); return *this; } 26512027Sjungma@eit.uni-kl.de 26612027Sjungma@eit.uni-kl.de#endif 26712027Sjungma@eit.uni-kl.de}; 26812027Sjungma@eit.uni-kl.de 26912027Sjungma@eit.uni-kl.de} // namespace sc_dt 27012027Sjungma@eit.uni-kl.de 27112027Sjungma@eit.uni-kl.de 27212027Sjungma@eit.uni-kl.de#endif 273