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_fxnum.h - 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Martin Janssen, 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// $Log: sc_fxnum.h,v $ 3912027Sjungma@eit.uni-kl.de// Revision 1.5 2011/08/29 18:04:32 acg 4012027Sjungma@eit.uni-kl.de// Philipp A. Hartmann: miscellaneous clean ups. 4112027Sjungma@eit.uni-kl.de// 4212027Sjungma@eit.uni-kl.de// Revision 1.4 2011/08/24 22:05:43 acg 4312027Sjungma@eit.uni-kl.de// Torsten Maehne: initialization changes to remove warnings. 4412027Sjungma@eit.uni-kl.de// 4512027Sjungma@eit.uni-kl.de// Revision 1.3 2011/01/19 18:57:40 acg 4612027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for IEEE_1666_2011. 4712027Sjungma@eit.uni-kl.de// 4812027Sjungma@eit.uni-kl.de// Revision 1.2 2009/03/09 17:26:46 acg 4912027Sjungma@eit.uni-kl.de// Andy Goodrich: removed ; from namespace { } 5012027Sjungma@eit.uni-kl.de// 5112027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:04 acg 5212027Sjungma@eit.uni-kl.de// SystemC 2.3 5312027Sjungma@eit.uni-kl.de// 5412027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:53:58 acg 5512027Sjungma@eit.uni-kl.de// Andy Goodrich: added $Log command so that CVS comments are reproduced in 5612027Sjungma@eit.uni-kl.de// the source. 5712027Sjungma@eit.uni-kl.de// 5812027Sjungma@eit.uni-kl.de 5912027Sjungma@eit.uni-kl.de#ifndef SC_FXNUM_H 6012027Sjungma@eit.uni-kl.de#define SC_FXNUM_H 6112027Sjungma@eit.uni-kl.de 6212027Sjungma@eit.uni-kl.de 6312027Sjungma@eit.uni-kl.de#include "sysc/datatypes/bit/sc_lv_base.h" 6412027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/sc_fxval.h" 6512027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/scfx_params.h" 6612027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/sc_fxnum_observer.h" 6712027Sjungma@eit.uni-kl.de 6812027Sjungma@eit.uni-kl.de 6912027Sjungma@eit.uni-kl.denamespace sc_core { 7012027Sjungma@eit.uni-kl.de class vcd_sc_fxnum_trace; 7112027Sjungma@eit.uni-kl.de class vcd_sc_fxnum_fast_trace; 7212027Sjungma@eit.uni-kl.de class wif_sc_fxnum_trace; 7312027Sjungma@eit.uni-kl.de class wif_sc_fxnum_fast_trace; 7412027Sjungma@eit.uni-kl.de} 7512027Sjungma@eit.uni-kl.de 7612027Sjungma@eit.uni-kl.de 7712027Sjungma@eit.uni-kl.denamespace sc_dt 7812027Sjungma@eit.uni-kl.de{ 7912027Sjungma@eit.uni-kl.de 8012027Sjungma@eit.uni-kl.de// classes defined in this module 8112027Sjungma@eit.uni-kl.declass sc_fxnum_bitref; 8212027Sjungma@eit.uni-kl.declass sc_fxnum_fast_bitref; 8312027Sjungma@eit.uni-kl.declass sc_fxnum_subref; 8412027Sjungma@eit.uni-kl.declass sc_fxnum_fast_subref; 8512027Sjungma@eit.uni-kl.declass sc_fxnum; 8612027Sjungma@eit.uni-kl.declass sc_fxnum_fast; 8712027Sjungma@eit.uni-kl.de 8812027Sjungma@eit.uni-kl.de 8912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 9012027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_bitref 9112027Sjungma@eit.uni-kl.de// 9212027Sjungma@eit.uni-kl.de// Proxy class for bit-selection in class sc_fxnum, behaves like sc_bit. 9312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 9412027Sjungma@eit.uni-kl.de 9512027Sjungma@eit.uni-kl.declass sc_fxnum_bitref 9612027Sjungma@eit.uni-kl.de{ 9712027Sjungma@eit.uni-kl.de friend class sc_fxnum; 9812027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast_bitref; 9912027Sjungma@eit.uni-kl.de 10012027Sjungma@eit.uni-kl.de 10112027Sjungma@eit.uni-kl.de bool get() const; 10212027Sjungma@eit.uni-kl.de void set( bool ); 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.de 10512027Sjungma@eit.uni-kl.de // constructor 10612027Sjungma@eit.uni-kl.de 10712027Sjungma@eit.uni-kl.de sc_fxnum_bitref( sc_fxnum&, int ); 10812027Sjungma@eit.uni-kl.de 10912027Sjungma@eit.uni-kl.depublic: 11012027Sjungma@eit.uni-kl.de 11112027Sjungma@eit.uni-kl.de // copy constructor 11212027Sjungma@eit.uni-kl.de 11312027Sjungma@eit.uni-kl.de sc_fxnum_bitref( const sc_fxnum_bitref& ); 11412027Sjungma@eit.uni-kl.de 11512027Sjungma@eit.uni-kl.de 11612027Sjungma@eit.uni-kl.de // assignment operators 11712027Sjungma@eit.uni-kl.de 11812027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(op,tp) \ 11912027Sjungma@eit.uni-kl.de sc_fxnum_bitref& operator op ( tp ); 12012027Sjungma@eit.uni-kl.de 12112027Sjungma@eit.uni-kl.de#define DECL_ASN_OP(op) \ 12212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum_bitref&) \ 12312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum_fast_bitref&) \ 12412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_bit&) \ 12512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,bool) 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de DECL_ASN_OP(=) 12812027Sjungma@eit.uni-kl.de 12912027Sjungma@eit.uni-kl.de DECL_ASN_OP(&=) 13012027Sjungma@eit.uni-kl.de DECL_ASN_OP(|=) 13112027Sjungma@eit.uni-kl.de DECL_ASN_OP(^=) 13212027Sjungma@eit.uni-kl.de 13312027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T 13412027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP 13512027Sjungma@eit.uni-kl.de 13612027Sjungma@eit.uni-kl.de 13712027Sjungma@eit.uni-kl.de // implicit conversion 13812027Sjungma@eit.uni-kl.de 13912027Sjungma@eit.uni-kl.de operator bool() const; 14012027Sjungma@eit.uni-kl.de 14112027Sjungma@eit.uni-kl.de 14212027Sjungma@eit.uni-kl.de // print or dump content 14312027Sjungma@eit.uni-kl.de 14412027Sjungma@eit.uni-kl.de void print( ::std::ostream& = ::std::cout ) const; 14512027Sjungma@eit.uni-kl.de void scan( ::std::istream& = ::std::cin ); 14612027Sjungma@eit.uni-kl.de void dump( ::std::ostream& = ::std::cout ) const; 14712027Sjungma@eit.uni-kl.de 14812027Sjungma@eit.uni-kl.deprivate: 14912027Sjungma@eit.uni-kl.de 15012027Sjungma@eit.uni-kl.de sc_fxnum& m_num; 15112027Sjungma@eit.uni-kl.de int m_idx; 15212027Sjungma@eit.uni-kl.de 15312027Sjungma@eit.uni-kl.deprivate: 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.de // disabled 15612027Sjungma@eit.uni-kl.de sc_fxnum_bitref(); 15712027Sjungma@eit.uni-kl.de}; 15812027Sjungma@eit.uni-kl.de 15912027Sjungma@eit.uni-kl.de 16012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 16112027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_fast_bitref 16212027Sjungma@eit.uni-kl.de// 16312027Sjungma@eit.uni-kl.de// Proxy class for bit-selection in class sc_fxnum_fast, behaves like sc_bit. 16412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 16512027Sjungma@eit.uni-kl.de 16612027Sjungma@eit.uni-kl.declass sc_fxnum_fast_bitref 16712027Sjungma@eit.uni-kl.de{ 16812027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast; 16912027Sjungma@eit.uni-kl.de friend class sc_fxnum_bitref; 17012027Sjungma@eit.uni-kl.de 17112027Sjungma@eit.uni-kl.de 17212027Sjungma@eit.uni-kl.de bool get() const; 17312027Sjungma@eit.uni-kl.de void set( bool ); 17412027Sjungma@eit.uni-kl.de 17512027Sjungma@eit.uni-kl.de 17612027Sjungma@eit.uni-kl.de // constructor 17712027Sjungma@eit.uni-kl.de 17812027Sjungma@eit.uni-kl.de sc_fxnum_fast_bitref( sc_fxnum_fast&, int ); 17912027Sjungma@eit.uni-kl.de 18012027Sjungma@eit.uni-kl.depublic: 18112027Sjungma@eit.uni-kl.de 18212027Sjungma@eit.uni-kl.de // copy constructor 18312027Sjungma@eit.uni-kl.de 18412027Sjungma@eit.uni-kl.de sc_fxnum_fast_bitref( const sc_fxnum_fast_bitref& ); 18512027Sjungma@eit.uni-kl.de 18612027Sjungma@eit.uni-kl.de 18712027Sjungma@eit.uni-kl.de // assignment operators 18812027Sjungma@eit.uni-kl.de 18912027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(op,tp) \ 19012027Sjungma@eit.uni-kl.de sc_fxnum_fast_bitref& operator op ( tp ); 19112027Sjungma@eit.uni-kl.de 19212027Sjungma@eit.uni-kl.de#define DECL_ASN_OP(op) \ 19312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum_bitref&) \ 19412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum_fast_bitref&) \ 19512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_bit&) \ 19612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,bool) 19712027Sjungma@eit.uni-kl.de 19812027Sjungma@eit.uni-kl.de DECL_ASN_OP(=) 19912027Sjungma@eit.uni-kl.de 20012027Sjungma@eit.uni-kl.de DECL_ASN_OP(&=) 20112027Sjungma@eit.uni-kl.de DECL_ASN_OP(|=) 20212027Sjungma@eit.uni-kl.de DECL_ASN_OP(^=) 20312027Sjungma@eit.uni-kl.de 20412027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T 20512027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP 20612027Sjungma@eit.uni-kl.de 20712027Sjungma@eit.uni-kl.de 20812027Sjungma@eit.uni-kl.de // implicit conversion 20912027Sjungma@eit.uni-kl.de 21012027Sjungma@eit.uni-kl.de operator bool() const; 21112027Sjungma@eit.uni-kl.de 21212027Sjungma@eit.uni-kl.de 21312027Sjungma@eit.uni-kl.de // print or dump content 21412027Sjungma@eit.uni-kl.de 21512027Sjungma@eit.uni-kl.de void print( ::std::ostream& = ::std::cout ) const; 21612027Sjungma@eit.uni-kl.de void scan( ::std::istream& = ::std::cin ); 21712027Sjungma@eit.uni-kl.de void dump( ::std::ostream& = ::std::cout ) const; 21812027Sjungma@eit.uni-kl.de 21912027Sjungma@eit.uni-kl.deprivate: 22012027Sjungma@eit.uni-kl.de 22112027Sjungma@eit.uni-kl.de sc_fxnum_fast& m_num; 22212027Sjungma@eit.uni-kl.de int m_idx; 22312027Sjungma@eit.uni-kl.de 22412027Sjungma@eit.uni-kl.deprivate: 22512027Sjungma@eit.uni-kl.de 22612027Sjungma@eit.uni-kl.de // disabled 22712027Sjungma@eit.uni-kl.de sc_fxnum_fast_bitref(); 22812027Sjungma@eit.uni-kl.de}; 22912027Sjungma@eit.uni-kl.de 23012027Sjungma@eit.uni-kl.de 23112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 23212027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_subref 23312027Sjungma@eit.uni-kl.de// 23412027Sjungma@eit.uni-kl.de// Proxy class for part-selection in class sc_fxnum, 23512027Sjungma@eit.uni-kl.de// behaves like sc_bv_base. 23612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 23712027Sjungma@eit.uni-kl.de 23812027Sjungma@eit.uni-kl.declass sc_fxnum_subref 23912027Sjungma@eit.uni-kl.de{ 24012027Sjungma@eit.uni-kl.de friend class sc_fxnum; 24112027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast_subref; 24212027Sjungma@eit.uni-kl.de 24312027Sjungma@eit.uni-kl.de bool get() const; 24412027Sjungma@eit.uni-kl.de bool set(); 24512027Sjungma@eit.uni-kl.de 24612027Sjungma@eit.uni-kl.de 24712027Sjungma@eit.uni-kl.de // constructor 24812027Sjungma@eit.uni-kl.de 24912027Sjungma@eit.uni-kl.de sc_fxnum_subref( sc_fxnum&, int, int ); 25012027Sjungma@eit.uni-kl.de 25112027Sjungma@eit.uni-kl.depublic: 25212027Sjungma@eit.uni-kl.de 25312027Sjungma@eit.uni-kl.de // copy constructor 25412027Sjungma@eit.uni-kl.de 25512027Sjungma@eit.uni-kl.de sc_fxnum_subref( const sc_fxnum_subref& ); 25612027Sjungma@eit.uni-kl.de 25712027Sjungma@eit.uni-kl.de 25812027Sjungma@eit.uni-kl.de // destructor 25912027Sjungma@eit.uni-kl.de 26012027Sjungma@eit.uni-kl.de ~sc_fxnum_subref(); 26112027Sjungma@eit.uni-kl.de 26212027Sjungma@eit.uni-kl.de 26312027Sjungma@eit.uni-kl.de // assignment operators 26412027Sjungma@eit.uni-kl.de 26512027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(tp) \ 26612027Sjungma@eit.uni-kl.de sc_fxnum_subref& operator = ( tp ); 26712027Sjungma@eit.uni-kl.de 26812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_fxnum_subref&) 26912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_fxnum_fast_subref&) 27012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_bv_base&) 27112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_lv_base&) 27212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const char*) 27312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const bool*) 27412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_signed&) 27512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_unsigned&) 27612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_int_base&) 27712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_uint_base&) 27812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(int64) 27912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(uint64) 28012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(int) 28112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(unsigned int) 28212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(long) 28312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(unsigned long) 28412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(char) 28512027Sjungma@eit.uni-kl.de 28612027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T 28712027Sjungma@eit.uni-kl.de 28812027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T_A(op,tp) \ 28912027Sjungma@eit.uni-kl.de sc_fxnum_subref& operator op ## = ( tp ); 29012027Sjungma@eit.uni-kl.de 29112027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_A(op) \ 29212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T_A(op,const sc_fxnum_subref&) \ 29312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T_A(op,const sc_fxnum_fast_subref&) \ 29412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T_A(op,const sc_bv_base&) \ 29512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T_A(op,const sc_lv_base&) 29612027Sjungma@eit.uni-kl.de 29712027Sjungma@eit.uni-kl.de DECL_ASN_OP_A(&) 29812027Sjungma@eit.uni-kl.de DECL_ASN_OP_A(|) 29912027Sjungma@eit.uni-kl.de DECL_ASN_OP_A(^) 30012027Sjungma@eit.uni-kl.de 30112027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T_A 30212027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_A 30312027Sjungma@eit.uni-kl.de 30412027Sjungma@eit.uni-kl.de 30512027Sjungma@eit.uni-kl.de // relational operators 30612027Sjungma@eit.uni-kl.de 30712027Sjungma@eit.uni-kl.de#define DECL_REL_OP_T(op,tp) \ 30812027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum_subref&, tp ); \ 30912027Sjungma@eit.uni-kl.de friend bool operator op ( tp, const sc_fxnum_subref& ); 31012027Sjungma@eit.uni-kl.de 31112027Sjungma@eit.uni-kl.de#define DECL_REL_OP(op) \ 31212027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum_subref&, \ 31312027Sjungma@eit.uni-kl.de const sc_fxnum_subref& ); \ 31412027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum_subref&, \ 31512027Sjungma@eit.uni-kl.de const sc_fxnum_fast_subref& ); \ 31612027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_bv_base&) \ 31712027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_lv_base&) \ 31812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const char*) \ 31912027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const bool*) \ 32012027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_signed&) \ 32112027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_unsigned&) \ 32212027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int) \ 32312027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned int) \ 32412027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,long) \ 32512027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned long) 32612027Sjungma@eit.uni-kl.de 32712027Sjungma@eit.uni-kl.de DECL_REL_OP(==) 32812027Sjungma@eit.uni-kl.de DECL_REL_OP(!=) 32912027Sjungma@eit.uni-kl.de 33012027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_T 33112027Sjungma@eit.uni-kl.de#undef DECL_REL_OP 33212027Sjungma@eit.uni-kl.de 33312027Sjungma@eit.uni-kl.de 33412027Sjungma@eit.uni-kl.de // reduce functions 33512027Sjungma@eit.uni-kl.de 33612027Sjungma@eit.uni-kl.de bool and_reduce() const; 33712027Sjungma@eit.uni-kl.de bool nand_reduce() const; 33812027Sjungma@eit.uni-kl.de bool or_reduce() const; 33912027Sjungma@eit.uni-kl.de bool nor_reduce() const; 34012027Sjungma@eit.uni-kl.de bool xor_reduce() const; 34112027Sjungma@eit.uni-kl.de bool xnor_reduce() const; 34212027Sjungma@eit.uni-kl.de 34312027Sjungma@eit.uni-kl.de 34412027Sjungma@eit.uni-kl.de // query parameter 34512027Sjungma@eit.uni-kl.de 34612027Sjungma@eit.uni-kl.de int length() const; 34712027Sjungma@eit.uni-kl.de 34812027Sjungma@eit.uni-kl.de 34912027Sjungma@eit.uni-kl.de // explicit conversions 35012027Sjungma@eit.uni-kl.de 35112027Sjungma@eit.uni-kl.de int to_int() const; 35212027Sjungma@eit.uni-kl.de unsigned int to_uint() const; 35312027Sjungma@eit.uni-kl.de long to_long() const; 35412027Sjungma@eit.uni-kl.de unsigned long to_ulong() const; 35512027Sjungma@eit.uni-kl.de int64 to_int64() const; 35612027Sjungma@eit.uni-kl.de uint64 to_uint64() const; 35712027Sjungma@eit.uni-kl.de 35812027Sjungma@eit.uni-kl.de#ifdef SC_DT_DEPRECATED 35912027Sjungma@eit.uni-kl.de int to_signed() const; 36012027Sjungma@eit.uni-kl.de unsigned int to_unsigned() const; 36112027Sjungma@eit.uni-kl.de#endif 36212027Sjungma@eit.uni-kl.de 36312027Sjungma@eit.uni-kl.de const std::string to_string() const; 36412027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep ) const; 36512027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool ) const; 36612027Sjungma@eit.uni-kl.de 36712027Sjungma@eit.uni-kl.de 36812027Sjungma@eit.uni-kl.de // implicit conversion 36912027Sjungma@eit.uni-kl.de 37012027Sjungma@eit.uni-kl.de operator sc_bv_base() const; 37112027Sjungma@eit.uni-kl.de 37212027Sjungma@eit.uni-kl.de 37312027Sjungma@eit.uni-kl.de // print or dump content 37412027Sjungma@eit.uni-kl.de 37512027Sjungma@eit.uni-kl.de void print( ::std::ostream& = ::std::cout ) const; 37612027Sjungma@eit.uni-kl.de void scan( ::std::istream& = ::std::cin ); 37712027Sjungma@eit.uni-kl.de void dump( ::std::ostream& = ::std::cout ) const; 37812027Sjungma@eit.uni-kl.de 37912027Sjungma@eit.uni-kl.deprivate: 38012027Sjungma@eit.uni-kl.de 38112027Sjungma@eit.uni-kl.de sc_fxnum& m_num; 38212027Sjungma@eit.uni-kl.de int m_from; 38312027Sjungma@eit.uni-kl.de int m_to; 38412027Sjungma@eit.uni-kl.de 38512027Sjungma@eit.uni-kl.de sc_bv_base& m_bv; 38612027Sjungma@eit.uni-kl.de 38712027Sjungma@eit.uni-kl.deprivate: 38812027Sjungma@eit.uni-kl.de 38912027Sjungma@eit.uni-kl.de // disabled 39012027Sjungma@eit.uni-kl.de sc_fxnum_subref(); 39112027Sjungma@eit.uni-kl.de}; 39212027Sjungma@eit.uni-kl.de 39312027Sjungma@eit.uni-kl.de 39412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 39512027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_fast_subref 39612027Sjungma@eit.uni-kl.de// 39712027Sjungma@eit.uni-kl.de// Proxy class for part-selection in class sc_fxnum_fast, 39812027Sjungma@eit.uni-kl.de// behaves like sc_bv_base. 39912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 40012027Sjungma@eit.uni-kl.de 40112027Sjungma@eit.uni-kl.declass sc_fxnum_fast_subref 40212027Sjungma@eit.uni-kl.de{ 40312027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast; 40412027Sjungma@eit.uni-kl.de friend class sc_fxnum_subref; 40512027Sjungma@eit.uni-kl.de 40612027Sjungma@eit.uni-kl.de bool get() const; 40712027Sjungma@eit.uni-kl.de bool set(); 40812027Sjungma@eit.uni-kl.de 40912027Sjungma@eit.uni-kl.de 41012027Sjungma@eit.uni-kl.de // constructor 41112027Sjungma@eit.uni-kl.de 41212027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref( sc_fxnum_fast&, int, int ); 41312027Sjungma@eit.uni-kl.de 41412027Sjungma@eit.uni-kl.depublic: 41512027Sjungma@eit.uni-kl.de 41612027Sjungma@eit.uni-kl.de // copy constructor 41712027Sjungma@eit.uni-kl.de 41812027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref( const sc_fxnum_fast_subref& ); 41912027Sjungma@eit.uni-kl.de 42012027Sjungma@eit.uni-kl.de 42112027Sjungma@eit.uni-kl.de // destructor 42212027Sjungma@eit.uni-kl.de 42312027Sjungma@eit.uni-kl.de ~sc_fxnum_fast_subref(); 42412027Sjungma@eit.uni-kl.de 42512027Sjungma@eit.uni-kl.de 42612027Sjungma@eit.uni-kl.de // assignment operators 42712027Sjungma@eit.uni-kl.de 42812027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(tp) \ 42912027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref& operator = ( tp ); 43012027Sjungma@eit.uni-kl.de 43112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_fxnum_subref&) 43212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_fxnum_fast_subref&) 43312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_bv_base&) 43412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_lv_base&) 43512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const char*) 43612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const bool*) 43712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_signed&) 43812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_unsigned&) 43912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_int_base&) 44012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(const sc_uint_base&) 44112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(int64) 44212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(uint64) 44312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(int) 44412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(unsigned int) 44512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(long) 44612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(unsigned long) 44712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(char) 44812027Sjungma@eit.uni-kl.de 44912027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T 45012027Sjungma@eit.uni-kl.de 45112027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T_A(op,tp) \ 45212027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref& operator op ## = ( tp ); 45312027Sjungma@eit.uni-kl.de 45412027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_A(op) \ 45512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T_A(op,const sc_fxnum_subref&) \ 45612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T_A(op,const sc_fxnum_fast_subref&) \ 45712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T_A(op,const sc_bv_base&) \ 45812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T_A(op,const sc_lv_base&) 45912027Sjungma@eit.uni-kl.de 46012027Sjungma@eit.uni-kl.de DECL_ASN_OP_A(&) 46112027Sjungma@eit.uni-kl.de DECL_ASN_OP_A(|) 46212027Sjungma@eit.uni-kl.de DECL_ASN_OP_A(^) 46312027Sjungma@eit.uni-kl.de 46412027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T_A 46512027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_A 46612027Sjungma@eit.uni-kl.de 46712027Sjungma@eit.uni-kl.de 46812027Sjungma@eit.uni-kl.de // relational operators 46912027Sjungma@eit.uni-kl.de 47012027Sjungma@eit.uni-kl.de#define DECL_REL_OP_T(op,tp) \ 47112027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum_fast_subref&, tp ); \ 47212027Sjungma@eit.uni-kl.de friend bool operator op ( tp, const sc_fxnum_fast_subref& ); 47312027Sjungma@eit.uni-kl.de 47412027Sjungma@eit.uni-kl.de#define DECL_REL_OP(op) \ 47512027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum_fast_subref&, \ 47612027Sjungma@eit.uni-kl.de const sc_fxnum_fast_subref& ); \ 47712027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum_fast_subref&, \ 47812027Sjungma@eit.uni-kl.de const sc_fxnum_subref& ); \ 47912027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_bv_base&) \ 48012027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_lv_base&) \ 48112027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const char*) \ 48212027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const bool*) \ 48312027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_signed&) \ 48412027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_unsigned&) \ 48512027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int) \ 48612027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned int) \ 48712027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,long) \ 48812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned long) 48912027Sjungma@eit.uni-kl.de 49012027Sjungma@eit.uni-kl.de DECL_REL_OP(==) 49112027Sjungma@eit.uni-kl.de DECL_REL_OP(!=) 49212027Sjungma@eit.uni-kl.de 49312027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_T 49412027Sjungma@eit.uni-kl.de#undef DECL_REL_OP 49512027Sjungma@eit.uni-kl.de 49612027Sjungma@eit.uni-kl.de 49712027Sjungma@eit.uni-kl.de // reduce functions 49812027Sjungma@eit.uni-kl.de 49912027Sjungma@eit.uni-kl.de bool and_reduce() const; 50012027Sjungma@eit.uni-kl.de bool nand_reduce() const; 50112027Sjungma@eit.uni-kl.de bool or_reduce() const; 50212027Sjungma@eit.uni-kl.de bool nor_reduce() const; 50312027Sjungma@eit.uni-kl.de bool xor_reduce() const; 50412027Sjungma@eit.uni-kl.de bool xnor_reduce() const; 50512027Sjungma@eit.uni-kl.de 50612027Sjungma@eit.uni-kl.de 50712027Sjungma@eit.uni-kl.de // query parameter 50812027Sjungma@eit.uni-kl.de 50912027Sjungma@eit.uni-kl.de int length() const; 51012027Sjungma@eit.uni-kl.de 51112027Sjungma@eit.uni-kl.de 51212027Sjungma@eit.uni-kl.de // explicit conversions 51312027Sjungma@eit.uni-kl.de 51412027Sjungma@eit.uni-kl.de int to_int() const; 51512027Sjungma@eit.uni-kl.de unsigned int to_uint() const; 51612027Sjungma@eit.uni-kl.de long to_long() const; 51712027Sjungma@eit.uni-kl.de unsigned long to_ulong() const; 51812027Sjungma@eit.uni-kl.de int64 to_int64() const; 51912027Sjungma@eit.uni-kl.de uint64 to_uint64() const; 52012027Sjungma@eit.uni-kl.de 52112027Sjungma@eit.uni-kl.de#ifdef SC_DT_DEPRECATED 52212027Sjungma@eit.uni-kl.de int to_signed() const; 52312027Sjungma@eit.uni-kl.de unsigned int to_unsigned() const; 52412027Sjungma@eit.uni-kl.de#endif 52512027Sjungma@eit.uni-kl.de 52612027Sjungma@eit.uni-kl.de const std::string to_string() const; 52712027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep ) const; 52812027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool ) const; 52912027Sjungma@eit.uni-kl.de 53012027Sjungma@eit.uni-kl.de 53112027Sjungma@eit.uni-kl.de // implicit conversion 53212027Sjungma@eit.uni-kl.de 53312027Sjungma@eit.uni-kl.de operator sc_bv_base() const; 53412027Sjungma@eit.uni-kl.de 53512027Sjungma@eit.uni-kl.de 53612027Sjungma@eit.uni-kl.de // print or dump content 53712027Sjungma@eit.uni-kl.de 53812027Sjungma@eit.uni-kl.de void print( ::std::ostream& = ::std::cout ) const; 53912027Sjungma@eit.uni-kl.de void scan( ::std::istream& = ::std::cin ); 54012027Sjungma@eit.uni-kl.de void dump( ::std::ostream& = ::std::cout ) const; 54112027Sjungma@eit.uni-kl.de 54212027Sjungma@eit.uni-kl.deprivate: 54312027Sjungma@eit.uni-kl.de 54412027Sjungma@eit.uni-kl.de sc_fxnum_fast& m_num; 54512027Sjungma@eit.uni-kl.de int m_from; 54612027Sjungma@eit.uni-kl.de int m_to; 54712027Sjungma@eit.uni-kl.de 54812027Sjungma@eit.uni-kl.de sc_bv_base& m_bv; 54912027Sjungma@eit.uni-kl.de 55012027Sjungma@eit.uni-kl.deprivate: 55112027Sjungma@eit.uni-kl.de 55212027Sjungma@eit.uni-kl.de // disabled 55312027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref(); 55412027Sjungma@eit.uni-kl.de}; 55512027Sjungma@eit.uni-kl.de 55612027Sjungma@eit.uni-kl.de 55712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 55812027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum 55912027Sjungma@eit.uni-kl.de// 56012027Sjungma@eit.uni-kl.de// Base class for the fixed-point types; arbitrary precision. 56112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 56212027Sjungma@eit.uni-kl.de 56312027Sjungma@eit.uni-kl.declass sc_fxnum 56412027Sjungma@eit.uni-kl.de{ 56512027Sjungma@eit.uni-kl.de friend class sc_fxval; 56612027Sjungma@eit.uni-kl.de 56712027Sjungma@eit.uni-kl.de friend class sc_fxnum_bitref; 56812027Sjungma@eit.uni-kl.de friend class sc_fxnum_subref; 56912027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast_bitref; 57012027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast_subref; 57112027Sjungma@eit.uni-kl.de 57212027Sjungma@eit.uni-kl.de friend class sc_core::vcd_sc_fxnum_trace; 57312027Sjungma@eit.uni-kl.de friend class sc_core::wif_sc_fxnum_trace; 57412027Sjungma@eit.uni-kl.de 57512027Sjungma@eit.uni-kl.deprotected: 57612027Sjungma@eit.uni-kl.de 57712027Sjungma@eit.uni-kl.de sc_fxnum_observer* observer() const; 57812027Sjungma@eit.uni-kl.de 57912027Sjungma@eit.uni-kl.de 58012027Sjungma@eit.uni-kl.de void cast(); 58112027Sjungma@eit.uni-kl.de 58212027Sjungma@eit.uni-kl.de 58312027Sjungma@eit.uni-kl.de // constructors 58412027Sjungma@eit.uni-kl.de 58512027Sjungma@eit.uni-kl.de sc_fxnum( const sc_fxtype_params&, 58612027Sjungma@eit.uni-kl.de sc_enc, 58712027Sjungma@eit.uni-kl.de const sc_fxcast_switch&, 58812027Sjungma@eit.uni-kl.de sc_fxnum_observer* ); 58912027Sjungma@eit.uni-kl.de 59012027Sjungma@eit.uni-kl.de#define DECL_CTOR_T(tp) \ 59112027Sjungma@eit.uni-kl.de sc_fxnum( tp, \ 59212027Sjungma@eit.uni-kl.de const sc_fxtype_params&, \ 59312027Sjungma@eit.uni-kl.de sc_enc, \ 59412027Sjungma@eit.uni-kl.de const sc_fxcast_switch&, \ 59512027Sjungma@eit.uni-kl.de sc_fxnum_observer* ); 59612027Sjungma@eit.uni-kl.de 59712027Sjungma@eit.uni-kl.de DECL_CTOR_T(int) 59812027Sjungma@eit.uni-kl.de DECL_CTOR_T(unsigned int) 59912027Sjungma@eit.uni-kl.de DECL_CTOR_T(long) 60012027Sjungma@eit.uni-kl.de DECL_CTOR_T(unsigned long) 60112027Sjungma@eit.uni-kl.de DECL_CTOR_T(float) 60212027Sjungma@eit.uni-kl.de DECL_CTOR_T(double) 60312027Sjungma@eit.uni-kl.de DECL_CTOR_T(const char*) 60412027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_fxval&) 60512027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_fxval_fast&) 60612027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_fxnum&) 60712027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_fxnum_fast&) 60812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 60912027Sjungma@eit.uni-kl.de DECL_CTOR_T(int64) 61012027Sjungma@eit.uni-kl.de DECL_CTOR_T(uint64) 61112027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_int_base&) 61212027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_uint_base&) 61312027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_signed&) 61412027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_unsigned&) 61512027Sjungma@eit.uni-kl.de#endif 61612027Sjungma@eit.uni-kl.de 61712027Sjungma@eit.uni-kl.de#undef DECL_CTOR_T 61812027Sjungma@eit.uni-kl.de 61912027Sjungma@eit.uni-kl.de ~sc_fxnum(); 62012027Sjungma@eit.uni-kl.de 62112027Sjungma@eit.uni-kl.de 62212027Sjungma@eit.uni-kl.de // internal use only; 62312027Sjungma@eit.uni-kl.de const scfx_rep* get_rep() const; 62412027Sjungma@eit.uni-kl.de 62512027Sjungma@eit.uni-kl.depublic: 62612027Sjungma@eit.uni-kl.de 62712027Sjungma@eit.uni-kl.de // unary operators 62812027Sjungma@eit.uni-kl.de 62912027Sjungma@eit.uni-kl.de const sc_fxval operator - () const; 63012027Sjungma@eit.uni-kl.de const sc_fxval operator + () const; 63112027Sjungma@eit.uni-kl.de 63212027Sjungma@eit.uni-kl.de 63312027Sjungma@eit.uni-kl.de // unary functions 63412027Sjungma@eit.uni-kl.de 63512027Sjungma@eit.uni-kl.de friend void neg( sc_fxval&, const sc_fxnum& ); 63612027Sjungma@eit.uni-kl.de friend void neg( sc_fxnum&, const sc_fxnum& ); 63712027Sjungma@eit.uni-kl.de 63812027Sjungma@eit.uni-kl.de 63912027Sjungma@eit.uni-kl.de // binary operators 64012027Sjungma@eit.uni-kl.de 64112027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_T(op,tp) \ 64212027Sjungma@eit.uni-kl.de friend const sc_fxval operator op ( const sc_fxnum&, tp ); \ 64312027Sjungma@eit.uni-kl.de friend const sc_fxval operator op ( tp, const sc_fxnum& ); 64412027Sjungma@eit.uni-kl.de 64512027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 64612027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_OTHER(op) \ 64712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,int64) \ 64812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,uint64) \ 64912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_int_base&) \ 65012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_uint_base&) \ 65112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_signed&) \ 65212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_unsigned&) 65312027Sjungma@eit.uni-kl.de#else 65412027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_OTHER(op) 65512027Sjungma@eit.uni-kl.de#endif 65612027Sjungma@eit.uni-kl.de 65712027Sjungma@eit.uni-kl.de#define DECL_BIN_OP(op,dummy) \ 65812027Sjungma@eit.uni-kl.de friend const sc_fxval operator op ( const sc_fxnum&, const sc_fxnum& ); \ 65912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,int) \ 66012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,unsigned int) \ 66112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,long) \ 66212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,unsigned long) \ 66312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,float) \ 66412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,double) \ 66512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const char*) \ 66612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_fxval&) \ 66712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_fxval_fast&) \ 66812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_fxnum_fast&) \ 66912027Sjungma@eit.uni-kl.de DECL_BIN_OP_OTHER(op) 67012027Sjungma@eit.uni-kl.de 67112027Sjungma@eit.uni-kl.de DECL_BIN_OP(*,mult) 67212027Sjungma@eit.uni-kl.de DECL_BIN_OP(+,add) 67312027Sjungma@eit.uni-kl.de DECL_BIN_OP(-,sub) 67412027Sjungma@eit.uni-kl.de// don't use macros 67512027Sjungma@eit.uni-kl.de// DECL_BIN_OP(/,div) 67612027Sjungma@eit.uni-kl.de friend const sc_fxval operator / ( const sc_fxnum&, const sc_fxnum& ); 67712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,int) 67812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,unsigned int) 67912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,long) 68012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,unsigned long) 68112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,float) 68212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,double) 68312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const char*) 68412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_fxval&) 68512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_fxval_fast&) 68612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_fxnum_fast&) 68712027Sjungma@eit.uni-kl.de// DECL_BIN_OP_OTHER(op) 68812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 68912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,int64) 69012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,uint64) 69112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_int_base&) 69212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_uint_base&) 69312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_signed&) 69412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_unsigned&) 69512027Sjungma@eit.uni-kl.de#endif 69612027Sjungma@eit.uni-kl.de 69712027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP_T 69812027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP_OTHER 69912027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP 70012027Sjungma@eit.uni-kl.de 70112027Sjungma@eit.uni-kl.de friend const sc_fxval operator << ( const sc_fxnum&, int ); 70212027Sjungma@eit.uni-kl.de friend const sc_fxval operator >> ( const sc_fxnum&, int ); 70312027Sjungma@eit.uni-kl.de 70412027Sjungma@eit.uni-kl.de 70512027Sjungma@eit.uni-kl.de // binary functions 70612027Sjungma@eit.uni-kl.de 70712027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_T(fnc,tp) \ 70812027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval&, const sc_fxnum&, tp ); \ 70912027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval&, tp, const sc_fxnum& ); \ 71012027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxnum&, const sc_fxnum&, tp ); \ 71112027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxnum&, tp, const sc_fxnum& ); 71212027Sjungma@eit.uni-kl.de 71312027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 71412027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_OTHER(fnc) \ 71512027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,int64) \ 71612027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,uint64) \ 71712027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_int_base&) \ 71812027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_uint_base&) \ 71912027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_signed&) \ 72012027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_unsigned&) 72112027Sjungma@eit.uni-kl.de#else 72212027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_OTHER(fnc) 72312027Sjungma@eit.uni-kl.de#endif 72412027Sjungma@eit.uni-kl.de 72512027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC(fnc) \ 72612027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval&, const sc_fxnum&, const sc_fxnum& ); \ 72712027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxnum&, const sc_fxnum&, const sc_fxnum& ); \ 72812027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,int) \ 72912027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,unsigned int) \ 73012027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,long) \ 73112027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,unsigned long) \ 73212027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,float) \ 73312027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,double) \ 73412027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const char*) \ 73512027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxval&) \ 73612027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxval_fast&) \ 73712027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxnum_fast&) \ 73812027Sjungma@eit.uni-kl.de DECL_BIN_FNC_OTHER(fnc) 73912027Sjungma@eit.uni-kl.de 74012027Sjungma@eit.uni-kl.de DECL_BIN_FNC(mult) 74112027Sjungma@eit.uni-kl.de DECL_BIN_FNC(div) 74212027Sjungma@eit.uni-kl.de DECL_BIN_FNC(add) 74312027Sjungma@eit.uni-kl.de DECL_BIN_FNC(sub) 74412027Sjungma@eit.uni-kl.de 74512027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC_T 74612027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC_OTHER 74712027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC 74812027Sjungma@eit.uni-kl.de 74912027Sjungma@eit.uni-kl.de friend void lshift( sc_fxval&, const sc_fxnum&, int ); 75012027Sjungma@eit.uni-kl.de friend void rshift( sc_fxval&, const sc_fxnum&, int ); 75112027Sjungma@eit.uni-kl.de friend void lshift( sc_fxnum&, const sc_fxnum&, int ); 75212027Sjungma@eit.uni-kl.de friend void rshift( sc_fxnum&, const sc_fxnum&, int ); 75312027Sjungma@eit.uni-kl.de 75412027Sjungma@eit.uni-kl.de 75512027Sjungma@eit.uni-kl.de // relational (including equality) operators 75612027Sjungma@eit.uni-kl.de 75712027Sjungma@eit.uni-kl.de#define DECL_REL_OP_T(op,tp) \ 75812027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum&, tp ); \ 75912027Sjungma@eit.uni-kl.de friend bool operator op ( tp, const sc_fxnum& ); 76012027Sjungma@eit.uni-kl.de 76112027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 76212027Sjungma@eit.uni-kl.de#define DECL_REL_OP_OTHER(op) \ 76312027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int64) \ 76412027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,uint64) \ 76512027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_int_base&) \ 76612027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_uint_base&) \ 76712027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_signed&) \ 76812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_unsigned&) 76912027Sjungma@eit.uni-kl.de#else 77012027Sjungma@eit.uni-kl.de#define DECL_REL_OP_OTHER(op) 77112027Sjungma@eit.uni-kl.de#endif 77212027Sjungma@eit.uni-kl.de 77312027Sjungma@eit.uni-kl.de#define DECL_REL_OP(op) \ 77412027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum&, const sc_fxnum& ); \ 77512027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int) \ 77612027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned int) \ 77712027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,long) \ 77812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned long) \ 77912027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,float) \ 78012027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,double) \ 78112027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const char*) \ 78212027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_fxval&) \ 78312027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_fxval_fast&) \ 78412027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_fxnum_fast&) \ 78512027Sjungma@eit.uni-kl.de DECL_REL_OP_OTHER(op) 78612027Sjungma@eit.uni-kl.de 78712027Sjungma@eit.uni-kl.de DECL_REL_OP(<) 78812027Sjungma@eit.uni-kl.de DECL_REL_OP(<=) 78912027Sjungma@eit.uni-kl.de DECL_REL_OP(>) 79012027Sjungma@eit.uni-kl.de DECL_REL_OP(>=) 79112027Sjungma@eit.uni-kl.de DECL_REL_OP(==) 79212027Sjungma@eit.uni-kl.de DECL_REL_OP(!=) 79312027Sjungma@eit.uni-kl.de 79412027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_T 79512027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_OTHER 79612027Sjungma@eit.uni-kl.de#undef DECL_REL_OP 79712027Sjungma@eit.uni-kl.de 79812027Sjungma@eit.uni-kl.de 79912027Sjungma@eit.uni-kl.de // assignment operators 80012027Sjungma@eit.uni-kl.de 80112027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(op,tp) \ 80212027Sjungma@eit.uni-kl.de sc_fxnum& operator op( tp ); 80312027Sjungma@eit.uni-kl.de 80412027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 80512027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op) \ 80612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,int64) \ 80712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,uint64) \ 80812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_int_base&) \ 80912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_uint_base&) \ 81012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_signed&) \ 81112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_unsigned&) 81212027Sjungma@eit.uni-kl.de#else 81312027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op) 81412027Sjungma@eit.uni-kl.de#endif 81512027Sjungma@eit.uni-kl.de 81612027Sjungma@eit.uni-kl.de#define DECL_ASN_OP(op) \ 81712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,int) \ 81812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,unsigned int) \ 81912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,long) \ 82012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,unsigned long) \ 82112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,float) \ 82212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,double) \ 82312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const char*) \ 82412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxval&) \ 82512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxval_fast&) \ 82612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum&) \ 82712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ 82812027Sjungma@eit.uni-kl.de DECL_ASN_OP_OTHER(op) 82912027Sjungma@eit.uni-kl.de 83012027Sjungma@eit.uni-kl.de DECL_ASN_OP(=) 83112027Sjungma@eit.uni-kl.de 83212027Sjungma@eit.uni-kl.de DECL_ASN_OP(*=) 83312027Sjungma@eit.uni-kl.de DECL_ASN_OP(/=) 83412027Sjungma@eit.uni-kl.de DECL_ASN_OP(+=) 83512027Sjungma@eit.uni-kl.de DECL_ASN_OP(-=) 83612027Sjungma@eit.uni-kl.de 83712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(<<=,int) 83812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(>>=,int) 83912027Sjungma@eit.uni-kl.de 84012027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T 84112027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_OTHER 84212027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP 84312027Sjungma@eit.uni-kl.de 84412027Sjungma@eit.uni-kl.de 84512027Sjungma@eit.uni-kl.de // auto-increment and auto-decrement 84612027Sjungma@eit.uni-kl.de 84712027Sjungma@eit.uni-kl.de const sc_fxval operator ++ ( int ); 84812027Sjungma@eit.uni-kl.de const sc_fxval operator -- ( int ); 84912027Sjungma@eit.uni-kl.de 85012027Sjungma@eit.uni-kl.de sc_fxnum& operator ++ (); 85112027Sjungma@eit.uni-kl.de sc_fxnum& operator -- (); 85212027Sjungma@eit.uni-kl.de 85312027Sjungma@eit.uni-kl.de 85412027Sjungma@eit.uni-kl.de // bit selection 85512027Sjungma@eit.uni-kl.de 85612027Sjungma@eit.uni-kl.de const sc_fxnum_bitref operator [] ( int ) const; 85712027Sjungma@eit.uni-kl.de sc_fxnum_bitref operator [] ( int ); 85812027Sjungma@eit.uni-kl.de 85912027Sjungma@eit.uni-kl.de const sc_fxnum_bitref bit( int ) const; 86012027Sjungma@eit.uni-kl.de sc_fxnum_bitref bit( int ); 86112027Sjungma@eit.uni-kl.de 86212027Sjungma@eit.uni-kl.de 86312027Sjungma@eit.uni-kl.de // part selection 86412027Sjungma@eit.uni-kl.de 86512027Sjungma@eit.uni-kl.de const sc_fxnum_subref operator () ( int, int ) const; 86612027Sjungma@eit.uni-kl.de sc_fxnum_subref operator () ( int, int ); 86712027Sjungma@eit.uni-kl.de 86812027Sjungma@eit.uni-kl.de const sc_fxnum_subref range( int, int ) const; 86912027Sjungma@eit.uni-kl.de sc_fxnum_subref range( int, int ); 87012027Sjungma@eit.uni-kl.de 87112027Sjungma@eit.uni-kl.de 87212027Sjungma@eit.uni-kl.de const sc_fxnum_subref operator () () const; 87312027Sjungma@eit.uni-kl.de sc_fxnum_subref operator () (); 87412027Sjungma@eit.uni-kl.de 87512027Sjungma@eit.uni-kl.de const sc_fxnum_subref range() const; 87612027Sjungma@eit.uni-kl.de sc_fxnum_subref range(); 87712027Sjungma@eit.uni-kl.de 87812027Sjungma@eit.uni-kl.de 87912027Sjungma@eit.uni-kl.de // implicit conversion 88012027Sjungma@eit.uni-kl.de 88112027Sjungma@eit.uni-kl.de operator double() const; // necessary evil! 88212027Sjungma@eit.uni-kl.de 88312027Sjungma@eit.uni-kl.de 88412027Sjungma@eit.uni-kl.de // explicit conversion to primitive types 88512027Sjungma@eit.uni-kl.de 88612027Sjungma@eit.uni-kl.de short to_short() const; 88712027Sjungma@eit.uni-kl.de unsigned short to_ushort() const; 88812027Sjungma@eit.uni-kl.de int to_int() const; 88912027Sjungma@eit.uni-kl.de unsigned int to_uint() const; 89012027Sjungma@eit.uni-kl.de long to_long() const; 89112027Sjungma@eit.uni-kl.de unsigned long to_ulong() const; 89212027Sjungma@eit.uni-kl.de int64 to_int64() const; 89312027Sjungma@eit.uni-kl.de uint64 to_uint64() const; 89412027Sjungma@eit.uni-kl.de float to_float() const; 89512027Sjungma@eit.uni-kl.de double to_double() const; 89612027Sjungma@eit.uni-kl.de 89712027Sjungma@eit.uni-kl.de 89812027Sjungma@eit.uni-kl.de // explicit conversion to character string 89912027Sjungma@eit.uni-kl.de 90012027Sjungma@eit.uni-kl.de const std::string to_string() const; 90112027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep ) const; 90212027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool ) const; 90312027Sjungma@eit.uni-kl.de const std::string to_string( sc_fmt ) const; 90412027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, sc_fmt ) const; 90512027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool, sc_fmt ) const; 90612027Sjungma@eit.uni-kl.de 90712027Sjungma@eit.uni-kl.de const std::string to_dec() const; 90812027Sjungma@eit.uni-kl.de const std::string to_bin() const; 90912027Sjungma@eit.uni-kl.de const std::string to_oct() const; 91012027Sjungma@eit.uni-kl.de const std::string to_hex() const; 91112027Sjungma@eit.uni-kl.de 91212027Sjungma@eit.uni-kl.de 91312027Sjungma@eit.uni-kl.de // query value 91412027Sjungma@eit.uni-kl.de 91512027Sjungma@eit.uni-kl.de bool is_neg() const; 91612027Sjungma@eit.uni-kl.de bool is_zero() const; 91712027Sjungma@eit.uni-kl.de 91812027Sjungma@eit.uni-kl.de // internal use only; 91912027Sjungma@eit.uni-kl.de bool is_normal() const; 92012027Sjungma@eit.uni-kl.de 92112027Sjungma@eit.uni-kl.de bool quantization_flag() const; 92212027Sjungma@eit.uni-kl.de bool overflow_flag() const; 92312027Sjungma@eit.uni-kl.de 92412027Sjungma@eit.uni-kl.de const sc_fxval value() const; 92512027Sjungma@eit.uni-kl.de 92612027Sjungma@eit.uni-kl.de 92712027Sjungma@eit.uni-kl.de // query parameters 92812027Sjungma@eit.uni-kl.de 92912027Sjungma@eit.uni-kl.de int wl() const; 93012027Sjungma@eit.uni-kl.de int iwl() const; 93112027Sjungma@eit.uni-kl.de sc_q_mode q_mode() const; 93212027Sjungma@eit.uni-kl.de sc_o_mode o_mode() const; 93312027Sjungma@eit.uni-kl.de int n_bits() const; 93412027Sjungma@eit.uni-kl.de 93512027Sjungma@eit.uni-kl.de const sc_fxtype_params& type_params() const; 93612027Sjungma@eit.uni-kl.de 93712027Sjungma@eit.uni-kl.de const sc_fxcast_switch& cast_switch() const; 93812027Sjungma@eit.uni-kl.de 93912027Sjungma@eit.uni-kl.de 94012027Sjungma@eit.uni-kl.de // print or dump content 94112027Sjungma@eit.uni-kl.de 94212027Sjungma@eit.uni-kl.de void print( ::std::ostream& = ::std::cout ) const; 94312027Sjungma@eit.uni-kl.de void scan( ::std::istream& = ::std::cin ); 94412027Sjungma@eit.uni-kl.de void dump( ::std::ostream& = ::std::cout ) const; 94512027Sjungma@eit.uni-kl.de 94612027Sjungma@eit.uni-kl.de 94712027Sjungma@eit.uni-kl.de // internal use only; 94812027Sjungma@eit.uni-kl.de void observer_read() const; 94912027Sjungma@eit.uni-kl.de 95012027Sjungma@eit.uni-kl.de 95112027Sjungma@eit.uni-kl.de // internal use only; 95212027Sjungma@eit.uni-kl.de bool get_bit( int ) const; 95312027Sjungma@eit.uni-kl.de 95412027Sjungma@eit.uni-kl.deprotected: 95512027Sjungma@eit.uni-kl.de 95612027Sjungma@eit.uni-kl.de bool set_bit( int, bool ); 95712027Sjungma@eit.uni-kl.de 95812027Sjungma@eit.uni-kl.de 95912027Sjungma@eit.uni-kl.de bool get_slice( int, int, sc_bv_base& ) const; 96012027Sjungma@eit.uni-kl.de bool set_slice( int, int, const sc_bv_base& ); 96112027Sjungma@eit.uni-kl.de 96212027Sjungma@eit.uni-kl.de 96312027Sjungma@eit.uni-kl.de sc_fxnum_observer* lock_observer() const; 96412027Sjungma@eit.uni-kl.de void unlock_observer( sc_fxnum_observer* ) const; 96512027Sjungma@eit.uni-kl.de 96612027Sjungma@eit.uni-kl.deprivate: 96712027Sjungma@eit.uni-kl.de 96812027Sjungma@eit.uni-kl.de scfx_rep* m_rep; 96912027Sjungma@eit.uni-kl.de 97012027Sjungma@eit.uni-kl.de scfx_params m_params; 97112027Sjungma@eit.uni-kl.de bool m_q_flag; 97212027Sjungma@eit.uni-kl.de bool m_o_flag; 97312027Sjungma@eit.uni-kl.de 97412027Sjungma@eit.uni-kl.de mutable sc_fxnum_observer* m_observer; 97512027Sjungma@eit.uni-kl.de 97612027Sjungma@eit.uni-kl.deprivate: 97712027Sjungma@eit.uni-kl.de 97812027Sjungma@eit.uni-kl.de // disabled 97912027Sjungma@eit.uni-kl.de sc_fxnum(); 98012027Sjungma@eit.uni-kl.de sc_fxnum( const sc_fxnum& ); 98112027Sjungma@eit.uni-kl.de}; 98212027Sjungma@eit.uni-kl.de 98312027Sjungma@eit.uni-kl.de 98412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 98512027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_fast 98612027Sjungma@eit.uni-kl.de// 98712027Sjungma@eit.uni-kl.de// Base class for the fixed-point types; limited precision. 98812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 98912027Sjungma@eit.uni-kl.de 99012027Sjungma@eit.uni-kl.declass sc_fxnum_fast 99112027Sjungma@eit.uni-kl.de{ 99212027Sjungma@eit.uni-kl.de friend class sc_fxval_fast; 99312027Sjungma@eit.uni-kl.de 99412027Sjungma@eit.uni-kl.de friend class sc_fxnum_bitref; 99512027Sjungma@eit.uni-kl.de friend class sc_fxnum_subref; 99612027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast_bitref; 99712027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast_subref; 99812027Sjungma@eit.uni-kl.de 99912027Sjungma@eit.uni-kl.de friend class sc_core::vcd_sc_fxnum_fast_trace; 100012027Sjungma@eit.uni-kl.de friend class sc_core::wif_sc_fxnum_fast_trace; 100112027Sjungma@eit.uni-kl.de 100212027Sjungma@eit.uni-kl.deprotected: 100312027Sjungma@eit.uni-kl.de 100412027Sjungma@eit.uni-kl.de sc_fxnum_fast_observer* observer() const; 100512027Sjungma@eit.uni-kl.de 100612027Sjungma@eit.uni-kl.de 100712027Sjungma@eit.uni-kl.de void cast(); 100812027Sjungma@eit.uni-kl.de 100912027Sjungma@eit.uni-kl.de 101012027Sjungma@eit.uni-kl.de // constructors 101112027Sjungma@eit.uni-kl.de 101212027Sjungma@eit.uni-kl.de sc_fxnum_fast( const sc_fxtype_params&, 101312027Sjungma@eit.uni-kl.de sc_enc, 101412027Sjungma@eit.uni-kl.de const sc_fxcast_switch&, 101512027Sjungma@eit.uni-kl.de sc_fxnum_fast_observer* ); 101612027Sjungma@eit.uni-kl.de 101712027Sjungma@eit.uni-kl.de#define DECL_CTOR_T(tp) \ 101812027Sjungma@eit.uni-kl.de sc_fxnum_fast( tp, \ 101912027Sjungma@eit.uni-kl.de const sc_fxtype_params&, \ 102012027Sjungma@eit.uni-kl.de sc_enc, \ 102112027Sjungma@eit.uni-kl.de const sc_fxcast_switch&, \ 102212027Sjungma@eit.uni-kl.de sc_fxnum_fast_observer* ); 102312027Sjungma@eit.uni-kl.de 102412027Sjungma@eit.uni-kl.de DECL_CTOR_T(int) 102512027Sjungma@eit.uni-kl.de DECL_CTOR_T(unsigned int) 102612027Sjungma@eit.uni-kl.de DECL_CTOR_T(long) 102712027Sjungma@eit.uni-kl.de DECL_CTOR_T(unsigned long) 102812027Sjungma@eit.uni-kl.de DECL_CTOR_T(float) 102912027Sjungma@eit.uni-kl.de DECL_CTOR_T(double) 103012027Sjungma@eit.uni-kl.de DECL_CTOR_T(const char*) 103112027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_fxval&) 103212027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_fxval_fast&) 103312027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_fxnum&) 103412027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_fxnum_fast&) 103512027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 103612027Sjungma@eit.uni-kl.de DECL_CTOR_T(int64) 103712027Sjungma@eit.uni-kl.de DECL_CTOR_T(uint64) 103812027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_int_base&) 103912027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_uint_base&) 104012027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_signed&) 104112027Sjungma@eit.uni-kl.de DECL_CTOR_T(const sc_unsigned&) 104212027Sjungma@eit.uni-kl.de#endif 104312027Sjungma@eit.uni-kl.de 104412027Sjungma@eit.uni-kl.de#undef DECL_CTOR_T 104512027Sjungma@eit.uni-kl.de 104612027Sjungma@eit.uni-kl.de ~sc_fxnum_fast(); 104712027Sjungma@eit.uni-kl.de 104812027Sjungma@eit.uni-kl.de 104912027Sjungma@eit.uni-kl.de // internal use only; 105012027Sjungma@eit.uni-kl.de double get_val() const; 105112027Sjungma@eit.uni-kl.de 105212027Sjungma@eit.uni-kl.depublic: 105312027Sjungma@eit.uni-kl.de 105412027Sjungma@eit.uni-kl.de // unary operators 105512027Sjungma@eit.uni-kl.de 105612027Sjungma@eit.uni-kl.de const sc_fxval_fast operator - () const; 105712027Sjungma@eit.uni-kl.de const sc_fxval_fast operator + () const; 105812027Sjungma@eit.uni-kl.de 105912027Sjungma@eit.uni-kl.de 106012027Sjungma@eit.uni-kl.de // unary functions 106112027Sjungma@eit.uni-kl.de 106212027Sjungma@eit.uni-kl.de friend void neg( sc_fxval_fast&, const sc_fxnum_fast& ); 106312027Sjungma@eit.uni-kl.de friend void neg( sc_fxnum_fast&, const sc_fxnum_fast& ); 106412027Sjungma@eit.uni-kl.de 106512027Sjungma@eit.uni-kl.de 106612027Sjungma@eit.uni-kl.de // binary operators 106712027Sjungma@eit.uni-kl.de 106812027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_T(op,tp) \ 106912027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator op ( const sc_fxnum_fast&, tp ); \ 107012027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator op ( tp, const sc_fxnum_fast& ); 107112027Sjungma@eit.uni-kl.de 107212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 107312027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_OTHER(op) \ 107412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,int64) \ 107512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,uint64) \ 107612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_int_base&) \ 107712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_uint_base&) \ 107812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_signed&) \ 107912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_unsigned&) 108012027Sjungma@eit.uni-kl.de#else 108112027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_OTHER(op) 108212027Sjungma@eit.uni-kl.de#endif 108312027Sjungma@eit.uni-kl.de 108412027Sjungma@eit.uni-kl.de#define DECL_BIN_OP(op,dummy) \ 108512027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator op ( const sc_fxnum_fast&, \ 108612027Sjungma@eit.uni-kl.de const sc_fxnum_fast& ); \ 108712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,int) \ 108812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,unsigned int) \ 108912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,long) \ 109012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,unsigned long) \ 109112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,float) \ 109212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,double) \ 109312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const char*) \ 109412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_fxval_fast&) \ 109512027Sjungma@eit.uni-kl.de DECL_BIN_OP_OTHER(op) 109612027Sjungma@eit.uni-kl.de 109712027Sjungma@eit.uni-kl.de DECL_BIN_OP(*,mult) 109812027Sjungma@eit.uni-kl.de DECL_BIN_OP(+,add) 109912027Sjungma@eit.uni-kl.de DECL_BIN_OP(-,sub) 110012027Sjungma@eit.uni-kl.de// DECL_BIN_OP(/,div) 110112027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator / ( const sc_fxnum_fast&, 110212027Sjungma@eit.uni-kl.de const sc_fxnum_fast& ); 110312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,int) 110412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,unsigned int) 110512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,long) 110612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,unsigned long) 110712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,float) 110812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,double) 110912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const char*) 111012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_fxval_fast&) 111112027Sjungma@eit.uni-kl.de// DECL_BIN_OP_OTHER(op) 111212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 111312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,int64) \ 111412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,uint64) \ 111512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_int_base&) \ 111612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_uint_base&) \ 111712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_signed&) \ 111812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_unsigned&) 111912027Sjungma@eit.uni-kl.de#endif 112012027Sjungma@eit.uni-kl.de 112112027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP_T 112212027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP_OTHER 112312027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP 112412027Sjungma@eit.uni-kl.de 112512027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator << ( const sc_fxnum_fast&, int ); 112612027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator >> ( const sc_fxnum_fast&, int ); 112712027Sjungma@eit.uni-kl.de 112812027Sjungma@eit.uni-kl.de 112912027Sjungma@eit.uni-kl.de // binary functions 113012027Sjungma@eit.uni-kl.de 113112027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_T(fnc,tp) \ 113212027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval_fast&, const sc_fxnum_fast&, tp ); \ 113312027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval_fast&, tp, const sc_fxnum_fast& ); \ 113412027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxnum_fast&, const sc_fxnum_fast&, tp ); \ 113512027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxnum_fast&, tp, const sc_fxnum_fast& ); 113612027Sjungma@eit.uni-kl.de 113712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 113812027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_OTHER(fnc) \ 113912027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,int64) \ 114012027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,uint64) \ 114112027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_int_base&) \ 114212027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_uint_base&) \ 114312027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_signed&) \ 114412027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_unsigned&) 114512027Sjungma@eit.uni-kl.de#else 114612027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_OTHER(fnc) 114712027Sjungma@eit.uni-kl.de#endif 114812027Sjungma@eit.uni-kl.de 114912027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC(fnc) \ 115012027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval_fast&, const sc_fxnum_fast&, \ 115112027Sjungma@eit.uni-kl.de const sc_fxnum_fast& ); \ 115212027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxnum_fast&, const sc_fxnum_fast&, \ 115312027Sjungma@eit.uni-kl.de const sc_fxnum_fast& ); \ 115412027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,int) \ 115512027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,unsigned int) \ 115612027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,long) \ 115712027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,unsigned long) \ 115812027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,float) \ 115912027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,double) \ 116012027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const char*) \ 116112027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxval&) \ 116212027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxval_fast&) \ 116312027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxnum&) \ 116412027Sjungma@eit.uni-kl.de DECL_BIN_FNC_OTHER(fnc) 116512027Sjungma@eit.uni-kl.de 116612027Sjungma@eit.uni-kl.de DECL_BIN_FNC(mult) 116712027Sjungma@eit.uni-kl.de DECL_BIN_FNC(div) 116812027Sjungma@eit.uni-kl.de DECL_BIN_FNC(add) 116912027Sjungma@eit.uni-kl.de DECL_BIN_FNC(sub) 117012027Sjungma@eit.uni-kl.de 117112027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC_T 117212027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC_OTHER 117312027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC 117412027Sjungma@eit.uni-kl.de 117512027Sjungma@eit.uni-kl.de friend void lshift( sc_fxval_fast&, const sc_fxnum_fast&, int ); 117612027Sjungma@eit.uni-kl.de friend void rshift( sc_fxval_fast&, const sc_fxnum_fast&, int ); 117712027Sjungma@eit.uni-kl.de friend void lshift( sc_fxnum_fast&, const sc_fxnum_fast&, int ); 117812027Sjungma@eit.uni-kl.de friend void rshift( sc_fxnum_fast&, const sc_fxnum_fast&, int ); 117912027Sjungma@eit.uni-kl.de 118012027Sjungma@eit.uni-kl.de 118112027Sjungma@eit.uni-kl.de // relational (including equality) operators 118212027Sjungma@eit.uni-kl.de 118312027Sjungma@eit.uni-kl.de#define DECL_REL_OP_T(op,tp) \ 118412027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum_fast&, tp ); \ 118512027Sjungma@eit.uni-kl.de friend bool operator op ( tp, const sc_fxnum_fast& ); 118612027Sjungma@eit.uni-kl.de 118712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 118812027Sjungma@eit.uni-kl.de#define DECL_REL_OP_OTHER(op) \ 118912027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int64) \ 119012027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,uint64) \ 119112027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_int_base&) \ 119212027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_uint_base&) \ 119312027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_signed&) \ 119412027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_unsigned&) 119512027Sjungma@eit.uni-kl.de#else 119612027Sjungma@eit.uni-kl.de#define DECL_REL_OP_OTHER(op) 119712027Sjungma@eit.uni-kl.de#endif 119812027Sjungma@eit.uni-kl.de 119912027Sjungma@eit.uni-kl.de#define DECL_REL_OP(op) \ 120012027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxnum_fast&, const sc_fxnum_fast& ); \ 120112027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int) \ 120212027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned int) \ 120312027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,long) \ 120412027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned long) \ 120512027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,float) \ 120612027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,double) \ 120712027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const char*) \ 120812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_fxval_fast&) \ 120912027Sjungma@eit.uni-kl.de DECL_REL_OP_OTHER(op) 121012027Sjungma@eit.uni-kl.de 121112027Sjungma@eit.uni-kl.de DECL_REL_OP(<) 121212027Sjungma@eit.uni-kl.de DECL_REL_OP(<=) 121312027Sjungma@eit.uni-kl.de DECL_REL_OP(>) 121412027Sjungma@eit.uni-kl.de DECL_REL_OP(>=) 121512027Sjungma@eit.uni-kl.de DECL_REL_OP(==) 121612027Sjungma@eit.uni-kl.de DECL_REL_OP(!=) 121712027Sjungma@eit.uni-kl.de 121812027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_T 121912027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_OTHER 122012027Sjungma@eit.uni-kl.de#undef DECL_REL_OP 122112027Sjungma@eit.uni-kl.de 122212027Sjungma@eit.uni-kl.de 122312027Sjungma@eit.uni-kl.de // assignment operators 122412027Sjungma@eit.uni-kl.de 122512027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(op,tp) \ 122612027Sjungma@eit.uni-kl.de sc_fxnum_fast& operator op( tp ); 122712027Sjungma@eit.uni-kl.de 122812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 122912027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op) \ 123012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,int64) \ 123112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,uint64) \ 123212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_int_base&) \ 123312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_uint_base&) \ 123412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_signed&) \ 123512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_unsigned&) 123612027Sjungma@eit.uni-kl.de#else 123712027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op) 123812027Sjungma@eit.uni-kl.de#endif 123912027Sjungma@eit.uni-kl.de 124012027Sjungma@eit.uni-kl.de#define DECL_ASN_OP(op) \ 124112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,int) \ 124212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,unsigned int) \ 124312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,long) \ 124412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,unsigned long) \ 124512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,float) \ 124612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,double) \ 124712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const char*) \ 124812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxval&) \ 124912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxval_fast&) \ 125012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum&) \ 125112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ 125212027Sjungma@eit.uni-kl.de DECL_ASN_OP_OTHER(op) 125312027Sjungma@eit.uni-kl.de 125412027Sjungma@eit.uni-kl.de DECL_ASN_OP(=) 125512027Sjungma@eit.uni-kl.de 125612027Sjungma@eit.uni-kl.de DECL_ASN_OP(*=) 125712027Sjungma@eit.uni-kl.de DECL_ASN_OP(/=) 125812027Sjungma@eit.uni-kl.de DECL_ASN_OP(+=) 125912027Sjungma@eit.uni-kl.de DECL_ASN_OP(-=) 126012027Sjungma@eit.uni-kl.de 126112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(<<=,int) 126212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(>>=,int) 126312027Sjungma@eit.uni-kl.de 126412027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T 126512027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_OTHER 126612027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP 126712027Sjungma@eit.uni-kl.de 126812027Sjungma@eit.uni-kl.de 126912027Sjungma@eit.uni-kl.de // auto-increment and auto-decrement 127012027Sjungma@eit.uni-kl.de 127112027Sjungma@eit.uni-kl.de const sc_fxval_fast operator ++ ( int ); 127212027Sjungma@eit.uni-kl.de const sc_fxval_fast operator -- ( int ); 127312027Sjungma@eit.uni-kl.de 127412027Sjungma@eit.uni-kl.de sc_fxnum_fast& operator ++ (); 127512027Sjungma@eit.uni-kl.de sc_fxnum_fast& operator -- (); 127612027Sjungma@eit.uni-kl.de 127712027Sjungma@eit.uni-kl.de 127812027Sjungma@eit.uni-kl.de // bit selection 127912027Sjungma@eit.uni-kl.de 128012027Sjungma@eit.uni-kl.de const sc_fxnum_fast_bitref operator [] ( int ) const; 128112027Sjungma@eit.uni-kl.de sc_fxnum_fast_bitref operator [] ( int ); 128212027Sjungma@eit.uni-kl.de 128312027Sjungma@eit.uni-kl.de const sc_fxnum_fast_bitref bit( int ) const; 128412027Sjungma@eit.uni-kl.de sc_fxnum_fast_bitref bit( int ); 128512027Sjungma@eit.uni-kl.de 128612027Sjungma@eit.uni-kl.de 128712027Sjungma@eit.uni-kl.de // part selection 128812027Sjungma@eit.uni-kl.de 128912027Sjungma@eit.uni-kl.de const sc_fxnum_fast_subref operator () ( int, int ) const; 129012027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref operator () ( int, int ); 129112027Sjungma@eit.uni-kl.de 129212027Sjungma@eit.uni-kl.de const sc_fxnum_fast_subref range( int, int ) const; 129312027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref range( int, int ); 129412027Sjungma@eit.uni-kl.de 129512027Sjungma@eit.uni-kl.de 129612027Sjungma@eit.uni-kl.de const sc_fxnum_fast_subref operator () () const; 129712027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref operator () (); 129812027Sjungma@eit.uni-kl.de 129912027Sjungma@eit.uni-kl.de const sc_fxnum_fast_subref range() const; 130012027Sjungma@eit.uni-kl.de sc_fxnum_fast_subref range(); 130112027Sjungma@eit.uni-kl.de 130212027Sjungma@eit.uni-kl.de 130312027Sjungma@eit.uni-kl.de // implicit conversion 130412027Sjungma@eit.uni-kl.de 130512027Sjungma@eit.uni-kl.de operator double() const; // necessary evil! 130612027Sjungma@eit.uni-kl.de 130712027Sjungma@eit.uni-kl.de 130812027Sjungma@eit.uni-kl.de // explicit conversion to primitive types 130912027Sjungma@eit.uni-kl.de 131012027Sjungma@eit.uni-kl.de short to_short() const; 131112027Sjungma@eit.uni-kl.de unsigned short to_ushort() const; 131212027Sjungma@eit.uni-kl.de int to_int() const; 131312027Sjungma@eit.uni-kl.de unsigned int to_uint() const; 131412027Sjungma@eit.uni-kl.de long to_long() const; 131512027Sjungma@eit.uni-kl.de unsigned long to_ulong() const; 131612027Sjungma@eit.uni-kl.de int64 to_int64() const; 131712027Sjungma@eit.uni-kl.de uint64 to_uint64() const; 131812027Sjungma@eit.uni-kl.de float to_float() const; 131912027Sjungma@eit.uni-kl.de double to_double() const; 132012027Sjungma@eit.uni-kl.de 132112027Sjungma@eit.uni-kl.de 132212027Sjungma@eit.uni-kl.de // explicit conversion to character string 132312027Sjungma@eit.uni-kl.de 132412027Sjungma@eit.uni-kl.de const std::string to_string() const; 132512027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep ) const; 132612027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool ) const; 132712027Sjungma@eit.uni-kl.de const std::string to_string( sc_fmt ) const; 132812027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, sc_fmt ) const; 132912027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool, sc_fmt ) const; 133012027Sjungma@eit.uni-kl.de 133112027Sjungma@eit.uni-kl.de const std::string to_dec() const; 133212027Sjungma@eit.uni-kl.de const std::string to_bin() const; 133312027Sjungma@eit.uni-kl.de const std::string to_oct() const; 133412027Sjungma@eit.uni-kl.de const std::string to_hex() const; 133512027Sjungma@eit.uni-kl.de 133612027Sjungma@eit.uni-kl.de 133712027Sjungma@eit.uni-kl.de // query value 133812027Sjungma@eit.uni-kl.de 133912027Sjungma@eit.uni-kl.de bool is_neg() const; 134012027Sjungma@eit.uni-kl.de bool is_zero() const; 134112027Sjungma@eit.uni-kl.de 134212027Sjungma@eit.uni-kl.de // internal use only; 134312027Sjungma@eit.uni-kl.de bool is_normal() const; 134412027Sjungma@eit.uni-kl.de 134512027Sjungma@eit.uni-kl.de bool quantization_flag() const; 134612027Sjungma@eit.uni-kl.de bool overflow_flag() const; 134712027Sjungma@eit.uni-kl.de 134812027Sjungma@eit.uni-kl.de const sc_fxval_fast value() const; 134912027Sjungma@eit.uni-kl.de 135012027Sjungma@eit.uni-kl.de 135112027Sjungma@eit.uni-kl.de // query parameters 135212027Sjungma@eit.uni-kl.de 135312027Sjungma@eit.uni-kl.de int wl() const; 135412027Sjungma@eit.uni-kl.de int iwl() const; 135512027Sjungma@eit.uni-kl.de sc_q_mode q_mode() const; 135612027Sjungma@eit.uni-kl.de sc_o_mode o_mode() const; 135712027Sjungma@eit.uni-kl.de int n_bits() const; 135812027Sjungma@eit.uni-kl.de 135912027Sjungma@eit.uni-kl.de const sc_fxtype_params& type_params() const; 136012027Sjungma@eit.uni-kl.de 136112027Sjungma@eit.uni-kl.de const sc_fxcast_switch& cast_switch() const; 136212027Sjungma@eit.uni-kl.de 136312027Sjungma@eit.uni-kl.de 136412027Sjungma@eit.uni-kl.de // print or dump content 136512027Sjungma@eit.uni-kl.de 136612027Sjungma@eit.uni-kl.de void print( ::std::ostream& = ::std::cout ) const; 136712027Sjungma@eit.uni-kl.de void scan( ::std::istream& = ::std::cin ); 136812027Sjungma@eit.uni-kl.de void dump( ::std::ostream& = ::std::cout ) const; 136912027Sjungma@eit.uni-kl.de 137012027Sjungma@eit.uni-kl.de 137112027Sjungma@eit.uni-kl.de // internal use only; 137212027Sjungma@eit.uni-kl.de void observer_read() const; 137312027Sjungma@eit.uni-kl.de 137412027Sjungma@eit.uni-kl.de 137512027Sjungma@eit.uni-kl.de // internal use only; 137612027Sjungma@eit.uni-kl.de bool get_bit( int ) const; 137712027Sjungma@eit.uni-kl.de 137812027Sjungma@eit.uni-kl.deprotected: 137912027Sjungma@eit.uni-kl.de 138012027Sjungma@eit.uni-kl.de bool set_bit( int, bool ); 138112027Sjungma@eit.uni-kl.de 138212027Sjungma@eit.uni-kl.de 138312027Sjungma@eit.uni-kl.de bool get_slice( int, int, sc_bv_base& ) const; 138412027Sjungma@eit.uni-kl.de bool set_slice( int, int, const sc_bv_base& ); 138512027Sjungma@eit.uni-kl.de 138612027Sjungma@eit.uni-kl.de 138712027Sjungma@eit.uni-kl.de sc_fxnum_fast_observer* lock_observer() const; 138812027Sjungma@eit.uni-kl.de void unlock_observer( sc_fxnum_fast_observer* ) const; 138912027Sjungma@eit.uni-kl.de 139012027Sjungma@eit.uni-kl.deprivate: 139112027Sjungma@eit.uni-kl.de 139212027Sjungma@eit.uni-kl.de double m_val; 139312027Sjungma@eit.uni-kl.de 139412027Sjungma@eit.uni-kl.de scfx_params m_params; 139512027Sjungma@eit.uni-kl.de bool m_q_flag; 139612027Sjungma@eit.uni-kl.de bool m_o_flag; 139712027Sjungma@eit.uni-kl.de 139812027Sjungma@eit.uni-kl.de mutable sc_fxnum_fast_observer* m_observer; 139912027Sjungma@eit.uni-kl.de 140012027Sjungma@eit.uni-kl.deprivate: 140112027Sjungma@eit.uni-kl.de 140212027Sjungma@eit.uni-kl.de // disabled 140312027Sjungma@eit.uni-kl.de sc_fxnum_fast(); 140412027Sjungma@eit.uni-kl.de sc_fxnum_fast( const sc_fxnum_fast& ); 140512027Sjungma@eit.uni-kl.de}; 140612027Sjungma@eit.uni-kl.de 140712027Sjungma@eit.uni-kl.de 140812027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 140912027Sjungma@eit.uni-kl.de 141012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 141112027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_bitref 141212027Sjungma@eit.uni-kl.de// 141312027Sjungma@eit.uni-kl.de// Proxy class for bit-selection in class sc_fxnum, behaves like sc_bit. 141412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 141512027Sjungma@eit.uni-kl.de 141612027Sjungma@eit.uni-kl.de// constructor 141712027Sjungma@eit.uni-kl.de 141812027Sjungma@eit.uni-kl.deinline 141912027Sjungma@eit.uni-kl.desc_fxnum_bitref::sc_fxnum_bitref( sc_fxnum& num_, int idx_ ) 142012027Sjungma@eit.uni-kl.de : m_num( num_ ), m_idx( idx_ ) 142112027Sjungma@eit.uni-kl.de{} 142212027Sjungma@eit.uni-kl.de 142312027Sjungma@eit.uni-kl.de 142412027Sjungma@eit.uni-kl.de// copy constructor 142512027Sjungma@eit.uni-kl.de 142612027Sjungma@eit.uni-kl.deinline 142712027Sjungma@eit.uni-kl.desc_fxnum_bitref::sc_fxnum_bitref( const sc_fxnum_bitref& a ) 142812027Sjungma@eit.uni-kl.de : m_num( a.m_num ), m_idx( a.m_idx ) 142912027Sjungma@eit.uni-kl.de{} 143012027Sjungma@eit.uni-kl.de 143112027Sjungma@eit.uni-kl.de 143212027Sjungma@eit.uni-kl.de// assignment operators 143312027Sjungma@eit.uni-kl.de 143412027Sjungma@eit.uni-kl.deinline 143512027Sjungma@eit.uni-kl.desc_fxnum_bitref& 143612027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator = ( const sc_fxnum_bitref& a ) 143712027Sjungma@eit.uni-kl.de{ 143812027Sjungma@eit.uni-kl.de if( &a != this ) 143912027Sjungma@eit.uni-kl.de { 144012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a.m_num ) 144112027Sjungma@eit.uni-kl.de set( a.get() ); 144212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 144312027Sjungma@eit.uni-kl.de } 144412027Sjungma@eit.uni-kl.de return *this; 144512027Sjungma@eit.uni-kl.de} 144612027Sjungma@eit.uni-kl.de 144712027Sjungma@eit.uni-kl.deinline 144812027Sjungma@eit.uni-kl.desc_fxnum_bitref& 144912027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator = ( const sc_fxnum_fast_bitref& a ) 145012027Sjungma@eit.uni-kl.de{ 145112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a.m_num ) 145212027Sjungma@eit.uni-kl.de set( a.get() ); 145312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 145412027Sjungma@eit.uni-kl.de return *this; 145512027Sjungma@eit.uni-kl.de} 145612027Sjungma@eit.uni-kl.de 145712027Sjungma@eit.uni-kl.deinline 145812027Sjungma@eit.uni-kl.desc_fxnum_bitref& 145912027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator = ( const sc_bit& a ) 146012027Sjungma@eit.uni-kl.de{ 146112027Sjungma@eit.uni-kl.de set( static_cast<bool>( a ) ); 146212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 146312027Sjungma@eit.uni-kl.de return *this; 146412027Sjungma@eit.uni-kl.de} 146512027Sjungma@eit.uni-kl.de 146612027Sjungma@eit.uni-kl.deinline 146712027Sjungma@eit.uni-kl.desc_fxnum_bitref& 146812027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator = ( bool a ) 146912027Sjungma@eit.uni-kl.de{ 147012027Sjungma@eit.uni-kl.de set( a ); 147112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 147212027Sjungma@eit.uni-kl.de return *this; 147312027Sjungma@eit.uni-kl.de} 147412027Sjungma@eit.uni-kl.de 147512027Sjungma@eit.uni-kl.de 147612027Sjungma@eit.uni-kl.deinline 147712027Sjungma@eit.uni-kl.desc_fxnum_bitref& 147812027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator &= ( const sc_fxnum_bitref& b ) 147912027Sjungma@eit.uni-kl.de{ 148012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 148112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b.m_num ) 148212027Sjungma@eit.uni-kl.de set( get() && b.get() ); 148312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 148412027Sjungma@eit.uni-kl.de return *this; 148512027Sjungma@eit.uni-kl.de} 148612027Sjungma@eit.uni-kl.de 148712027Sjungma@eit.uni-kl.deinline 148812027Sjungma@eit.uni-kl.desc_fxnum_bitref& 148912027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator &= ( const sc_fxnum_fast_bitref& b ) 149012027Sjungma@eit.uni-kl.de{ 149112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 149212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) 149312027Sjungma@eit.uni-kl.de set( get() && b.get() ); 149412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 149512027Sjungma@eit.uni-kl.de return *this; 149612027Sjungma@eit.uni-kl.de} 149712027Sjungma@eit.uni-kl.de 149812027Sjungma@eit.uni-kl.deinline 149912027Sjungma@eit.uni-kl.desc_fxnum_bitref& 150012027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator &= ( const sc_bit& b ) 150112027Sjungma@eit.uni-kl.de{ 150212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 150312027Sjungma@eit.uni-kl.de set( get() && static_cast<bool>( b ) ); 150412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 150512027Sjungma@eit.uni-kl.de return *this; 150612027Sjungma@eit.uni-kl.de} 150712027Sjungma@eit.uni-kl.de 150812027Sjungma@eit.uni-kl.deinline 150912027Sjungma@eit.uni-kl.desc_fxnum_bitref& 151012027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator &= ( bool b ) 151112027Sjungma@eit.uni-kl.de{ 151212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 151312027Sjungma@eit.uni-kl.de set( get() && b ); 151412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 151512027Sjungma@eit.uni-kl.de return *this; 151612027Sjungma@eit.uni-kl.de} 151712027Sjungma@eit.uni-kl.de 151812027Sjungma@eit.uni-kl.de 151912027Sjungma@eit.uni-kl.deinline 152012027Sjungma@eit.uni-kl.desc_fxnum_bitref& 152112027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator |= ( const sc_fxnum_bitref& b ) 152212027Sjungma@eit.uni-kl.de{ 152312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 152412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b.m_num ) 152512027Sjungma@eit.uni-kl.de set( get() || b.get() ); 152612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 152712027Sjungma@eit.uni-kl.de return *this; 152812027Sjungma@eit.uni-kl.de} 152912027Sjungma@eit.uni-kl.de 153012027Sjungma@eit.uni-kl.deinline 153112027Sjungma@eit.uni-kl.desc_fxnum_bitref& 153212027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator |= ( const sc_fxnum_fast_bitref& b ) 153312027Sjungma@eit.uni-kl.de{ 153412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 153512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) 153612027Sjungma@eit.uni-kl.de set( get() || b.get() ); 153712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 153812027Sjungma@eit.uni-kl.de return *this; 153912027Sjungma@eit.uni-kl.de} 154012027Sjungma@eit.uni-kl.de 154112027Sjungma@eit.uni-kl.deinline 154212027Sjungma@eit.uni-kl.desc_fxnum_bitref& 154312027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator |= ( const sc_bit& b ) 154412027Sjungma@eit.uni-kl.de{ 154512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 154612027Sjungma@eit.uni-kl.de set( get() || static_cast<bool>( b ) ); 154712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 154812027Sjungma@eit.uni-kl.de return *this; 154912027Sjungma@eit.uni-kl.de} 155012027Sjungma@eit.uni-kl.de 155112027Sjungma@eit.uni-kl.deinline 155212027Sjungma@eit.uni-kl.desc_fxnum_bitref& 155312027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator |= ( bool b ) 155412027Sjungma@eit.uni-kl.de{ 155512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 155612027Sjungma@eit.uni-kl.de set( get() || b ); 155712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 155812027Sjungma@eit.uni-kl.de return *this; 155912027Sjungma@eit.uni-kl.de} 156012027Sjungma@eit.uni-kl.de 156112027Sjungma@eit.uni-kl.de 156212027Sjungma@eit.uni-kl.deinline 156312027Sjungma@eit.uni-kl.desc_fxnum_bitref& 156412027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator ^= ( const sc_fxnum_bitref& b ) 156512027Sjungma@eit.uni-kl.de{ 156612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 156712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b.m_num ) 156812027Sjungma@eit.uni-kl.de set( get() != b.get() ); 156912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 157012027Sjungma@eit.uni-kl.de return *this; 157112027Sjungma@eit.uni-kl.de} 157212027Sjungma@eit.uni-kl.de 157312027Sjungma@eit.uni-kl.deinline 157412027Sjungma@eit.uni-kl.desc_fxnum_bitref& 157512027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator ^= ( const sc_fxnum_fast_bitref& b ) 157612027Sjungma@eit.uni-kl.de{ 157712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 157812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) 157912027Sjungma@eit.uni-kl.de set( get() != b.get() ); 158012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 158112027Sjungma@eit.uni-kl.de return *this; 158212027Sjungma@eit.uni-kl.de} 158312027Sjungma@eit.uni-kl.de 158412027Sjungma@eit.uni-kl.deinline 158512027Sjungma@eit.uni-kl.desc_fxnum_bitref& 158612027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator ^= ( const sc_bit& b ) 158712027Sjungma@eit.uni-kl.de{ 158812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 158912027Sjungma@eit.uni-kl.de set( get() != static_cast<bool>( b ) ); 159012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 159112027Sjungma@eit.uni-kl.de return *this; 159212027Sjungma@eit.uni-kl.de} 159312027Sjungma@eit.uni-kl.de 159412027Sjungma@eit.uni-kl.deinline 159512027Sjungma@eit.uni-kl.desc_fxnum_bitref& 159612027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator ^= ( bool b ) 159712027Sjungma@eit.uni-kl.de{ 159812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 159912027Sjungma@eit.uni-kl.de set( get() != b ); 160012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 160112027Sjungma@eit.uni-kl.de return *this; 160212027Sjungma@eit.uni-kl.de} 160312027Sjungma@eit.uni-kl.de 160412027Sjungma@eit.uni-kl.de 160512027Sjungma@eit.uni-kl.de// implicit conversion 160612027Sjungma@eit.uni-kl.de 160712027Sjungma@eit.uni-kl.deinline 160812027Sjungma@eit.uni-kl.desc_fxnum_bitref::operator bool() const 160912027Sjungma@eit.uni-kl.de{ 161012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 161112027Sjungma@eit.uni-kl.de return get(); 161212027Sjungma@eit.uni-kl.de} 161312027Sjungma@eit.uni-kl.de 161412027Sjungma@eit.uni-kl.de 161512027Sjungma@eit.uni-kl.deinline 161612027Sjungma@eit.uni-kl.de::std::ostream& 161712027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_fxnum_bitref& a ) 161812027Sjungma@eit.uni-kl.de{ 161912027Sjungma@eit.uni-kl.de a.print( os ); 162012027Sjungma@eit.uni-kl.de return os; 162112027Sjungma@eit.uni-kl.de} 162212027Sjungma@eit.uni-kl.de 162312027Sjungma@eit.uni-kl.deinline 162412027Sjungma@eit.uni-kl.de::std::istream& 162512027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_fxnum_bitref& a ) 162612027Sjungma@eit.uni-kl.de{ 162712027Sjungma@eit.uni-kl.de a.scan( is ); 162812027Sjungma@eit.uni-kl.de return is; 162912027Sjungma@eit.uni-kl.de} 163012027Sjungma@eit.uni-kl.de 163112027Sjungma@eit.uni-kl.de 163212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 163312027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_fast_bitref 163412027Sjungma@eit.uni-kl.de// 163512027Sjungma@eit.uni-kl.de// Proxy class for bit-selection in class sc_fxnum_fast, behaves like sc_bit. 163612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 163712027Sjungma@eit.uni-kl.de 163812027Sjungma@eit.uni-kl.de// constructor 163912027Sjungma@eit.uni-kl.de 164012027Sjungma@eit.uni-kl.deinline 164112027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::sc_fxnum_fast_bitref( sc_fxnum_fast& num_, int idx_ ) 164212027Sjungma@eit.uni-kl.de : m_num( num_ ), m_idx( idx_ ) 164312027Sjungma@eit.uni-kl.de{} 164412027Sjungma@eit.uni-kl.de 164512027Sjungma@eit.uni-kl.de 164612027Sjungma@eit.uni-kl.de// copy constructor 164712027Sjungma@eit.uni-kl.de 164812027Sjungma@eit.uni-kl.deinline 164912027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::sc_fxnum_fast_bitref( const sc_fxnum_fast_bitref& a ) 165012027Sjungma@eit.uni-kl.de : m_num( a.m_num ), m_idx( a.m_idx ) 165112027Sjungma@eit.uni-kl.de{} 165212027Sjungma@eit.uni-kl.de 165312027Sjungma@eit.uni-kl.de 165412027Sjungma@eit.uni-kl.de// assignment operators 165512027Sjungma@eit.uni-kl.de 165612027Sjungma@eit.uni-kl.deinline 165712027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 165812027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator = ( const sc_fxnum_bitref& a ) 165912027Sjungma@eit.uni-kl.de{ 166012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a.m_num ) 166112027Sjungma@eit.uni-kl.de set( a.get() ); 166212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 166312027Sjungma@eit.uni-kl.de return *this; 166412027Sjungma@eit.uni-kl.de} 166512027Sjungma@eit.uni-kl.de 166612027Sjungma@eit.uni-kl.deinline 166712027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 166812027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator = ( const sc_fxnum_fast_bitref& a ) 166912027Sjungma@eit.uni-kl.de{ 167012027Sjungma@eit.uni-kl.de if( &a != this ) 167112027Sjungma@eit.uni-kl.de { 167212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a.m_num ) 167312027Sjungma@eit.uni-kl.de set( a.get() ); 167412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 167512027Sjungma@eit.uni-kl.de } 167612027Sjungma@eit.uni-kl.de return *this; 167712027Sjungma@eit.uni-kl.de} 167812027Sjungma@eit.uni-kl.de 167912027Sjungma@eit.uni-kl.deinline 168012027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 168112027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator = ( const sc_bit& a ) 168212027Sjungma@eit.uni-kl.de{ 168312027Sjungma@eit.uni-kl.de set( static_cast<bool>( a ) ); 168412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 168512027Sjungma@eit.uni-kl.de return *this; 168612027Sjungma@eit.uni-kl.de} 168712027Sjungma@eit.uni-kl.de 168812027Sjungma@eit.uni-kl.deinline 168912027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 169012027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator = ( bool a ) 169112027Sjungma@eit.uni-kl.de{ 169212027Sjungma@eit.uni-kl.de set( a ); 169312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 169412027Sjungma@eit.uni-kl.de return *this; 169512027Sjungma@eit.uni-kl.de} 169612027Sjungma@eit.uni-kl.de 169712027Sjungma@eit.uni-kl.de 169812027Sjungma@eit.uni-kl.deinline 169912027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 170012027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator &= ( const sc_fxnum_bitref& b ) 170112027Sjungma@eit.uni-kl.de{ 170212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 170312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b.m_num ) 170412027Sjungma@eit.uni-kl.de set( get() && b.get() ); 170512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 170612027Sjungma@eit.uni-kl.de return *this; 170712027Sjungma@eit.uni-kl.de} 170812027Sjungma@eit.uni-kl.de 170912027Sjungma@eit.uni-kl.deinline 171012027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 171112027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator &= ( const sc_fxnum_fast_bitref& b ) 171212027Sjungma@eit.uni-kl.de{ 171312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 171412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) 171512027Sjungma@eit.uni-kl.de set( get() && b.get() ); 171612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 171712027Sjungma@eit.uni-kl.de return *this; 171812027Sjungma@eit.uni-kl.de} 171912027Sjungma@eit.uni-kl.de 172012027Sjungma@eit.uni-kl.deinline 172112027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 172212027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator &= ( const sc_bit& b ) 172312027Sjungma@eit.uni-kl.de{ 172412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 172512027Sjungma@eit.uni-kl.de set( get() && static_cast<bool>( b ) ); 172612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 172712027Sjungma@eit.uni-kl.de return *this; 172812027Sjungma@eit.uni-kl.de} 172912027Sjungma@eit.uni-kl.de 173012027Sjungma@eit.uni-kl.deinline 173112027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 173212027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator &= ( bool b ) 173312027Sjungma@eit.uni-kl.de{ 173412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 173512027Sjungma@eit.uni-kl.de set( get() && b ); 173612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 173712027Sjungma@eit.uni-kl.de return *this; 173812027Sjungma@eit.uni-kl.de} 173912027Sjungma@eit.uni-kl.de 174012027Sjungma@eit.uni-kl.de 174112027Sjungma@eit.uni-kl.deinline 174212027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 174312027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator |= ( const sc_fxnum_bitref& b ) 174412027Sjungma@eit.uni-kl.de{ 174512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 174612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b.m_num ) 174712027Sjungma@eit.uni-kl.de set( get() || b.get() ); 174812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 174912027Sjungma@eit.uni-kl.de return *this; 175012027Sjungma@eit.uni-kl.de} 175112027Sjungma@eit.uni-kl.de 175212027Sjungma@eit.uni-kl.deinline 175312027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 175412027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator |= ( const sc_fxnum_fast_bitref& b ) 175512027Sjungma@eit.uni-kl.de{ 175612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 175712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) 175812027Sjungma@eit.uni-kl.de set( get() || b.get() ); 175912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 176012027Sjungma@eit.uni-kl.de return *this; 176112027Sjungma@eit.uni-kl.de} 176212027Sjungma@eit.uni-kl.de 176312027Sjungma@eit.uni-kl.deinline 176412027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 176512027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator |= ( const sc_bit& b ) 176612027Sjungma@eit.uni-kl.de{ 176712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 176812027Sjungma@eit.uni-kl.de set( get() || static_cast<bool>( b ) ); 176912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 177012027Sjungma@eit.uni-kl.de return *this; 177112027Sjungma@eit.uni-kl.de} 177212027Sjungma@eit.uni-kl.de 177312027Sjungma@eit.uni-kl.deinline 177412027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 177512027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator |= ( bool b ) 177612027Sjungma@eit.uni-kl.de{ 177712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 177812027Sjungma@eit.uni-kl.de set( get() || b ); 177912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 178012027Sjungma@eit.uni-kl.de return *this; 178112027Sjungma@eit.uni-kl.de} 178212027Sjungma@eit.uni-kl.de 178312027Sjungma@eit.uni-kl.de 178412027Sjungma@eit.uni-kl.deinline 178512027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 178612027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator ^= ( const sc_fxnum_bitref& b ) 178712027Sjungma@eit.uni-kl.de{ 178812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 178912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b.m_num ) 179012027Sjungma@eit.uni-kl.de set( get() != b.get() ); 179112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 179212027Sjungma@eit.uni-kl.de return *this; 179312027Sjungma@eit.uni-kl.de} 179412027Sjungma@eit.uni-kl.de 179512027Sjungma@eit.uni-kl.deinline 179612027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 179712027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator ^= ( const sc_fxnum_fast_bitref& b ) 179812027Sjungma@eit.uni-kl.de{ 179912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 180012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) 180112027Sjungma@eit.uni-kl.de set( get() != b.get() ); 180212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 180312027Sjungma@eit.uni-kl.de return *this; 180412027Sjungma@eit.uni-kl.de} 180512027Sjungma@eit.uni-kl.de 180612027Sjungma@eit.uni-kl.deinline 180712027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 180812027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator ^= ( const sc_bit& b ) 180912027Sjungma@eit.uni-kl.de{ 181012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 181112027Sjungma@eit.uni-kl.de set( get() != static_cast<bool>( b ) ); 181212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 181312027Sjungma@eit.uni-kl.de return *this; 181412027Sjungma@eit.uni-kl.de} 181512027Sjungma@eit.uni-kl.de 181612027Sjungma@eit.uni-kl.deinline 181712027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref& 181812027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator ^= ( bool b ) 181912027Sjungma@eit.uni-kl.de{ 182012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 182112027Sjungma@eit.uni-kl.de set( get() != b ); 182212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 182312027Sjungma@eit.uni-kl.de return *this; 182412027Sjungma@eit.uni-kl.de} 182512027Sjungma@eit.uni-kl.de 182612027Sjungma@eit.uni-kl.de 182712027Sjungma@eit.uni-kl.de// implicit conversion 182812027Sjungma@eit.uni-kl.de 182912027Sjungma@eit.uni-kl.deinline 183012027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref::operator bool() const 183112027Sjungma@eit.uni-kl.de{ 183212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 183312027Sjungma@eit.uni-kl.de return get(); 183412027Sjungma@eit.uni-kl.de} 183512027Sjungma@eit.uni-kl.de 183612027Sjungma@eit.uni-kl.de 183712027Sjungma@eit.uni-kl.deinline 183812027Sjungma@eit.uni-kl.de::std::ostream& 183912027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_fxnum_fast_bitref& a ) 184012027Sjungma@eit.uni-kl.de{ 184112027Sjungma@eit.uni-kl.de a.print( os ); 184212027Sjungma@eit.uni-kl.de return os; 184312027Sjungma@eit.uni-kl.de} 184412027Sjungma@eit.uni-kl.de 184512027Sjungma@eit.uni-kl.deinline 184612027Sjungma@eit.uni-kl.de::std::istream& 184712027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_fxnum_fast_bitref& a ) 184812027Sjungma@eit.uni-kl.de{ 184912027Sjungma@eit.uni-kl.de a.scan( is ); 185012027Sjungma@eit.uni-kl.de return is; 185112027Sjungma@eit.uni-kl.de} 185212027Sjungma@eit.uni-kl.de 185312027Sjungma@eit.uni-kl.de 185412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 185512027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_subref 185612027Sjungma@eit.uni-kl.de// 185712027Sjungma@eit.uni-kl.de// Proxy class for part-selection in class sc_fxnum, 185812027Sjungma@eit.uni-kl.de// behaves like sc_bv_base. 185912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 186012027Sjungma@eit.uni-kl.de 186112027Sjungma@eit.uni-kl.de// constructor 186212027Sjungma@eit.uni-kl.de 186312027Sjungma@eit.uni-kl.deinline 186412027Sjungma@eit.uni-kl.desc_fxnum_subref::sc_fxnum_subref( sc_fxnum& num_, int from_, int to_ ) 186512027Sjungma@eit.uni-kl.de : m_num( num_ ), m_from( from_ ), m_to( to_ ), 186612027Sjungma@eit.uni-kl.de m_bv( *new sc_bv_base( sc_max( m_from, m_to ) - 186712027Sjungma@eit.uni-kl.de sc_min( m_from, m_to ) + 1 ) ) 186812027Sjungma@eit.uni-kl.de{} 186912027Sjungma@eit.uni-kl.de 187012027Sjungma@eit.uni-kl.de 187112027Sjungma@eit.uni-kl.de// copy constructor 187212027Sjungma@eit.uni-kl.de 187312027Sjungma@eit.uni-kl.deinline 187412027Sjungma@eit.uni-kl.desc_fxnum_subref::sc_fxnum_subref( const sc_fxnum_subref& a ) 187512027Sjungma@eit.uni-kl.de : m_num( a.m_num ), m_from( a.m_from ), m_to( a.m_to ), 187612027Sjungma@eit.uni-kl.de m_bv( *new sc_bv_base( a.m_bv ) ) 187712027Sjungma@eit.uni-kl.de{} 187812027Sjungma@eit.uni-kl.de 187912027Sjungma@eit.uni-kl.de 188012027Sjungma@eit.uni-kl.de// destructor 188112027Sjungma@eit.uni-kl.de 188212027Sjungma@eit.uni-kl.deinline 188312027Sjungma@eit.uni-kl.desc_fxnum_subref::~sc_fxnum_subref() 188412027Sjungma@eit.uni-kl.de{ 188512027Sjungma@eit.uni-kl.de delete &m_bv; 188612027Sjungma@eit.uni-kl.de} 188712027Sjungma@eit.uni-kl.de 188812027Sjungma@eit.uni-kl.de 188912027Sjungma@eit.uni-kl.de// assignment operators 189012027Sjungma@eit.uni-kl.de 189112027Sjungma@eit.uni-kl.deinline 189212027Sjungma@eit.uni-kl.desc_fxnum_subref& 189312027Sjungma@eit.uni-kl.desc_fxnum_subref::operator = ( const sc_fxnum_subref& a ) 189412027Sjungma@eit.uni-kl.de{ 189512027Sjungma@eit.uni-kl.de if( &a != this ) 189612027Sjungma@eit.uni-kl.de { 189712027Sjungma@eit.uni-kl.de m_bv = static_cast<sc_bv_base>( a ); 189812027Sjungma@eit.uni-kl.de set(); 189912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 190012027Sjungma@eit.uni-kl.de } 190112027Sjungma@eit.uni-kl.de return *this; 190212027Sjungma@eit.uni-kl.de} 190312027Sjungma@eit.uni-kl.de 190412027Sjungma@eit.uni-kl.deinline 190512027Sjungma@eit.uni-kl.desc_fxnum_subref& 190612027Sjungma@eit.uni-kl.desc_fxnum_subref::operator = ( const sc_fxnum_fast_subref& a ) 190712027Sjungma@eit.uni-kl.de{ 190812027Sjungma@eit.uni-kl.de m_bv = static_cast<sc_bv_base>( a ); 190912027Sjungma@eit.uni-kl.de set(); 191012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) 191112027Sjungma@eit.uni-kl.de return *this; 191212027Sjungma@eit.uni-kl.de} 191312027Sjungma@eit.uni-kl.de 191412027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(tp) \ 191512027Sjungma@eit.uni-kl.deinline \ 191612027Sjungma@eit.uni-kl.desc_fxnum_subref& \ 191712027Sjungma@eit.uni-kl.desc_fxnum_subref::operator = ( tp a ) \ 191812027Sjungma@eit.uni-kl.de{ \ 191912027Sjungma@eit.uni-kl.de m_bv = a; \ 192012027Sjungma@eit.uni-kl.de set(); \ 192112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) \ 192212027Sjungma@eit.uni-kl.de return *this; \ 192312027Sjungma@eit.uni-kl.de} 192412027Sjungma@eit.uni-kl.de 192512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_bv_base&) 192612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_lv_base&) 192712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const char*) 192812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const bool*) 192912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_signed&) 193012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_unsigned&) 193112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_int_base&) 193212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_uint_base&) 193312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int64) 193412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(uint64) 193512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int) 193612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned int) 193712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(long) 193812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned long) 193912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(char) 194012027Sjungma@eit.uni-kl.de 194112027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 194212027Sjungma@eit.uni-kl.de 194312027Sjungma@eit.uni-kl.de 194412027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,tp) \ 194512027Sjungma@eit.uni-kl.deinline \ 194612027Sjungma@eit.uni-kl.desc_fxnum_subref& \ 194712027Sjungma@eit.uni-kl.desc_fxnum_subref::operator op ## = ( tp a ) \ 194812027Sjungma@eit.uni-kl.de{ \ 194912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) \ 195012027Sjungma@eit.uni-kl.de get(); \ 195112027Sjungma@eit.uni-kl.de m_bv = m_bv op a; \ 195212027Sjungma@eit.uni-kl.de set(); \ 195312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) \ 195412027Sjungma@eit.uni-kl.de return *this; \ 195512027Sjungma@eit.uni-kl.de} 195612027Sjungma@eit.uni-kl.de 195712027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op) \ 195812027Sjungma@eit.uni-kl.deinline \ 195912027Sjungma@eit.uni-kl.desc_fxnum_subref& \ 196012027Sjungma@eit.uni-kl.desc_fxnum_subref::operator op ## = ( const sc_fxnum_subref& a ) \ 196112027Sjungma@eit.uni-kl.de{ \ 196212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) \ 196312027Sjungma@eit.uni-kl.de get(); \ 196412027Sjungma@eit.uni-kl.de m_bv = m_bv op static_cast<sc_bv_base>( a ); \ 196512027Sjungma@eit.uni-kl.de set(); \ 196612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) \ 196712027Sjungma@eit.uni-kl.de return *this; \ 196812027Sjungma@eit.uni-kl.de} \ 196912027Sjungma@eit.uni-kl.de \ 197012027Sjungma@eit.uni-kl.deinline \ 197112027Sjungma@eit.uni-kl.desc_fxnum_subref& \ 197212027Sjungma@eit.uni-kl.desc_fxnum_subref::operator op ## = ( const sc_fxnum_fast_subref& a ) \ 197312027Sjungma@eit.uni-kl.de{ \ 197412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) \ 197512027Sjungma@eit.uni-kl.de get(); \ 197612027Sjungma@eit.uni-kl.de m_bv = m_bv op static_cast<sc_bv_base>( a ); \ 197712027Sjungma@eit.uni-kl.de set(); \ 197812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( m_num ) \ 197912027Sjungma@eit.uni-kl.de return *this; \ 198012027Sjungma@eit.uni-kl.de} \ 198112027Sjungma@eit.uni-kl.de \ 198212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_bv_base&) \ 198312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_lv_base&) 198412027Sjungma@eit.uni-kl.de 198512027Sjungma@eit.uni-kl.deDEFN_ASN_OP(&) 198612027Sjungma@eit.uni-kl.deDEFN_ASN_OP(|) 198712027Sjungma@eit.uni-kl.deDEFN_ASN_OP(^) 198812027Sjungma@eit.uni-kl.de 198912027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 199012027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP 199112027Sjungma@eit.uni-kl.de 199212027Sjungma@eit.uni-kl.de 199312027Sjungma@eit.uni-kl.de// relational operators 199412027Sjungma@eit.uni-kl.de 199512027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_T(op,tp) \ 199612027Sjungma@eit.uni-kl.deinline \ 199712027Sjungma@eit.uni-kl.debool \ 199812027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_subref& a, tp b ) \ 199912027Sjungma@eit.uni-kl.de{ \ 200012027Sjungma@eit.uni-kl.de return ( static_cast<sc_bv_base>( a ) op b ); \ 200112027Sjungma@eit.uni-kl.de} \ 200212027Sjungma@eit.uni-kl.de \ 200312027Sjungma@eit.uni-kl.deinline \ 200412027Sjungma@eit.uni-kl.debool \ 200512027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxnum_subref& b ) \ 200612027Sjungma@eit.uni-kl.de{ \ 200712027Sjungma@eit.uni-kl.de return ( static_cast<sc_bv_base>( b ) op a ); \ 200812027Sjungma@eit.uni-kl.de} 200912027Sjungma@eit.uni-kl.de 201012027Sjungma@eit.uni-kl.de#define DEFN_REL_OP(op) \ 201112027Sjungma@eit.uni-kl.deinline \ 201212027Sjungma@eit.uni-kl.debool \ 201312027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_subref& a, const sc_fxnum_subref& b ) \ 201412027Sjungma@eit.uni-kl.de{ \ 201512027Sjungma@eit.uni-kl.de return ( static_cast<sc_bv_base>( a ) op static_cast<sc_bv_base>( b ) ); \ 201612027Sjungma@eit.uni-kl.de} \ 201712027Sjungma@eit.uni-kl.de \ 201812027Sjungma@eit.uni-kl.deinline \ 201912027Sjungma@eit.uni-kl.debool \ 202012027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_subref& a, const sc_fxnum_fast_subref& b ) \ 202112027Sjungma@eit.uni-kl.de{ \ 202212027Sjungma@eit.uni-kl.de return ( static_cast<sc_bv_base>( a ) op static_cast<sc_bv_base>( b ) ); \ 202312027Sjungma@eit.uni-kl.de} \ 202412027Sjungma@eit.uni-kl.de \ 202512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_bv_base&) \ 202612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_lv_base&) \ 202712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const char*) \ 202812027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const bool*) \ 202912027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_signed&) \ 203012027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_unsigned&) \ 203112027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,int) \ 203212027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,unsigned int) \ 203312027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,long) \ 203412027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,unsigned long) 203512027Sjungma@eit.uni-kl.de 203612027Sjungma@eit.uni-kl.deDEFN_REL_OP(==) 203712027Sjungma@eit.uni-kl.deDEFN_REL_OP(!=) 203812027Sjungma@eit.uni-kl.de 203912027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_T 204012027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP 204112027Sjungma@eit.uni-kl.de 204212027Sjungma@eit.uni-kl.de 204312027Sjungma@eit.uni-kl.de// reduce functions 204412027Sjungma@eit.uni-kl.de 204512027Sjungma@eit.uni-kl.de#define DEFN_RED_FNC(fnc) \ 204612027Sjungma@eit.uni-kl.deinline \ 204712027Sjungma@eit.uni-kl.debool \ 204812027Sjungma@eit.uni-kl.desc_fxnum_subref::fnc() const \ 204912027Sjungma@eit.uni-kl.de{ \ 205012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) \ 205112027Sjungma@eit.uni-kl.de get(); \ 205212027Sjungma@eit.uni-kl.de return static_cast<bool>( m_bv.fnc() ); \ 205312027Sjungma@eit.uni-kl.de} 205412027Sjungma@eit.uni-kl.de 205512027Sjungma@eit.uni-kl.deDEFN_RED_FNC(and_reduce) 205612027Sjungma@eit.uni-kl.deDEFN_RED_FNC(nand_reduce) 205712027Sjungma@eit.uni-kl.deDEFN_RED_FNC(or_reduce) 205812027Sjungma@eit.uni-kl.deDEFN_RED_FNC(nor_reduce) 205912027Sjungma@eit.uni-kl.deDEFN_RED_FNC(xor_reduce) 206012027Sjungma@eit.uni-kl.deDEFN_RED_FNC(xnor_reduce) 206112027Sjungma@eit.uni-kl.de 206212027Sjungma@eit.uni-kl.de#undef DEFN_RED_FNC 206312027Sjungma@eit.uni-kl.de 206412027Sjungma@eit.uni-kl.de 206512027Sjungma@eit.uni-kl.de// query parameter 206612027Sjungma@eit.uni-kl.de 206712027Sjungma@eit.uni-kl.deinline 206812027Sjungma@eit.uni-kl.deint 206912027Sjungma@eit.uni-kl.desc_fxnum_subref::length() const 207012027Sjungma@eit.uni-kl.de{ 207112027Sjungma@eit.uni-kl.de return m_bv.length(); 207212027Sjungma@eit.uni-kl.de} 207312027Sjungma@eit.uni-kl.de 207412027Sjungma@eit.uni-kl.de 207512027Sjungma@eit.uni-kl.de// explicit conversions 207612027Sjungma@eit.uni-kl.de 207712027Sjungma@eit.uni-kl.deinline 207812027Sjungma@eit.uni-kl.deint 207912027Sjungma@eit.uni-kl.desc_fxnum_subref::to_int() const 208012027Sjungma@eit.uni-kl.de{ 208112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 208212027Sjungma@eit.uni-kl.de get(); 208312027Sjungma@eit.uni-kl.de return m_bv.to_int(); 208412027Sjungma@eit.uni-kl.de} 208512027Sjungma@eit.uni-kl.de 208612027Sjungma@eit.uni-kl.deinline 208712027Sjungma@eit.uni-kl.deint64 208812027Sjungma@eit.uni-kl.desc_fxnum_subref::to_int64() const 208912027Sjungma@eit.uni-kl.de{ 209012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 209112027Sjungma@eit.uni-kl.de get(); 209212027Sjungma@eit.uni-kl.de return m_bv.to_int64(); 209312027Sjungma@eit.uni-kl.de} 209412027Sjungma@eit.uni-kl.de 209512027Sjungma@eit.uni-kl.deinline 209612027Sjungma@eit.uni-kl.deunsigned int 209712027Sjungma@eit.uni-kl.desc_fxnum_subref::to_uint() const 209812027Sjungma@eit.uni-kl.de{ 209912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 210012027Sjungma@eit.uni-kl.de get(); 210112027Sjungma@eit.uni-kl.de return m_bv.to_uint(); 210212027Sjungma@eit.uni-kl.de} 210312027Sjungma@eit.uni-kl.de 210412027Sjungma@eit.uni-kl.deinline 210512027Sjungma@eit.uni-kl.deuint64 210612027Sjungma@eit.uni-kl.desc_fxnum_subref::to_uint64() const 210712027Sjungma@eit.uni-kl.de{ 210812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 210912027Sjungma@eit.uni-kl.de get(); 211012027Sjungma@eit.uni-kl.de return m_bv.to_uint64(); 211112027Sjungma@eit.uni-kl.de} 211212027Sjungma@eit.uni-kl.de 211312027Sjungma@eit.uni-kl.deinline 211412027Sjungma@eit.uni-kl.delong 211512027Sjungma@eit.uni-kl.desc_fxnum_subref::to_long() const 211612027Sjungma@eit.uni-kl.de{ 211712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 211812027Sjungma@eit.uni-kl.de get(); 211912027Sjungma@eit.uni-kl.de return m_bv.to_long(); 212012027Sjungma@eit.uni-kl.de} 212112027Sjungma@eit.uni-kl.de 212212027Sjungma@eit.uni-kl.deinline 212312027Sjungma@eit.uni-kl.deunsigned long 212412027Sjungma@eit.uni-kl.desc_fxnum_subref::to_ulong() const 212512027Sjungma@eit.uni-kl.de{ 212612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 212712027Sjungma@eit.uni-kl.de get(); 212812027Sjungma@eit.uni-kl.de return m_bv.to_ulong(); 212912027Sjungma@eit.uni-kl.de} 213012027Sjungma@eit.uni-kl.de 213112027Sjungma@eit.uni-kl.de 213212027Sjungma@eit.uni-kl.de#ifdef SC_DT_DEPRECATED 213312027Sjungma@eit.uni-kl.de 213412027Sjungma@eit.uni-kl.deinline 213512027Sjungma@eit.uni-kl.deint 213612027Sjungma@eit.uni-kl.desc_fxnum_subref::to_signed() const 213712027Sjungma@eit.uni-kl.de{ 213812027Sjungma@eit.uni-kl.de return to_int(); 213912027Sjungma@eit.uni-kl.de} 214012027Sjungma@eit.uni-kl.de 214112027Sjungma@eit.uni-kl.deinline 214212027Sjungma@eit.uni-kl.deunsigned int 214312027Sjungma@eit.uni-kl.desc_fxnum_subref::to_unsigned() const 214412027Sjungma@eit.uni-kl.de{ 214512027Sjungma@eit.uni-kl.de return to_uint(); 214612027Sjungma@eit.uni-kl.de} 214712027Sjungma@eit.uni-kl.de 214812027Sjungma@eit.uni-kl.de#endif 214912027Sjungma@eit.uni-kl.de 215012027Sjungma@eit.uni-kl.de 215112027Sjungma@eit.uni-kl.deinline 215212027Sjungma@eit.uni-kl.deconst std::string 215312027Sjungma@eit.uni-kl.desc_fxnum_subref::to_string() const 215412027Sjungma@eit.uni-kl.de{ 215512027Sjungma@eit.uni-kl.de get(); 215612027Sjungma@eit.uni-kl.de return m_bv.to_string(); 215712027Sjungma@eit.uni-kl.de} 215812027Sjungma@eit.uni-kl.de 215912027Sjungma@eit.uni-kl.deinline 216012027Sjungma@eit.uni-kl.deconst std::string 216112027Sjungma@eit.uni-kl.desc_fxnum_subref::to_string( sc_numrep numrep ) const 216212027Sjungma@eit.uni-kl.de{ 216312027Sjungma@eit.uni-kl.de get(); 216412027Sjungma@eit.uni-kl.de return m_bv.to_string( numrep ); 216512027Sjungma@eit.uni-kl.de} 216612027Sjungma@eit.uni-kl.de 216712027Sjungma@eit.uni-kl.deinline 216812027Sjungma@eit.uni-kl.deconst std::string 216912027Sjungma@eit.uni-kl.desc_fxnum_subref::to_string( sc_numrep numrep, bool w_prefix ) const 217012027Sjungma@eit.uni-kl.de{ 217112027Sjungma@eit.uni-kl.de get(); 217212027Sjungma@eit.uni-kl.de return m_bv.to_string( numrep, w_prefix ); 217312027Sjungma@eit.uni-kl.de} 217412027Sjungma@eit.uni-kl.de 217512027Sjungma@eit.uni-kl.de 217612027Sjungma@eit.uni-kl.de// implicit conversion 217712027Sjungma@eit.uni-kl.de 217812027Sjungma@eit.uni-kl.deinline 217912027Sjungma@eit.uni-kl.desc_fxnum_subref::operator sc_bv_base () const 218012027Sjungma@eit.uni-kl.de{ 218112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( m_num ) 218212027Sjungma@eit.uni-kl.de get(); 218312027Sjungma@eit.uni-kl.de return m_bv; 218412027Sjungma@eit.uni-kl.de} 218512027Sjungma@eit.uni-kl.de 218612027Sjungma@eit.uni-kl.de 218712027Sjungma@eit.uni-kl.deinline 218812027Sjungma@eit.uni-kl.de::std::ostream& 218912027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_fxnum_subref& a ) 219012027Sjungma@eit.uni-kl.de{ 219112027Sjungma@eit.uni-kl.de a.print( os ); 219212027Sjungma@eit.uni-kl.de return os; 219312027Sjungma@eit.uni-kl.de} 219412027Sjungma@eit.uni-kl.de 219512027Sjungma@eit.uni-kl.deinline 219612027Sjungma@eit.uni-kl.de::std::istream& 219712027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_fxnum_subref& a ) 219812027Sjungma@eit.uni-kl.de{ 219912027Sjungma@eit.uni-kl.de a.scan( is ); 220012027Sjungma@eit.uni-kl.de return is; 220112027Sjungma@eit.uni-kl.de} 220212027Sjungma@eit.uni-kl.de 220312027Sjungma@eit.uni-kl.de 220412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 220512027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_fast_subref 220612027Sjungma@eit.uni-kl.de// 220712027Sjungma@eit.uni-kl.de// Proxy class for part-selection in class sc_fxnum_fast, 220812027Sjungma@eit.uni-kl.de// behaves like sc_bv_base. 220912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 221012027Sjungma@eit.uni-kl.de 221112027Sjungma@eit.uni-kl.de// constructor 221212027Sjungma@eit.uni-kl.de 221312027Sjungma@eit.uni-kl.deinline 221412027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::sc_fxnum_fast_subref( sc_fxnum_fast& num_, 221512027Sjungma@eit.uni-kl.de int from_, int to_ ) 221612027Sjungma@eit.uni-kl.de : m_num( num_ ), m_from( from_ ), m_to( to_ ), 221712027Sjungma@eit.uni-kl.de m_bv( *new sc_bv_base( sc_max( m_from, m_to ) - 221812027Sjungma@eit.uni-kl.de sc_min( m_from, m_to ) + 1 ) ) 221912027Sjungma@eit.uni-kl.de{} 222012027Sjungma@eit.uni-kl.de 222112027Sjungma@eit.uni-kl.de 222212027Sjungma@eit.uni-kl.de// copy constructor 222312027Sjungma@eit.uni-kl.de 222412027Sjungma@eit.uni-kl.deinline 222512027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::sc_fxnum_fast_subref( const sc_fxnum_fast_subref& a ) 222612027Sjungma@eit.uni-kl.de : m_num( a.m_num ), m_from( a.m_from ), m_to( a.m_to ), 222712027Sjungma@eit.uni-kl.de m_bv( *new sc_bv_base( a.m_bv ) ) 222812027Sjungma@eit.uni-kl.de{} 222912027Sjungma@eit.uni-kl.de 223012027Sjungma@eit.uni-kl.de 223112027Sjungma@eit.uni-kl.de// destructor 223212027Sjungma@eit.uni-kl.de 223312027Sjungma@eit.uni-kl.deinline 223412027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::~sc_fxnum_fast_subref() 223512027Sjungma@eit.uni-kl.de{ 223612027Sjungma@eit.uni-kl.de delete &m_bv; 223712027Sjungma@eit.uni-kl.de} 223812027Sjungma@eit.uni-kl.de 223912027Sjungma@eit.uni-kl.de 224012027Sjungma@eit.uni-kl.de// assignment operators 224112027Sjungma@eit.uni-kl.de 224212027Sjungma@eit.uni-kl.deinline 224312027Sjungma@eit.uni-kl.desc_fxnum_fast_subref& 224412027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::operator = ( const sc_fxnum_subref& a ) 224512027Sjungma@eit.uni-kl.de{ 224612027Sjungma@eit.uni-kl.de m_bv = static_cast<sc_bv_base>( a ); 224712027Sjungma@eit.uni-kl.de set(); 224812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 224912027Sjungma@eit.uni-kl.de return *this; 225012027Sjungma@eit.uni-kl.de} 225112027Sjungma@eit.uni-kl.de 225212027Sjungma@eit.uni-kl.deinline 225312027Sjungma@eit.uni-kl.desc_fxnum_fast_subref& 225412027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::operator = ( const sc_fxnum_fast_subref& a ) 225512027Sjungma@eit.uni-kl.de{ 225612027Sjungma@eit.uni-kl.de if( &a != this ) 225712027Sjungma@eit.uni-kl.de { 225812027Sjungma@eit.uni-kl.de m_bv = static_cast<sc_bv_base>( a ); 225912027Sjungma@eit.uni-kl.de set(); 226012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) 226112027Sjungma@eit.uni-kl.de } 226212027Sjungma@eit.uni-kl.de return *this; 226312027Sjungma@eit.uni-kl.de} 226412027Sjungma@eit.uni-kl.de 226512027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(tp) \ 226612027Sjungma@eit.uni-kl.deinline \ 226712027Sjungma@eit.uni-kl.desc_fxnum_fast_subref& \ 226812027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::operator = ( tp a ) \ 226912027Sjungma@eit.uni-kl.de{ \ 227012027Sjungma@eit.uni-kl.de m_bv = a; \ 227112027Sjungma@eit.uni-kl.de set(); \ 227212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) \ 227312027Sjungma@eit.uni-kl.de return *this; \ 227412027Sjungma@eit.uni-kl.de} 227512027Sjungma@eit.uni-kl.de 227612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_bv_base&) 227712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_lv_base&) 227812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const char*) 227912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const bool*) 228012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_signed&) 228112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_unsigned&) 228212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_int_base&) 228312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_uint_base&) 228412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int64) 228512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(uint64) 228612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int) 228712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned int) 228812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(long) 228912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned long) 229012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(char) 229112027Sjungma@eit.uni-kl.de 229212027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 229312027Sjungma@eit.uni-kl.de 229412027Sjungma@eit.uni-kl.de 229512027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,tp) \ 229612027Sjungma@eit.uni-kl.deinline \ 229712027Sjungma@eit.uni-kl.desc_fxnum_fast_subref& \ 229812027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::operator op ## = ( tp a ) \ 229912027Sjungma@eit.uni-kl.de{ \ 230012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) \ 230112027Sjungma@eit.uni-kl.de get(); \ 230212027Sjungma@eit.uni-kl.de m_bv = m_bv op a; \ 230312027Sjungma@eit.uni-kl.de set(); \ 230412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) \ 230512027Sjungma@eit.uni-kl.de return *this; \ 230612027Sjungma@eit.uni-kl.de} 230712027Sjungma@eit.uni-kl.de 230812027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op) \ 230912027Sjungma@eit.uni-kl.deinline \ 231012027Sjungma@eit.uni-kl.desc_fxnum_fast_subref& \ 231112027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::operator op ## = ( const sc_fxnum_subref& a ) \ 231212027Sjungma@eit.uni-kl.de{ \ 231312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) \ 231412027Sjungma@eit.uni-kl.de get(); \ 231512027Sjungma@eit.uni-kl.de m_bv = m_bv op static_cast<sc_bv_base>( a ); \ 231612027Sjungma@eit.uni-kl.de set(); \ 231712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) \ 231812027Sjungma@eit.uni-kl.de return *this; \ 231912027Sjungma@eit.uni-kl.de} \ 232012027Sjungma@eit.uni-kl.de \ 232112027Sjungma@eit.uni-kl.deinline \ 232212027Sjungma@eit.uni-kl.desc_fxnum_fast_subref& \ 232312027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::operator op ## = ( const sc_fxnum_fast_subref& a ) \ 232412027Sjungma@eit.uni-kl.de{ \ 232512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) \ 232612027Sjungma@eit.uni-kl.de get(); \ 232712027Sjungma@eit.uni-kl.de m_bv = m_bv op static_cast<sc_bv_base>( a ); \ 232812027Sjungma@eit.uni-kl.de set(); \ 232912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) \ 233012027Sjungma@eit.uni-kl.de return *this; \ 233112027Sjungma@eit.uni-kl.de} \ 233212027Sjungma@eit.uni-kl.de \ 233312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_bv_base&) \ 233412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_lv_base&) 233512027Sjungma@eit.uni-kl.de 233612027Sjungma@eit.uni-kl.deDEFN_ASN_OP(&) 233712027Sjungma@eit.uni-kl.deDEFN_ASN_OP(|) 233812027Sjungma@eit.uni-kl.deDEFN_ASN_OP(^) 233912027Sjungma@eit.uni-kl.de 234012027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 234112027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP 234212027Sjungma@eit.uni-kl.de 234312027Sjungma@eit.uni-kl.de 234412027Sjungma@eit.uni-kl.de// relational operators 234512027Sjungma@eit.uni-kl.de 234612027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_T(op,tp) \ 234712027Sjungma@eit.uni-kl.deinline \ 234812027Sjungma@eit.uni-kl.debool \ 234912027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast_subref& a, tp b ) \ 235012027Sjungma@eit.uni-kl.de{ \ 235112027Sjungma@eit.uni-kl.de return ( static_cast<sc_bv_base>( a ) op b ); \ 235212027Sjungma@eit.uni-kl.de} \ 235312027Sjungma@eit.uni-kl.de \ 235412027Sjungma@eit.uni-kl.deinline \ 235512027Sjungma@eit.uni-kl.debool \ 235612027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxnum_fast_subref& b ) \ 235712027Sjungma@eit.uni-kl.de{ \ 235812027Sjungma@eit.uni-kl.de return ( static_cast<sc_bv_base>( b ) op a ); \ 235912027Sjungma@eit.uni-kl.de} 236012027Sjungma@eit.uni-kl.de 236112027Sjungma@eit.uni-kl.de#define DEFN_REL_OP(op) \ 236212027Sjungma@eit.uni-kl.deinline \ 236312027Sjungma@eit.uni-kl.debool \ 236412027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast_subref& a, const sc_fxnum_fast_subref& b ) \ 236512027Sjungma@eit.uni-kl.de{ \ 236612027Sjungma@eit.uni-kl.de return ( static_cast<sc_bv_base>( a ) op static_cast<sc_bv_base>( b ) ); \ 236712027Sjungma@eit.uni-kl.de} \ 236812027Sjungma@eit.uni-kl.de \ 236912027Sjungma@eit.uni-kl.deinline \ 237012027Sjungma@eit.uni-kl.debool \ 237112027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast_subref& a, const sc_fxnum_subref& b ) \ 237212027Sjungma@eit.uni-kl.de{ \ 237312027Sjungma@eit.uni-kl.de return ( static_cast<sc_bv_base>( a ) op static_cast<sc_bv_base>( b ) ); \ 237412027Sjungma@eit.uni-kl.de} \ 237512027Sjungma@eit.uni-kl.de \ 237612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_bv_base&) \ 237712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_lv_base&) \ 237812027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const char*) \ 237912027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const bool*) \ 238012027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_signed&) \ 238112027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_unsigned&) \ 238212027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,int) \ 238312027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,unsigned int) \ 238412027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,long) \ 238512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,unsigned long) 238612027Sjungma@eit.uni-kl.de 238712027Sjungma@eit.uni-kl.deDEFN_REL_OP(==) 238812027Sjungma@eit.uni-kl.deDEFN_REL_OP(!=) 238912027Sjungma@eit.uni-kl.de 239012027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_T 239112027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP 239212027Sjungma@eit.uni-kl.de 239312027Sjungma@eit.uni-kl.de 239412027Sjungma@eit.uni-kl.de// reduce functions 239512027Sjungma@eit.uni-kl.de 239612027Sjungma@eit.uni-kl.de#define DEFN_RED_FNC(fnc) \ 239712027Sjungma@eit.uni-kl.deinline \ 239812027Sjungma@eit.uni-kl.debool \ 239912027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::fnc() const \ 240012027Sjungma@eit.uni-kl.de{ \ 240112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) \ 240212027Sjungma@eit.uni-kl.de get(); \ 240312027Sjungma@eit.uni-kl.de return static_cast<bool>( m_bv.fnc() ); \ 240412027Sjungma@eit.uni-kl.de} 240512027Sjungma@eit.uni-kl.de 240612027Sjungma@eit.uni-kl.deDEFN_RED_FNC(and_reduce) 240712027Sjungma@eit.uni-kl.deDEFN_RED_FNC(nand_reduce) 240812027Sjungma@eit.uni-kl.deDEFN_RED_FNC(or_reduce) 240912027Sjungma@eit.uni-kl.deDEFN_RED_FNC(nor_reduce) 241012027Sjungma@eit.uni-kl.deDEFN_RED_FNC(xor_reduce) 241112027Sjungma@eit.uni-kl.deDEFN_RED_FNC(xnor_reduce) 241212027Sjungma@eit.uni-kl.de 241312027Sjungma@eit.uni-kl.de#undef DEFN_RED_FNC 241412027Sjungma@eit.uni-kl.de 241512027Sjungma@eit.uni-kl.de 241612027Sjungma@eit.uni-kl.de// query parameter 241712027Sjungma@eit.uni-kl.de 241812027Sjungma@eit.uni-kl.deinline 241912027Sjungma@eit.uni-kl.deint 242012027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::length() const 242112027Sjungma@eit.uni-kl.de{ 242212027Sjungma@eit.uni-kl.de return m_bv.length(); 242312027Sjungma@eit.uni-kl.de} 242412027Sjungma@eit.uni-kl.de 242512027Sjungma@eit.uni-kl.de 242612027Sjungma@eit.uni-kl.de// explicit conversions 242712027Sjungma@eit.uni-kl.de 242812027Sjungma@eit.uni-kl.deinline 242912027Sjungma@eit.uni-kl.deint 243012027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_int() const 243112027Sjungma@eit.uni-kl.de{ 243212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 243312027Sjungma@eit.uni-kl.de get(); 243412027Sjungma@eit.uni-kl.de return m_bv.to_int(); 243512027Sjungma@eit.uni-kl.de} 243612027Sjungma@eit.uni-kl.de 243712027Sjungma@eit.uni-kl.deinline 243812027Sjungma@eit.uni-kl.deint64 243912027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_int64() const 244012027Sjungma@eit.uni-kl.de{ 244112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 244212027Sjungma@eit.uni-kl.de get(); 244312027Sjungma@eit.uni-kl.de return m_bv.to_int64(); 244412027Sjungma@eit.uni-kl.de} 244512027Sjungma@eit.uni-kl.de 244612027Sjungma@eit.uni-kl.deinline 244712027Sjungma@eit.uni-kl.deunsigned int 244812027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_uint() const 244912027Sjungma@eit.uni-kl.de{ 245012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 245112027Sjungma@eit.uni-kl.de get(); 245212027Sjungma@eit.uni-kl.de return m_bv.to_uint(); 245312027Sjungma@eit.uni-kl.de} 245412027Sjungma@eit.uni-kl.de 245512027Sjungma@eit.uni-kl.deinline 245612027Sjungma@eit.uni-kl.deuint64 245712027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_uint64() const 245812027Sjungma@eit.uni-kl.de{ 245912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 246012027Sjungma@eit.uni-kl.de get(); 246112027Sjungma@eit.uni-kl.de return m_bv.to_uint64(); 246212027Sjungma@eit.uni-kl.de} 246312027Sjungma@eit.uni-kl.de 246412027Sjungma@eit.uni-kl.deinline 246512027Sjungma@eit.uni-kl.delong 246612027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_long() const 246712027Sjungma@eit.uni-kl.de{ 246812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 246912027Sjungma@eit.uni-kl.de get(); 247012027Sjungma@eit.uni-kl.de return m_bv.to_long(); 247112027Sjungma@eit.uni-kl.de} 247212027Sjungma@eit.uni-kl.de 247312027Sjungma@eit.uni-kl.deinline 247412027Sjungma@eit.uni-kl.deunsigned long 247512027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_ulong() const 247612027Sjungma@eit.uni-kl.de{ 247712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 247812027Sjungma@eit.uni-kl.de get(); 247912027Sjungma@eit.uni-kl.de return m_bv.to_ulong(); 248012027Sjungma@eit.uni-kl.de} 248112027Sjungma@eit.uni-kl.de 248212027Sjungma@eit.uni-kl.de 248312027Sjungma@eit.uni-kl.de#ifdef SC_DT_DEPRECATED 248412027Sjungma@eit.uni-kl.de 248512027Sjungma@eit.uni-kl.deinline 248612027Sjungma@eit.uni-kl.deint 248712027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_signed() const 248812027Sjungma@eit.uni-kl.de{ 248912027Sjungma@eit.uni-kl.de return to_int(); 249012027Sjungma@eit.uni-kl.de} 249112027Sjungma@eit.uni-kl.de 249212027Sjungma@eit.uni-kl.deinline 249312027Sjungma@eit.uni-kl.deunsigned int 249412027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_unsigned() const 249512027Sjungma@eit.uni-kl.de{ 249612027Sjungma@eit.uni-kl.de return to_uint(); 249712027Sjungma@eit.uni-kl.de} 249812027Sjungma@eit.uni-kl.de 249912027Sjungma@eit.uni-kl.de#endif 250012027Sjungma@eit.uni-kl.de 250112027Sjungma@eit.uni-kl.de 250212027Sjungma@eit.uni-kl.deinline 250312027Sjungma@eit.uni-kl.deconst std::string 250412027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_string() const 250512027Sjungma@eit.uni-kl.de{ 250612027Sjungma@eit.uni-kl.de get(); 250712027Sjungma@eit.uni-kl.de return m_bv.to_string(); 250812027Sjungma@eit.uni-kl.de} 250912027Sjungma@eit.uni-kl.de 251012027Sjungma@eit.uni-kl.deinline 251112027Sjungma@eit.uni-kl.deconst std::string 251212027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_string( sc_numrep numrep ) const 251312027Sjungma@eit.uni-kl.de{ 251412027Sjungma@eit.uni-kl.de get(); 251512027Sjungma@eit.uni-kl.de return m_bv.to_string( numrep ); 251612027Sjungma@eit.uni-kl.de} 251712027Sjungma@eit.uni-kl.de 251812027Sjungma@eit.uni-kl.deinline 251912027Sjungma@eit.uni-kl.deconst std::string 252012027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::to_string( sc_numrep numrep, bool w_prefix ) const 252112027Sjungma@eit.uni-kl.de{ 252212027Sjungma@eit.uni-kl.de get(); 252312027Sjungma@eit.uni-kl.de return m_bv.to_string( numrep, w_prefix ); 252412027Sjungma@eit.uni-kl.de} 252512027Sjungma@eit.uni-kl.de 252612027Sjungma@eit.uni-kl.de 252712027Sjungma@eit.uni-kl.de// implicit conversion 252812027Sjungma@eit.uni-kl.de 252912027Sjungma@eit.uni-kl.deinline 253012027Sjungma@eit.uni-kl.desc_fxnum_fast_subref::operator sc_bv_base () const 253112027Sjungma@eit.uni-kl.de{ 253212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( m_num ) 253312027Sjungma@eit.uni-kl.de get(); 253412027Sjungma@eit.uni-kl.de return m_bv; 253512027Sjungma@eit.uni-kl.de} 253612027Sjungma@eit.uni-kl.de 253712027Sjungma@eit.uni-kl.de 253812027Sjungma@eit.uni-kl.deinline 253912027Sjungma@eit.uni-kl.de::std::ostream& 254012027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_fxnum_fast_subref& a ) 254112027Sjungma@eit.uni-kl.de{ 254212027Sjungma@eit.uni-kl.de a.print( os ); 254312027Sjungma@eit.uni-kl.de return os; 254412027Sjungma@eit.uni-kl.de} 254512027Sjungma@eit.uni-kl.de 254612027Sjungma@eit.uni-kl.deinline 254712027Sjungma@eit.uni-kl.de::std::istream& 254812027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_fxnum_fast_subref& a ) 254912027Sjungma@eit.uni-kl.de{ 255012027Sjungma@eit.uni-kl.de a.scan( is ); 255112027Sjungma@eit.uni-kl.de return is; 255212027Sjungma@eit.uni-kl.de} 255312027Sjungma@eit.uni-kl.de 255412027Sjungma@eit.uni-kl.de 255512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 255612027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum 255712027Sjungma@eit.uni-kl.de// 255812027Sjungma@eit.uni-kl.de// Base class for the fixed-point types; arbitrary precision. 255912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 256012027Sjungma@eit.uni-kl.de 256112027Sjungma@eit.uni-kl.deinline 256212027Sjungma@eit.uni-kl.desc_fxnum_observer* 256312027Sjungma@eit.uni-kl.desc_fxnum::observer() const 256412027Sjungma@eit.uni-kl.de{ 256512027Sjungma@eit.uni-kl.de return m_observer; 256612027Sjungma@eit.uni-kl.de} 256712027Sjungma@eit.uni-kl.de 256812027Sjungma@eit.uni-kl.de 256912027Sjungma@eit.uni-kl.deinline 257012027Sjungma@eit.uni-kl.devoid 257112027Sjungma@eit.uni-kl.desc_fxnum::cast() 257212027Sjungma@eit.uni-kl.de{ 257312027Sjungma@eit.uni-kl.de SC_ERROR_IF_( ! m_rep->is_normal(), sc_core::SC_ID_INVALID_FX_VALUE_ ); 257412027Sjungma@eit.uni-kl.de 257512027Sjungma@eit.uni-kl.de if( m_params.cast_switch() == SC_ON ) 257612027Sjungma@eit.uni-kl.de m_rep->cast( m_params, m_q_flag, m_o_flag ); 257712027Sjungma@eit.uni-kl.de} 257812027Sjungma@eit.uni-kl.de 257912027Sjungma@eit.uni-kl.de 258012027Sjungma@eit.uni-kl.de// constructors 258112027Sjungma@eit.uni-kl.de 258212027Sjungma@eit.uni-kl.deinline 258312027Sjungma@eit.uni-kl.desc_fxnum::sc_fxnum( const sc_fxtype_params& type_params_, 258412027Sjungma@eit.uni-kl.de sc_enc enc_, 258512027Sjungma@eit.uni-kl.de const sc_fxcast_switch& cast_sw, 258612027Sjungma@eit.uni-kl.de sc_fxnum_observer* observer_ ) 258712027Sjungma@eit.uni-kl.de: m_rep( new scfx_rep ), 258812027Sjungma@eit.uni-kl.de m_params( type_params_, enc_, cast_sw ), 258912027Sjungma@eit.uni-kl.de m_q_flag( false ), 259012027Sjungma@eit.uni-kl.de m_o_flag( false ), 259112027Sjungma@eit.uni-kl.de m_observer( observer_ ) 259212027Sjungma@eit.uni-kl.de{ 259312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_DEFAULT_ 259412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_CONSTRUCT_( *this ) 259512027Sjungma@eit.uni-kl.de} 259612027Sjungma@eit.uni-kl.de 259712027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T(tp,arg) \ 259812027Sjungma@eit.uni-kl.deinline \ 259912027Sjungma@eit.uni-kl.desc_fxnum::sc_fxnum( tp a, \ 260012027Sjungma@eit.uni-kl.de const sc_fxtype_params& type_params_, \ 260112027Sjungma@eit.uni-kl.de sc_enc enc_, \ 260212027Sjungma@eit.uni-kl.de const sc_fxcast_switch& cast_sw, \ 260312027Sjungma@eit.uni-kl.de sc_fxnum_observer* observer_ ) \ 260412027Sjungma@eit.uni-kl.de: m_rep( new scfx_rep( arg ) ), \ 260512027Sjungma@eit.uni-kl.de m_params( type_params_, enc_, cast_sw ), \ 260612027Sjungma@eit.uni-kl.de m_q_flag( false ), \ 260712027Sjungma@eit.uni-kl.de m_o_flag( false ), \ 260812027Sjungma@eit.uni-kl.de m_observer( observer_ ) \ 260912027Sjungma@eit.uni-kl.de{ \ 261012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_DEFAULT_ \ 261112027Sjungma@eit.uni-kl.de cast(); \ 261212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_CONSTRUCT_( *this ) \ 261312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) \ 261412027Sjungma@eit.uni-kl.de} 261512027Sjungma@eit.uni-kl.de 261612027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_A(tp) DEFN_CTOR_T(tp,a) 261712027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_B(tp) DEFN_CTOR_T(tp,*a.m_rep) 261812027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_C(tp) DEFN_CTOR_T(tp,a.to_double()) 261912027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_D(tp) DEFN_CTOR_T(tp,a.value()) 262012027Sjungma@eit.uni-kl.de 262112027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(int) 262212027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(unsigned int) 262312027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(long) 262412027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(unsigned long) 262512027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(float) 262612027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(double) 262712027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(const char*) 262812027Sjungma@eit.uni-kl.deDEFN_CTOR_T_B(const sc_fxval&) 262912027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_fxval_fast&) 263012027Sjungma@eit.uni-kl.deDEFN_CTOR_T_B(const sc_fxnum&) 263112027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_fxnum_fast&) 263212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 263312027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(int64) 263412027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(uint64) 263512027Sjungma@eit.uni-kl.deDEFN_CTOR_T_D(const sc_int_base&) 263612027Sjungma@eit.uni-kl.deDEFN_CTOR_T_D(const sc_uint_base&) 263712027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(const sc_signed&) 263812027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(const sc_unsigned&) 263912027Sjungma@eit.uni-kl.de#endif 264012027Sjungma@eit.uni-kl.de 264112027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T 264212027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_A 264312027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_B 264412027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_C 264512027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_D 264612027Sjungma@eit.uni-kl.de 264712027Sjungma@eit.uni-kl.de 264812027Sjungma@eit.uni-kl.deinline 264912027Sjungma@eit.uni-kl.desc_fxnum::~sc_fxnum() 265012027Sjungma@eit.uni-kl.de{ 265112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_DESTRUCT_( *this ) 265212027Sjungma@eit.uni-kl.de delete m_rep; 265312027Sjungma@eit.uni-kl.de} 265412027Sjungma@eit.uni-kl.de 265512027Sjungma@eit.uni-kl.de 265612027Sjungma@eit.uni-kl.de// internal use only; 265712027Sjungma@eit.uni-kl.deinline 265812027Sjungma@eit.uni-kl.deconst scfx_rep* 265912027Sjungma@eit.uni-kl.desc_fxnum::get_rep() const 266012027Sjungma@eit.uni-kl.de{ 266112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 266212027Sjungma@eit.uni-kl.de return m_rep; 266312027Sjungma@eit.uni-kl.de} 266412027Sjungma@eit.uni-kl.de 266512027Sjungma@eit.uni-kl.de 266612027Sjungma@eit.uni-kl.de// unary operators 266712027Sjungma@eit.uni-kl.de 266812027Sjungma@eit.uni-kl.deinline 266912027Sjungma@eit.uni-kl.deconst sc_fxval 267012027Sjungma@eit.uni-kl.desc_fxnum::operator - () const 267112027Sjungma@eit.uni-kl.de{ 267212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 267312027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::neg_scfx_rep( *m_rep ) ); 267412027Sjungma@eit.uni-kl.de} 267512027Sjungma@eit.uni-kl.de 267612027Sjungma@eit.uni-kl.deinline 267712027Sjungma@eit.uni-kl.deconst sc_fxval 267812027Sjungma@eit.uni-kl.desc_fxnum::operator + () const 267912027Sjungma@eit.uni-kl.de{ 268012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 268112027Sjungma@eit.uni-kl.de return sc_fxval( new scfx_rep( *m_rep ) ); 268212027Sjungma@eit.uni-kl.de} 268312027Sjungma@eit.uni-kl.de 268412027Sjungma@eit.uni-kl.de 268512027Sjungma@eit.uni-kl.de// unary functions 268612027Sjungma@eit.uni-kl.de 268712027Sjungma@eit.uni-kl.deinline 268812027Sjungma@eit.uni-kl.devoid 268912027Sjungma@eit.uni-kl.deneg( sc_fxval& c, const sc_fxnum& a ) 269012027Sjungma@eit.uni-kl.de{ 269112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 269212027Sjungma@eit.uni-kl.de c.set_rep( sc_dt::neg_scfx_rep( *a.m_rep ) ); 269312027Sjungma@eit.uni-kl.de} 269412027Sjungma@eit.uni-kl.de 269512027Sjungma@eit.uni-kl.deinline 269612027Sjungma@eit.uni-kl.devoid 269712027Sjungma@eit.uni-kl.deneg( sc_fxnum& c, const sc_fxnum& a ) 269812027Sjungma@eit.uni-kl.de{ 269912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 270012027Sjungma@eit.uni-kl.de delete c.m_rep; 270112027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::neg_scfx_rep( *a.m_rep ); 270212027Sjungma@eit.uni-kl.de c.cast(); 270312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( c ) 270412027Sjungma@eit.uni-kl.de} 270512027Sjungma@eit.uni-kl.de 270612027Sjungma@eit.uni-kl.de 270712027Sjungma@eit.uni-kl.de// binary operators 270812027Sjungma@eit.uni-kl.de 270912027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_T(op,fnc,tp) \ 271012027Sjungma@eit.uni-kl.deinline \ 271112027Sjungma@eit.uni-kl.deconst sc_fxval \ 271212027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum& a, tp b ) \ 271312027Sjungma@eit.uni-kl.de{ \ 271412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 271512027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 271612027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.get_rep() ) ); \ 271712027Sjungma@eit.uni-kl.de} \ 271812027Sjungma@eit.uni-kl.de \ 271912027Sjungma@eit.uni-kl.deinline \ 272012027Sjungma@eit.uni-kl.deconst sc_fxval \ 272112027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxnum& b ) \ 272212027Sjungma@eit.uni-kl.de{ \ 272312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 272412027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 272512027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *tmp.get_rep(), *b.m_rep ) ); \ 272612027Sjungma@eit.uni-kl.de} 272712027Sjungma@eit.uni-kl.de 272812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 272912027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_OTHER(op,fnc) \ 273012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,int64) \ 273112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,uint64) \ 273212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_int_base&) \ 273312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_uint_base&) \ 273412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_signed&) \ 273512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_unsigned&) 273612027Sjungma@eit.uni-kl.de#else 273712027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_OTHER(op,fnc) 273812027Sjungma@eit.uni-kl.de#endif 273912027Sjungma@eit.uni-kl.de 274012027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP(op,fnc) \ 274112027Sjungma@eit.uni-kl.deinline \ 274212027Sjungma@eit.uni-kl.deconst sc_fxval \ 274312027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum& a, const sc_fxnum& b ) \ 274412027Sjungma@eit.uni-kl.de{ \ 274512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 274612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 274712027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ) ); \ 274812027Sjungma@eit.uni-kl.de} \ 274912027Sjungma@eit.uni-kl.de \ 275012027Sjungma@eit.uni-kl.deinline \ 275112027Sjungma@eit.uni-kl.deconst sc_fxval \ 275212027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum& a, const sc_fxval& b ) \ 275312027Sjungma@eit.uni-kl.de{ \ 275412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 275512027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.get_rep() ) ); \ 275612027Sjungma@eit.uni-kl.de} \ 275712027Sjungma@eit.uni-kl.de \ 275812027Sjungma@eit.uni-kl.deinline \ 275912027Sjungma@eit.uni-kl.deconst sc_fxval \ 276012027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval& a, const sc_fxnum& b ) \ 276112027Sjungma@eit.uni-kl.de{ \ 276212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 276312027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.get_rep(), *b.m_rep ) ); \ 276412027Sjungma@eit.uni-kl.de} \ 276512027Sjungma@eit.uni-kl.de \ 276612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,int) \ 276712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,unsigned int) \ 276812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,long) \ 276912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,unsigned long) \ 277012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,float) \ 277112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,double) \ 277212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const char*) \ 277312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_fxval_fast&) \ 277412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_fxnum_fast&) \ 277512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_OTHER(op,fnc) 277612027Sjungma@eit.uni-kl.de 277712027Sjungma@eit.uni-kl.deDEFN_BIN_OP(*,mult) 277812027Sjungma@eit.uni-kl.deDEFN_BIN_OP(+,add) 277912027Sjungma@eit.uni-kl.deDEFN_BIN_OP(-,sub) 278012027Sjungma@eit.uni-kl.de// don't use macros 278112027Sjungma@eit.uni-kl.de//DEFN_BIN_OP(/,div) 278212027Sjungma@eit.uni-kl.deinline 278312027Sjungma@eit.uni-kl.deconst sc_fxval 278412027Sjungma@eit.uni-kl.deoperator / ( const sc_fxnum& a, const sc_fxnum& b ) 278512027Sjungma@eit.uni-kl.de{ 278612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 278712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) 278812027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::div_scfx_rep( *a.m_rep, *b.m_rep ) ); 278912027Sjungma@eit.uni-kl.de} 279012027Sjungma@eit.uni-kl.de 279112027Sjungma@eit.uni-kl.deinline 279212027Sjungma@eit.uni-kl.deconst sc_fxval 279312027Sjungma@eit.uni-kl.deoperator / ( const sc_fxnum& a, const sc_fxval& b ) 279412027Sjungma@eit.uni-kl.de{ 279512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 279612027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::div_scfx_rep( *a.m_rep, *b.get_rep() ) ); 279712027Sjungma@eit.uni-kl.de} 279812027Sjungma@eit.uni-kl.de 279912027Sjungma@eit.uni-kl.deinline 280012027Sjungma@eit.uni-kl.deconst sc_fxval 280112027Sjungma@eit.uni-kl.deoperator / ( const sc_fxval& a, const sc_fxnum& b ) 280212027Sjungma@eit.uni-kl.de{ 280312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) 280412027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::div_scfx_rep( *a.get_rep(), *b.m_rep ) ); 280512027Sjungma@eit.uni-kl.de} 280612027Sjungma@eit.uni-kl.de 280712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,int) 280812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,unsigned int) 280912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,long) 281012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,unsigned long) 281112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,float) 281212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,double) 281312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const char*) 281412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_fxval_fast&) 281512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_fxnum_fast&) 281612027Sjungma@eit.uni-kl.de//DEFN_BIN_OP_OTHER(/,div) 281712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 281812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,int64) 281912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,uint64) 282012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_int_base&) 282112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_uint_base&) 282212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_signed&) 282312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_unsigned&) 282412027Sjungma@eit.uni-kl.de#endif 282512027Sjungma@eit.uni-kl.de 282612027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_T 282712027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_OTHER 282812027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP 282912027Sjungma@eit.uni-kl.de 283012027Sjungma@eit.uni-kl.de 283112027Sjungma@eit.uni-kl.deinline 283212027Sjungma@eit.uni-kl.deconst sc_fxval 283312027Sjungma@eit.uni-kl.deoperator << ( const sc_fxnum& a, int b ) 283412027Sjungma@eit.uni-kl.de{ 283512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 283612027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::lsh_scfx_rep( *a.m_rep, b ) ); 283712027Sjungma@eit.uni-kl.de} 283812027Sjungma@eit.uni-kl.de 283912027Sjungma@eit.uni-kl.deinline 284012027Sjungma@eit.uni-kl.deconst sc_fxval 284112027Sjungma@eit.uni-kl.deoperator >> ( const sc_fxnum& a, int b ) 284212027Sjungma@eit.uni-kl.de{ 284312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 284412027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::rsh_scfx_rep( *a.m_rep, b ) ); 284512027Sjungma@eit.uni-kl.de} 284612027Sjungma@eit.uni-kl.de 284712027Sjungma@eit.uni-kl.de 284812027Sjungma@eit.uni-kl.de// binary functions 284912027Sjungma@eit.uni-kl.de 285012027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_T(fnc,tp) \ 285112027Sjungma@eit.uni-kl.deinline \ 285212027Sjungma@eit.uni-kl.devoid \ 285312027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, const sc_fxnum& a, tp b ) \ 285412027Sjungma@eit.uni-kl.de{ \ 285512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 285612027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 285712027Sjungma@eit.uni-kl.de c.set_rep( sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.get_rep() ) ); \ 285812027Sjungma@eit.uni-kl.de} \ 285912027Sjungma@eit.uni-kl.de \ 286012027Sjungma@eit.uni-kl.deinline \ 286112027Sjungma@eit.uni-kl.devoid \ 286212027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, tp a, const sc_fxnum& b ) \ 286312027Sjungma@eit.uni-kl.de{ \ 286412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 286512027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 286612027Sjungma@eit.uni-kl.de c.set_rep( sc_dt::fnc ## _scfx_rep( *tmp.get_rep(), *b.m_rep ) ); \ 286712027Sjungma@eit.uni-kl.de} \ 286812027Sjungma@eit.uni-kl.de \ 286912027Sjungma@eit.uni-kl.deinline \ 287012027Sjungma@eit.uni-kl.devoid \ 287112027Sjungma@eit.uni-kl.defnc ( sc_fxnum& c, const sc_fxnum& a, tp b ) \ 287212027Sjungma@eit.uni-kl.de{ \ 287312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 287412027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 287512027Sjungma@eit.uni-kl.de delete c.m_rep; \ 287612027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.get_rep() ); \ 287712027Sjungma@eit.uni-kl.de c.cast(); \ 287812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( c ) \ 287912027Sjungma@eit.uni-kl.de} \ 288012027Sjungma@eit.uni-kl.de \ 288112027Sjungma@eit.uni-kl.deinline \ 288212027Sjungma@eit.uni-kl.devoid \ 288312027Sjungma@eit.uni-kl.defnc ( sc_fxnum& c, tp a, const sc_fxnum& b ) \ 288412027Sjungma@eit.uni-kl.de{ \ 288512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 288612027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 288712027Sjungma@eit.uni-kl.de delete c.m_rep; \ 288812027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *tmp.get_rep(), *b.m_rep ); \ 288912027Sjungma@eit.uni-kl.de c.cast(); \ 289012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( c ) \ 289112027Sjungma@eit.uni-kl.de} 289212027Sjungma@eit.uni-kl.de 289312027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 289412027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_OTHER(fnc) \ 289512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,int64) \ 289612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,uint64) \ 289712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_int_base&) \ 289812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_uint_base&) \ 289912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_signed&) \ 290012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_unsigned&) 290112027Sjungma@eit.uni-kl.de#else 290212027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_OTHER(fnc) 290312027Sjungma@eit.uni-kl.de#endif 290412027Sjungma@eit.uni-kl.de 290512027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC(fnc) \ 290612027Sjungma@eit.uni-kl.deinline \ 290712027Sjungma@eit.uni-kl.devoid \ 290812027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, const sc_fxnum& a, const sc_fxnum& b ) \ 290912027Sjungma@eit.uni-kl.de{ \ 291012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 291112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 291212027Sjungma@eit.uni-kl.de c.set_rep( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ) ); \ 291312027Sjungma@eit.uni-kl.de} \ 291412027Sjungma@eit.uni-kl.de \ 291512027Sjungma@eit.uni-kl.deinline \ 291612027Sjungma@eit.uni-kl.devoid \ 291712027Sjungma@eit.uni-kl.defnc ( sc_fxnum& c, const sc_fxnum& a, const sc_fxnum& b ) \ 291812027Sjungma@eit.uni-kl.de{ \ 291912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 292012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 292112027Sjungma@eit.uni-kl.de delete c.m_rep; \ 292212027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ); \ 292312027Sjungma@eit.uni-kl.de c.cast(); \ 292412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( c ) \ 292512027Sjungma@eit.uni-kl.de} \ 292612027Sjungma@eit.uni-kl.de \ 292712027Sjungma@eit.uni-kl.deinline \ 292812027Sjungma@eit.uni-kl.devoid \ 292912027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, const sc_fxnum& a, const sc_fxval& b ) \ 293012027Sjungma@eit.uni-kl.de{ \ 293112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 293212027Sjungma@eit.uni-kl.de c.set_rep( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.get_rep() ) ); \ 293312027Sjungma@eit.uni-kl.de} \ 293412027Sjungma@eit.uni-kl.de \ 293512027Sjungma@eit.uni-kl.deinline \ 293612027Sjungma@eit.uni-kl.devoid \ 293712027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, const sc_fxval& a, const sc_fxnum& b ) \ 293812027Sjungma@eit.uni-kl.de{ \ 293912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 294012027Sjungma@eit.uni-kl.de c.set_rep( sc_dt::fnc ## _scfx_rep( *a.get_rep(), *b.m_rep ) ); \ 294112027Sjungma@eit.uni-kl.de} \ 294212027Sjungma@eit.uni-kl.de \ 294312027Sjungma@eit.uni-kl.deinline \ 294412027Sjungma@eit.uni-kl.devoid \ 294512027Sjungma@eit.uni-kl.defnc ( sc_fxnum& c, const sc_fxnum& a, const sc_fxval& b ) \ 294612027Sjungma@eit.uni-kl.de{ \ 294712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 294812027Sjungma@eit.uni-kl.de delete c.m_rep; \ 294912027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.get_rep() ); \ 295012027Sjungma@eit.uni-kl.de c.cast(); \ 295112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( c ) \ 295212027Sjungma@eit.uni-kl.de} \ 295312027Sjungma@eit.uni-kl.de \ 295412027Sjungma@eit.uni-kl.deinline \ 295512027Sjungma@eit.uni-kl.devoid \ 295612027Sjungma@eit.uni-kl.defnc ( sc_fxnum& c, const sc_fxval& a, const sc_fxnum& b ) \ 295712027Sjungma@eit.uni-kl.de{ \ 295812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 295912027Sjungma@eit.uni-kl.de delete c.m_rep; \ 296012027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *a.get_rep(), *b.m_rep ); \ 296112027Sjungma@eit.uni-kl.de c.cast(); \ 296212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( c ) \ 296312027Sjungma@eit.uni-kl.de} \ 296412027Sjungma@eit.uni-kl.de \ 296512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,int) \ 296612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,unsigned int) \ 296712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,long) \ 296812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,unsigned long) \ 296912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,float) \ 297012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,double) \ 297112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const char*) \ 297212027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_fxval_fast&) \ 297312027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_fxnum_fast&) \ 297412027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_OTHER(fnc) 297512027Sjungma@eit.uni-kl.de 297612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(mult) 297712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(div) 297812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(add) 297912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(sub) 298012027Sjungma@eit.uni-kl.de 298112027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_T 298212027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_OTHER 298312027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC 298412027Sjungma@eit.uni-kl.de 298512027Sjungma@eit.uni-kl.de 298612027Sjungma@eit.uni-kl.deinline 298712027Sjungma@eit.uni-kl.devoid 298812027Sjungma@eit.uni-kl.delshift( sc_fxval& c, const sc_fxnum& a, int b ) 298912027Sjungma@eit.uni-kl.de{ 299012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 299112027Sjungma@eit.uni-kl.de c.set_rep( sc_dt::lsh_scfx_rep( *a.m_rep, b ) ); 299212027Sjungma@eit.uni-kl.de} 299312027Sjungma@eit.uni-kl.de 299412027Sjungma@eit.uni-kl.deinline 299512027Sjungma@eit.uni-kl.devoid 299612027Sjungma@eit.uni-kl.dershift( sc_fxval& c, const sc_fxnum& a, int b ) 299712027Sjungma@eit.uni-kl.de{ 299812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 299912027Sjungma@eit.uni-kl.de c.set_rep( sc_dt::rsh_scfx_rep( *a.m_rep, b ) ); 300012027Sjungma@eit.uni-kl.de} 300112027Sjungma@eit.uni-kl.de 300212027Sjungma@eit.uni-kl.deinline 300312027Sjungma@eit.uni-kl.devoid 300412027Sjungma@eit.uni-kl.delshift( sc_fxnum& c, const sc_fxnum& a, int b ) 300512027Sjungma@eit.uni-kl.de{ 300612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 300712027Sjungma@eit.uni-kl.de delete c.m_rep; 300812027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::lsh_scfx_rep( *a.m_rep, b ); 300912027Sjungma@eit.uni-kl.de c.cast(); 301012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( c ) 301112027Sjungma@eit.uni-kl.de} 301212027Sjungma@eit.uni-kl.de 301312027Sjungma@eit.uni-kl.deinline 301412027Sjungma@eit.uni-kl.devoid 301512027Sjungma@eit.uni-kl.dershift( sc_fxnum& c, const sc_fxnum& a, int b ) 301612027Sjungma@eit.uni-kl.de{ 301712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 301812027Sjungma@eit.uni-kl.de delete c.m_rep; 301912027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::rsh_scfx_rep( *a.m_rep, b ); 302012027Sjungma@eit.uni-kl.de c.cast(); 302112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( c ) 302212027Sjungma@eit.uni-kl.de} 302312027Sjungma@eit.uni-kl.de 302412027Sjungma@eit.uni-kl.de 302512027Sjungma@eit.uni-kl.de// relational (including equality) operators 302612027Sjungma@eit.uni-kl.de 302712027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_T(op,ret,tp) \ 302812027Sjungma@eit.uni-kl.deinline \ 302912027Sjungma@eit.uni-kl.debool \ 303012027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum& a, tp b ) \ 303112027Sjungma@eit.uni-kl.de{ \ 303212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 303312027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 303412027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *a.m_rep, *tmp.get_rep() ); \ 303512027Sjungma@eit.uni-kl.de return ( ret ); \ 303612027Sjungma@eit.uni-kl.de} \ 303712027Sjungma@eit.uni-kl.de \ 303812027Sjungma@eit.uni-kl.deinline \ 303912027Sjungma@eit.uni-kl.debool \ 304012027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxnum& b ) \ 304112027Sjungma@eit.uni-kl.de{ \ 304212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 304312027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 304412027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *tmp.get_rep(), *b.m_rep ); \ 304512027Sjungma@eit.uni-kl.de return ( ret ); \ 304612027Sjungma@eit.uni-kl.de} 304712027Sjungma@eit.uni-kl.de 304812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 304912027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_OTHER(op,ret) \ 305012027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,int64) \ 305112027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,uint64) \ 305212027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_int_base&) \ 305312027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_uint_base&) \ 305412027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_signed&) \ 305512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_unsigned&) 305612027Sjungma@eit.uni-kl.de#else 305712027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_OTHER(op,ret) 305812027Sjungma@eit.uni-kl.de#endif 305912027Sjungma@eit.uni-kl.de 306012027Sjungma@eit.uni-kl.de#define DEFN_REL_OP(op,ret) \ 306112027Sjungma@eit.uni-kl.deinline \ 306212027Sjungma@eit.uni-kl.debool \ 306312027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum& a, const sc_fxnum& b ) \ 306412027Sjungma@eit.uni-kl.de{ \ 306512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 306612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 306712027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *a.m_rep, *b.m_rep ); \ 306812027Sjungma@eit.uni-kl.de return ( ret ); \ 306912027Sjungma@eit.uni-kl.de} \ 307012027Sjungma@eit.uni-kl.de \ 307112027Sjungma@eit.uni-kl.deinline \ 307212027Sjungma@eit.uni-kl.debool \ 307312027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum& a, const sc_fxval& b ) \ 307412027Sjungma@eit.uni-kl.de{ \ 307512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) \ 307612027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *a.m_rep, *b.get_rep() ); \ 307712027Sjungma@eit.uni-kl.de return ( ret ); \ 307812027Sjungma@eit.uni-kl.de} \ 307912027Sjungma@eit.uni-kl.de \ 308012027Sjungma@eit.uni-kl.deinline \ 308112027Sjungma@eit.uni-kl.debool \ 308212027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval& a, const sc_fxnum& b ) \ 308312027Sjungma@eit.uni-kl.de{ \ 308412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 308512027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *a.get_rep(), *b.m_rep ); \ 308612027Sjungma@eit.uni-kl.de return ( ret ); \ 308712027Sjungma@eit.uni-kl.de} \ 308812027Sjungma@eit.uni-kl.de \ 308912027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,int) \ 309012027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,unsigned int) \ 309112027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,long) \ 309212027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,unsigned long) \ 309312027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,float) \ 309412027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,double) \ 309512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const char*) \ 309612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_fxval_fast&) \ 309712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_fxnum_fast&) \ 309812027Sjungma@eit.uni-kl.deDEFN_REL_OP_OTHER(op,ret) 309912027Sjungma@eit.uni-kl.de 310012027Sjungma@eit.uni-kl.deDEFN_REL_OP(<,result < 0) 310112027Sjungma@eit.uni-kl.deDEFN_REL_OP(<=,result <= 0) 310212027Sjungma@eit.uni-kl.deDEFN_REL_OP(>,result > 0 && result != 2) 310312027Sjungma@eit.uni-kl.deDEFN_REL_OP(>=,result >= 0 && result != 2) 310412027Sjungma@eit.uni-kl.deDEFN_REL_OP(==,result == 0) 310512027Sjungma@eit.uni-kl.deDEFN_REL_OP(!=,result != 0) 310612027Sjungma@eit.uni-kl.de 310712027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_T 310812027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_OTHER 310912027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP 311012027Sjungma@eit.uni-kl.de 311112027Sjungma@eit.uni-kl.de 311212027Sjungma@eit.uni-kl.de// assignment operators 311312027Sjungma@eit.uni-kl.de 311412027Sjungma@eit.uni-kl.deinline 311512027Sjungma@eit.uni-kl.desc_fxnum& 311612027Sjungma@eit.uni-kl.desc_fxnum::operator = ( const sc_fxnum& a ) 311712027Sjungma@eit.uni-kl.de{ 311812027Sjungma@eit.uni-kl.de if( &a != this ) 311912027Sjungma@eit.uni-kl.de { 312012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( a ) 312112027Sjungma@eit.uni-kl.de *m_rep = *a.m_rep; 312212027Sjungma@eit.uni-kl.de cast(); 312312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) 312412027Sjungma@eit.uni-kl.de } 312512027Sjungma@eit.uni-kl.de return *this; 312612027Sjungma@eit.uni-kl.de} 312712027Sjungma@eit.uni-kl.de 312812027Sjungma@eit.uni-kl.deinline 312912027Sjungma@eit.uni-kl.desc_fxnum& 313012027Sjungma@eit.uni-kl.desc_fxnum::operator = ( const sc_fxval& a ) 313112027Sjungma@eit.uni-kl.de{ 313212027Sjungma@eit.uni-kl.de *m_rep = *a.get_rep(); 313312027Sjungma@eit.uni-kl.de cast(); 313412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) 313512027Sjungma@eit.uni-kl.de return *this; 313612027Sjungma@eit.uni-kl.de} 313712027Sjungma@eit.uni-kl.de 313812027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(tp) \ 313912027Sjungma@eit.uni-kl.deinline \ 314012027Sjungma@eit.uni-kl.desc_fxnum& \ 314112027Sjungma@eit.uni-kl.desc_fxnum::operator = ( tp a ) \ 314212027Sjungma@eit.uni-kl.de{ \ 314312027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 314412027Sjungma@eit.uni-kl.de *m_rep = *tmp.get_rep(); \ 314512027Sjungma@eit.uni-kl.de cast(); \ 314612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) \ 314712027Sjungma@eit.uni-kl.de return *this; \ 314812027Sjungma@eit.uni-kl.de} 314912027Sjungma@eit.uni-kl.de 315012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int) 315112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned int) 315212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(long) 315312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned long) 315412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(float) 315512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(double) 315612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const char*) 315712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_fxval_fast&) 315812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_fxnum_fast&) 315912027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 316012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int64) 316112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(uint64) 316212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_int_base&) 316312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_uint_base&) 316412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_signed&) 316512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_unsigned&) 316612027Sjungma@eit.uni-kl.de#endif 316712027Sjungma@eit.uni-kl.de 316812027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 316912027Sjungma@eit.uni-kl.de 317012027Sjungma@eit.uni-kl.de 317112027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,fnc,tp) \ 317212027Sjungma@eit.uni-kl.deinline \ 317312027Sjungma@eit.uni-kl.desc_fxnum& \ 317412027Sjungma@eit.uni-kl.desc_fxnum::operator op ( tp b ) \ 317512027Sjungma@eit.uni-kl.de{ \ 317612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) \ 317712027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 317812027Sjungma@eit.uni-kl.de scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *tmp.get_rep() ); \ 317912027Sjungma@eit.uni-kl.de delete m_rep; \ 318012027Sjungma@eit.uni-kl.de m_rep = new_rep; \ 318112027Sjungma@eit.uni-kl.de cast(); \ 318212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) \ 318312027Sjungma@eit.uni-kl.de return *this; \ 318412027Sjungma@eit.uni-kl.de} 318512027Sjungma@eit.uni-kl.de 318612027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 318712027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op,fnc) \ 318812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,int64) \ 318912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,uint64) \ 319012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_int_base&) \ 319112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_uint_base&) \ 319212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_signed&) \ 319312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_unsigned&) 319412027Sjungma@eit.uni-kl.de#else 319512027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op,fnc) 319612027Sjungma@eit.uni-kl.de#endif 319712027Sjungma@eit.uni-kl.de 319812027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op,fnc) \ 319912027Sjungma@eit.uni-kl.deinline \ 320012027Sjungma@eit.uni-kl.desc_fxnum& \ 320112027Sjungma@eit.uni-kl.desc_fxnum::operator op ( const sc_fxnum& b ) \ 320212027Sjungma@eit.uni-kl.de{ \ 320312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) \ 320412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( b ) \ 320512027Sjungma@eit.uni-kl.de scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *b.m_rep ); \ 320612027Sjungma@eit.uni-kl.de delete m_rep; \ 320712027Sjungma@eit.uni-kl.de m_rep = new_rep; \ 320812027Sjungma@eit.uni-kl.de cast(); \ 320912027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) \ 321012027Sjungma@eit.uni-kl.de return *this; \ 321112027Sjungma@eit.uni-kl.de} \ 321212027Sjungma@eit.uni-kl.de \ 321312027Sjungma@eit.uni-kl.deinline \ 321412027Sjungma@eit.uni-kl.desc_fxnum& \ 321512027Sjungma@eit.uni-kl.desc_fxnum::operator op ( const sc_fxval& b ) \ 321612027Sjungma@eit.uni-kl.de{ \ 321712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) \ 321812027Sjungma@eit.uni-kl.de scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *b.get_rep() ); \ 321912027Sjungma@eit.uni-kl.de delete m_rep; \ 322012027Sjungma@eit.uni-kl.de m_rep = new_rep; \ 322112027Sjungma@eit.uni-kl.de cast(); \ 322212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) \ 322312027Sjungma@eit.uni-kl.de return *this; \ 322412027Sjungma@eit.uni-kl.de} \ 322512027Sjungma@eit.uni-kl.de \ 322612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,int) \ 322712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,unsigned int) \ 322812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,long) \ 322912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,unsigned long) \ 323012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,float) \ 323112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,double) \ 323212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const char*) \ 323312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_fxval_fast&) \ 323412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_fxnum_fast&) \ 323512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_OTHER(op,fnc) 323612027Sjungma@eit.uni-kl.de 323712027Sjungma@eit.uni-kl.deDEFN_ASN_OP(*=,mult) 323812027Sjungma@eit.uni-kl.deDEFN_ASN_OP(/=,div) 323912027Sjungma@eit.uni-kl.deDEFN_ASN_OP(+=,add) 324012027Sjungma@eit.uni-kl.deDEFN_ASN_OP(-=,sub) 324112027Sjungma@eit.uni-kl.de 324212027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 324312027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_OTHER 324412027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP 324512027Sjungma@eit.uni-kl.de 324612027Sjungma@eit.uni-kl.de 324712027Sjungma@eit.uni-kl.deinline 324812027Sjungma@eit.uni-kl.desc_fxnum& 324912027Sjungma@eit.uni-kl.desc_fxnum::operator <<= ( int b ) 325012027Sjungma@eit.uni-kl.de{ 325112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 325212027Sjungma@eit.uni-kl.de m_rep->lshift( b ); 325312027Sjungma@eit.uni-kl.de cast(); 325412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) 325512027Sjungma@eit.uni-kl.de return *this; 325612027Sjungma@eit.uni-kl.de} 325712027Sjungma@eit.uni-kl.de 325812027Sjungma@eit.uni-kl.deinline 325912027Sjungma@eit.uni-kl.desc_fxnum& 326012027Sjungma@eit.uni-kl.desc_fxnum::operator >>= ( int b ) 326112027Sjungma@eit.uni-kl.de{ 326212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 326312027Sjungma@eit.uni-kl.de m_rep->rshift( b ); 326412027Sjungma@eit.uni-kl.de cast(); 326512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_WRITE_( *this ) 326612027Sjungma@eit.uni-kl.de return *this; 326712027Sjungma@eit.uni-kl.de} 326812027Sjungma@eit.uni-kl.de 326912027Sjungma@eit.uni-kl.de 327012027Sjungma@eit.uni-kl.de// auto-increment and auto-decrement 327112027Sjungma@eit.uni-kl.de 327212027Sjungma@eit.uni-kl.deinline 327312027Sjungma@eit.uni-kl.deconst sc_fxval 327412027Sjungma@eit.uni-kl.desc_fxnum::operator ++ ( int ) 327512027Sjungma@eit.uni-kl.de{ 327612027Sjungma@eit.uni-kl.de sc_fxval c( *this ); 327712027Sjungma@eit.uni-kl.de (*this) += 1; 327812027Sjungma@eit.uni-kl.de return c; 327912027Sjungma@eit.uni-kl.de} 328012027Sjungma@eit.uni-kl.de 328112027Sjungma@eit.uni-kl.deinline 328212027Sjungma@eit.uni-kl.deconst sc_fxval 328312027Sjungma@eit.uni-kl.desc_fxnum::operator -- ( int ) 328412027Sjungma@eit.uni-kl.de{ 328512027Sjungma@eit.uni-kl.de sc_fxval c( *this ); 328612027Sjungma@eit.uni-kl.de (*this) -= 1; 328712027Sjungma@eit.uni-kl.de return c; 328812027Sjungma@eit.uni-kl.de} 328912027Sjungma@eit.uni-kl.de 329012027Sjungma@eit.uni-kl.deinline 329112027Sjungma@eit.uni-kl.desc_fxnum& 329212027Sjungma@eit.uni-kl.desc_fxnum::operator ++ () 329312027Sjungma@eit.uni-kl.de{ 329412027Sjungma@eit.uni-kl.de (*this) += 1; 329512027Sjungma@eit.uni-kl.de return *this; 329612027Sjungma@eit.uni-kl.de} 329712027Sjungma@eit.uni-kl.de 329812027Sjungma@eit.uni-kl.deinline 329912027Sjungma@eit.uni-kl.desc_fxnum& 330012027Sjungma@eit.uni-kl.desc_fxnum::operator -- () 330112027Sjungma@eit.uni-kl.de{ 330212027Sjungma@eit.uni-kl.de (*this) -= 1; 330312027Sjungma@eit.uni-kl.de return *this; 330412027Sjungma@eit.uni-kl.de} 330512027Sjungma@eit.uni-kl.de 330612027Sjungma@eit.uni-kl.de 330712027Sjungma@eit.uni-kl.de// bit selection 330812027Sjungma@eit.uni-kl.de 330912027Sjungma@eit.uni-kl.deinline 331012027Sjungma@eit.uni-kl.deconst sc_fxnum_bitref 331112027Sjungma@eit.uni-kl.desc_fxnum::operator [] ( int i ) const 331212027Sjungma@eit.uni-kl.de{ 331312027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 331412027Sjungma@eit.uni-kl.de return sc_fxnum_bitref( const_cast<sc_fxnum&>( *this ), 331512027Sjungma@eit.uni-kl.de i - m_params.fwl() ); 331612027Sjungma@eit.uni-kl.de} 331712027Sjungma@eit.uni-kl.de 331812027Sjungma@eit.uni-kl.deinline 331912027Sjungma@eit.uni-kl.desc_fxnum_bitref 332012027Sjungma@eit.uni-kl.desc_fxnum::operator [] ( int i ) 332112027Sjungma@eit.uni-kl.de{ 332212027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 332312027Sjungma@eit.uni-kl.de return sc_fxnum_bitref( *this, i - m_params.fwl() ); 332412027Sjungma@eit.uni-kl.de} 332512027Sjungma@eit.uni-kl.de 332612027Sjungma@eit.uni-kl.deinline 332712027Sjungma@eit.uni-kl.deconst sc_fxnum_bitref 332812027Sjungma@eit.uni-kl.desc_fxnum::bit( int i ) const 332912027Sjungma@eit.uni-kl.de{ 333012027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 333112027Sjungma@eit.uni-kl.de return sc_fxnum_bitref( const_cast<sc_fxnum&>( *this ), 333212027Sjungma@eit.uni-kl.de i - m_params.fwl() ); 333312027Sjungma@eit.uni-kl.de} 333412027Sjungma@eit.uni-kl.de 333512027Sjungma@eit.uni-kl.deinline 333612027Sjungma@eit.uni-kl.desc_fxnum_bitref 333712027Sjungma@eit.uni-kl.desc_fxnum::bit( int i ) 333812027Sjungma@eit.uni-kl.de{ 333912027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 334012027Sjungma@eit.uni-kl.de return sc_fxnum_bitref( *this, i - m_params.fwl() ); 334112027Sjungma@eit.uni-kl.de} 334212027Sjungma@eit.uni-kl.de 334312027Sjungma@eit.uni-kl.de 334412027Sjungma@eit.uni-kl.de// part selection 334512027Sjungma@eit.uni-kl.de 334612027Sjungma@eit.uni-kl.deinline 334712027Sjungma@eit.uni-kl.deconst sc_fxnum_subref 334812027Sjungma@eit.uni-kl.desc_fxnum::operator () ( int i, int j ) const 334912027Sjungma@eit.uni-kl.de{ 335012027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 335112027Sjungma@eit.uni-kl.de SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 335212027Sjungma@eit.uni-kl.de 335312027Sjungma@eit.uni-kl.de return sc_fxnum_subref( const_cast<sc_fxnum&>( *this ), 335412027Sjungma@eit.uni-kl.de i - m_params.fwl(), j - m_params.fwl() ); 335512027Sjungma@eit.uni-kl.de} 335612027Sjungma@eit.uni-kl.de 335712027Sjungma@eit.uni-kl.deinline 335812027Sjungma@eit.uni-kl.desc_fxnum_subref 335912027Sjungma@eit.uni-kl.desc_fxnum::operator () ( int i, int j ) 336012027Sjungma@eit.uni-kl.de{ 336112027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 336212027Sjungma@eit.uni-kl.de SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 336312027Sjungma@eit.uni-kl.de 336412027Sjungma@eit.uni-kl.de return sc_fxnum_subref( *this, i - m_params.fwl(), j - m_params.fwl() ); 336512027Sjungma@eit.uni-kl.de} 336612027Sjungma@eit.uni-kl.de 336712027Sjungma@eit.uni-kl.deinline 336812027Sjungma@eit.uni-kl.deconst sc_fxnum_subref 336912027Sjungma@eit.uni-kl.desc_fxnum::range( int i, int j ) const 337012027Sjungma@eit.uni-kl.de{ 337112027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 337212027Sjungma@eit.uni-kl.de SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 337312027Sjungma@eit.uni-kl.de 337412027Sjungma@eit.uni-kl.de return sc_fxnum_subref( const_cast<sc_fxnum&>( *this ), 337512027Sjungma@eit.uni-kl.de i - m_params.fwl(), j - m_params.fwl() ); 337612027Sjungma@eit.uni-kl.de} 337712027Sjungma@eit.uni-kl.de 337812027Sjungma@eit.uni-kl.deinline 337912027Sjungma@eit.uni-kl.desc_fxnum_subref 338012027Sjungma@eit.uni-kl.desc_fxnum::range( int i, int j ) 338112027Sjungma@eit.uni-kl.de{ 338212027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 338312027Sjungma@eit.uni-kl.de SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 338412027Sjungma@eit.uni-kl.de 338512027Sjungma@eit.uni-kl.de return sc_fxnum_subref( *this, i - m_params.fwl(), j - m_params.fwl() ); 338612027Sjungma@eit.uni-kl.de} 338712027Sjungma@eit.uni-kl.de 338812027Sjungma@eit.uni-kl.de 338912027Sjungma@eit.uni-kl.deinline 339012027Sjungma@eit.uni-kl.deconst sc_fxnum_subref 339112027Sjungma@eit.uni-kl.desc_fxnum::operator () () const 339212027Sjungma@eit.uni-kl.de{ 339312027Sjungma@eit.uni-kl.de return this->operator () ( m_params.wl() - 1, 0 ); 339412027Sjungma@eit.uni-kl.de} 339512027Sjungma@eit.uni-kl.de 339612027Sjungma@eit.uni-kl.deinline 339712027Sjungma@eit.uni-kl.desc_fxnum_subref 339812027Sjungma@eit.uni-kl.desc_fxnum::operator () () 339912027Sjungma@eit.uni-kl.de{ 340012027Sjungma@eit.uni-kl.de return this->operator () ( m_params.wl() - 1, 0 ); 340112027Sjungma@eit.uni-kl.de} 340212027Sjungma@eit.uni-kl.de 340312027Sjungma@eit.uni-kl.deinline 340412027Sjungma@eit.uni-kl.deconst sc_fxnum_subref 340512027Sjungma@eit.uni-kl.desc_fxnum::range() const 340612027Sjungma@eit.uni-kl.de{ 340712027Sjungma@eit.uni-kl.de return this->range( m_params.wl() - 1, 0 ); 340812027Sjungma@eit.uni-kl.de} 340912027Sjungma@eit.uni-kl.de 341012027Sjungma@eit.uni-kl.deinline 341112027Sjungma@eit.uni-kl.desc_fxnum_subref 341212027Sjungma@eit.uni-kl.desc_fxnum::range() 341312027Sjungma@eit.uni-kl.de{ 341412027Sjungma@eit.uni-kl.de return this->range( m_params.wl() - 1, 0 ); 341512027Sjungma@eit.uni-kl.de} 341612027Sjungma@eit.uni-kl.de 341712027Sjungma@eit.uni-kl.de 341812027Sjungma@eit.uni-kl.de// implicit conversion 341912027Sjungma@eit.uni-kl.de 342012027Sjungma@eit.uni-kl.deinline 342112027Sjungma@eit.uni-kl.desc_fxnum::operator double() const 342212027Sjungma@eit.uni-kl.de{ 342312027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 342412027Sjungma@eit.uni-kl.de return m_rep->to_double(); 342512027Sjungma@eit.uni-kl.de} 342612027Sjungma@eit.uni-kl.de 342712027Sjungma@eit.uni-kl.de 342812027Sjungma@eit.uni-kl.de// explicit conversion to primitive types 342912027Sjungma@eit.uni-kl.de 343012027Sjungma@eit.uni-kl.deinline 343112027Sjungma@eit.uni-kl.deshort 343212027Sjungma@eit.uni-kl.desc_fxnum::to_short() const 343312027Sjungma@eit.uni-kl.de{ 343412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 343512027Sjungma@eit.uni-kl.de return static_cast<short>( m_rep->to_double() ); 343612027Sjungma@eit.uni-kl.de} 343712027Sjungma@eit.uni-kl.de 343812027Sjungma@eit.uni-kl.deinline 343912027Sjungma@eit.uni-kl.deunsigned short 344012027Sjungma@eit.uni-kl.desc_fxnum::to_ushort() const 344112027Sjungma@eit.uni-kl.de{ 344212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 344312027Sjungma@eit.uni-kl.de return static_cast<unsigned short>( m_rep->to_double() ); 344412027Sjungma@eit.uni-kl.de} 344512027Sjungma@eit.uni-kl.de 344612027Sjungma@eit.uni-kl.deinline 344712027Sjungma@eit.uni-kl.deint 344812027Sjungma@eit.uni-kl.desc_fxnum::to_int() const 344912027Sjungma@eit.uni-kl.de{ 345012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 345112027Sjungma@eit.uni-kl.de return static_cast<int>( m_rep->to_double() ); 345212027Sjungma@eit.uni-kl.de} 345312027Sjungma@eit.uni-kl.de 345412027Sjungma@eit.uni-kl.deinline 345512027Sjungma@eit.uni-kl.deint64 345612027Sjungma@eit.uni-kl.desc_fxnum::to_int64() const 345712027Sjungma@eit.uni-kl.de{ 345812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 345912027Sjungma@eit.uni-kl.de return static_cast<int64>( m_rep->to_double() ); 346012027Sjungma@eit.uni-kl.de} 346112027Sjungma@eit.uni-kl.de 346212027Sjungma@eit.uni-kl.deinline 346312027Sjungma@eit.uni-kl.deunsigned int 346412027Sjungma@eit.uni-kl.desc_fxnum::to_uint() const 346512027Sjungma@eit.uni-kl.de{ 346612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 346712027Sjungma@eit.uni-kl.de return static_cast<unsigned int>( m_rep->to_double() ); 346812027Sjungma@eit.uni-kl.de} 346912027Sjungma@eit.uni-kl.de 347012027Sjungma@eit.uni-kl.deinline 347112027Sjungma@eit.uni-kl.deuint64 347212027Sjungma@eit.uni-kl.desc_fxnum::to_uint64() const 347312027Sjungma@eit.uni-kl.de{ 347412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 347512027Sjungma@eit.uni-kl.de return static_cast<uint64>( m_rep->to_double() ); 347612027Sjungma@eit.uni-kl.de} 347712027Sjungma@eit.uni-kl.de 347812027Sjungma@eit.uni-kl.deinline 347912027Sjungma@eit.uni-kl.delong 348012027Sjungma@eit.uni-kl.desc_fxnum::to_long() const 348112027Sjungma@eit.uni-kl.de{ 348212027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 348312027Sjungma@eit.uni-kl.de return static_cast<long>( m_rep->to_double() ); 348412027Sjungma@eit.uni-kl.de} 348512027Sjungma@eit.uni-kl.de 348612027Sjungma@eit.uni-kl.deinline 348712027Sjungma@eit.uni-kl.deunsigned long 348812027Sjungma@eit.uni-kl.desc_fxnum::to_ulong() const 348912027Sjungma@eit.uni-kl.de{ 349012027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 349112027Sjungma@eit.uni-kl.de return static_cast<unsigned long>( m_rep->to_double() ); 349212027Sjungma@eit.uni-kl.de} 349312027Sjungma@eit.uni-kl.de 349412027Sjungma@eit.uni-kl.deinline 349512027Sjungma@eit.uni-kl.defloat 349612027Sjungma@eit.uni-kl.desc_fxnum::to_float() const 349712027Sjungma@eit.uni-kl.de{ 349812027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 349912027Sjungma@eit.uni-kl.de return static_cast<float>( m_rep->to_double() ); 350012027Sjungma@eit.uni-kl.de} 350112027Sjungma@eit.uni-kl.de 350212027Sjungma@eit.uni-kl.deinline 350312027Sjungma@eit.uni-kl.dedouble 350412027Sjungma@eit.uni-kl.desc_fxnum::to_double() const 350512027Sjungma@eit.uni-kl.de{ 350612027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 350712027Sjungma@eit.uni-kl.de return m_rep->to_double(); 350812027Sjungma@eit.uni-kl.de} 350912027Sjungma@eit.uni-kl.de 351012027Sjungma@eit.uni-kl.de 351112027Sjungma@eit.uni-kl.de// query value 351212027Sjungma@eit.uni-kl.de 351312027Sjungma@eit.uni-kl.deinline 351412027Sjungma@eit.uni-kl.debool 351512027Sjungma@eit.uni-kl.desc_fxnum::is_neg() const 351612027Sjungma@eit.uni-kl.de{ 351712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 351812027Sjungma@eit.uni-kl.de return m_rep->is_neg(); 351912027Sjungma@eit.uni-kl.de} 352012027Sjungma@eit.uni-kl.de 352112027Sjungma@eit.uni-kl.deinline 352212027Sjungma@eit.uni-kl.debool 352312027Sjungma@eit.uni-kl.desc_fxnum::is_zero() const 352412027Sjungma@eit.uni-kl.de{ 352512027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 352612027Sjungma@eit.uni-kl.de return m_rep->is_zero(); 352712027Sjungma@eit.uni-kl.de} 352812027Sjungma@eit.uni-kl.de 352912027Sjungma@eit.uni-kl.de// internal use only; 353012027Sjungma@eit.uni-kl.deinline 353112027Sjungma@eit.uni-kl.debool 353212027Sjungma@eit.uni-kl.desc_fxnum::is_normal() const 353312027Sjungma@eit.uni-kl.de{ 353412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 353512027Sjungma@eit.uni-kl.de return m_rep->is_normal(); 353612027Sjungma@eit.uni-kl.de} 353712027Sjungma@eit.uni-kl.de 353812027Sjungma@eit.uni-kl.deinline 353912027Sjungma@eit.uni-kl.debool 354012027Sjungma@eit.uni-kl.desc_fxnum::quantization_flag() const 354112027Sjungma@eit.uni-kl.de{ 354212027Sjungma@eit.uni-kl.de return m_q_flag; 354312027Sjungma@eit.uni-kl.de} 354412027Sjungma@eit.uni-kl.de 354512027Sjungma@eit.uni-kl.deinline 354612027Sjungma@eit.uni-kl.debool 354712027Sjungma@eit.uni-kl.desc_fxnum::overflow_flag() const 354812027Sjungma@eit.uni-kl.de{ 354912027Sjungma@eit.uni-kl.de return m_o_flag; 355012027Sjungma@eit.uni-kl.de} 355112027Sjungma@eit.uni-kl.de 355212027Sjungma@eit.uni-kl.de 355312027Sjungma@eit.uni-kl.deinline 355412027Sjungma@eit.uni-kl.deconst sc_fxval 355512027Sjungma@eit.uni-kl.desc_fxnum::value() const 355612027Sjungma@eit.uni-kl.de{ 355712027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ) 355812027Sjungma@eit.uni-kl.de return sc_fxval( new scfx_rep( *m_rep ) ); 355912027Sjungma@eit.uni-kl.de} 356012027Sjungma@eit.uni-kl.de 356112027Sjungma@eit.uni-kl.de 356212027Sjungma@eit.uni-kl.de// query parameters 356312027Sjungma@eit.uni-kl.de 356412027Sjungma@eit.uni-kl.deinline 356512027Sjungma@eit.uni-kl.deint 356612027Sjungma@eit.uni-kl.desc_fxnum::wl() const 356712027Sjungma@eit.uni-kl.de{ 356812027Sjungma@eit.uni-kl.de return m_params.wl(); 356912027Sjungma@eit.uni-kl.de} 357012027Sjungma@eit.uni-kl.de 357112027Sjungma@eit.uni-kl.deinline 357212027Sjungma@eit.uni-kl.deint 357312027Sjungma@eit.uni-kl.desc_fxnum::iwl() const 357412027Sjungma@eit.uni-kl.de{ 357512027Sjungma@eit.uni-kl.de return m_params.iwl(); 357612027Sjungma@eit.uni-kl.de} 357712027Sjungma@eit.uni-kl.de 357812027Sjungma@eit.uni-kl.deinline 357912027Sjungma@eit.uni-kl.desc_q_mode 358012027Sjungma@eit.uni-kl.desc_fxnum::q_mode() const 358112027Sjungma@eit.uni-kl.de{ 358212027Sjungma@eit.uni-kl.de return m_params.q_mode(); 358312027Sjungma@eit.uni-kl.de} 358412027Sjungma@eit.uni-kl.de 358512027Sjungma@eit.uni-kl.deinline 358612027Sjungma@eit.uni-kl.desc_o_mode 358712027Sjungma@eit.uni-kl.desc_fxnum::o_mode() const 358812027Sjungma@eit.uni-kl.de{ 358912027Sjungma@eit.uni-kl.de return m_params.o_mode(); 359012027Sjungma@eit.uni-kl.de} 359112027Sjungma@eit.uni-kl.de 359212027Sjungma@eit.uni-kl.deinline 359312027Sjungma@eit.uni-kl.deint 359412027Sjungma@eit.uni-kl.desc_fxnum::n_bits() const 359512027Sjungma@eit.uni-kl.de{ 359612027Sjungma@eit.uni-kl.de return m_params.n_bits(); 359712027Sjungma@eit.uni-kl.de} 359812027Sjungma@eit.uni-kl.de 359912027Sjungma@eit.uni-kl.de 360012027Sjungma@eit.uni-kl.deinline 360112027Sjungma@eit.uni-kl.deconst sc_fxtype_params& 360212027Sjungma@eit.uni-kl.desc_fxnum::type_params() const 360312027Sjungma@eit.uni-kl.de{ 360412027Sjungma@eit.uni-kl.de return m_params.type_params(); 360512027Sjungma@eit.uni-kl.de} 360612027Sjungma@eit.uni-kl.de 360712027Sjungma@eit.uni-kl.de 360812027Sjungma@eit.uni-kl.deinline 360912027Sjungma@eit.uni-kl.deconst sc_fxcast_switch& 361012027Sjungma@eit.uni-kl.desc_fxnum::cast_switch() const 361112027Sjungma@eit.uni-kl.de{ 361212027Sjungma@eit.uni-kl.de return m_params.cast_switch(); 361312027Sjungma@eit.uni-kl.de} 361412027Sjungma@eit.uni-kl.de 361512027Sjungma@eit.uni-kl.de 361612027Sjungma@eit.uni-kl.de// internal use only; 361712027Sjungma@eit.uni-kl.deinline 361812027Sjungma@eit.uni-kl.devoid 361912027Sjungma@eit.uni-kl.desc_fxnum::observer_read() const 362012027Sjungma@eit.uni-kl.de{ 362112027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ); 362212027Sjungma@eit.uni-kl.de} 362312027Sjungma@eit.uni-kl.de 362412027Sjungma@eit.uni-kl.de 362512027Sjungma@eit.uni-kl.de// internal use only; 362612027Sjungma@eit.uni-kl.deinline 362712027Sjungma@eit.uni-kl.debool 362812027Sjungma@eit.uni-kl.desc_fxnum::get_bit( int i ) const 362912027Sjungma@eit.uni-kl.de{ 363012027Sjungma@eit.uni-kl.de return m_rep->get_bit( i ); 363112027Sjungma@eit.uni-kl.de} 363212027Sjungma@eit.uni-kl.de 363312027Sjungma@eit.uni-kl.de 363412027Sjungma@eit.uni-kl.de// protected methods and friend functions 363512027Sjungma@eit.uni-kl.de 363612027Sjungma@eit.uni-kl.deinline 363712027Sjungma@eit.uni-kl.debool 363812027Sjungma@eit.uni-kl.desc_fxnum::set_bit( int i, bool high ) 363912027Sjungma@eit.uni-kl.de{ 364012027Sjungma@eit.uni-kl.de if( high ) 364112027Sjungma@eit.uni-kl.de return m_rep->set( i, m_params ); 364212027Sjungma@eit.uni-kl.de else 364312027Sjungma@eit.uni-kl.de return m_rep->clear( i, m_params ); 364412027Sjungma@eit.uni-kl.de} 364512027Sjungma@eit.uni-kl.de 364612027Sjungma@eit.uni-kl.de 364712027Sjungma@eit.uni-kl.deinline 364812027Sjungma@eit.uni-kl.debool 364912027Sjungma@eit.uni-kl.desc_fxnum::get_slice( int i, int j, sc_bv_base& bv ) const 365012027Sjungma@eit.uni-kl.de{ 365112027Sjungma@eit.uni-kl.de return m_rep->get_slice( i, j, m_params, bv ); 365212027Sjungma@eit.uni-kl.de} 365312027Sjungma@eit.uni-kl.de 365412027Sjungma@eit.uni-kl.deinline 365512027Sjungma@eit.uni-kl.debool 365612027Sjungma@eit.uni-kl.desc_fxnum::set_slice( int i, int j, const sc_bv_base& bv ) 365712027Sjungma@eit.uni-kl.de{ 365812027Sjungma@eit.uni-kl.de return m_rep->set_slice( i, j, m_params, bv ); 365912027Sjungma@eit.uni-kl.de} 366012027Sjungma@eit.uni-kl.de 366112027Sjungma@eit.uni-kl.de 366212027Sjungma@eit.uni-kl.deinline 366312027Sjungma@eit.uni-kl.de::std::ostream& 366412027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_fxnum& a ) 366512027Sjungma@eit.uni-kl.de{ 366612027Sjungma@eit.uni-kl.de a.print( os ); 366712027Sjungma@eit.uni-kl.de return os; 366812027Sjungma@eit.uni-kl.de} 366912027Sjungma@eit.uni-kl.de 367012027Sjungma@eit.uni-kl.deinline 367112027Sjungma@eit.uni-kl.de::std::istream& 367212027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_fxnum& a ) 367312027Sjungma@eit.uni-kl.de{ 367412027Sjungma@eit.uni-kl.de a.scan( is ); 367512027Sjungma@eit.uni-kl.de return is; 367612027Sjungma@eit.uni-kl.de} 367712027Sjungma@eit.uni-kl.de 367812027Sjungma@eit.uni-kl.de 367912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 368012027Sjungma@eit.uni-kl.de// CLASS : sc_fxnum_fast 368112027Sjungma@eit.uni-kl.de// 368212027Sjungma@eit.uni-kl.de// Base class for the fixed-point types; limited precision. 368312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 368412027Sjungma@eit.uni-kl.de 368512027Sjungma@eit.uni-kl.deinline 368612027Sjungma@eit.uni-kl.desc_fxnum_fast_observer* 368712027Sjungma@eit.uni-kl.desc_fxnum_fast::observer() const 368812027Sjungma@eit.uni-kl.de{ 368912027Sjungma@eit.uni-kl.de return m_observer; 369012027Sjungma@eit.uni-kl.de} 369112027Sjungma@eit.uni-kl.de 369212027Sjungma@eit.uni-kl.de 369312027Sjungma@eit.uni-kl.de// constructors 369412027Sjungma@eit.uni-kl.de 369512027Sjungma@eit.uni-kl.deinline 369612027Sjungma@eit.uni-kl.desc_fxnum_fast::sc_fxnum_fast( const sc_fxtype_params& type_params_, 369712027Sjungma@eit.uni-kl.de sc_enc enc_, 369812027Sjungma@eit.uni-kl.de const sc_fxcast_switch& cast_sw, 369912027Sjungma@eit.uni-kl.de sc_fxnum_fast_observer* observer_ ) 370012027Sjungma@eit.uni-kl.de: m_val( 0.0 ), 370112027Sjungma@eit.uni-kl.de m_params( type_params_, enc_, cast_sw ), 370212027Sjungma@eit.uni-kl.de m_q_flag( false ), 370312027Sjungma@eit.uni-kl.de m_o_flag( false ), 370412027Sjungma@eit.uni-kl.de m_observer( observer_ ) 370512027Sjungma@eit.uni-kl.de{ 370612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_DEFAULT_ 370712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_CONSTRUCT_(*this) 370812027Sjungma@eit.uni-kl.de} 370912027Sjungma@eit.uni-kl.de 371012027Sjungma@eit.uni-kl.deinline 371112027Sjungma@eit.uni-kl.desc_fxnum_fast::sc_fxnum_fast( const sc_fxnum_fast& a, 371212027Sjungma@eit.uni-kl.de const sc_fxtype_params& type_params_, 371312027Sjungma@eit.uni-kl.de sc_enc enc_, 371412027Sjungma@eit.uni-kl.de const sc_fxcast_switch& cast_sw, 371512027Sjungma@eit.uni-kl.de sc_fxnum_fast_observer* observer_ ) 371612027Sjungma@eit.uni-kl.de: m_val( a.m_val ), 371712027Sjungma@eit.uni-kl.de m_params( type_params_, enc_, cast_sw ), 371812027Sjungma@eit.uni-kl.de m_q_flag( false ), 371912027Sjungma@eit.uni-kl.de m_o_flag( false ), 372012027Sjungma@eit.uni-kl.de m_observer( observer_ ) 372112027Sjungma@eit.uni-kl.de{ 372212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_DEFAULT_ 372312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 372412027Sjungma@eit.uni-kl.de cast(); 372512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_CONSTRUCT_( *this ) 372612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 372712027Sjungma@eit.uni-kl.de} 372812027Sjungma@eit.uni-kl.de 372912027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T(tp,arg) \ 373012027Sjungma@eit.uni-kl.deinline \ 373112027Sjungma@eit.uni-kl.desc_fxnum_fast::sc_fxnum_fast( tp a, \ 373212027Sjungma@eit.uni-kl.de const sc_fxtype_params& type_params_, \ 373312027Sjungma@eit.uni-kl.de sc_enc enc_, \ 373412027Sjungma@eit.uni-kl.de const sc_fxcast_switch& cast_sw, \ 373512027Sjungma@eit.uni-kl.de sc_fxnum_fast_observer* observer_ ) \ 373612027Sjungma@eit.uni-kl.de: m_val( arg ), \ 373712027Sjungma@eit.uni-kl.de m_params( type_params_, enc_, cast_sw ), \ 373812027Sjungma@eit.uni-kl.de m_q_flag( false ), \ 373912027Sjungma@eit.uni-kl.de m_o_flag( false ), \ 374012027Sjungma@eit.uni-kl.de m_observer( observer_ ) \ 374112027Sjungma@eit.uni-kl.de{ \ 374212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_DEFAULT_ \ 374312027Sjungma@eit.uni-kl.de cast(); \ 374412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_CONSTRUCT_(*this) \ 374512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ 374612027Sjungma@eit.uni-kl.de} 374712027Sjungma@eit.uni-kl.de 374812027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_A(tp) DEFN_CTOR_T(tp,static_cast<double>( a )) 374912027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_B(tp) DEFN_CTOR_T(tp,sc_fxval_fast::from_string( a )) 375012027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_C(tp) DEFN_CTOR_T(tp,a.to_double()) 375112027Sjungma@eit.uni-kl.de 375212027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(int) 375312027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(unsigned int) 375412027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(long) 375512027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(unsigned long) 375612027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(float) 375712027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(double) 375812027Sjungma@eit.uni-kl.deDEFN_CTOR_T_B(const char*) 375912027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_fxval&) 376012027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_fxval_fast&) 376112027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_fxnum&) 376212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 376312027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(int64) 376412027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(uint64) 376512027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_int_base&) 376612027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_uint_base&) 376712027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_signed&) 376812027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_unsigned&) 376912027Sjungma@eit.uni-kl.de#endif 377012027Sjungma@eit.uni-kl.de 377112027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T 377212027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_A 377312027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_B 377412027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_C 377512027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_D 377612027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_E 377712027Sjungma@eit.uni-kl.de 377812027Sjungma@eit.uni-kl.de 377912027Sjungma@eit.uni-kl.deinline 378012027Sjungma@eit.uni-kl.desc_fxnum_fast::~sc_fxnum_fast() 378112027Sjungma@eit.uni-kl.de{ 378212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_DESTRUCT_( *this ) 378312027Sjungma@eit.uni-kl.de} 378412027Sjungma@eit.uni-kl.de 378512027Sjungma@eit.uni-kl.de 378612027Sjungma@eit.uni-kl.de// internal use only; 378712027Sjungma@eit.uni-kl.deinline 378812027Sjungma@eit.uni-kl.dedouble 378912027Sjungma@eit.uni-kl.desc_fxnum_fast::get_val() const 379012027Sjungma@eit.uni-kl.de{ 379112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 379212027Sjungma@eit.uni-kl.de return m_val; 379312027Sjungma@eit.uni-kl.de} 379412027Sjungma@eit.uni-kl.de 379512027Sjungma@eit.uni-kl.de 379612027Sjungma@eit.uni-kl.de// unary operators 379712027Sjungma@eit.uni-kl.de 379812027Sjungma@eit.uni-kl.deinline 379912027Sjungma@eit.uni-kl.deconst sc_fxval_fast 380012027Sjungma@eit.uni-kl.desc_fxnum_fast::operator - () const 380112027Sjungma@eit.uni-kl.de{ 380212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 380312027Sjungma@eit.uni-kl.de return sc_fxval_fast( - m_val ); 380412027Sjungma@eit.uni-kl.de} 380512027Sjungma@eit.uni-kl.de 380612027Sjungma@eit.uni-kl.deinline 380712027Sjungma@eit.uni-kl.deconst sc_fxval_fast 380812027Sjungma@eit.uni-kl.desc_fxnum_fast::operator + () const 380912027Sjungma@eit.uni-kl.de{ 381012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 381112027Sjungma@eit.uni-kl.de return sc_fxval_fast( m_val ); 381212027Sjungma@eit.uni-kl.de} 381312027Sjungma@eit.uni-kl.de 381412027Sjungma@eit.uni-kl.de 381512027Sjungma@eit.uni-kl.de// unary functions 381612027Sjungma@eit.uni-kl.de 381712027Sjungma@eit.uni-kl.deinline 381812027Sjungma@eit.uni-kl.devoid 381912027Sjungma@eit.uni-kl.deneg( sc_fxval_fast& c, const sc_fxnum_fast& a ) 382012027Sjungma@eit.uni-kl.de{ 382112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 382212027Sjungma@eit.uni-kl.de c.set_val( - a.m_val ); 382312027Sjungma@eit.uni-kl.de} 382412027Sjungma@eit.uni-kl.de 382512027Sjungma@eit.uni-kl.deinline 382612027Sjungma@eit.uni-kl.devoid 382712027Sjungma@eit.uni-kl.deneg( sc_fxnum_fast& c, const sc_fxnum_fast& a ) 382812027Sjungma@eit.uni-kl.de{ 382912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 383012027Sjungma@eit.uni-kl.de c.m_val = - a.m_val; 383112027Sjungma@eit.uni-kl.de c.cast(); 383212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( c ) 383312027Sjungma@eit.uni-kl.de} 383412027Sjungma@eit.uni-kl.de 383512027Sjungma@eit.uni-kl.de 383612027Sjungma@eit.uni-kl.de// binary operators 383712027Sjungma@eit.uni-kl.de 383812027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_T(op,tp) \ 383912027Sjungma@eit.uni-kl.deinline \ 384012027Sjungma@eit.uni-kl.deconst sc_fxval_fast \ 384112027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast& a, tp b ) \ 384212027Sjungma@eit.uni-kl.de{ \ 384312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 384412027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 384512027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val op tmp.get_val() ); \ 384612027Sjungma@eit.uni-kl.de} \ 384712027Sjungma@eit.uni-kl.de \ 384812027Sjungma@eit.uni-kl.deinline \ 384912027Sjungma@eit.uni-kl.deconst sc_fxval_fast \ 385012027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxnum_fast& b ) \ 385112027Sjungma@eit.uni-kl.de{ \ 385212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 385312027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 385412027Sjungma@eit.uni-kl.de return sc_fxval_fast( tmp.get_val() op b.m_val ); \ 385512027Sjungma@eit.uni-kl.de} 385612027Sjungma@eit.uni-kl.de 385712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 385812027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_OTHER(op) \ 385912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,int64) \ 386012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,uint64) \ 386112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const sc_int_base&) \ 386212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const sc_uint_base&) \ 386312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const sc_signed&) \ 386412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const sc_unsigned&) 386512027Sjungma@eit.uni-kl.de#else 386612027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_OTHER(op) 386712027Sjungma@eit.uni-kl.de#endif 386812027Sjungma@eit.uni-kl.de 386912027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP(op,dummy) \ 387012027Sjungma@eit.uni-kl.deinline \ 387112027Sjungma@eit.uni-kl.deconst sc_fxval_fast \ 387212027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast& a, const sc_fxnum_fast& b ) \ 387312027Sjungma@eit.uni-kl.de{ \ 387412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 387512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 387612027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val op b.m_val ); \ 387712027Sjungma@eit.uni-kl.de} \ 387812027Sjungma@eit.uni-kl.de \ 387912027Sjungma@eit.uni-kl.deinline \ 388012027Sjungma@eit.uni-kl.deconst sc_fxval_fast \ 388112027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast& a, const sc_fxval_fast& b ) \ 388212027Sjungma@eit.uni-kl.de{ \ 388312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 388412027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val op b.get_val() ); \ 388512027Sjungma@eit.uni-kl.de} \ 388612027Sjungma@eit.uni-kl.de \ 388712027Sjungma@eit.uni-kl.deinline \ 388812027Sjungma@eit.uni-kl.deconst sc_fxval_fast \ 388912027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval_fast& a, const sc_fxnum_fast& b ) \ 389012027Sjungma@eit.uni-kl.de{ \ 389112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 389212027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.get_val() op b.m_val ); \ 389312027Sjungma@eit.uni-kl.de} \ 389412027Sjungma@eit.uni-kl.de \ 389512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,int) \ 389612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,unsigned int) \ 389712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,long) \ 389812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,unsigned long) \ 389912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,float) \ 390012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,double) \ 390112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const char*) \ 390212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_OTHER(op) 390312027Sjungma@eit.uni-kl.de 390412027Sjungma@eit.uni-kl.deDEFN_BIN_OP(*,mult) 390512027Sjungma@eit.uni-kl.deDEFN_BIN_OP(+,add) 390612027Sjungma@eit.uni-kl.deDEFN_BIN_OP(-,sub) 390712027Sjungma@eit.uni-kl.de//DEFN_BIN_OP(/,div) 390812027Sjungma@eit.uni-kl.deinline 390912027Sjungma@eit.uni-kl.deconst sc_fxval_fast 391012027Sjungma@eit.uni-kl.deoperator / ( const sc_fxnum_fast& a, const sc_fxnum_fast& b ) 391112027Sjungma@eit.uni-kl.de{ 391212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 391312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) 391412027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val / b.m_val ); 391512027Sjungma@eit.uni-kl.de} 391612027Sjungma@eit.uni-kl.de 391712027Sjungma@eit.uni-kl.deinline 391812027Sjungma@eit.uni-kl.deconst sc_fxval_fast 391912027Sjungma@eit.uni-kl.deoperator / ( const sc_fxnum_fast& a, const sc_fxval_fast& b ) 392012027Sjungma@eit.uni-kl.de{ 392112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 392212027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val / b.get_val() ); 392312027Sjungma@eit.uni-kl.de} 392412027Sjungma@eit.uni-kl.de 392512027Sjungma@eit.uni-kl.deinline 392612027Sjungma@eit.uni-kl.deconst sc_fxval_fast 392712027Sjungma@eit.uni-kl.deoperator / ( const sc_fxval_fast& a, const sc_fxnum_fast& b ) 392812027Sjungma@eit.uni-kl.de{ 392912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) 393012027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.get_val() / b.m_val ); 393112027Sjungma@eit.uni-kl.de} 393212027Sjungma@eit.uni-kl.de 393312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,int) 393412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,unsigned int) 393512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,long) 393612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,unsigned long) 393712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,float) 393812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,double) 393912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const char*) 394012027Sjungma@eit.uni-kl.de//DEFN_BIN_OP_OTHER(/) 394112027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 394212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,int64) 394312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,uint64) 394412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const sc_int_base&) 394512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const sc_uint_base&) 394612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const sc_signed&) 394712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const sc_unsigned&) 394812027Sjungma@eit.uni-kl.de#endif 394912027Sjungma@eit.uni-kl.de 395012027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_T 395112027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_OTHER 395212027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP 395312027Sjungma@eit.uni-kl.de 395412027Sjungma@eit.uni-kl.de 395512027Sjungma@eit.uni-kl.deinline 395612027Sjungma@eit.uni-kl.deconst sc_fxval_fast 395712027Sjungma@eit.uni-kl.deoperator << ( const sc_fxnum_fast& a, int b ) 395812027Sjungma@eit.uni-kl.de{ 395912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 396012027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val * scfx_pow2( b ) ); 396112027Sjungma@eit.uni-kl.de} 396212027Sjungma@eit.uni-kl.de 396312027Sjungma@eit.uni-kl.deinline 396412027Sjungma@eit.uni-kl.deconst sc_fxval_fast 396512027Sjungma@eit.uni-kl.deoperator >> ( const sc_fxnum_fast& a, int b ) 396612027Sjungma@eit.uni-kl.de{ 396712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 396812027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val * scfx_pow2( -b ) ); 396912027Sjungma@eit.uni-kl.de} 397012027Sjungma@eit.uni-kl.de 397112027Sjungma@eit.uni-kl.de 397212027Sjungma@eit.uni-kl.de// binary functions 397312027Sjungma@eit.uni-kl.de 397412027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_T(fnc,op,tp) \ 397512027Sjungma@eit.uni-kl.deinline \ 397612027Sjungma@eit.uni-kl.devoid \ 397712027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, const sc_fxnum_fast& a, tp b ) \ 397812027Sjungma@eit.uni-kl.de{ \ 397912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 398012027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 398112027Sjungma@eit.uni-kl.de c.set_val( a.m_val op tmp.get_val() ); \ 398212027Sjungma@eit.uni-kl.de} \ 398312027Sjungma@eit.uni-kl.de \ 398412027Sjungma@eit.uni-kl.deinline \ 398512027Sjungma@eit.uni-kl.devoid \ 398612027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, tp a, const sc_fxnum_fast& b ) \ 398712027Sjungma@eit.uni-kl.de{ \ 398812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 398912027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 399012027Sjungma@eit.uni-kl.de c.set_val( tmp.get_val() op b.m_val ); \ 399112027Sjungma@eit.uni-kl.de} \ 399212027Sjungma@eit.uni-kl.de \ 399312027Sjungma@eit.uni-kl.deinline \ 399412027Sjungma@eit.uni-kl.devoid \ 399512027Sjungma@eit.uni-kl.defnc ( sc_fxnum_fast& c, const sc_fxnum_fast& a, tp b ) \ 399612027Sjungma@eit.uni-kl.de{ \ 399712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 399812027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 399912027Sjungma@eit.uni-kl.de c.m_val = a.m_val op tmp.get_val(); \ 400012027Sjungma@eit.uni-kl.de c.cast(); \ 400112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ 400212027Sjungma@eit.uni-kl.de} \ 400312027Sjungma@eit.uni-kl.de \ 400412027Sjungma@eit.uni-kl.deinline \ 400512027Sjungma@eit.uni-kl.devoid \ 400612027Sjungma@eit.uni-kl.defnc ( sc_fxnum_fast& c, tp a, const sc_fxnum_fast& b ) \ 400712027Sjungma@eit.uni-kl.de{ \ 400812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 400912027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 401012027Sjungma@eit.uni-kl.de c.m_val = tmp.get_val() op b.m_val; \ 401112027Sjungma@eit.uni-kl.de c.cast(); \ 401212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ 401312027Sjungma@eit.uni-kl.de} 401412027Sjungma@eit.uni-kl.de 401512027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 401612027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_OTHER(fnc,op) \ 401712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,int64) \ 401812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,uint64) \ 401912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_int_base&) \ 402012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_uint_base&) \ 402112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_signed&) \ 402212027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_unsigned&) 402312027Sjungma@eit.uni-kl.de#else 402412027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_OTHER(fnc,op) 402512027Sjungma@eit.uni-kl.de#endif 402612027Sjungma@eit.uni-kl.de 402712027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC(fnc,op) \ 402812027Sjungma@eit.uni-kl.deinline \ 402912027Sjungma@eit.uni-kl.devoid \ 403012027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, const sc_fxnum_fast& a, const sc_fxnum_fast& b ) \ 403112027Sjungma@eit.uni-kl.de{ \ 403212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 403312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 403412027Sjungma@eit.uni-kl.de c.set_val( a.m_val op b.m_val ); \ 403512027Sjungma@eit.uni-kl.de} \ 403612027Sjungma@eit.uni-kl.de \ 403712027Sjungma@eit.uni-kl.deinline \ 403812027Sjungma@eit.uni-kl.devoid \ 403912027Sjungma@eit.uni-kl.defnc ( sc_fxnum_fast& c, const sc_fxnum_fast& a, const sc_fxnum_fast& b ) \ 404012027Sjungma@eit.uni-kl.de{ \ 404112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 404212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 404312027Sjungma@eit.uni-kl.de c.m_val = a.m_val op b.m_val; \ 404412027Sjungma@eit.uni-kl.de c.cast(); \ 404512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ 404612027Sjungma@eit.uni-kl.de} \ 404712027Sjungma@eit.uni-kl.de \ 404812027Sjungma@eit.uni-kl.deinline \ 404912027Sjungma@eit.uni-kl.devoid \ 405012027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, const sc_fxnum_fast& a, const sc_fxval_fast& b ) \ 405112027Sjungma@eit.uni-kl.de{ \ 405212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 405312027Sjungma@eit.uni-kl.de c.set_val( a.m_val op b.get_val() ); \ 405412027Sjungma@eit.uni-kl.de} \ 405512027Sjungma@eit.uni-kl.de \ 405612027Sjungma@eit.uni-kl.deinline \ 405712027Sjungma@eit.uni-kl.devoid \ 405812027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, const sc_fxval_fast& a, const sc_fxnum_fast& b ) \ 405912027Sjungma@eit.uni-kl.de{ \ 406012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 406112027Sjungma@eit.uni-kl.de c.set_val( a.get_val() op b.m_val ); \ 406212027Sjungma@eit.uni-kl.de} \ 406312027Sjungma@eit.uni-kl.de \ 406412027Sjungma@eit.uni-kl.deinline \ 406512027Sjungma@eit.uni-kl.devoid \ 406612027Sjungma@eit.uni-kl.defnc ( sc_fxnum_fast& c, const sc_fxnum_fast& a, const sc_fxval_fast& b ) \ 406712027Sjungma@eit.uni-kl.de{ \ 406812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 406912027Sjungma@eit.uni-kl.de c.m_val = a.m_val op b.get_val(); \ 407012027Sjungma@eit.uni-kl.de c.cast(); \ 407112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ 407212027Sjungma@eit.uni-kl.de} \ 407312027Sjungma@eit.uni-kl.de \ 407412027Sjungma@eit.uni-kl.deinline \ 407512027Sjungma@eit.uni-kl.devoid \ 407612027Sjungma@eit.uni-kl.defnc ( sc_fxnum_fast& c, const sc_fxval_fast& a, const sc_fxnum_fast& b ) \ 407712027Sjungma@eit.uni-kl.de{ \ 407812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 407912027Sjungma@eit.uni-kl.de c.m_val = a.get_val() op b.m_val; \ 408012027Sjungma@eit.uni-kl.de c.cast(); \ 408112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ 408212027Sjungma@eit.uni-kl.de} \ 408312027Sjungma@eit.uni-kl.de \ 408412027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,int) \ 408512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,unsigned int) \ 408612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,long) \ 408712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,unsigned long) \ 408812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,float) \ 408912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,double) \ 409012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const char*) \ 409112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_fxval&) \ 409212027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_fxnum&) \ 409312027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_OTHER(fnc,op) 409412027Sjungma@eit.uni-kl.de 409512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(mult,*) 409612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(div,/) 409712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(add,+) 409812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(sub,-) 409912027Sjungma@eit.uni-kl.de 410012027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_T 410112027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_OTHER 410212027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC 410312027Sjungma@eit.uni-kl.de 410412027Sjungma@eit.uni-kl.de 410512027Sjungma@eit.uni-kl.deinline 410612027Sjungma@eit.uni-kl.devoid 410712027Sjungma@eit.uni-kl.delshift( sc_fxval_fast& c, const sc_fxnum_fast& a, int b ) 410812027Sjungma@eit.uni-kl.de{ 410912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 411012027Sjungma@eit.uni-kl.de c.set_val( a.m_val * scfx_pow2( b ) ); 411112027Sjungma@eit.uni-kl.de} 411212027Sjungma@eit.uni-kl.de 411312027Sjungma@eit.uni-kl.deinline 411412027Sjungma@eit.uni-kl.devoid 411512027Sjungma@eit.uni-kl.dershift( sc_fxval_fast& c, const sc_fxnum_fast& a, int b ) 411612027Sjungma@eit.uni-kl.de{ 411712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 411812027Sjungma@eit.uni-kl.de c.set_val( a.m_val * scfx_pow2( -b ) ); 411912027Sjungma@eit.uni-kl.de} 412012027Sjungma@eit.uni-kl.de 412112027Sjungma@eit.uni-kl.deinline 412212027Sjungma@eit.uni-kl.devoid 412312027Sjungma@eit.uni-kl.delshift( sc_fxnum_fast& c, const sc_fxnum_fast& a, int b ) 412412027Sjungma@eit.uni-kl.de{ 412512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 412612027Sjungma@eit.uni-kl.de c.m_val = a.m_val * scfx_pow2( b ); 412712027Sjungma@eit.uni-kl.de c.cast(); 412812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( c ) 412912027Sjungma@eit.uni-kl.de} 413012027Sjungma@eit.uni-kl.de 413112027Sjungma@eit.uni-kl.deinline 413212027Sjungma@eit.uni-kl.devoid 413312027Sjungma@eit.uni-kl.dershift( sc_fxnum_fast& c, const sc_fxnum_fast& a, int b ) 413412027Sjungma@eit.uni-kl.de{ 413512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 413612027Sjungma@eit.uni-kl.de c.m_val = a.m_val * scfx_pow2( -b ); 413712027Sjungma@eit.uni-kl.de c.cast(); 413812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( c ) 413912027Sjungma@eit.uni-kl.de} 414012027Sjungma@eit.uni-kl.de 414112027Sjungma@eit.uni-kl.de 414212027Sjungma@eit.uni-kl.de// relational (including equality) operators 414312027Sjungma@eit.uni-kl.de 414412027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_T(op,tp) \ 414512027Sjungma@eit.uni-kl.deinline \ 414612027Sjungma@eit.uni-kl.debool \ 414712027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast& a, tp b ) \ 414812027Sjungma@eit.uni-kl.de{ \ 414912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 415012027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 415112027Sjungma@eit.uni-kl.de return ( a.m_val op tmp.get_val() ); \ 415212027Sjungma@eit.uni-kl.de} \ 415312027Sjungma@eit.uni-kl.de \ 415412027Sjungma@eit.uni-kl.deinline \ 415512027Sjungma@eit.uni-kl.debool \ 415612027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxnum_fast& b ) \ 415712027Sjungma@eit.uni-kl.de{ \ 415812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 415912027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 416012027Sjungma@eit.uni-kl.de return ( tmp.get_val() op b.m_val ); \ 416112027Sjungma@eit.uni-kl.de} 416212027Sjungma@eit.uni-kl.de 416312027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 416412027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_OTHER(op) \ 416512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,int64) \ 416612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,uint64) \ 416712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_int_base&) \ 416812027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_uint_base&) \ 416912027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_signed&) \ 417012027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_unsigned&) 417112027Sjungma@eit.uni-kl.de#else 417212027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_OTHER(op) 417312027Sjungma@eit.uni-kl.de#endif 417412027Sjungma@eit.uni-kl.de 417512027Sjungma@eit.uni-kl.de#define DEFN_REL_OP(op) \ 417612027Sjungma@eit.uni-kl.deinline \ 417712027Sjungma@eit.uni-kl.debool \ 417812027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast& a, const sc_fxnum_fast& b ) \ 417912027Sjungma@eit.uni-kl.de{ \ 418012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 418112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 418212027Sjungma@eit.uni-kl.de return ( a.m_val op b.m_val ); \ 418312027Sjungma@eit.uni-kl.de} \ 418412027Sjungma@eit.uni-kl.de \ 418512027Sjungma@eit.uni-kl.deinline \ 418612027Sjungma@eit.uni-kl.debool \ 418712027Sjungma@eit.uni-kl.deoperator op ( const sc_fxnum_fast& a, const sc_fxval_fast& b ) \ 418812027Sjungma@eit.uni-kl.de{ \ 418912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) \ 419012027Sjungma@eit.uni-kl.de return ( a.m_val op b.get_val() ); \ 419112027Sjungma@eit.uni-kl.de} \ 419212027Sjungma@eit.uni-kl.de \ 419312027Sjungma@eit.uni-kl.deinline \ 419412027Sjungma@eit.uni-kl.debool \ 419512027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval_fast& a, const sc_fxnum_fast& b ) \ 419612027Sjungma@eit.uni-kl.de{ \ 419712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 419812027Sjungma@eit.uni-kl.de return ( a.get_val() op b.m_val ); \ 419912027Sjungma@eit.uni-kl.de} \ 420012027Sjungma@eit.uni-kl.de \ 420112027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,int) \ 420212027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,unsigned int) \ 420312027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,long) \ 420412027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,unsigned long) \ 420512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,float) \ 420612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,double) \ 420712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const char*) \ 420812027Sjungma@eit.uni-kl.deDEFN_REL_OP_OTHER(op) 420912027Sjungma@eit.uni-kl.de 421012027Sjungma@eit.uni-kl.deDEFN_REL_OP(<) 421112027Sjungma@eit.uni-kl.deDEFN_REL_OP(<=) 421212027Sjungma@eit.uni-kl.deDEFN_REL_OP(>) 421312027Sjungma@eit.uni-kl.deDEFN_REL_OP(>=) 421412027Sjungma@eit.uni-kl.deDEFN_REL_OP(==) 421512027Sjungma@eit.uni-kl.deDEFN_REL_OP(!=) 421612027Sjungma@eit.uni-kl.de 421712027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_T 421812027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_OTHER 421912027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP 422012027Sjungma@eit.uni-kl.de 422112027Sjungma@eit.uni-kl.de 422212027Sjungma@eit.uni-kl.de// assignment operators 422312027Sjungma@eit.uni-kl.de 422412027Sjungma@eit.uni-kl.deinline 422512027Sjungma@eit.uni-kl.desc_fxnum_fast& 422612027Sjungma@eit.uni-kl.desc_fxnum_fast::operator = ( const sc_fxnum_fast& a ) 422712027Sjungma@eit.uni-kl.de{ 422812027Sjungma@eit.uni-kl.de if( &a != this ) 422912027Sjungma@eit.uni-kl.de { 423012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( a ) 423112027Sjungma@eit.uni-kl.de m_val = a.m_val; 423212027Sjungma@eit.uni-kl.de cast(); 423312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 423412027Sjungma@eit.uni-kl.de } 423512027Sjungma@eit.uni-kl.de return *this; 423612027Sjungma@eit.uni-kl.de} 423712027Sjungma@eit.uni-kl.de 423812027Sjungma@eit.uni-kl.deinline 423912027Sjungma@eit.uni-kl.desc_fxnum_fast& 424012027Sjungma@eit.uni-kl.desc_fxnum_fast::operator = ( const sc_fxval_fast& a ) 424112027Sjungma@eit.uni-kl.de{ 424212027Sjungma@eit.uni-kl.de m_val = a.get_val(); 424312027Sjungma@eit.uni-kl.de cast(); 424412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 424512027Sjungma@eit.uni-kl.de return *this; 424612027Sjungma@eit.uni-kl.de} 424712027Sjungma@eit.uni-kl.de 424812027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(tp) \ 424912027Sjungma@eit.uni-kl.deinline \ 425012027Sjungma@eit.uni-kl.desc_fxnum_fast& \ 425112027Sjungma@eit.uni-kl.desc_fxnum_fast::operator = ( tp a ) \ 425212027Sjungma@eit.uni-kl.de{ \ 425312027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 425412027Sjungma@eit.uni-kl.de m_val = tmp.get_val(); \ 425512027Sjungma@eit.uni-kl.de cast(); \ 425612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ 425712027Sjungma@eit.uni-kl.de return *this; \ 425812027Sjungma@eit.uni-kl.de} 425912027Sjungma@eit.uni-kl.de 426012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int) 426112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned int) 426212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(long) 426312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned long) 426412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(float) 426512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(double) 426612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const char*) 426712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_fxval&) 426812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_fxnum&) 426912027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 427012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int64) 427112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(uint64) 427212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_int_base&) 427312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_uint_base&) 427412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_signed&) 427512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_unsigned&) 427612027Sjungma@eit.uni-kl.de#endif 427712027Sjungma@eit.uni-kl.de 427812027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 427912027Sjungma@eit.uni-kl.de 428012027Sjungma@eit.uni-kl.de 428112027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,tp) \ 428212027Sjungma@eit.uni-kl.deinline \ 428312027Sjungma@eit.uni-kl.desc_fxnum_fast& \ 428412027Sjungma@eit.uni-kl.desc_fxnum_fast::operator op ( tp b ) \ 428512027Sjungma@eit.uni-kl.de{ \ 428612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) \ 428712027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 428812027Sjungma@eit.uni-kl.de m_val op tmp.get_val(); \ 428912027Sjungma@eit.uni-kl.de cast(); \ 429012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ 429112027Sjungma@eit.uni-kl.de return *this; \ 429212027Sjungma@eit.uni-kl.de} 429312027Sjungma@eit.uni-kl.de 429412027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 429512027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op) \ 429612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,int64) \ 429712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,uint64) \ 429812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_int_base&) \ 429912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_uint_base&) \ 430012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_signed&) \ 430112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_unsigned&) 430212027Sjungma@eit.uni-kl.de#else 430312027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op) 430412027Sjungma@eit.uni-kl.de#endif 430512027Sjungma@eit.uni-kl.de 430612027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op) \ 430712027Sjungma@eit.uni-kl.deinline \ 430812027Sjungma@eit.uni-kl.desc_fxnum_fast& \ 430912027Sjungma@eit.uni-kl.desc_fxnum_fast::operator op ( const sc_fxnum_fast& b ) \ 431012027Sjungma@eit.uni-kl.de{ \ 431112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) \ 431212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( b ) \ 431312027Sjungma@eit.uni-kl.de m_val op b.m_val; \ 431412027Sjungma@eit.uni-kl.de cast(); \ 431512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ 431612027Sjungma@eit.uni-kl.de return *this; \ 431712027Sjungma@eit.uni-kl.de} \ 431812027Sjungma@eit.uni-kl.de \ 431912027Sjungma@eit.uni-kl.deinline \ 432012027Sjungma@eit.uni-kl.desc_fxnum_fast& \ 432112027Sjungma@eit.uni-kl.desc_fxnum_fast::operator op ( const sc_fxval_fast& b ) \ 432212027Sjungma@eit.uni-kl.de{ \ 432312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) \ 432412027Sjungma@eit.uni-kl.de m_val op b.get_val(); \ 432512027Sjungma@eit.uni-kl.de cast(); \ 432612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ 432712027Sjungma@eit.uni-kl.de return *this; \ 432812027Sjungma@eit.uni-kl.de} \ 432912027Sjungma@eit.uni-kl.de \ 433012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,int) \ 433112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,unsigned int) \ 433212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,long) \ 433312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,unsigned long) \ 433412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,float) \ 433512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,double) \ 433612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const char*) \ 433712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxval&) \ 433812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxnum&) \ 433912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_OTHER(op) 434012027Sjungma@eit.uni-kl.de 434112027Sjungma@eit.uni-kl.deDEFN_ASN_OP(*=) 434212027Sjungma@eit.uni-kl.deDEFN_ASN_OP(/=) 434312027Sjungma@eit.uni-kl.deDEFN_ASN_OP(+=) 434412027Sjungma@eit.uni-kl.deDEFN_ASN_OP(-=) 434512027Sjungma@eit.uni-kl.de 434612027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 434712027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_OTHER 434812027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP 434912027Sjungma@eit.uni-kl.de 435012027Sjungma@eit.uni-kl.de 435112027Sjungma@eit.uni-kl.deinline 435212027Sjungma@eit.uni-kl.desc_fxnum_fast& 435312027Sjungma@eit.uni-kl.desc_fxnum_fast::operator <<= ( int b ) 435412027Sjungma@eit.uni-kl.de{ 435512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 435612027Sjungma@eit.uni-kl.de m_val *= scfx_pow2( b ); 435712027Sjungma@eit.uni-kl.de cast(); 435812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 435912027Sjungma@eit.uni-kl.de return *this; 436012027Sjungma@eit.uni-kl.de} 436112027Sjungma@eit.uni-kl.de 436212027Sjungma@eit.uni-kl.deinline 436312027Sjungma@eit.uni-kl.desc_fxnum_fast& 436412027Sjungma@eit.uni-kl.desc_fxnum_fast::operator >>= ( int b ) 436512027Sjungma@eit.uni-kl.de{ 436612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 436712027Sjungma@eit.uni-kl.de m_val *= scfx_pow2( -b ); 436812027Sjungma@eit.uni-kl.de cast(); 436912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 437012027Sjungma@eit.uni-kl.de return *this; 437112027Sjungma@eit.uni-kl.de} 437212027Sjungma@eit.uni-kl.de 437312027Sjungma@eit.uni-kl.de 437412027Sjungma@eit.uni-kl.de// auto-increment and auto-decrement 437512027Sjungma@eit.uni-kl.de 437612027Sjungma@eit.uni-kl.deinline 437712027Sjungma@eit.uni-kl.deconst sc_fxval_fast 437812027Sjungma@eit.uni-kl.desc_fxnum_fast::operator ++ ( int ) 437912027Sjungma@eit.uni-kl.de{ 438012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 438112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 438212027Sjungma@eit.uni-kl.de double c = m_val; 438312027Sjungma@eit.uni-kl.de m_val = m_val + 1; 438412027Sjungma@eit.uni-kl.de cast(); 438512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 438612027Sjungma@eit.uni-kl.de return sc_fxval_fast( c ); 438712027Sjungma@eit.uni-kl.de} 438812027Sjungma@eit.uni-kl.de 438912027Sjungma@eit.uni-kl.deinline 439012027Sjungma@eit.uni-kl.deconst sc_fxval_fast 439112027Sjungma@eit.uni-kl.desc_fxnum_fast::operator -- ( int ) 439212027Sjungma@eit.uni-kl.de{ 439312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 439412027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 439512027Sjungma@eit.uni-kl.de double c = m_val; 439612027Sjungma@eit.uni-kl.de m_val = m_val - 1; 439712027Sjungma@eit.uni-kl.de cast(); 439812027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 439912027Sjungma@eit.uni-kl.de return sc_fxval_fast( c ); 440012027Sjungma@eit.uni-kl.de} 440112027Sjungma@eit.uni-kl.de 440212027Sjungma@eit.uni-kl.deinline 440312027Sjungma@eit.uni-kl.desc_fxnum_fast& 440412027Sjungma@eit.uni-kl.desc_fxnum_fast::operator ++ () 440512027Sjungma@eit.uni-kl.de{ 440612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 440712027Sjungma@eit.uni-kl.de m_val = m_val + 1; 440812027Sjungma@eit.uni-kl.de cast(); 440912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 441012027Sjungma@eit.uni-kl.de return *this; 441112027Sjungma@eit.uni-kl.de} 441212027Sjungma@eit.uni-kl.de 441312027Sjungma@eit.uni-kl.deinline 441412027Sjungma@eit.uni-kl.desc_fxnum_fast& 441512027Sjungma@eit.uni-kl.desc_fxnum_fast::operator -- () 441612027Sjungma@eit.uni-kl.de{ 441712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 441812027Sjungma@eit.uni-kl.de m_val = m_val - 1; 441912027Sjungma@eit.uni-kl.de cast(); 442012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) 442112027Sjungma@eit.uni-kl.de return *this; 442212027Sjungma@eit.uni-kl.de} 442312027Sjungma@eit.uni-kl.de 442412027Sjungma@eit.uni-kl.de 442512027Sjungma@eit.uni-kl.de// bit selection 442612027Sjungma@eit.uni-kl.de 442712027Sjungma@eit.uni-kl.deinline 442812027Sjungma@eit.uni-kl.deconst sc_fxnum_fast_bitref 442912027Sjungma@eit.uni-kl.desc_fxnum_fast::operator [] ( int i ) const 443012027Sjungma@eit.uni-kl.de{ 443112027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 443212027Sjungma@eit.uni-kl.de return sc_fxnum_fast_bitref( const_cast<sc_fxnum_fast&>( *this ), 443312027Sjungma@eit.uni-kl.de i - m_params.fwl() ); 443412027Sjungma@eit.uni-kl.de} 443512027Sjungma@eit.uni-kl.de 443612027Sjungma@eit.uni-kl.deinline 443712027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref 443812027Sjungma@eit.uni-kl.desc_fxnum_fast::operator [] ( int i ) 443912027Sjungma@eit.uni-kl.de{ 444012027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 444112027Sjungma@eit.uni-kl.de return sc_fxnum_fast_bitref( *this, i - m_params.fwl() ); 444212027Sjungma@eit.uni-kl.de} 444312027Sjungma@eit.uni-kl.de 444412027Sjungma@eit.uni-kl.deinline 444512027Sjungma@eit.uni-kl.deconst sc_fxnum_fast_bitref 444612027Sjungma@eit.uni-kl.desc_fxnum_fast::bit( int i ) const 444712027Sjungma@eit.uni-kl.de{ 444812027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 444912027Sjungma@eit.uni-kl.de return sc_fxnum_fast_bitref( const_cast<sc_fxnum_fast&>( *this ), 445012027Sjungma@eit.uni-kl.de i - m_params.fwl() ); 445112027Sjungma@eit.uni-kl.de} 445212027Sjungma@eit.uni-kl.de 445312027Sjungma@eit.uni-kl.deinline 445412027Sjungma@eit.uni-kl.desc_fxnum_fast_bitref 445512027Sjungma@eit.uni-kl.desc_fxnum_fast::bit( int i ) 445612027Sjungma@eit.uni-kl.de{ 445712027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 445812027Sjungma@eit.uni-kl.de return sc_fxnum_fast_bitref( *this, i - m_params.fwl() ); 445912027Sjungma@eit.uni-kl.de} 446012027Sjungma@eit.uni-kl.de 446112027Sjungma@eit.uni-kl.de 446212027Sjungma@eit.uni-kl.de// part selection 446312027Sjungma@eit.uni-kl.de 446412027Sjungma@eit.uni-kl.deinline 446512027Sjungma@eit.uni-kl.deconst sc_fxnum_fast_subref 446612027Sjungma@eit.uni-kl.desc_fxnum_fast::operator () ( int i, int j ) const 446712027Sjungma@eit.uni-kl.de{ 446812027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 446912027Sjungma@eit.uni-kl.de SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 447012027Sjungma@eit.uni-kl.de 447112027Sjungma@eit.uni-kl.de return sc_fxnum_fast_subref( const_cast<sc_fxnum_fast&>( *this ), 447212027Sjungma@eit.uni-kl.de i - m_params.fwl(), j - m_params.fwl() ); 447312027Sjungma@eit.uni-kl.de} 447412027Sjungma@eit.uni-kl.de 447512027Sjungma@eit.uni-kl.deinline 447612027Sjungma@eit.uni-kl.desc_fxnum_fast_subref 447712027Sjungma@eit.uni-kl.desc_fxnum_fast::operator () ( int i, int j ) 447812027Sjungma@eit.uni-kl.de{ 447912027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 448012027Sjungma@eit.uni-kl.de SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 448112027Sjungma@eit.uni-kl.de 448212027Sjungma@eit.uni-kl.de return sc_fxnum_fast_subref( *this, 448312027Sjungma@eit.uni-kl.de i - m_params.fwl(), j - m_params.fwl() ); 448412027Sjungma@eit.uni-kl.de} 448512027Sjungma@eit.uni-kl.de 448612027Sjungma@eit.uni-kl.deinline 448712027Sjungma@eit.uni-kl.deconst sc_fxnum_fast_subref 448812027Sjungma@eit.uni-kl.desc_fxnum_fast::range( int i, int j ) const 448912027Sjungma@eit.uni-kl.de{ 449012027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 449112027Sjungma@eit.uni-kl.de SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 449212027Sjungma@eit.uni-kl.de 449312027Sjungma@eit.uni-kl.de return sc_fxnum_fast_subref( const_cast<sc_fxnum_fast&>( *this ), 449412027Sjungma@eit.uni-kl.de i - m_params.fwl(), j - m_params.fwl() ); 449512027Sjungma@eit.uni-kl.de} 449612027Sjungma@eit.uni-kl.de 449712027Sjungma@eit.uni-kl.deinline 449812027Sjungma@eit.uni-kl.desc_fxnum_fast_subref 449912027Sjungma@eit.uni-kl.desc_fxnum_fast::range( int i, int j ) 450012027Sjungma@eit.uni-kl.de{ 450112027Sjungma@eit.uni-kl.de SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 450212027Sjungma@eit.uni-kl.de SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); 450312027Sjungma@eit.uni-kl.de 450412027Sjungma@eit.uni-kl.de return sc_fxnum_fast_subref( *this, 450512027Sjungma@eit.uni-kl.de i - m_params.fwl(), j - m_params.fwl() ); 450612027Sjungma@eit.uni-kl.de} 450712027Sjungma@eit.uni-kl.de 450812027Sjungma@eit.uni-kl.deinline 450912027Sjungma@eit.uni-kl.deconst sc_fxnum_fast_subref 451012027Sjungma@eit.uni-kl.desc_fxnum_fast::operator () () const 451112027Sjungma@eit.uni-kl.de{ 451212027Sjungma@eit.uni-kl.de return this->operator () ( m_params.wl() - 1, 0 ); 451312027Sjungma@eit.uni-kl.de} 451412027Sjungma@eit.uni-kl.de 451512027Sjungma@eit.uni-kl.deinline 451612027Sjungma@eit.uni-kl.desc_fxnum_fast_subref 451712027Sjungma@eit.uni-kl.desc_fxnum_fast::operator () () 451812027Sjungma@eit.uni-kl.de{ 451912027Sjungma@eit.uni-kl.de return this->operator () ( m_params.wl() - 1, 0 ); 452012027Sjungma@eit.uni-kl.de} 452112027Sjungma@eit.uni-kl.de 452212027Sjungma@eit.uni-kl.deinline 452312027Sjungma@eit.uni-kl.deconst sc_fxnum_fast_subref 452412027Sjungma@eit.uni-kl.desc_fxnum_fast::range() const 452512027Sjungma@eit.uni-kl.de{ 452612027Sjungma@eit.uni-kl.de return this->range( m_params.wl() - 1, 0 ); 452712027Sjungma@eit.uni-kl.de} 452812027Sjungma@eit.uni-kl.de 452912027Sjungma@eit.uni-kl.deinline 453012027Sjungma@eit.uni-kl.desc_fxnum_fast_subref 453112027Sjungma@eit.uni-kl.desc_fxnum_fast::range() 453212027Sjungma@eit.uni-kl.de{ 453312027Sjungma@eit.uni-kl.de return this->range( m_params.wl() - 1, 0 ); 453412027Sjungma@eit.uni-kl.de} 453512027Sjungma@eit.uni-kl.de 453612027Sjungma@eit.uni-kl.de 453712027Sjungma@eit.uni-kl.de// implicit conversion 453812027Sjungma@eit.uni-kl.de 453912027Sjungma@eit.uni-kl.deinline 454012027Sjungma@eit.uni-kl.desc_fxnum_fast::operator double() const 454112027Sjungma@eit.uni-kl.de{ 454212027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 454312027Sjungma@eit.uni-kl.de return m_val; 454412027Sjungma@eit.uni-kl.de} 454512027Sjungma@eit.uni-kl.de 454612027Sjungma@eit.uni-kl.de 454712027Sjungma@eit.uni-kl.de// explicit conversion to primitive types 454812027Sjungma@eit.uni-kl.de 454912027Sjungma@eit.uni-kl.deinline 455012027Sjungma@eit.uni-kl.deshort 455112027Sjungma@eit.uni-kl.desc_fxnum_fast::to_short() const 455212027Sjungma@eit.uni-kl.de{ 455312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 455412027Sjungma@eit.uni-kl.de return static_cast<short>( m_val ); 455512027Sjungma@eit.uni-kl.de} 455612027Sjungma@eit.uni-kl.de 455712027Sjungma@eit.uni-kl.deinline 455812027Sjungma@eit.uni-kl.deunsigned short 455912027Sjungma@eit.uni-kl.desc_fxnum_fast::to_ushort() const 456012027Sjungma@eit.uni-kl.de{ 456112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 456212027Sjungma@eit.uni-kl.de return static_cast<unsigned short>( m_val ); 456312027Sjungma@eit.uni-kl.de} 456412027Sjungma@eit.uni-kl.de 456512027Sjungma@eit.uni-kl.deinline 456612027Sjungma@eit.uni-kl.deint 456712027Sjungma@eit.uni-kl.desc_fxnum_fast::to_int() const 456812027Sjungma@eit.uni-kl.de{ 456912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 457012027Sjungma@eit.uni-kl.de return static_cast<int>( m_val ); 457112027Sjungma@eit.uni-kl.de} 457212027Sjungma@eit.uni-kl.de 457312027Sjungma@eit.uni-kl.deinline 457412027Sjungma@eit.uni-kl.deint64 457512027Sjungma@eit.uni-kl.desc_fxnum_fast::to_int64() const 457612027Sjungma@eit.uni-kl.de{ 457712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 457812027Sjungma@eit.uni-kl.de return static_cast<int64>( m_val ); 457912027Sjungma@eit.uni-kl.de} 458012027Sjungma@eit.uni-kl.de 458112027Sjungma@eit.uni-kl.deinline 458212027Sjungma@eit.uni-kl.deunsigned int 458312027Sjungma@eit.uni-kl.desc_fxnum_fast::to_uint() const 458412027Sjungma@eit.uni-kl.de{ 458512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 458612027Sjungma@eit.uni-kl.de return static_cast<unsigned int>( m_val ); 458712027Sjungma@eit.uni-kl.de} 458812027Sjungma@eit.uni-kl.de 458912027Sjungma@eit.uni-kl.deinline 459012027Sjungma@eit.uni-kl.deuint64 459112027Sjungma@eit.uni-kl.desc_fxnum_fast::to_uint64() const 459212027Sjungma@eit.uni-kl.de{ 459312027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 459412027Sjungma@eit.uni-kl.de return static_cast<uint64>( m_val ); 459512027Sjungma@eit.uni-kl.de} 459612027Sjungma@eit.uni-kl.de 459712027Sjungma@eit.uni-kl.deinline 459812027Sjungma@eit.uni-kl.delong 459912027Sjungma@eit.uni-kl.desc_fxnum_fast::to_long() const 460012027Sjungma@eit.uni-kl.de{ 460112027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 460212027Sjungma@eit.uni-kl.de return static_cast<long>( m_val ); 460312027Sjungma@eit.uni-kl.de} 460412027Sjungma@eit.uni-kl.de 460512027Sjungma@eit.uni-kl.deinline 460612027Sjungma@eit.uni-kl.deunsigned long 460712027Sjungma@eit.uni-kl.desc_fxnum_fast::to_ulong() const 460812027Sjungma@eit.uni-kl.de{ 460912027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 461012027Sjungma@eit.uni-kl.de return static_cast<unsigned long>( m_val ); 461112027Sjungma@eit.uni-kl.de} 461212027Sjungma@eit.uni-kl.de 461312027Sjungma@eit.uni-kl.deinline 461412027Sjungma@eit.uni-kl.defloat 461512027Sjungma@eit.uni-kl.desc_fxnum_fast::to_float() const 461612027Sjungma@eit.uni-kl.de{ 461712027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 461812027Sjungma@eit.uni-kl.de return static_cast<float>( m_val ); 461912027Sjungma@eit.uni-kl.de} 462012027Sjungma@eit.uni-kl.de 462112027Sjungma@eit.uni-kl.deinline 462212027Sjungma@eit.uni-kl.dedouble 462312027Sjungma@eit.uni-kl.desc_fxnum_fast::to_double() const 462412027Sjungma@eit.uni-kl.de{ 462512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 462612027Sjungma@eit.uni-kl.de return m_val; 462712027Sjungma@eit.uni-kl.de} 462812027Sjungma@eit.uni-kl.de 462912027Sjungma@eit.uni-kl.de 463012027Sjungma@eit.uni-kl.de// query value 463112027Sjungma@eit.uni-kl.de 463212027Sjungma@eit.uni-kl.deinline 463312027Sjungma@eit.uni-kl.debool 463412027Sjungma@eit.uni-kl.desc_fxnum_fast::is_neg() const 463512027Sjungma@eit.uni-kl.de{ 463612027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 463712027Sjungma@eit.uni-kl.de scfx_ieee_double id( m_val ); 463812027Sjungma@eit.uni-kl.de return ( id.negative() != 0 ); 463912027Sjungma@eit.uni-kl.de} 464012027Sjungma@eit.uni-kl.de 464112027Sjungma@eit.uni-kl.deinline 464212027Sjungma@eit.uni-kl.debool 464312027Sjungma@eit.uni-kl.desc_fxnum_fast::is_zero() const 464412027Sjungma@eit.uni-kl.de{ 464512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 464612027Sjungma@eit.uni-kl.de scfx_ieee_double id( m_val ); 464712027Sjungma@eit.uni-kl.de return id.is_zero(); 464812027Sjungma@eit.uni-kl.de} 464912027Sjungma@eit.uni-kl.de 465012027Sjungma@eit.uni-kl.de// internal use only; 465112027Sjungma@eit.uni-kl.deinline 465212027Sjungma@eit.uni-kl.debool 465312027Sjungma@eit.uni-kl.desc_fxnum_fast::is_normal() const 465412027Sjungma@eit.uni-kl.de{ 465512027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 465612027Sjungma@eit.uni-kl.de scfx_ieee_double id( m_val ); 465712027Sjungma@eit.uni-kl.de return ( id.is_normal() || id.is_subnormal() || id.is_zero() ); 465812027Sjungma@eit.uni-kl.de} 465912027Sjungma@eit.uni-kl.de 466012027Sjungma@eit.uni-kl.de 466112027Sjungma@eit.uni-kl.deinline 466212027Sjungma@eit.uni-kl.debool 466312027Sjungma@eit.uni-kl.desc_fxnum_fast::quantization_flag() const 466412027Sjungma@eit.uni-kl.de{ 466512027Sjungma@eit.uni-kl.de return m_q_flag; 466612027Sjungma@eit.uni-kl.de} 466712027Sjungma@eit.uni-kl.de 466812027Sjungma@eit.uni-kl.deinline 466912027Sjungma@eit.uni-kl.debool 467012027Sjungma@eit.uni-kl.desc_fxnum_fast::overflow_flag() const 467112027Sjungma@eit.uni-kl.de{ 467212027Sjungma@eit.uni-kl.de return m_o_flag; 467312027Sjungma@eit.uni-kl.de} 467412027Sjungma@eit.uni-kl.de 467512027Sjungma@eit.uni-kl.de 467612027Sjungma@eit.uni-kl.deinline 467712027Sjungma@eit.uni-kl.deconst sc_fxval_fast 467812027Sjungma@eit.uni-kl.desc_fxnum_fast::value() const 467912027Sjungma@eit.uni-kl.de{ 468012027Sjungma@eit.uni-kl.de SC_FXNUM_FAST_OBSERVER_READ_( *this ) 468112027Sjungma@eit.uni-kl.de return sc_fxval_fast( m_val ); 468212027Sjungma@eit.uni-kl.de} 468312027Sjungma@eit.uni-kl.de 468412027Sjungma@eit.uni-kl.de 468512027Sjungma@eit.uni-kl.de// query parameters 468612027Sjungma@eit.uni-kl.de 468712027Sjungma@eit.uni-kl.deinline 468812027Sjungma@eit.uni-kl.deint 468912027Sjungma@eit.uni-kl.desc_fxnum_fast::wl() const 469012027Sjungma@eit.uni-kl.de{ 469112027Sjungma@eit.uni-kl.de return m_params.wl(); 469212027Sjungma@eit.uni-kl.de} 469312027Sjungma@eit.uni-kl.de 469412027Sjungma@eit.uni-kl.deinline 469512027Sjungma@eit.uni-kl.deint 469612027Sjungma@eit.uni-kl.desc_fxnum_fast::iwl() const 469712027Sjungma@eit.uni-kl.de{ 469812027Sjungma@eit.uni-kl.de return m_params.iwl(); 469912027Sjungma@eit.uni-kl.de} 470012027Sjungma@eit.uni-kl.de 470112027Sjungma@eit.uni-kl.deinline 470212027Sjungma@eit.uni-kl.desc_q_mode 470312027Sjungma@eit.uni-kl.desc_fxnum_fast::q_mode() const 470412027Sjungma@eit.uni-kl.de{ 470512027Sjungma@eit.uni-kl.de return m_params.q_mode(); 470612027Sjungma@eit.uni-kl.de} 470712027Sjungma@eit.uni-kl.de 470812027Sjungma@eit.uni-kl.deinline 470912027Sjungma@eit.uni-kl.desc_o_mode 471012027Sjungma@eit.uni-kl.desc_fxnum_fast::o_mode() const 471112027Sjungma@eit.uni-kl.de{ 471212027Sjungma@eit.uni-kl.de return m_params.o_mode(); 471312027Sjungma@eit.uni-kl.de} 471412027Sjungma@eit.uni-kl.de 471512027Sjungma@eit.uni-kl.deinline 471612027Sjungma@eit.uni-kl.deint 471712027Sjungma@eit.uni-kl.desc_fxnum_fast::n_bits() const 471812027Sjungma@eit.uni-kl.de{ 471912027Sjungma@eit.uni-kl.de return m_params.n_bits(); 472012027Sjungma@eit.uni-kl.de} 472112027Sjungma@eit.uni-kl.de 472212027Sjungma@eit.uni-kl.de 472312027Sjungma@eit.uni-kl.deinline 472412027Sjungma@eit.uni-kl.deconst sc_fxtype_params& 472512027Sjungma@eit.uni-kl.desc_fxnum_fast::type_params() const 472612027Sjungma@eit.uni-kl.de{ 472712027Sjungma@eit.uni-kl.de return m_params.type_params(); 472812027Sjungma@eit.uni-kl.de} 472912027Sjungma@eit.uni-kl.de 473012027Sjungma@eit.uni-kl.de 473112027Sjungma@eit.uni-kl.deinline 473212027Sjungma@eit.uni-kl.deconst sc_fxcast_switch& 473312027Sjungma@eit.uni-kl.desc_fxnum_fast::cast_switch() const 473412027Sjungma@eit.uni-kl.de{ 473512027Sjungma@eit.uni-kl.de return m_params.cast_switch(); 473612027Sjungma@eit.uni-kl.de} 473712027Sjungma@eit.uni-kl.de 473812027Sjungma@eit.uni-kl.de 473912027Sjungma@eit.uni-kl.de// internal use only; 474012027Sjungma@eit.uni-kl.deinline 474112027Sjungma@eit.uni-kl.devoid 474212027Sjungma@eit.uni-kl.desc_fxnum_fast::observer_read() const 474312027Sjungma@eit.uni-kl.de{ 474412027Sjungma@eit.uni-kl.de SC_FXNUM_OBSERVER_READ_( *this ); 474512027Sjungma@eit.uni-kl.de} 474612027Sjungma@eit.uni-kl.de 474712027Sjungma@eit.uni-kl.de 474812027Sjungma@eit.uni-kl.deinline 474912027Sjungma@eit.uni-kl.de::std::ostream& 475012027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_fxnum_fast& a ) 475112027Sjungma@eit.uni-kl.de{ 475212027Sjungma@eit.uni-kl.de a.print( os ); 475312027Sjungma@eit.uni-kl.de return os; 475412027Sjungma@eit.uni-kl.de} 475512027Sjungma@eit.uni-kl.de 475612027Sjungma@eit.uni-kl.deinline 475712027Sjungma@eit.uni-kl.de::std::istream& 475812027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_fxnum_fast& a ) 475912027Sjungma@eit.uni-kl.de{ 476012027Sjungma@eit.uni-kl.de a.scan( is ); 476112027Sjungma@eit.uni-kl.de return is; 476212027Sjungma@eit.uni-kl.de} 476312027Sjungma@eit.uni-kl.de 476412027Sjungma@eit.uni-kl.de 476512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 476612027Sjungma@eit.uni-kl.de// CLASS : sc_fxval 476712027Sjungma@eit.uni-kl.de// 476812027Sjungma@eit.uni-kl.de// Fixed-point value type; arbitrary precision. 476912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 477012027Sjungma@eit.uni-kl.de 477112027Sjungma@eit.uni-kl.de// public constructors 477212027Sjungma@eit.uni-kl.de 477312027Sjungma@eit.uni-kl.deinline 477412027Sjungma@eit.uni-kl.desc_fxval::sc_fxval( const sc_fxnum& a, 477512027Sjungma@eit.uni-kl.de sc_fxval_observer* observer_ ) 477612027Sjungma@eit.uni-kl.de: m_rep( new scfx_rep( *a.get_rep() ) ), 477712027Sjungma@eit.uni-kl.de m_observer( observer_ ) 477812027Sjungma@eit.uni-kl.de{ 477912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_DEFAULT_ 478012027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) 478112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) 478212027Sjungma@eit.uni-kl.de} 478312027Sjungma@eit.uni-kl.de 478412027Sjungma@eit.uni-kl.deinline 478512027Sjungma@eit.uni-kl.desc_fxval::sc_fxval( const sc_fxnum_fast& a, 478612027Sjungma@eit.uni-kl.de sc_fxval_observer* observer_ ) 478712027Sjungma@eit.uni-kl.de: m_rep( new scfx_rep( a.to_double() ) ), 478812027Sjungma@eit.uni-kl.de m_observer( observer_ ) 478912027Sjungma@eit.uni-kl.de{ 479012027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_DEFAULT_ 479112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) 479212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) 479312027Sjungma@eit.uni-kl.de} 479412027Sjungma@eit.uni-kl.de 479512027Sjungma@eit.uni-kl.de 479612027Sjungma@eit.uni-kl.de// binary operators 479712027Sjungma@eit.uni-kl.de 479812027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_T(op,fnc,tp) \ 479912027Sjungma@eit.uni-kl.deinline \ 480012027Sjungma@eit.uni-kl.deconst sc_fxval \ 480112027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval& a, tp b ) \ 480212027Sjungma@eit.uni-kl.de{ \ 480312027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 480412027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 480512027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.m_rep ) ); \ 480612027Sjungma@eit.uni-kl.de} \ 480712027Sjungma@eit.uni-kl.de \ 480812027Sjungma@eit.uni-kl.deinline \ 480912027Sjungma@eit.uni-kl.deconst sc_fxval \ 481012027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxval& b ) \ 481112027Sjungma@eit.uni-kl.de{ \ 481212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 481312027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 481412027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *tmp.m_rep, *b.m_rep ) ); \ 481512027Sjungma@eit.uni-kl.de} 481612027Sjungma@eit.uni-kl.de 481712027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP(op,fnc) \ 481812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_fxnum_fast&) 481912027Sjungma@eit.uni-kl.de 482012027Sjungma@eit.uni-kl.deDEFN_BIN_OP(*,mult) 482112027Sjungma@eit.uni-kl.deDEFN_BIN_OP(+,add) 482212027Sjungma@eit.uni-kl.deDEFN_BIN_OP(-,sub) 482312027Sjungma@eit.uni-kl.de//DEFN_BIN_OP(/,div) 482412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_fxnum_fast&) 482512027Sjungma@eit.uni-kl.de 482612027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_T 482712027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP 482812027Sjungma@eit.uni-kl.de 482912027Sjungma@eit.uni-kl.de 483012027Sjungma@eit.uni-kl.de// binary functions 483112027Sjungma@eit.uni-kl.de 483212027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_T(fnc,tp) \ 483312027Sjungma@eit.uni-kl.deinline \ 483412027Sjungma@eit.uni-kl.devoid \ 483512027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, const sc_fxval& a, tp b ) \ 483612027Sjungma@eit.uni-kl.de{ \ 483712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 483812027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 483912027Sjungma@eit.uni-kl.de delete c.m_rep; \ 484012027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.m_rep ); \ 484112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( c ) \ 484212027Sjungma@eit.uni-kl.de} \ 484312027Sjungma@eit.uni-kl.de \ 484412027Sjungma@eit.uni-kl.deinline \ 484512027Sjungma@eit.uni-kl.devoid \ 484612027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, tp a, const sc_fxval& b ) \ 484712027Sjungma@eit.uni-kl.de{ \ 484812027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 484912027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 485012027Sjungma@eit.uni-kl.de delete c.m_rep; \ 485112027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *tmp.m_rep, *b.m_rep ); \ 485212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( c ) \ 485312027Sjungma@eit.uni-kl.de} 485412027Sjungma@eit.uni-kl.de 485512027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC(fnc) \ 485612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_fxnum_fast&) 485712027Sjungma@eit.uni-kl.de 485812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(mult) 485912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(div) 486012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(add) 486112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(sub) 486212027Sjungma@eit.uni-kl.de 486312027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_T 486412027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC 486512027Sjungma@eit.uni-kl.de 486612027Sjungma@eit.uni-kl.de 486712027Sjungma@eit.uni-kl.de// relational (including equality) operators 486812027Sjungma@eit.uni-kl.de 486912027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_T(op,ret,tp) \ 487012027Sjungma@eit.uni-kl.deinline \ 487112027Sjungma@eit.uni-kl.debool \ 487212027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval& a, tp b ) \ 487312027Sjungma@eit.uni-kl.de{ \ 487412027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 487512027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 487612027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *a.m_rep, *tmp.m_rep ); \ 487712027Sjungma@eit.uni-kl.de return ( ret ); \ 487812027Sjungma@eit.uni-kl.de} \ 487912027Sjungma@eit.uni-kl.de \ 488012027Sjungma@eit.uni-kl.deinline \ 488112027Sjungma@eit.uni-kl.debool \ 488212027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxval& b ) \ 488312027Sjungma@eit.uni-kl.de{ \ 488412027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 488512027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 488612027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *tmp.m_rep, *b.m_rep ); \ 488712027Sjungma@eit.uni-kl.de return ( ret ); \ 488812027Sjungma@eit.uni-kl.de} 488912027Sjungma@eit.uni-kl.de 489012027Sjungma@eit.uni-kl.de 489112027Sjungma@eit.uni-kl.de#define DEFN_REL_OP(op,ret) \ 489212027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_fxnum_fast&) 489312027Sjungma@eit.uni-kl.de 489412027Sjungma@eit.uni-kl.deDEFN_REL_OP(<,result < 0) 489512027Sjungma@eit.uni-kl.deDEFN_REL_OP(<=,result <= 0) 489612027Sjungma@eit.uni-kl.deDEFN_REL_OP(>,result > 0 && result != 2) 489712027Sjungma@eit.uni-kl.deDEFN_REL_OP(>=,result >= 0 && result != 2) 489812027Sjungma@eit.uni-kl.deDEFN_REL_OP(==,result == 0) 489912027Sjungma@eit.uni-kl.deDEFN_REL_OP(!=,result != 0) 490012027Sjungma@eit.uni-kl.de 490112027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_T 490212027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP 490312027Sjungma@eit.uni-kl.de 490412027Sjungma@eit.uni-kl.de 490512027Sjungma@eit.uni-kl.de// assignment operators 490612027Sjungma@eit.uni-kl.de 490712027Sjungma@eit.uni-kl.deinline 490812027Sjungma@eit.uni-kl.desc_fxval& 490912027Sjungma@eit.uni-kl.desc_fxval::operator = ( const sc_fxnum& a ) 491012027Sjungma@eit.uni-kl.de{ 491112027Sjungma@eit.uni-kl.de *m_rep = *a.get_rep(); 491212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) 491312027Sjungma@eit.uni-kl.de return *this; 491412027Sjungma@eit.uni-kl.de} 491512027Sjungma@eit.uni-kl.de 491612027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(tp) \ 491712027Sjungma@eit.uni-kl.deinline \ 491812027Sjungma@eit.uni-kl.desc_fxval& \ 491912027Sjungma@eit.uni-kl.desc_fxval::operator = ( tp b ) \ 492012027Sjungma@eit.uni-kl.de{ \ 492112027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 492212027Sjungma@eit.uni-kl.de *m_rep = *tmp.m_rep; \ 492312027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) \ 492412027Sjungma@eit.uni-kl.de return *this; \ 492512027Sjungma@eit.uni-kl.de} 492612027Sjungma@eit.uni-kl.de 492712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_fxnum_fast&) 492812027Sjungma@eit.uni-kl.de 492912027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 493012027Sjungma@eit.uni-kl.de 493112027Sjungma@eit.uni-kl.de 493212027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,fnc,tp) \ 493312027Sjungma@eit.uni-kl.deinline \ 493412027Sjungma@eit.uni-kl.desc_fxval& \ 493512027Sjungma@eit.uni-kl.desc_fxval::operator op ( tp b ) \ 493612027Sjungma@eit.uni-kl.de{ \ 493712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) \ 493812027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 493912027Sjungma@eit.uni-kl.de scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *tmp.m_rep ); \ 494012027Sjungma@eit.uni-kl.de delete m_rep; \ 494112027Sjungma@eit.uni-kl.de m_rep = new_rep; \ 494212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) \ 494312027Sjungma@eit.uni-kl.de return *this; \ 494412027Sjungma@eit.uni-kl.de} 494512027Sjungma@eit.uni-kl.de 494612027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op,fnc) \ 494712027Sjungma@eit.uni-kl.deinline \ 494812027Sjungma@eit.uni-kl.desc_fxval& \ 494912027Sjungma@eit.uni-kl.desc_fxval::operator op ( const sc_fxnum& b ) \ 495012027Sjungma@eit.uni-kl.de{ \ 495112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) \ 495212027Sjungma@eit.uni-kl.de scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *b.get_rep() ); \ 495312027Sjungma@eit.uni-kl.de delete m_rep; \ 495412027Sjungma@eit.uni-kl.de m_rep = new_rep; \ 495512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) \ 495612027Sjungma@eit.uni-kl.de return *this; \ 495712027Sjungma@eit.uni-kl.de} \ 495812027Sjungma@eit.uni-kl.de \ 495912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_fxnum_fast&) 496012027Sjungma@eit.uni-kl.de 496112027Sjungma@eit.uni-kl.deDEFN_ASN_OP(*=,mult) 496212027Sjungma@eit.uni-kl.deDEFN_ASN_OP(/=,div) 496312027Sjungma@eit.uni-kl.deDEFN_ASN_OP(+=,add) 496412027Sjungma@eit.uni-kl.deDEFN_ASN_OP(-=,sub) 496512027Sjungma@eit.uni-kl.de 496612027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 496712027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP 496812027Sjungma@eit.uni-kl.de 496912027Sjungma@eit.uni-kl.de 497012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 497112027Sjungma@eit.uni-kl.de// CLASS : sc_fxval_fast 497212027Sjungma@eit.uni-kl.de// 497312027Sjungma@eit.uni-kl.de// Fixed-point value types; limited precision. 497412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 497512027Sjungma@eit.uni-kl.de 497612027Sjungma@eit.uni-kl.de// public constructors 497712027Sjungma@eit.uni-kl.de 497812027Sjungma@eit.uni-kl.deinline 497912027Sjungma@eit.uni-kl.desc_fxval_fast::sc_fxval_fast( const sc_fxnum& a, 498012027Sjungma@eit.uni-kl.de sc_fxval_fast_observer* observer_ ) 498112027Sjungma@eit.uni-kl.de: m_val( a.to_double() ), 498212027Sjungma@eit.uni-kl.de m_observer( observer_ ) 498312027Sjungma@eit.uni-kl.de{ 498412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_DEFAULT_ 498512027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) 498612027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 498712027Sjungma@eit.uni-kl.de} 498812027Sjungma@eit.uni-kl.de 498912027Sjungma@eit.uni-kl.deinline 499012027Sjungma@eit.uni-kl.desc_fxval_fast::sc_fxval_fast( const sc_fxnum_fast& a, 499112027Sjungma@eit.uni-kl.de sc_fxval_fast_observer* observer_ ) 499212027Sjungma@eit.uni-kl.de: m_val( a.get_val() ), 499312027Sjungma@eit.uni-kl.de m_observer( observer_ ) 499412027Sjungma@eit.uni-kl.de{ 499512027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_DEFAULT_ 499612027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) 499712027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 499812027Sjungma@eit.uni-kl.de} 499912027Sjungma@eit.uni-kl.de 500012027Sjungma@eit.uni-kl.de 500112027Sjungma@eit.uni-kl.de// binary functions 500212027Sjungma@eit.uni-kl.de 500312027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_T(fnc,op,tp) \ 500412027Sjungma@eit.uni-kl.deinline \ 500512027Sjungma@eit.uni-kl.devoid \ 500612027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, const sc_fxval_fast& a, tp b ) \ 500712027Sjungma@eit.uni-kl.de{ \ 500812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) \ 500912027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 501012027Sjungma@eit.uni-kl.de c.m_val = a.m_val op tmp.m_val; \ 501112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ 501212027Sjungma@eit.uni-kl.de} \ 501312027Sjungma@eit.uni-kl.de \ 501412027Sjungma@eit.uni-kl.deinline \ 501512027Sjungma@eit.uni-kl.devoid \ 501612027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, tp a, const sc_fxval_fast& b ) \ 501712027Sjungma@eit.uni-kl.de{ \ 501812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) \ 501912027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 502012027Sjungma@eit.uni-kl.de c.m_val = tmp.m_val op b.m_val; \ 502112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ 502212027Sjungma@eit.uni-kl.de} 502312027Sjungma@eit.uni-kl.de 502412027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC(fnc,op) \ 502512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_fxval&) \ 502612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_fxnum&) 502712027Sjungma@eit.uni-kl.de 502812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(mult,*) 502912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(div,/) 503012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(add,+) 503112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(sub,-) 503212027Sjungma@eit.uni-kl.de 503312027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_T 503412027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC 503512027Sjungma@eit.uni-kl.de 503612027Sjungma@eit.uni-kl.de 503712027Sjungma@eit.uni-kl.de// assignment operators 503812027Sjungma@eit.uni-kl.de 503912027Sjungma@eit.uni-kl.deinline 504012027Sjungma@eit.uni-kl.desc_fxval_fast& 504112027Sjungma@eit.uni-kl.desc_fxval_fast::operator = ( const sc_fxnum_fast& a ) 504212027Sjungma@eit.uni-kl.de{ 504312027Sjungma@eit.uni-kl.de m_val = a.get_val(); 504412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 504512027Sjungma@eit.uni-kl.de return *this; 504612027Sjungma@eit.uni-kl.de} 504712027Sjungma@eit.uni-kl.de 504812027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(tp) \ 504912027Sjungma@eit.uni-kl.deinline \ 505012027Sjungma@eit.uni-kl.desc_fxval_fast& \ 505112027Sjungma@eit.uni-kl.desc_fxval_fast::operator = ( tp a ) \ 505212027Sjungma@eit.uni-kl.de{ \ 505312027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 505412027Sjungma@eit.uni-kl.de m_val = tmp.m_val; \ 505512027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ 505612027Sjungma@eit.uni-kl.de return *this; \ 505712027Sjungma@eit.uni-kl.de} 505812027Sjungma@eit.uni-kl.de 505912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_fxnum&) 506012027Sjungma@eit.uni-kl.de 506112027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 506212027Sjungma@eit.uni-kl.de 506312027Sjungma@eit.uni-kl.de 506412027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,tp) \ 506512027Sjungma@eit.uni-kl.deinline \ 506612027Sjungma@eit.uni-kl.desc_fxval_fast& \ 506712027Sjungma@eit.uni-kl.desc_fxval_fast::operator op ( tp b ) \ 506812027Sjungma@eit.uni-kl.de{ \ 506912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) \ 507012027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 507112027Sjungma@eit.uni-kl.de m_val op tmp.m_val; \ 507212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ 507312027Sjungma@eit.uni-kl.de return *this; \ 507412027Sjungma@eit.uni-kl.de} 507512027Sjungma@eit.uni-kl.de 507612027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op) \ 507712027Sjungma@eit.uni-kl.deinline \ 507812027Sjungma@eit.uni-kl.desc_fxval_fast& \ 507912027Sjungma@eit.uni-kl.desc_fxval_fast::operator op ( const sc_fxnum_fast& b ) \ 508012027Sjungma@eit.uni-kl.de{ \ 508112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) \ 508212027Sjungma@eit.uni-kl.de m_val op b.get_val(); \ 508312027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ 508412027Sjungma@eit.uni-kl.de return *this; \ 508512027Sjungma@eit.uni-kl.de} \ 508612027Sjungma@eit.uni-kl.de \ 508712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxnum&) 508812027Sjungma@eit.uni-kl.de 508912027Sjungma@eit.uni-kl.deDEFN_ASN_OP(*=) 509012027Sjungma@eit.uni-kl.deDEFN_ASN_OP(/=) 509112027Sjungma@eit.uni-kl.deDEFN_ASN_OP(+=) 509212027Sjungma@eit.uni-kl.deDEFN_ASN_OP(-=) 509312027Sjungma@eit.uni-kl.de 509412027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 509512027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP 509612027Sjungma@eit.uni-kl.de 509712027Sjungma@eit.uni-kl.de} // namespace sc_dt 509812027Sjungma@eit.uni-kl.de 509912027Sjungma@eit.uni-kl.de 510012027Sjungma@eit.uni-kl.de#endif 510112027Sjungma@eit.uni-kl.de 510212027Sjungma@eit.uni-kl.de// Taf! 5103