sc_fxval.h revision 12027
112027Sjungma@eit.uni-kl.de/***************************************************************************** 212027Sjungma@eit.uni-kl.de 312027Sjungma@eit.uni-kl.de Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412027Sjungma@eit.uni-kl.de more contributor license agreements. See the NOTICE file distributed 512027Sjungma@eit.uni-kl.de with this work for additional information regarding copyright ownership. 612027Sjungma@eit.uni-kl.de Accellera licenses this file to you under the Apache License, Version 2.0 712027Sjungma@eit.uni-kl.de (the "License"); you may not use this file except in compliance with the 812027Sjungma@eit.uni-kl.de License. You may obtain a copy of the License at 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.de http://www.apache.org/licenses/LICENSE-2.0 1112027Sjungma@eit.uni-kl.de 1212027Sjungma@eit.uni-kl.de Unless required by applicable law or agreed to in writing, software 1312027Sjungma@eit.uni-kl.de distributed under the License is distributed on an "AS IS" BASIS, 1412027Sjungma@eit.uni-kl.de WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512027Sjungma@eit.uni-kl.de implied. See the License for the specific language governing 1612027Sjungma@eit.uni-kl.de permissions and limitations under the License. 1712027Sjungma@eit.uni-kl.de 1812027Sjungma@eit.uni-kl.de *****************************************************************************/ 1912027Sjungma@eit.uni-kl.de 2012027Sjungma@eit.uni-kl.de/***************************************************************************** 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.de sc_fxval.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_fxval.h,v $ 3912027Sjungma@eit.uni-kl.de// Revision 1.3 2011/01/19 18:57:40 acg 4012027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for IEEE_1666_2011. 4112027Sjungma@eit.uni-kl.de// 4212027Sjungma@eit.uni-kl.de// Revision 1.2 2010/12/07 20:09:08 acg 4312027Sjungma@eit.uni-kl.de// Andy Goodrich: Philipp Hartmann's constructor disambiguation fix 4412027Sjungma@eit.uni-kl.de// 4512027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:04 acg 4612027Sjungma@eit.uni-kl.de// SystemC 2.3 4712027Sjungma@eit.uni-kl.de// 4812027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:53:58 acg 4912027Sjungma@eit.uni-kl.de// Andy Goodrich: added $Log command so that CVS comments are reproduced in 5012027Sjungma@eit.uni-kl.de// the source. 5112027Sjungma@eit.uni-kl.de// 5212027Sjungma@eit.uni-kl.de 5312027Sjungma@eit.uni-kl.de#ifndef SC_FXVAL_H 5412027Sjungma@eit.uni-kl.de#define SC_FXVAL_H 5512027Sjungma@eit.uni-kl.de 5612027Sjungma@eit.uni-kl.de 5712027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/scfx_rep.h" 5812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 5912027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_int_base.h" 6012027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_uint_base.h" 6112027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_signed.h" 6212027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_unsigned.h" 6312027Sjungma@eit.uni-kl.de#endif 6412027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/sc_fxval_observer.h" 6512027Sjungma@eit.uni-kl.de 6612027Sjungma@eit.uni-kl.de#ifdef SC_FXVAL_IMPLICIT_CONV 6712027Sjungma@eit.uni-kl.de# define SCFX_EXPLICIT_ // nothing 6812027Sjungma@eit.uni-kl.de#else 6912027Sjungma@eit.uni-kl.de# define SCFX_EXPLICIT_ explicit 7012027Sjungma@eit.uni-kl.de#endif 7112027Sjungma@eit.uni-kl.de#ifdef SC_FXVAL_IMPLICIT_OTHER 7212027Sjungma@eit.uni-kl.de# define SCFX_EXPLICIT_OTHER_ 7312027Sjungma@eit.uni-kl.de#else 7412027Sjungma@eit.uni-kl.de# define SCFX_EXPLICIT_OTHER_ explicit 7512027Sjungma@eit.uni-kl.de#endif 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_fxval; 8212027Sjungma@eit.uni-kl.declass sc_fxval_fast; 8312027Sjungma@eit.uni-kl.de 8412027Sjungma@eit.uni-kl.de// forward class declarations 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_fxval 9112027Sjungma@eit.uni-kl.de// 9212027Sjungma@eit.uni-kl.de// Fixed-point value type; arbitrary precision. 9312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 9412027Sjungma@eit.uni-kl.de 9512027Sjungma@eit.uni-kl.declass sc_fxval 9612027Sjungma@eit.uni-kl.de{ 9712027Sjungma@eit.uni-kl.de 9812027Sjungma@eit.uni-kl.de friend class sc_fxnum; 9912027Sjungma@eit.uni-kl.de 10012027Sjungma@eit.uni-kl.deprotected: 10112027Sjungma@eit.uni-kl.de 10212027Sjungma@eit.uni-kl.de sc_fxval_observer* observer() const; 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.depublic: 10512027Sjungma@eit.uni-kl.de 10612027Sjungma@eit.uni-kl.de // internal use only; 10712027Sjungma@eit.uni-kl.de explicit sc_fxval( scfx_rep* ); 10812027Sjungma@eit.uni-kl.de 10912027Sjungma@eit.uni-kl.de 11012027Sjungma@eit.uni-kl.de explicit sc_fxval( sc_fxval_observer* = 0 ); 11112027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval( int, sc_fxval_observer* = 0 ); 11212027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval( unsigned int, sc_fxval_observer* = 0 ); 11312027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval( long, sc_fxval_observer* = 0 ); 11412027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval( unsigned long, sc_fxval_observer* = 0 ); 11512027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval( float, sc_fxval_observer* = 0 ); 11612027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval( double, sc_fxval_observer* = 0 ); 11712027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval( const char*, sc_fxval_observer* = 0 ); 11812027Sjungma@eit.uni-kl.de sc_fxval( const sc_fxval&, sc_fxval_observer* = 0 ); 11912027Sjungma@eit.uni-kl.de sc_fxval( const sc_fxval_fast&, sc_fxval_observer* = 0 ); 12012027Sjungma@eit.uni-kl.de sc_fxval( const sc_fxnum&, sc_fxval_observer* = 0 ); 12112027Sjungma@eit.uni-kl.de sc_fxval( const sc_fxnum_fast&, sc_fxval_observer* = 0 ); 12212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 12312027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval( int64, sc_fxval_observer* = 0 ); 12412027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval( uint64, sc_fxval_observer* = 0 ); 12512027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval( const sc_int_base&, sc_fxval_observer* = 0 ); 12612027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval( const sc_uint_base&, sc_fxval_observer* = 0 ); 12712027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval( const sc_signed&, sc_fxval_observer* = 0 ); 12812027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval( const sc_unsigned&, sc_fxval_observer* = 0 ); 12912027Sjungma@eit.uni-kl.de#endif 13012027Sjungma@eit.uni-kl.de 13112027Sjungma@eit.uni-kl.de ~sc_fxval(); 13212027Sjungma@eit.uni-kl.de 13312027Sjungma@eit.uni-kl.de 13412027Sjungma@eit.uni-kl.de // internal use only; 13512027Sjungma@eit.uni-kl.de const scfx_rep* get_rep() const; 13612027Sjungma@eit.uni-kl.de void set_rep( scfx_rep* ); 13712027Sjungma@eit.uni-kl.de 13812027Sjungma@eit.uni-kl.de 13912027Sjungma@eit.uni-kl.de // unary operators 14012027Sjungma@eit.uni-kl.de 14112027Sjungma@eit.uni-kl.de const sc_fxval operator - () const; 14212027Sjungma@eit.uni-kl.de const sc_fxval& operator + () const; 14312027Sjungma@eit.uni-kl.de 14412027Sjungma@eit.uni-kl.de 14512027Sjungma@eit.uni-kl.de // unary functions 14612027Sjungma@eit.uni-kl.de 14712027Sjungma@eit.uni-kl.de friend void neg( sc_fxval&, const sc_fxval& ); 14812027Sjungma@eit.uni-kl.de 14912027Sjungma@eit.uni-kl.de 15012027Sjungma@eit.uni-kl.de // binary operators 15112027Sjungma@eit.uni-kl.de 15212027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_T(op,tp) \ 15312027Sjungma@eit.uni-kl.de friend const sc_fxval operator op ( const sc_fxval&, tp ); \ 15412027Sjungma@eit.uni-kl.de friend const sc_fxval operator op ( tp, const sc_fxval& ); 15512027Sjungma@eit.uni-kl.de 15612027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 15712027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_OTHER(op) \ 15812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,int64) \ 15912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,uint64) \ 16012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_int_base&) \ 16112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_uint_base&) \ 16212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_signed&) \ 16312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_unsigned&) 16412027Sjungma@eit.uni-kl.de#else 16512027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_OTHER(op) 16612027Sjungma@eit.uni-kl.de#endif 16712027Sjungma@eit.uni-kl.de 16812027Sjungma@eit.uni-kl.de#define DECL_BIN_OP(op,dummy) \ 16912027Sjungma@eit.uni-kl.de friend const sc_fxval operator op ( const sc_fxval&, const sc_fxval& ); \ 17012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,int) \ 17112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,unsigned int) \ 17212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,long) \ 17312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,unsigned long) \ 17412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,float) \ 17512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,double) \ 17612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const char*) \ 17712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_fxval_fast&) \ 17812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_fxnum_fast&) \ 17912027Sjungma@eit.uni-kl.de DECL_BIN_OP_OTHER(op) 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de DECL_BIN_OP(*,mult) 18212027Sjungma@eit.uni-kl.de DECL_BIN_OP(+,add) 18312027Sjungma@eit.uni-kl.de DECL_BIN_OP(-,sub) 18412027Sjungma@eit.uni-kl.de// declaration below doesn't compile with BCB5 (E2206) 18512027Sjungma@eit.uni-kl.de// DECL_BIN_OP(/,div) 18612027Sjungma@eit.uni-kl.de// previous macro expanded 18712027Sjungma@eit.uni-kl.de friend const sc_fxval operator / ( const sc_fxval&, const sc_fxval& ); 18812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,int) 18912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,unsigned int) 19012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,long) 19112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,unsigned long) 19212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,float) 19312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,double) 19412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const char*) 19512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_fxval_fast&) 19612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_fxnum_fast&) 19712027Sjungma@eit.uni-kl.de// DECL_BIN_OP_OTHER(/) 19812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 19912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,int64) \ 20012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,uint64) \ 20112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_int_base&) \ 20212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_uint_base&) \ 20312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_signed&) \ 20412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_unsigned&) 20512027Sjungma@eit.uni-kl.de#endif 20612027Sjungma@eit.uni-kl.de 20712027Sjungma@eit.uni-kl.de 20812027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP_T 20912027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP_OTHER 21012027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP 21112027Sjungma@eit.uni-kl.de 21212027Sjungma@eit.uni-kl.de friend const sc_fxval operator << ( const sc_fxval&, int ); 21312027Sjungma@eit.uni-kl.de friend const sc_fxval operator >> ( const sc_fxval&, int ); 21412027Sjungma@eit.uni-kl.de 21512027Sjungma@eit.uni-kl.de 21612027Sjungma@eit.uni-kl.de // binary functions 21712027Sjungma@eit.uni-kl.de 21812027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_T(fnc,tp) \ 21912027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval&, const sc_fxval&, tp ); \ 22012027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval&, tp, const sc_fxval& ); 22112027Sjungma@eit.uni-kl.de 22212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 22312027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_OTHER(fnc) \ 22412027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,int64) \ 22512027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,uint64) \ 22612027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_int_base&) \ 22712027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_uint_base&) \ 22812027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_signed&) \ 22912027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_unsigned&) 23012027Sjungma@eit.uni-kl.de#else 23112027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_OTHER(fnc) 23212027Sjungma@eit.uni-kl.de#endif 23312027Sjungma@eit.uni-kl.de 23412027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC(fnc) \ 23512027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval&, const sc_fxval&, const sc_fxval& ); \ 23612027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,int) \ 23712027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,unsigned int) \ 23812027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,long) \ 23912027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,unsigned long) \ 24012027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,float) \ 24112027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,double) \ 24212027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const char*) \ 24312027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxval_fast&) \ 24412027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxnum_fast&) \ 24512027Sjungma@eit.uni-kl.de DECL_BIN_FNC_OTHER(fnc) 24612027Sjungma@eit.uni-kl.de 24712027Sjungma@eit.uni-kl.de DECL_BIN_FNC(mult) 24812027Sjungma@eit.uni-kl.de DECL_BIN_FNC(div) 24912027Sjungma@eit.uni-kl.de DECL_BIN_FNC(add) 25012027Sjungma@eit.uni-kl.de DECL_BIN_FNC(sub) 25112027Sjungma@eit.uni-kl.de 25212027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC_T 25312027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC_OTHER 25412027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC 25512027Sjungma@eit.uni-kl.de 25612027Sjungma@eit.uni-kl.de friend void lshift( sc_fxval&, const sc_fxval&, int ); 25712027Sjungma@eit.uni-kl.de friend void rshift( sc_fxval&, const sc_fxval&, int ); 25812027Sjungma@eit.uni-kl.de 25912027Sjungma@eit.uni-kl.de 26012027Sjungma@eit.uni-kl.de // relational (including equality) operators 26112027Sjungma@eit.uni-kl.de 26212027Sjungma@eit.uni-kl.de#define DECL_REL_OP_T(op,tp) \ 26312027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxval&, tp ); \ 26412027Sjungma@eit.uni-kl.de friend bool operator op ( tp, const sc_fxval& ); 26512027Sjungma@eit.uni-kl.de 26612027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 26712027Sjungma@eit.uni-kl.de#define DECL_REL_OP_OTHER(op) \ 26812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int64) \ 26912027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,uint64) \ 27012027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_int_base&) \ 27112027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_uint_base&) \ 27212027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_signed&) \ 27312027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_unsigned&) 27412027Sjungma@eit.uni-kl.de#else 27512027Sjungma@eit.uni-kl.de#define DECL_REL_OP_OTHER(op) 27612027Sjungma@eit.uni-kl.de#endif 27712027Sjungma@eit.uni-kl.de 27812027Sjungma@eit.uni-kl.de#define DECL_REL_OP(op) \ 27912027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxval&, const sc_fxval& ); \ 28012027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int) \ 28112027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned int) \ 28212027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,long) \ 28312027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned long) \ 28412027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,float) \ 28512027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,double) \ 28612027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const char*) \ 28712027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_fxval_fast&) \ 28812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_fxnum_fast&) \ 28912027Sjungma@eit.uni-kl.de DECL_REL_OP_OTHER(op) 29012027Sjungma@eit.uni-kl.de 29112027Sjungma@eit.uni-kl.de DECL_REL_OP(<) 29212027Sjungma@eit.uni-kl.de DECL_REL_OP(<=) 29312027Sjungma@eit.uni-kl.de DECL_REL_OP(>) 29412027Sjungma@eit.uni-kl.de DECL_REL_OP(>=) 29512027Sjungma@eit.uni-kl.de DECL_REL_OP(==) 29612027Sjungma@eit.uni-kl.de DECL_REL_OP(!=) 29712027Sjungma@eit.uni-kl.de 29812027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_T 29912027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_OTHER 30012027Sjungma@eit.uni-kl.de#undef DECL_REL_OP 30112027Sjungma@eit.uni-kl.de 30212027Sjungma@eit.uni-kl.de 30312027Sjungma@eit.uni-kl.de // assignment operators 30412027Sjungma@eit.uni-kl.de 30512027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(op,tp) \ 30612027Sjungma@eit.uni-kl.de sc_fxval& operator op( tp ); 30712027Sjungma@eit.uni-kl.de 30812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 30912027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op) \ 31012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,int64) \ 31112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,uint64) \ 31212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_int_base&) \ 31312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_uint_base&) \ 31412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_signed&) \ 31512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_unsigned&) 31612027Sjungma@eit.uni-kl.de#else 31712027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op) 31812027Sjungma@eit.uni-kl.de#endif 31912027Sjungma@eit.uni-kl.de 32012027Sjungma@eit.uni-kl.de#define DECL_ASN_OP(op) \ 32112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,int) \ 32212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,unsigned int) \ 32312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,long) \ 32412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,unsigned long) \ 32512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,float) \ 32612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,double) \ 32712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const char*) \ 32812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxval&) \ 32912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxval_fast&) \ 33012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum&) \ 33112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ 33212027Sjungma@eit.uni-kl.de DECL_ASN_OP_OTHER(op) 33312027Sjungma@eit.uni-kl.de 33412027Sjungma@eit.uni-kl.de DECL_ASN_OP(=) 33512027Sjungma@eit.uni-kl.de 33612027Sjungma@eit.uni-kl.de DECL_ASN_OP(*=) 33712027Sjungma@eit.uni-kl.de DECL_ASN_OP(/=) 33812027Sjungma@eit.uni-kl.de DECL_ASN_OP(+=) 33912027Sjungma@eit.uni-kl.de DECL_ASN_OP(-=) 34012027Sjungma@eit.uni-kl.de 34112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(<<=,int) 34212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(>>=,int) 34312027Sjungma@eit.uni-kl.de 34412027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T 34512027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_OTHER 34612027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP 34712027Sjungma@eit.uni-kl.de 34812027Sjungma@eit.uni-kl.de 34912027Sjungma@eit.uni-kl.de // auto-increment and auto-decrement 35012027Sjungma@eit.uni-kl.de 35112027Sjungma@eit.uni-kl.de const sc_fxval operator ++ ( int ); 35212027Sjungma@eit.uni-kl.de const sc_fxval operator -- ( int ); 35312027Sjungma@eit.uni-kl.de 35412027Sjungma@eit.uni-kl.de sc_fxval& operator ++ (); 35512027Sjungma@eit.uni-kl.de sc_fxval& operator -- (); 35612027Sjungma@eit.uni-kl.de 35712027Sjungma@eit.uni-kl.de 35812027Sjungma@eit.uni-kl.de // implicit conversion 35912027Sjungma@eit.uni-kl.de 36012027Sjungma@eit.uni-kl.de operator double() const; // necessary evil! 36112027Sjungma@eit.uni-kl.de 36212027Sjungma@eit.uni-kl.de 36312027Sjungma@eit.uni-kl.de // explicit conversion to primitive types 36412027Sjungma@eit.uni-kl.de 36512027Sjungma@eit.uni-kl.de short to_short() const; 36612027Sjungma@eit.uni-kl.de unsigned short to_ushort() const; 36712027Sjungma@eit.uni-kl.de int to_int() const; 36812027Sjungma@eit.uni-kl.de unsigned int to_uint() const; 36912027Sjungma@eit.uni-kl.de long to_long() const; 37012027Sjungma@eit.uni-kl.de unsigned long to_ulong() const; 37112027Sjungma@eit.uni-kl.de int64 to_int64() const; 37212027Sjungma@eit.uni-kl.de uint64 to_uint64() const; 37312027Sjungma@eit.uni-kl.de float to_float() const; 37412027Sjungma@eit.uni-kl.de double to_double() const; 37512027Sjungma@eit.uni-kl.de 37612027Sjungma@eit.uni-kl.de 37712027Sjungma@eit.uni-kl.de // explicit conversion to character string 37812027Sjungma@eit.uni-kl.de 37912027Sjungma@eit.uni-kl.de const std::string to_string() const; 38012027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep ) const; 38112027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool ) const; 38212027Sjungma@eit.uni-kl.de const std::string to_string( sc_fmt ) const; 38312027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, sc_fmt ) const; 38412027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool, sc_fmt ) const; 38512027Sjungma@eit.uni-kl.de 38612027Sjungma@eit.uni-kl.de const std::string to_dec() const; 38712027Sjungma@eit.uni-kl.de const std::string to_bin() const; 38812027Sjungma@eit.uni-kl.de const std::string to_oct() const; 38912027Sjungma@eit.uni-kl.de const std::string to_hex() const; 39012027Sjungma@eit.uni-kl.de 39112027Sjungma@eit.uni-kl.de 39212027Sjungma@eit.uni-kl.de // query value 39312027Sjungma@eit.uni-kl.de 39412027Sjungma@eit.uni-kl.de bool is_neg() const; 39512027Sjungma@eit.uni-kl.de bool is_zero() const; 39612027Sjungma@eit.uni-kl.de bool is_nan() const; 39712027Sjungma@eit.uni-kl.de bool is_inf() const; 39812027Sjungma@eit.uni-kl.de bool is_normal() const; 39912027Sjungma@eit.uni-kl.de 40012027Sjungma@eit.uni-kl.de bool rounding_flag() const; 40112027Sjungma@eit.uni-kl.de 40212027Sjungma@eit.uni-kl.de 40312027Sjungma@eit.uni-kl.de // print or dump content 40412027Sjungma@eit.uni-kl.de 40512027Sjungma@eit.uni-kl.de void print( ::std::ostream& = ::std::cout ) const; 40612027Sjungma@eit.uni-kl.de void scan( ::std::istream& = ::std::cin ); 40712027Sjungma@eit.uni-kl.de void dump( ::std::ostream& = ::std::cout ) const; 40812027Sjungma@eit.uni-kl.de 40912027Sjungma@eit.uni-kl.de 41012027Sjungma@eit.uni-kl.de // internal use only; 41112027Sjungma@eit.uni-kl.de bool get_bit( int ) const; 41212027Sjungma@eit.uni-kl.de 41312027Sjungma@eit.uni-kl.deprotected: 41412027Sjungma@eit.uni-kl.de 41512027Sjungma@eit.uni-kl.de sc_fxval_observer* lock_observer() const; 41612027Sjungma@eit.uni-kl.de void unlock_observer( sc_fxval_observer* ) const; 41712027Sjungma@eit.uni-kl.de 41812027Sjungma@eit.uni-kl.de 41912027Sjungma@eit.uni-kl.de void get_type( int&, int&, sc_enc& ) const; 42012027Sjungma@eit.uni-kl.de 42112027Sjungma@eit.uni-kl.de const sc_fxval quantization( const scfx_params&, bool& ) const; 42212027Sjungma@eit.uni-kl.de const sc_fxval overflow( const scfx_params&, bool& ) const; 42312027Sjungma@eit.uni-kl.de 42412027Sjungma@eit.uni-kl.deprivate: 42512027Sjungma@eit.uni-kl.de 42612027Sjungma@eit.uni-kl.de scfx_rep* m_rep; 42712027Sjungma@eit.uni-kl.de 42812027Sjungma@eit.uni-kl.de mutable sc_fxval_observer* m_observer; 42912027Sjungma@eit.uni-kl.de 43012027Sjungma@eit.uni-kl.de}; 43112027Sjungma@eit.uni-kl.de 43212027Sjungma@eit.uni-kl.de 43312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 43412027Sjungma@eit.uni-kl.de// CLASS : sc_fxval_fast 43512027Sjungma@eit.uni-kl.de// 43612027Sjungma@eit.uni-kl.de// Fixed-point value type; limited precision. 43712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 43812027Sjungma@eit.uni-kl.de 43912027Sjungma@eit.uni-kl.declass sc_fxval_fast 44012027Sjungma@eit.uni-kl.de{ 44112027Sjungma@eit.uni-kl.de 44212027Sjungma@eit.uni-kl.de friend class sc_fxnum_fast; 44312027Sjungma@eit.uni-kl.de 44412027Sjungma@eit.uni-kl.deprotected: 44512027Sjungma@eit.uni-kl.de 44612027Sjungma@eit.uni-kl.de sc_fxval_fast_observer* observer() const; 44712027Sjungma@eit.uni-kl.de 44812027Sjungma@eit.uni-kl.depublic: 44912027Sjungma@eit.uni-kl.de 45012027Sjungma@eit.uni-kl.de explicit sc_fxval_fast( sc_fxval_fast_observer* = 0 ); 45112027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval_fast( int, sc_fxval_fast_observer* = 0 ); 45212027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval_fast( unsigned int, sc_fxval_fast_observer* = 0 ); 45312027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval_fast( long, sc_fxval_fast_observer* = 0 ); 45412027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval_fast( unsigned long, sc_fxval_fast_observer* = 0 ); 45512027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval_fast( float, sc_fxval_fast_observer* = 0 ); 45612027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval_fast( double, sc_fxval_fast_observer* = 0 ); 45712027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_ sc_fxval_fast( const char*, sc_fxval_fast_observer* = 0 ); 45812027Sjungma@eit.uni-kl.de sc_fxval_fast( const sc_fxval&, sc_fxval_fast_observer* = 0 ); 45912027Sjungma@eit.uni-kl.de sc_fxval_fast( const sc_fxval_fast&, sc_fxval_fast_observer* = 0 ); 46012027Sjungma@eit.uni-kl.de sc_fxval_fast( const sc_fxnum&, sc_fxval_fast_observer* = 0 ); 46112027Sjungma@eit.uni-kl.de sc_fxval_fast( const sc_fxnum_fast&, sc_fxval_fast_observer* = 0 ); 46212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 46312027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval_fast( int64, sc_fxval_fast_observer* = 0 ); 46412027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval_fast( uint64, sc_fxval_fast_observer* = 0 ); 46512027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval_fast( const sc_int_base&, sc_fxval_fast_observer* = 0 ); 46612027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval_fast( const sc_uint_base&, sc_fxval_fast_observer* = 0 ); 46712027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval_fast( const sc_signed&, sc_fxval_fast_observer* = 0 ); 46812027Sjungma@eit.uni-kl.de SCFX_EXPLICIT_OTHER_ sc_fxval_fast( const sc_unsigned&, sc_fxval_fast_observer* = 0 ); 46912027Sjungma@eit.uni-kl.de#endif 47012027Sjungma@eit.uni-kl.de 47112027Sjungma@eit.uni-kl.de ~sc_fxval_fast(); 47212027Sjungma@eit.uni-kl.de 47312027Sjungma@eit.uni-kl.de // internal use only; 47412027Sjungma@eit.uni-kl.de double get_val() const; 47512027Sjungma@eit.uni-kl.de void set_val( double ); 47612027Sjungma@eit.uni-kl.de 47712027Sjungma@eit.uni-kl.de 47812027Sjungma@eit.uni-kl.de // unary operators 47912027Sjungma@eit.uni-kl.de 48012027Sjungma@eit.uni-kl.de const sc_fxval_fast operator - () const; 48112027Sjungma@eit.uni-kl.de const sc_fxval_fast& operator + () const; 48212027Sjungma@eit.uni-kl.de 48312027Sjungma@eit.uni-kl.de 48412027Sjungma@eit.uni-kl.de // unary functions 48512027Sjungma@eit.uni-kl.de 48612027Sjungma@eit.uni-kl.de friend void neg( sc_fxval_fast&, const sc_fxval_fast& ); 48712027Sjungma@eit.uni-kl.de 48812027Sjungma@eit.uni-kl.de 48912027Sjungma@eit.uni-kl.de // binary operators 49012027Sjungma@eit.uni-kl.de 49112027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_T(op,tp) \ 49212027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator op ( const sc_fxval_fast&, tp ); \ 49312027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator op ( tp, const sc_fxval_fast& ); 49412027Sjungma@eit.uni-kl.de 49512027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 49612027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_OTHER(op) \ 49712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,int64) \ 49812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,uint64) \ 49912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_int_base&) \ 50012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_uint_base&) \ 50112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_signed&) \ 50212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const sc_unsigned&) 50312027Sjungma@eit.uni-kl.de#else 50412027Sjungma@eit.uni-kl.de#define DECL_BIN_OP_OTHER(op) 50512027Sjungma@eit.uni-kl.de#endif 50612027Sjungma@eit.uni-kl.de 50712027Sjungma@eit.uni-kl.de#define DECL_BIN_OP(op,dummy) \ 50812027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator op ( const sc_fxval_fast&, \ 50912027Sjungma@eit.uni-kl.de const sc_fxval_fast& ); \ 51012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,int) \ 51112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,unsigned int) \ 51212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,long) \ 51312027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,unsigned long) \ 51412027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,float) \ 51512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,double) \ 51612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(op,const char*) \ 51712027Sjungma@eit.uni-kl.de DECL_BIN_OP_OTHER(op) 51812027Sjungma@eit.uni-kl.de 51912027Sjungma@eit.uni-kl.de DECL_BIN_OP(*,mult) 52012027Sjungma@eit.uni-kl.de DECL_BIN_OP(+,add) 52112027Sjungma@eit.uni-kl.de DECL_BIN_OP(-,sub) 52212027Sjungma@eit.uni-kl.de// don't use macro 52312027Sjungma@eit.uni-kl.de// DECL_BIN_OP(/,div) 52412027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator / ( const sc_fxval_fast&, 52512027Sjungma@eit.uni-kl.de const sc_fxval_fast& ); 52612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,int) 52712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,unsigned int) 52812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,long) 52912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,unsigned long) 53012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,float) 53112027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,double) 53212027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const char*) 53312027Sjungma@eit.uni-kl.de// DECL_BIN_OP_OTHER(/) 53412027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 53512027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,int64) \ 53612027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,uint64) \ 53712027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_int_base&) \ 53812027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_uint_base&) \ 53912027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_signed&) \ 54012027Sjungma@eit.uni-kl.de DECL_BIN_OP_T(/,const sc_unsigned&) 54112027Sjungma@eit.uni-kl.de#endif 54212027Sjungma@eit.uni-kl.de 54312027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP_T 54412027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP_OTHER 54512027Sjungma@eit.uni-kl.de#undef DECL_BIN_OP 54612027Sjungma@eit.uni-kl.de 54712027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator << ( const sc_fxval_fast&, int ); 54812027Sjungma@eit.uni-kl.de friend const sc_fxval_fast operator >> ( const sc_fxval_fast&, int ); 54912027Sjungma@eit.uni-kl.de 55012027Sjungma@eit.uni-kl.de 55112027Sjungma@eit.uni-kl.de // binary functions 55212027Sjungma@eit.uni-kl.de 55312027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_T(fnc,tp) \ 55412027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval_fast&, const sc_fxval_fast&, tp ); \ 55512027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval_fast&, tp, const sc_fxval_fast& ); 55612027Sjungma@eit.uni-kl.de 55712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 55812027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_OTHER(fnc) \ 55912027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,int64) \ 56012027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,uint64) \ 56112027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_int_base&) \ 56212027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_uint_base&) \ 56312027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_signed&) \ 56412027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_unsigned&) 56512027Sjungma@eit.uni-kl.de#else 56612027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC_OTHER(fnc) 56712027Sjungma@eit.uni-kl.de#endif 56812027Sjungma@eit.uni-kl.de 56912027Sjungma@eit.uni-kl.de#define DECL_BIN_FNC(fnc) \ 57012027Sjungma@eit.uni-kl.de friend void fnc ( sc_fxval_fast&, const sc_fxval_fast&, \ 57112027Sjungma@eit.uni-kl.de const sc_fxval_fast& ); \ 57212027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,int) \ 57312027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,unsigned int) \ 57412027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,long) \ 57512027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,unsigned long) \ 57612027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,float) \ 57712027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,double) \ 57812027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const char*) \ 57912027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxval&) \ 58012027Sjungma@eit.uni-kl.de DECL_BIN_FNC_T(fnc,const sc_fxnum&) \ 58112027Sjungma@eit.uni-kl.de DECL_BIN_FNC_OTHER(fnc) 58212027Sjungma@eit.uni-kl.de 58312027Sjungma@eit.uni-kl.de DECL_BIN_FNC(mult) 58412027Sjungma@eit.uni-kl.de DECL_BIN_FNC(div) 58512027Sjungma@eit.uni-kl.de DECL_BIN_FNC(add) 58612027Sjungma@eit.uni-kl.de DECL_BIN_FNC(sub) 58712027Sjungma@eit.uni-kl.de 58812027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC_T 58912027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC_OTHER 59012027Sjungma@eit.uni-kl.de#undef DECL_BIN_FNC 59112027Sjungma@eit.uni-kl.de 59212027Sjungma@eit.uni-kl.de friend void lshift( sc_fxval_fast&, const sc_fxval_fast&, int ); 59312027Sjungma@eit.uni-kl.de friend void rshift( sc_fxval_fast&, const sc_fxval_fast&, int ); 59412027Sjungma@eit.uni-kl.de 59512027Sjungma@eit.uni-kl.de 59612027Sjungma@eit.uni-kl.de // relational (including equality) operators 59712027Sjungma@eit.uni-kl.de 59812027Sjungma@eit.uni-kl.de#define DECL_REL_OP_T(op,tp) \ 59912027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxval_fast&, tp ); \ 60012027Sjungma@eit.uni-kl.de friend bool operator op ( tp, const sc_fxval_fast& ); 60112027Sjungma@eit.uni-kl.de 60212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 60312027Sjungma@eit.uni-kl.de#define DECL_REL_OP_OTHER(op) \ 60412027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int64) \ 60512027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,uint64) \ 60612027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_int_base&) \ 60712027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_uint_base&) \ 60812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_signed&) \ 60912027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const sc_unsigned&) 61012027Sjungma@eit.uni-kl.de#else 61112027Sjungma@eit.uni-kl.de#define DECL_REL_OP_OTHER(op) 61212027Sjungma@eit.uni-kl.de#endif 61312027Sjungma@eit.uni-kl.de 61412027Sjungma@eit.uni-kl.de#define DECL_REL_OP(op) \ 61512027Sjungma@eit.uni-kl.de friend bool operator op ( const sc_fxval_fast&, const sc_fxval_fast& ); \ 61612027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,int) \ 61712027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned int) \ 61812027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,long) \ 61912027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,unsigned long) \ 62012027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,float) \ 62112027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,double) \ 62212027Sjungma@eit.uni-kl.de DECL_REL_OP_T(op,const char*) \ 62312027Sjungma@eit.uni-kl.de DECL_REL_OP_OTHER(op) 62412027Sjungma@eit.uni-kl.de 62512027Sjungma@eit.uni-kl.de DECL_REL_OP(<) 62612027Sjungma@eit.uni-kl.de DECL_REL_OP(<=) 62712027Sjungma@eit.uni-kl.de DECL_REL_OP(>) 62812027Sjungma@eit.uni-kl.de DECL_REL_OP(>=) 62912027Sjungma@eit.uni-kl.de DECL_REL_OP(==) 63012027Sjungma@eit.uni-kl.de DECL_REL_OP(!=) 63112027Sjungma@eit.uni-kl.de 63212027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_T 63312027Sjungma@eit.uni-kl.de#undef DECL_REL_OP_OTHER 63412027Sjungma@eit.uni-kl.de#undef DECL_REL_OP 63512027Sjungma@eit.uni-kl.de 63612027Sjungma@eit.uni-kl.de 63712027Sjungma@eit.uni-kl.de // assignment operators 63812027Sjungma@eit.uni-kl.de 63912027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(op,tp) \ 64012027Sjungma@eit.uni-kl.de sc_fxval_fast& operator op( tp ); 64112027Sjungma@eit.uni-kl.de 64212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 64312027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op) \ 64412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,int64) \ 64512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,uint64) \ 64612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_int_base&) \ 64712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_uint_base&) \ 64812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_signed&) \ 64912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_unsigned&) 65012027Sjungma@eit.uni-kl.de#else 65112027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op) 65212027Sjungma@eit.uni-kl.de#endif 65312027Sjungma@eit.uni-kl.de 65412027Sjungma@eit.uni-kl.de#define DECL_ASN_OP(op) \ 65512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,int) \ 65612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,unsigned int) \ 65712027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,long) \ 65812027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,unsigned long) \ 65912027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,float) \ 66012027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,double) \ 66112027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const char*) \ 66212027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxval&) \ 66312027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxval_fast&) \ 66412027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum&) \ 66512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ 66612027Sjungma@eit.uni-kl.de DECL_ASN_OP_OTHER(op) 66712027Sjungma@eit.uni-kl.de 66812027Sjungma@eit.uni-kl.de DECL_ASN_OP(=) 66912027Sjungma@eit.uni-kl.de 67012027Sjungma@eit.uni-kl.de DECL_ASN_OP(*=) 67112027Sjungma@eit.uni-kl.de DECL_ASN_OP(/=) 67212027Sjungma@eit.uni-kl.de DECL_ASN_OP(+=) 67312027Sjungma@eit.uni-kl.de DECL_ASN_OP(-=) 67412027Sjungma@eit.uni-kl.de 67512027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(<<=,int) 67612027Sjungma@eit.uni-kl.de DECL_ASN_OP_T(>>=,int) 67712027Sjungma@eit.uni-kl.de 67812027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T 67912027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_OTHER 68012027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP 68112027Sjungma@eit.uni-kl.de 68212027Sjungma@eit.uni-kl.de 68312027Sjungma@eit.uni-kl.de // auto-increment and auto-decrement 68412027Sjungma@eit.uni-kl.de 68512027Sjungma@eit.uni-kl.de const sc_fxval_fast operator ++ ( int ); 68612027Sjungma@eit.uni-kl.de const sc_fxval_fast operator -- ( int ); 68712027Sjungma@eit.uni-kl.de 68812027Sjungma@eit.uni-kl.de sc_fxval_fast& operator ++ (); 68912027Sjungma@eit.uni-kl.de sc_fxval_fast& operator -- (); 69012027Sjungma@eit.uni-kl.de 69112027Sjungma@eit.uni-kl.de 69212027Sjungma@eit.uni-kl.de // implicit conversion 69312027Sjungma@eit.uni-kl.de 69412027Sjungma@eit.uni-kl.de operator double() const; // necessary evil! 69512027Sjungma@eit.uni-kl.de 69612027Sjungma@eit.uni-kl.de 69712027Sjungma@eit.uni-kl.de // explicit conversion to primitive types 69812027Sjungma@eit.uni-kl.de 69912027Sjungma@eit.uni-kl.de short to_short() const; 70012027Sjungma@eit.uni-kl.de unsigned short to_ushort() const; 70112027Sjungma@eit.uni-kl.de int to_int() const; 70212027Sjungma@eit.uni-kl.de unsigned int to_uint() const; 70312027Sjungma@eit.uni-kl.de long to_long() const; 70412027Sjungma@eit.uni-kl.de unsigned long to_ulong() const; 70512027Sjungma@eit.uni-kl.de int64 to_int64() const; 70612027Sjungma@eit.uni-kl.de uint64 to_uint64() const; 70712027Sjungma@eit.uni-kl.de float to_float() const; 70812027Sjungma@eit.uni-kl.de double to_double() const; 70912027Sjungma@eit.uni-kl.de 71012027Sjungma@eit.uni-kl.de 71112027Sjungma@eit.uni-kl.de // explicit conversion to character string 71212027Sjungma@eit.uni-kl.de 71312027Sjungma@eit.uni-kl.de const std::string to_string() const; 71412027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep ) const; 71512027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool ) const; 71612027Sjungma@eit.uni-kl.de const std::string to_string( sc_fmt ) const; 71712027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, sc_fmt ) const; 71812027Sjungma@eit.uni-kl.de const std::string to_string( sc_numrep, bool, sc_fmt ) const; 71912027Sjungma@eit.uni-kl.de 72012027Sjungma@eit.uni-kl.de const std::string to_dec() const; 72112027Sjungma@eit.uni-kl.de const std::string to_bin() const; 72212027Sjungma@eit.uni-kl.de const std::string to_oct() const; 72312027Sjungma@eit.uni-kl.de const std::string to_hex() const; 72412027Sjungma@eit.uni-kl.de 72512027Sjungma@eit.uni-kl.de 72612027Sjungma@eit.uni-kl.de // query value 72712027Sjungma@eit.uni-kl.de 72812027Sjungma@eit.uni-kl.de bool is_neg() const; 72912027Sjungma@eit.uni-kl.de bool is_zero() const; 73012027Sjungma@eit.uni-kl.de bool is_nan() const; 73112027Sjungma@eit.uni-kl.de bool is_inf() const; 73212027Sjungma@eit.uni-kl.de bool is_normal() const; 73312027Sjungma@eit.uni-kl.de 73412027Sjungma@eit.uni-kl.de bool rounding_flag() const; 73512027Sjungma@eit.uni-kl.de 73612027Sjungma@eit.uni-kl.de 73712027Sjungma@eit.uni-kl.de // print or dump content 73812027Sjungma@eit.uni-kl.de 73912027Sjungma@eit.uni-kl.de void print( ::std::ostream& = ::std::cout ) const; 74012027Sjungma@eit.uni-kl.de void scan( ::std::istream& = ::std::cin ); 74112027Sjungma@eit.uni-kl.de void dump( ::std::ostream& = ::std::cout ) const; 74212027Sjungma@eit.uni-kl.de 74312027Sjungma@eit.uni-kl.de 74412027Sjungma@eit.uni-kl.de // internal use only; 74512027Sjungma@eit.uni-kl.de bool get_bit( int ) const; 74612027Sjungma@eit.uni-kl.de 74712027Sjungma@eit.uni-kl.deprotected: 74812027Sjungma@eit.uni-kl.de 74912027Sjungma@eit.uni-kl.de sc_fxval_fast_observer* lock_observer() const; 75012027Sjungma@eit.uni-kl.de void unlock_observer( sc_fxval_fast_observer* ) const; 75112027Sjungma@eit.uni-kl.de 75212027Sjungma@eit.uni-kl.de 75312027Sjungma@eit.uni-kl.de static double from_string( const char* ); 75412027Sjungma@eit.uni-kl.de 75512027Sjungma@eit.uni-kl.deprivate: 75612027Sjungma@eit.uni-kl.de 75712027Sjungma@eit.uni-kl.de double m_val; 75812027Sjungma@eit.uni-kl.de 75912027Sjungma@eit.uni-kl.de mutable sc_fxval_fast_observer* m_observer; 76012027Sjungma@eit.uni-kl.de 76112027Sjungma@eit.uni-kl.de}; 76212027Sjungma@eit.uni-kl.de 76312027Sjungma@eit.uni-kl.de 76412027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 76512027Sjungma@eit.uni-kl.de 76612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 76712027Sjungma@eit.uni-kl.de// CLASS : sc_fxval 76812027Sjungma@eit.uni-kl.de// 76912027Sjungma@eit.uni-kl.de// Fixed-point value type; arbitrary precision. 77012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 77112027Sjungma@eit.uni-kl.de 77212027Sjungma@eit.uni-kl.de// protected method 77312027Sjungma@eit.uni-kl.de 77412027Sjungma@eit.uni-kl.deinline 77512027Sjungma@eit.uni-kl.desc_fxval_observer* 77612027Sjungma@eit.uni-kl.desc_fxval::observer() const 77712027Sjungma@eit.uni-kl.de{ 77812027Sjungma@eit.uni-kl.de return m_observer; 77912027Sjungma@eit.uni-kl.de} 78012027Sjungma@eit.uni-kl.de 78112027Sjungma@eit.uni-kl.de 78212027Sjungma@eit.uni-kl.de// internal use only; 78312027Sjungma@eit.uni-kl.deinline 78412027Sjungma@eit.uni-kl.desc_fxval::sc_fxval( scfx_rep* a ) 78512027Sjungma@eit.uni-kl.de: m_rep( a != 0 ? a : new scfx_rep ), 78612027Sjungma@eit.uni-kl.de m_observer( 0 ) 78712027Sjungma@eit.uni-kl.de{} 78812027Sjungma@eit.uni-kl.de 78912027Sjungma@eit.uni-kl.de 79012027Sjungma@eit.uni-kl.de// public constructors 79112027Sjungma@eit.uni-kl.de 79212027Sjungma@eit.uni-kl.deinline 79312027Sjungma@eit.uni-kl.desc_fxval::sc_fxval( sc_fxval_observer* observer_ ) 79412027Sjungma@eit.uni-kl.de: m_rep( new scfx_rep ), 79512027Sjungma@eit.uni-kl.de m_observer( observer_ ) 79612027Sjungma@eit.uni-kl.de{ 79712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_DEFAULT_ 79812027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) 79912027Sjungma@eit.uni-kl.de} 80012027Sjungma@eit.uni-kl.de 80112027Sjungma@eit.uni-kl.deinline 80212027Sjungma@eit.uni-kl.desc_fxval::sc_fxval( const sc_fxval& a, 80312027Sjungma@eit.uni-kl.de sc_fxval_observer* observer_ ) 80412027Sjungma@eit.uni-kl.de: m_rep( new scfx_rep( *a.m_rep ) ), 80512027Sjungma@eit.uni-kl.de m_observer( observer_ ) 80612027Sjungma@eit.uni-kl.de{ 80712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_DEFAULT_ 80812027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) 80912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) 81012027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) 81112027Sjungma@eit.uni-kl.de} 81212027Sjungma@eit.uni-kl.de 81312027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T(tp,arg) \ 81412027Sjungma@eit.uni-kl.deinline \ 81512027Sjungma@eit.uni-kl.desc_fxval::sc_fxval( tp a, \ 81612027Sjungma@eit.uni-kl.de sc_fxval_observer* observer_ ) \ 81712027Sjungma@eit.uni-kl.de: m_rep( new scfx_rep( arg ) ), \ 81812027Sjungma@eit.uni-kl.de m_observer( observer_ ) \ 81912027Sjungma@eit.uni-kl.de{ \ 82012027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_DEFAULT_ \ 82112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) \ 82212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) \ 82312027Sjungma@eit.uni-kl.de} 82412027Sjungma@eit.uni-kl.de 82512027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_A(tp) DEFN_CTOR_T(tp,a) 82612027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_B(tp) DEFN_CTOR_T(tp,a.to_double()) 82712027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_C(tp) DEFN_CTOR_T(tp,a.value()) 82812027Sjungma@eit.uni-kl.de 82912027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(int) 83012027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(unsigned int) 83112027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(long) 83212027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(unsigned long) 83312027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(float) 83412027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(double) 83512027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(const char*) 83612027Sjungma@eit.uni-kl.deDEFN_CTOR_T_B(const sc_fxval_fast&) 83712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 83812027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(int64) 83912027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(uint64) 84012027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_int_base&) 84112027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_uint_base&) 84212027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(const sc_signed&) 84312027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(const sc_unsigned&) 84412027Sjungma@eit.uni-kl.de#endif 84512027Sjungma@eit.uni-kl.de 84612027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T 84712027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_A 84812027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_B 84912027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_C 85012027Sjungma@eit.uni-kl.de 85112027Sjungma@eit.uni-kl.de 85212027Sjungma@eit.uni-kl.deinline 85312027Sjungma@eit.uni-kl.desc_fxval::~sc_fxval() 85412027Sjungma@eit.uni-kl.de{ 85512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_DESTRUCT_( *this ) 85612027Sjungma@eit.uni-kl.de delete m_rep; 85712027Sjungma@eit.uni-kl.de} 85812027Sjungma@eit.uni-kl.de 85912027Sjungma@eit.uni-kl.de 86012027Sjungma@eit.uni-kl.de// internal use only; 86112027Sjungma@eit.uni-kl.deinline 86212027Sjungma@eit.uni-kl.deconst scfx_rep* 86312027Sjungma@eit.uni-kl.desc_fxval::get_rep() const 86412027Sjungma@eit.uni-kl.de{ 86512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 86612027Sjungma@eit.uni-kl.de return m_rep; 86712027Sjungma@eit.uni-kl.de} 86812027Sjungma@eit.uni-kl.de 86912027Sjungma@eit.uni-kl.de// internal use only; 87012027Sjungma@eit.uni-kl.deinline 87112027Sjungma@eit.uni-kl.devoid 87212027Sjungma@eit.uni-kl.desc_fxval::set_rep( scfx_rep* rep_ ) 87312027Sjungma@eit.uni-kl.de{ 87412027Sjungma@eit.uni-kl.de delete m_rep; 87512027Sjungma@eit.uni-kl.de m_rep = rep_; 87612027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) 87712027Sjungma@eit.uni-kl.de} 87812027Sjungma@eit.uni-kl.de 87912027Sjungma@eit.uni-kl.de 88012027Sjungma@eit.uni-kl.de// unary operators 88112027Sjungma@eit.uni-kl.de 88212027Sjungma@eit.uni-kl.deinline 88312027Sjungma@eit.uni-kl.deconst sc_fxval 88412027Sjungma@eit.uni-kl.desc_fxval::operator - () const 88512027Sjungma@eit.uni-kl.de{ 88612027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 88712027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::neg_scfx_rep( *m_rep ) ); 88812027Sjungma@eit.uni-kl.de} 88912027Sjungma@eit.uni-kl.de 89012027Sjungma@eit.uni-kl.deinline 89112027Sjungma@eit.uni-kl.deconst sc_fxval& 89212027Sjungma@eit.uni-kl.desc_fxval::operator + () const 89312027Sjungma@eit.uni-kl.de{ 89412027Sjungma@eit.uni-kl.de // SC_FXVAL_OBSERVER_READ_( *this ) 89512027Sjungma@eit.uni-kl.de return *this; 89612027Sjungma@eit.uni-kl.de} 89712027Sjungma@eit.uni-kl.de 89812027Sjungma@eit.uni-kl.de 89912027Sjungma@eit.uni-kl.de// unary functions 90012027Sjungma@eit.uni-kl.de 90112027Sjungma@eit.uni-kl.deinline 90212027Sjungma@eit.uni-kl.devoid 90312027Sjungma@eit.uni-kl.deneg( sc_fxval& c, const sc_fxval& a ) 90412027Sjungma@eit.uni-kl.de{ 90512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) 90612027Sjungma@eit.uni-kl.de delete c.m_rep; 90712027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::neg_scfx_rep( *a.m_rep ); 90812027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( c ) 90912027Sjungma@eit.uni-kl.de} 91012027Sjungma@eit.uni-kl.de 91112027Sjungma@eit.uni-kl.de 91212027Sjungma@eit.uni-kl.de// binary operators 91312027Sjungma@eit.uni-kl.de 91412027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_T(op,fnc,tp) \ 91512027Sjungma@eit.uni-kl.deinline \ 91612027Sjungma@eit.uni-kl.deconst sc_fxval \ 91712027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval& a, tp b ) \ 91812027Sjungma@eit.uni-kl.de{ \ 91912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 92012027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 92112027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.m_rep ) ); \ 92212027Sjungma@eit.uni-kl.de} \ 92312027Sjungma@eit.uni-kl.de \ 92412027Sjungma@eit.uni-kl.deinline \ 92512027Sjungma@eit.uni-kl.deconst sc_fxval \ 92612027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxval& b ) \ 92712027Sjungma@eit.uni-kl.de{ \ 92812027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 92912027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 93012027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *tmp.m_rep, *b.m_rep ) ); \ 93112027Sjungma@eit.uni-kl.de} 93212027Sjungma@eit.uni-kl.de 93312027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 93412027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_OTHER(op,fnc) \ 93512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,int64) \ 93612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,uint64) \ 93712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_int_base&) \ 93812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_uint_base&) \ 93912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_signed&) \ 94012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_unsigned&) 94112027Sjungma@eit.uni-kl.de#else 94212027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_OTHER(op,fnc) 94312027Sjungma@eit.uni-kl.de#endif 94412027Sjungma@eit.uni-kl.de 94512027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP(op,fnc) \ 94612027Sjungma@eit.uni-kl.deinline \ 94712027Sjungma@eit.uni-kl.deconst sc_fxval \ 94812027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval& a, const sc_fxval& b ) \ 94912027Sjungma@eit.uni-kl.de{ \ 95012027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 95112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 95212027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ) ); \ 95312027Sjungma@eit.uni-kl.de} \ 95412027Sjungma@eit.uni-kl.de \ 95512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,int) \ 95612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,unsigned int) \ 95712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,long) \ 95812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,unsigned long) \ 95912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,float) \ 96012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,double) \ 96112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const char*) \ 96212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,fnc,const sc_fxval_fast&) \ 96312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_OTHER(op,fnc) 96412027Sjungma@eit.uni-kl.de 96512027Sjungma@eit.uni-kl.deDEFN_BIN_OP(*,mult) 96612027Sjungma@eit.uni-kl.deDEFN_BIN_OP(+,add) 96712027Sjungma@eit.uni-kl.deDEFN_BIN_OP(-,sub) 96812027Sjungma@eit.uni-kl.de// don't use macro 96912027Sjungma@eit.uni-kl.de//DEFN_BIN_OP(/,div) 97012027Sjungma@eit.uni-kl.deinline 97112027Sjungma@eit.uni-kl.deconst sc_fxval 97212027Sjungma@eit.uni-kl.deoperator / ( const sc_fxval& a, const sc_fxval& b ) 97312027Sjungma@eit.uni-kl.de{ 97412027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) 97512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) 97612027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::div_scfx_rep( *a.m_rep, *b.m_rep ) ); 97712027Sjungma@eit.uni-kl.de} 97812027Sjungma@eit.uni-kl.de 97912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,int) 98012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,unsigned int) 98112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,long) 98212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,unsigned long) 98312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,float) 98412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,double) 98512027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const char*) 98612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_fxval_fast&) 98712027Sjungma@eit.uni-kl.de//DEFN_BIN_OP_OTHER(/,div) 98812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 98912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,int64) \ 99012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,uint64) \ 99112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_int_base&) \ 99212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_uint_base&) \ 99312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_signed&) \ 99412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,div,const sc_unsigned&) 99512027Sjungma@eit.uni-kl.de#endif 99612027Sjungma@eit.uni-kl.de 99712027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_T 99812027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_OTHER 99912027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP 100012027Sjungma@eit.uni-kl.de 100112027Sjungma@eit.uni-kl.de 100212027Sjungma@eit.uni-kl.deinline 100312027Sjungma@eit.uni-kl.deconst sc_fxval 100412027Sjungma@eit.uni-kl.deoperator << ( const sc_fxval& a, int b ) 100512027Sjungma@eit.uni-kl.de{ 100612027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) 100712027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::lsh_scfx_rep( *a.m_rep, b ) ); 100812027Sjungma@eit.uni-kl.de} 100912027Sjungma@eit.uni-kl.de 101012027Sjungma@eit.uni-kl.deinline 101112027Sjungma@eit.uni-kl.deconst sc_fxval 101212027Sjungma@eit.uni-kl.deoperator >> ( const sc_fxval& a, int b ) 101312027Sjungma@eit.uni-kl.de{ 101412027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) 101512027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::rsh_scfx_rep( *a.m_rep, b ) ); 101612027Sjungma@eit.uni-kl.de} 101712027Sjungma@eit.uni-kl.de 101812027Sjungma@eit.uni-kl.de 101912027Sjungma@eit.uni-kl.de// binary functions 102012027Sjungma@eit.uni-kl.de 102112027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_T(fnc,tp) \ 102212027Sjungma@eit.uni-kl.deinline \ 102312027Sjungma@eit.uni-kl.devoid \ 102412027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, const sc_fxval& a, tp b ) \ 102512027Sjungma@eit.uni-kl.de{ \ 102612027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 102712027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 102812027Sjungma@eit.uni-kl.de delete c.m_rep; \ 102912027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.m_rep ); \ 103012027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( c ) \ 103112027Sjungma@eit.uni-kl.de} \ 103212027Sjungma@eit.uni-kl.de \ 103312027Sjungma@eit.uni-kl.deinline \ 103412027Sjungma@eit.uni-kl.devoid \ 103512027Sjungma@eit.uni-kl.defnc ( sc_fxval& c, tp a, const sc_fxval& b ) \ 103612027Sjungma@eit.uni-kl.de{ \ 103712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 103812027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 103912027Sjungma@eit.uni-kl.de delete c.m_rep; \ 104012027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *tmp.m_rep, *b.m_rep ); \ 104112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( c ) \ 104212027Sjungma@eit.uni-kl.de} 104312027Sjungma@eit.uni-kl.de 104412027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 104512027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_OTHER(fnc) \ 104612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,int64) \ 104712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,uint64) \ 104812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_int_base&) \ 104912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_uint_base&) \ 105012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_signed&) \ 105112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_unsigned&) 105212027Sjungma@eit.uni-kl.de#else 105312027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_OTHER(fnc) 105412027Sjungma@eit.uni-kl.de#endif 105512027Sjungma@eit.uni-kl.de 105612027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC(fnc) \ 105712027Sjungma@eit.uni-kl.deinline \ 105812027Sjungma@eit.uni-kl.devoid \ 105912027Sjungma@eit.uni-kl.defnc( sc_fxval& c, const sc_fxval& a, const sc_fxval& b ) \ 106012027Sjungma@eit.uni-kl.de{ \ 106112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 106212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 106312027Sjungma@eit.uni-kl.de delete c.m_rep; \ 106412027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ); \ 106512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( c ) \ 106612027Sjungma@eit.uni-kl.de} \ 106712027Sjungma@eit.uni-kl.de \ 106812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,int) \ 106912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,unsigned int) \ 107012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,long) \ 107112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,unsigned long) \ 107212027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,float) \ 107312027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,double) \ 107412027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const char*) \ 107512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,const sc_fxval_fast&) \ 107612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_OTHER(fnc) 107712027Sjungma@eit.uni-kl.de 107812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(mult) 107912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(div) 108012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(add) 108112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(sub) 108212027Sjungma@eit.uni-kl.de 108312027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_T 108412027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_OTHER 108512027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC 108612027Sjungma@eit.uni-kl.de 108712027Sjungma@eit.uni-kl.de 108812027Sjungma@eit.uni-kl.deinline 108912027Sjungma@eit.uni-kl.devoid 109012027Sjungma@eit.uni-kl.delshift( sc_fxval& c, const sc_fxval& a, int b ) 109112027Sjungma@eit.uni-kl.de{ 109212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) 109312027Sjungma@eit.uni-kl.de delete c.m_rep; 109412027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::lsh_scfx_rep( *a.m_rep, b ); 109512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( c ) 109612027Sjungma@eit.uni-kl.de} 109712027Sjungma@eit.uni-kl.de 109812027Sjungma@eit.uni-kl.deinline 109912027Sjungma@eit.uni-kl.devoid 110012027Sjungma@eit.uni-kl.dershift( sc_fxval& c, const sc_fxval& a, int b ) 110112027Sjungma@eit.uni-kl.de{ 110212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) 110312027Sjungma@eit.uni-kl.de delete c.m_rep; 110412027Sjungma@eit.uni-kl.de c.m_rep = sc_dt::rsh_scfx_rep( *a.m_rep, b ); 110512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( c ) 110612027Sjungma@eit.uni-kl.de} 110712027Sjungma@eit.uni-kl.de 110812027Sjungma@eit.uni-kl.de 110912027Sjungma@eit.uni-kl.de// relational (including equality) operators 111012027Sjungma@eit.uni-kl.de 111112027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_T(op,ret,tp) \ 111212027Sjungma@eit.uni-kl.deinline \ 111312027Sjungma@eit.uni-kl.debool \ 111412027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval& a, tp b ) \ 111512027Sjungma@eit.uni-kl.de{ \ 111612027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 111712027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 111812027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *a.m_rep, *tmp.m_rep ); \ 111912027Sjungma@eit.uni-kl.de return ( ret ); \ 112012027Sjungma@eit.uni-kl.de} \ 112112027Sjungma@eit.uni-kl.de \ 112212027Sjungma@eit.uni-kl.deinline \ 112312027Sjungma@eit.uni-kl.debool \ 112412027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxval& b ) \ 112512027Sjungma@eit.uni-kl.de{ \ 112612027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 112712027Sjungma@eit.uni-kl.de sc_fxval tmp( a ); \ 112812027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *tmp.m_rep, *b.m_rep ); \ 112912027Sjungma@eit.uni-kl.de return ( ret ); \ 113012027Sjungma@eit.uni-kl.de} 113112027Sjungma@eit.uni-kl.de 113212027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 113312027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_OTHER(op,ret) \ 113412027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,int64) \ 113512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,uint64) \ 113612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_int_base&) \ 113712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_uint_base&) \ 113812027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_signed&) \ 113912027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_unsigned&) 114012027Sjungma@eit.uni-kl.de#else 114112027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_OTHER(op,ret) 114212027Sjungma@eit.uni-kl.de#endif 114312027Sjungma@eit.uni-kl.de 114412027Sjungma@eit.uni-kl.de#define DEFN_REL_OP(op,ret) \ 114512027Sjungma@eit.uni-kl.deinline \ 114612027Sjungma@eit.uni-kl.debool \ 114712027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval& a, const sc_fxval& b) \ 114812027Sjungma@eit.uni-kl.de{ \ 114912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) \ 115012027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 115112027Sjungma@eit.uni-kl.de int result = sc_dt::cmp_scfx_rep( *a.m_rep, *b.m_rep ); \ 115212027Sjungma@eit.uni-kl.de return ( ret ); \ 115312027Sjungma@eit.uni-kl.de} \ 115412027Sjungma@eit.uni-kl.de \ 115512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,int) \ 115612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,unsigned int) \ 115712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,long) \ 115812027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,unsigned long) \ 115912027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,float) \ 116012027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,double) \ 116112027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const char*) \ 116212027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,ret,const sc_fxval_fast&) \ 116312027Sjungma@eit.uni-kl.deDEFN_REL_OP_OTHER(op,ret) 116412027Sjungma@eit.uni-kl.de 116512027Sjungma@eit.uni-kl.deDEFN_REL_OP(<,result < 0) 116612027Sjungma@eit.uni-kl.deDEFN_REL_OP(<=,result <= 0) 116712027Sjungma@eit.uni-kl.deDEFN_REL_OP(>,result > 0 && result != 2) 116812027Sjungma@eit.uni-kl.deDEFN_REL_OP(>=,result >= 0 && result != 2) 116912027Sjungma@eit.uni-kl.deDEFN_REL_OP(==,result == 0) 117012027Sjungma@eit.uni-kl.deDEFN_REL_OP(!=,result != 0) 117112027Sjungma@eit.uni-kl.de 117212027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_T 117312027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_OTHER 117412027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP 117512027Sjungma@eit.uni-kl.de 117612027Sjungma@eit.uni-kl.de 117712027Sjungma@eit.uni-kl.de// assignment operators 117812027Sjungma@eit.uni-kl.de 117912027Sjungma@eit.uni-kl.deinline 118012027Sjungma@eit.uni-kl.desc_fxval& 118112027Sjungma@eit.uni-kl.desc_fxval::operator = ( const sc_fxval& a ) 118212027Sjungma@eit.uni-kl.de{ 118312027Sjungma@eit.uni-kl.de if( &a != this ) 118412027Sjungma@eit.uni-kl.de { 118512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( a ) 118612027Sjungma@eit.uni-kl.de *m_rep = *a.m_rep; 118712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) 118812027Sjungma@eit.uni-kl.de } 118912027Sjungma@eit.uni-kl.de return *this; 119012027Sjungma@eit.uni-kl.de} 119112027Sjungma@eit.uni-kl.de 119212027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(tp) \ 119312027Sjungma@eit.uni-kl.deinline \ 119412027Sjungma@eit.uni-kl.desc_fxval& \ 119512027Sjungma@eit.uni-kl.desc_fxval::operator = ( tp b ) \ 119612027Sjungma@eit.uni-kl.de{ \ 119712027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 119812027Sjungma@eit.uni-kl.de *m_rep = *tmp.m_rep; \ 119912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) \ 120012027Sjungma@eit.uni-kl.de return *this; \ 120112027Sjungma@eit.uni-kl.de} 120212027Sjungma@eit.uni-kl.de 120312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int) 120412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned int) 120512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(long) 120612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned long) 120712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(float) 120812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(double) 120912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const char*) 121012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_fxval_fast&) 121112027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 121212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int64) 121312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(uint64) 121412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_int_base&) 121512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_uint_base&) 121612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_signed&) 121712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_unsigned&) 121812027Sjungma@eit.uni-kl.de#endif 121912027Sjungma@eit.uni-kl.de 122012027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 122112027Sjungma@eit.uni-kl.de 122212027Sjungma@eit.uni-kl.de 122312027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,fnc,tp) \ 122412027Sjungma@eit.uni-kl.deinline \ 122512027Sjungma@eit.uni-kl.desc_fxval& \ 122612027Sjungma@eit.uni-kl.desc_fxval::operator op ( tp b ) \ 122712027Sjungma@eit.uni-kl.de{ \ 122812027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) \ 122912027Sjungma@eit.uni-kl.de sc_fxval tmp( b ); \ 123012027Sjungma@eit.uni-kl.de scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *tmp.m_rep ); \ 123112027Sjungma@eit.uni-kl.de delete m_rep; \ 123212027Sjungma@eit.uni-kl.de m_rep = new_rep; \ 123312027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) \ 123412027Sjungma@eit.uni-kl.de return *this; \ 123512027Sjungma@eit.uni-kl.de} 123612027Sjungma@eit.uni-kl.de 123712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 123812027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op,fnc) \ 123912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,int64) \ 124012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,uint64) \ 124112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_int_base&) \ 124212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_uint_base&) \ 124312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_signed&) \ 124412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_unsigned&) 124512027Sjungma@eit.uni-kl.de#else 124612027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op,fnc) 124712027Sjungma@eit.uni-kl.de#endif 124812027Sjungma@eit.uni-kl.de 124912027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op,fnc) \ 125012027Sjungma@eit.uni-kl.deinline \ 125112027Sjungma@eit.uni-kl.desc_fxval& \ 125212027Sjungma@eit.uni-kl.desc_fxval::operator op ( const sc_fxval& b ) \ 125312027Sjungma@eit.uni-kl.de{ \ 125412027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) \ 125512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( b ) \ 125612027Sjungma@eit.uni-kl.de scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *b.m_rep ); \ 125712027Sjungma@eit.uni-kl.de delete m_rep; \ 125812027Sjungma@eit.uni-kl.de m_rep = new_rep; \ 125912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) \ 126012027Sjungma@eit.uni-kl.de return *this; \ 126112027Sjungma@eit.uni-kl.de} \ 126212027Sjungma@eit.uni-kl.de \ 126312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,int) \ 126412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,unsigned int) \ 126512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,long) \ 126612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,unsigned long) \ 126712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,float) \ 126812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,double) \ 126912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const char*) \ 127012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,fnc,const sc_fxval_fast&) \ 127112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_OTHER(op,fnc) 127212027Sjungma@eit.uni-kl.de 127312027Sjungma@eit.uni-kl.deDEFN_ASN_OP(*=,mult) 127412027Sjungma@eit.uni-kl.deDEFN_ASN_OP(/=,div) 127512027Sjungma@eit.uni-kl.deDEFN_ASN_OP(+=,add) 127612027Sjungma@eit.uni-kl.deDEFN_ASN_OP(-=,sub) 127712027Sjungma@eit.uni-kl.de 127812027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 127912027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_OTHER 128012027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP 128112027Sjungma@eit.uni-kl.de 128212027Sjungma@eit.uni-kl.de 128312027Sjungma@eit.uni-kl.deinline 128412027Sjungma@eit.uni-kl.desc_fxval& 128512027Sjungma@eit.uni-kl.desc_fxval::operator <<= ( int b ) 128612027Sjungma@eit.uni-kl.de{ 128712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 128812027Sjungma@eit.uni-kl.de m_rep->lshift( b ); 128912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) 129012027Sjungma@eit.uni-kl.de return *this; 129112027Sjungma@eit.uni-kl.de} 129212027Sjungma@eit.uni-kl.de 129312027Sjungma@eit.uni-kl.deinline 129412027Sjungma@eit.uni-kl.desc_fxval& 129512027Sjungma@eit.uni-kl.desc_fxval::operator >>= ( int b ) 129612027Sjungma@eit.uni-kl.de{ 129712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 129812027Sjungma@eit.uni-kl.de m_rep->rshift( b ); 129912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_WRITE_( *this ) 130012027Sjungma@eit.uni-kl.de return *this; 130112027Sjungma@eit.uni-kl.de} 130212027Sjungma@eit.uni-kl.de 130312027Sjungma@eit.uni-kl.de 130412027Sjungma@eit.uni-kl.de// auto-increment and auto-decrement 130512027Sjungma@eit.uni-kl.de 130612027Sjungma@eit.uni-kl.deinline 130712027Sjungma@eit.uni-kl.deconst sc_fxval 130812027Sjungma@eit.uni-kl.desc_fxval::operator ++ ( int ) 130912027Sjungma@eit.uni-kl.de{ 131012027Sjungma@eit.uni-kl.de sc_fxval c = *this; 131112027Sjungma@eit.uni-kl.de (*this) += 1; 131212027Sjungma@eit.uni-kl.de return c; 131312027Sjungma@eit.uni-kl.de} 131412027Sjungma@eit.uni-kl.de 131512027Sjungma@eit.uni-kl.deinline 131612027Sjungma@eit.uni-kl.deconst sc_fxval 131712027Sjungma@eit.uni-kl.desc_fxval::operator -- ( int ) 131812027Sjungma@eit.uni-kl.de{ 131912027Sjungma@eit.uni-kl.de sc_fxval c = *this; 132012027Sjungma@eit.uni-kl.de (*this) -= 1; 132112027Sjungma@eit.uni-kl.de return c; 132212027Sjungma@eit.uni-kl.de} 132312027Sjungma@eit.uni-kl.de 132412027Sjungma@eit.uni-kl.deinline 132512027Sjungma@eit.uni-kl.desc_fxval& 132612027Sjungma@eit.uni-kl.desc_fxval::operator ++ () 132712027Sjungma@eit.uni-kl.de{ 132812027Sjungma@eit.uni-kl.de (*this) += 1; 132912027Sjungma@eit.uni-kl.de return *this; 133012027Sjungma@eit.uni-kl.de} 133112027Sjungma@eit.uni-kl.de 133212027Sjungma@eit.uni-kl.deinline 133312027Sjungma@eit.uni-kl.desc_fxval& 133412027Sjungma@eit.uni-kl.desc_fxval::operator -- () 133512027Sjungma@eit.uni-kl.de{ 133612027Sjungma@eit.uni-kl.de (*this) -= 1; 133712027Sjungma@eit.uni-kl.de return *this; 133812027Sjungma@eit.uni-kl.de} 133912027Sjungma@eit.uni-kl.de 134012027Sjungma@eit.uni-kl.de 134112027Sjungma@eit.uni-kl.de// implicit conversion 134212027Sjungma@eit.uni-kl.de 134312027Sjungma@eit.uni-kl.deinline 134412027Sjungma@eit.uni-kl.desc_fxval::operator double() const 134512027Sjungma@eit.uni-kl.de{ 134612027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 134712027Sjungma@eit.uni-kl.de return m_rep->to_double(); 134812027Sjungma@eit.uni-kl.de} 134912027Sjungma@eit.uni-kl.de 135012027Sjungma@eit.uni-kl.de 135112027Sjungma@eit.uni-kl.de// explicit conversion to primitive types 135212027Sjungma@eit.uni-kl.de 135312027Sjungma@eit.uni-kl.deinline 135412027Sjungma@eit.uni-kl.deshort 135512027Sjungma@eit.uni-kl.desc_fxval::to_short() const 135612027Sjungma@eit.uni-kl.de{ 135712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 135812027Sjungma@eit.uni-kl.de return static_cast<short>( m_rep->to_double() ); 135912027Sjungma@eit.uni-kl.de} 136012027Sjungma@eit.uni-kl.de 136112027Sjungma@eit.uni-kl.deinline 136212027Sjungma@eit.uni-kl.deunsigned short 136312027Sjungma@eit.uni-kl.desc_fxval::to_ushort() const 136412027Sjungma@eit.uni-kl.de{ 136512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 136612027Sjungma@eit.uni-kl.de return static_cast<unsigned short>( m_rep->to_double() ); 136712027Sjungma@eit.uni-kl.de} 136812027Sjungma@eit.uni-kl.de 136912027Sjungma@eit.uni-kl.deinline 137012027Sjungma@eit.uni-kl.deint 137112027Sjungma@eit.uni-kl.desc_fxval::to_int() const 137212027Sjungma@eit.uni-kl.de{ 137312027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 137412027Sjungma@eit.uni-kl.de return static_cast<int>( m_rep->to_double() ); 137512027Sjungma@eit.uni-kl.de} 137612027Sjungma@eit.uni-kl.de 137712027Sjungma@eit.uni-kl.deinline 137812027Sjungma@eit.uni-kl.deint64 137912027Sjungma@eit.uni-kl.desc_fxval::to_int64() const 138012027Sjungma@eit.uni-kl.de{ 138112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 138212027Sjungma@eit.uni-kl.de return static_cast<int64>( m_rep->to_double() ); 138312027Sjungma@eit.uni-kl.de} 138412027Sjungma@eit.uni-kl.de 138512027Sjungma@eit.uni-kl.deinline 138612027Sjungma@eit.uni-kl.deuint64 138712027Sjungma@eit.uni-kl.desc_fxval::to_uint64() const 138812027Sjungma@eit.uni-kl.de{ 138912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 139012027Sjungma@eit.uni-kl.de return static_cast<uint64>( m_rep->to_double() ); 139112027Sjungma@eit.uni-kl.de} 139212027Sjungma@eit.uni-kl.de 139312027Sjungma@eit.uni-kl.deinline 139412027Sjungma@eit.uni-kl.delong 139512027Sjungma@eit.uni-kl.desc_fxval::to_long() const 139612027Sjungma@eit.uni-kl.de{ 139712027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 139812027Sjungma@eit.uni-kl.de return static_cast<long>( m_rep->to_double() ); 139912027Sjungma@eit.uni-kl.de} 140012027Sjungma@eit.uni-kl.de 140112027Sjungma@eit.uni-kl.deinline 140212027Sjungma@eit.uni-kl.deunsigned int 140312027Sjungma@eit.uni-kl.desc_fxval::to_uint() const 140412027Sjungma@eit.uni-kl.de{ 140512027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 140612027Sjungma@eit.uni-kl.de return static_cast<unsigned int>( m_rep->to_double() ); 140712027Sjungma@eit.uni-kl.de} 140812027Sjungma@eit.uni-kl.de 140912027Sjungma@eit.uni-kl.deinline 141012027Sjungma@eit.uni-kl.deunsigned long 141112027Sjungma@eit.uni-kl.desc_fxval::to_ulong() const 141212027Sjungma@eit.uni-kl.de{ 141312027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 141412027Sjungma@eit.uni-kl.de return static_cast<unsigned long>( m_rep->to_double() ); 141512027Sjungma@eit.uni-kl.de} 141612027Sjungma@eit.uni-kl.de 141712027Sjungma@eit.uni-kl.deinline 141812027Sjungma@eit.uni-kl.defloat 141912027Sjungma@eit.uni-kl.desc_fxval::to_float() const 142012027Sjungma@eit.uni-kl.de{ 142112027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 142212027Sjungma@eit.uni-kl.de return static_cast<float>( m_rep->to_double() ); 142312027Sjungma@eit.uni-kl.de} 142412027Sjungma@eit.uni-kl.de 142512027Sjungma@eit.uni-kl.deinline 142612027Sjungma@eit.uni-kl.dedouble 142712027Sjungma@eit.uni-kl.desc_fxval::to_double() const 142812027Sjungma@eit.uni-kl.de{ 142912027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 143012027Sjungma@eit.uni-kl.de return m_rep->to_double(); 143112027Sjungma@eit.uni-kl.de} 143212027Sjungma@eit.uni-kl.de 143312027Sjungma@eit.uni-kl.de 143412027Sjungma@eit.uni-kl.de// query value 143512027Sjungma@eit.uni-kl.de 143612027Sjungma@eit.uni-kl.deinline 143712027Sjungma@eit.uni-kl.debool 143812027Sjungma@eit.uni-kl.desc_fxval::is_neg() const 143912027Sjungma@eit.uni-kl.de{ 144012027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 144112027Sjungma@eit.uni-kl.de return m_rep->is_neg(); 144212027Sjungma@eit.uni-kl.de} 144312027Sjungma@eit.uni-kl.de 144412027Sjungma@eit.uni-kl.deinline 144512027Sjungma@eit.uni-kl.debool 144612027Sjungma@eit.uni-kl.desc_fxval::is_zero() const 144712027Sjungma@eit.uni-kl.de{ 144812027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 144912027Sjungma@eit.uni-kl.de return m_rep->is_zero(); 145012027Sjungma@eit.uni-kl.de} 145112027Sjungma@eit.uni-kl.de 145212027Sjungma@eit.uni-kl.deinline 145312027Sjungma@eit.uni-kl.debool 145412027Sjungma@eit.uni-kl.desc_fxval::is_nan() const 145512027Sjungma@eit.uni-kl.de{ 145612027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 145712027Sjungma@eit.uni-kl.de return m_rep->is_nan(); 145812027Sjungma@eit.uni-kl.de} 145912027Sjungma@eit.uni-kl.de 146012027Sjungma@eit.uni-kl.deinline 146112027Sjungma@eit.uni-kl.debool 146212027Sjungma@eit.uni-kl.desc_fxval::is_inf() const 146312027Sjungma@eit.uni-kl.de{ 146412027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 146512027Sjungma@eit.uni-kl.de return m_rep->is_inf(); 146612027Sjungma@eit.uni-kl.de} 146712027Sjungma@eit.uni-kl.de 146812027Sjungma@eit.uni-kl.deinline 146912027Sjungma@eit.uni-kl.debool 147012027Sjungma@eit.uni-kl.desc_fxval::is_normal() const 147112027Sjungma@eit.uni-kl.de{ 147212027Sjungma@eit.uni-kl.de SC_FXVAL_OBSERVER_READ_( *this ) 147312027Sjungma@eit.uni-kl.de return m_rep->is_normal(); 147412027Sjungma@eit.uni-kl.de} 147512027Sjungma@eit.uni-kl.de 147612027Sjungma@eit.uni-kl.de 147712027Sjungma@eit.uni-kl.deinline 147812027Sjungma@eit.uni-kl.debool 147912027Sjungma@eit.uni-kl.desc_fxval::rounding_flag() const 148012027Sjungma@eit.uni-kl.de{ 148112027Sjungma@eit.uni-kl.de return m_rep->rounding_flag(); 148212027Sjungma@eit.uni-kl.de} 148312027Sjungma@eit.uni-kl.de 148412027Sjungma@eit.uni-kl.de 148512027Sjungma@eit.uni-kl.de// internal use only; 148612027Sjungma@eit.uni-kl.deinline 148712027Sjungma@eit.uni-kl.debool 148812027Sjungma@eit.uni-kl.desc_fxval::get_bit( int i ) const 148912027Sjungma@eit.uni-kl.de{ 149012027Sjungma@eit.uni-kl.de return m_rep->get_bit( i ); 149112027Sjungma@eit.uni-kl.de} 149212027Sjungma@eit.uni-kl.de 149312027Sjungma@eit.uni-kl.de 149412027Sjungma@eit.uni-kl.de// protected methods and friend functions 149512027Sjungma@eit.uni-kl.de 149612027Sjungma@eit.uni-kl.deinline 149712027Sjungma@eit.uni-kl.devoid 149812027Sjungma@eit.uni-kl.desc_fxval::get_type( int& wl, int& iwl, sc_enc& enc ) const 149912027Sjungma@eit.uni-kl.de{ 150012027Sjungma@eit.uni-kl.de m_rep->get_type( wl, iwl, enc ); 150112027Sjungma@eit.uni-kl.de} 150212027Sjungma@eit.uni-kl.de 150312027Sjungma@eit.uni-kl.de 150412027Sjungma@eit.uni-kl.deinline 150512027Sjungma@eit.uni-kl.deconst sc_fxval 150612027Sjungma@eit.uni-kl.desc_fxval::quantization( const scfx_params& params, bool& q_flag ) const 150712027Sjungma@eit.uni-kl.de{ 150812027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::quantization_scfx_rep( *m_rep, params, q_flag ) ); 150912027Sjungma@eit.uni-kl.de} 151012027Sjungma@eit.uni-kl.de 151112027Sjungma@eit.uni-kl.deinline 151212027Sjungma@eit.uni-kl.deconst sc_fxval 151312027Sjungma@eit.uni-kl.desc_fxval::overflow( const scfx_params& params, bool& o_flag ) const 151412027Sjungma@eit.uni-kl.de{ 151512027Sjungma@eit.uni-kl.de return sc_fxval( sc_dt::overflow_scfx_rep( *m_rep, params, o_flag ) ); 151612027Sjungma@eit.uni-kl.de} 151712027Sjungma@eit.uni-kl.de 151812027Sjungma@eit.uni-kl.de 151912027Sjungma@eit.uni-kl.deinline 152012027Sjungma@eit.uni-kl.de::std::ostream& 152112027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_fxval& a ) 152212027Sjungma@eit.uni-kl.de{ 152312027Sjungma@eit.uni-kl.de a.print( os ); 152412027Sjungma@eit.uni-kl.de return os; 152512027Sjungma@eit.uni-kl.de} 152612027Sjungma@eit.uni-kl.de 152712027Sjungma@eit.uni-kl.deinline 152812027Sjungma@eit.uni-kl.de::std::istream& 152912027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_fxval& a ) 153012027Sjungma@eit.uni-kl.de{ 153112027Sjungma@eit.uni-kl.de a.scan( is ); 153212027Sjungma@eit.uni-kl.de return is; 153312027Sjungma@eit.uni-kl.de} 153412027Sjungma@eit.uni-kl.de 153512027Sjungma@eit.uni-kl.de 153612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 153712027Sjungma@eit.uni-kl.de// CLASS : sc_fxval_fast 153812027Sjungma@eit.uni-kl.de// 153912027Sjungma@eit.uni-kl.de// Fixed-point value type; limited precision. 154012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 154112027Sjungma@eit.uni-kl.de 154212027Sjungma@eit.uni-kl.de// protected method 154312027Sjungma@eit.uni-kl.de 154412027Sjungma@eit.uni-kl.deinline 154512027Sjungma@eit.uni-kl.desc_fxval_fast_observer* 154612027Sjungma@eit.uni-kl.desc_fxval_fast::observer() const 154712027Sjungma@eit.uni-kl.de{ 154812027Sjungma@eit.uni-kl.de return m_observer; 154912027Sjungma@eit.uni-kl.de} 155012027Sjungma@eit.uni-kl.de 155112027Sjungma@eit.uni-kl.de 155212027Sjungma@eit.uni-kl.de// public constructors 155312027Sjungma@eit.uni-kl.de 155412027Sjungma@eit.uni-kl.deinline 155512027Sjungma@eit.uni-kl.desc_fxval_fast::sc_fxval_fast( sc_fxval_fast_observer* observer_ ) 155612027Sjungma@eit.uni-kl.de: m_val( 0.0 ), 155712027Sjungma@eit.uni-kl.de m_observer( observer_ ) 155812027Sjungma@eit.uni-kl.de{ 155912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_DEFAULT_ 156012027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) 156112027Sjungma@eit.uni-kl.de} 156212027Sjungma@eit.uni-kl.de 156312027Sjungma@eit.uni-kl.deinline 156412027Sjungma@eit.uni-kl.desc_fxval_fast::sc_fxval_fast( const sc_fxval_fast& a, 156512027Sjungma@eit.uni-kl.de sc_fxval_fast_observer* observer_ ) 156612027Sjungma@eit.uni-kl.de: m_val( a.m_val ), 156712027Sjungma@eit.uni-kl.de m_observer( observer_ ) 156812027Sjungma@eit.uni-kl.de{ 156912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_DEFAULT_ 157012027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) 157112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) 157212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 157312027Sjungma@eit.uni-kl.de} 157412027Sjungma@eit.uni-kl.de 157512027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T(tp,arg) \ 157612027Sjungma@eit.uni-kl.deinline \ 157712027Sjungma@eit.uni-kl.desc_fxval_fast::sc_fxval_fast( tp a, \ 157812027Sjungma@eit.uni-kl.de sc_fxval_fast_observer* observer_ ) \ 157912027Sjungma@eit.uni-kl.de: m_val( arg ), \ 158012027Sjungma@eit.uni-kl.de m_observer( observer_ ) \ 158112027Sjungma@eit.uni-kl.de{ \ 158212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_DEFAULT_ \ 158312027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) \ 158412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ 158512027Sjungma@eit.uni-kl.de} 158612027Sjungma@eit.uni-kl.de 158712027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_A(tp) DEFN_CTOR_T(tp,static_cast<double>( a )) 158812027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_B(tp) DEFN_CTOR_T(tp,from_string( a )) 158912027Sjungma@eit.uni-kl.de#define DEFN_CTOR_T_C(tp) DEFN_CTOR_T(tp,a.to_double()) 159012027Sjungma@eit.uni-kl.de 159112027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(int) 159212027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(unsigned int) 159312027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(long) 159412027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(unsigned long) 159512027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(float) 159612027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(double) 159712027Sjungma@eit.uni-kl.deDEFN_CTOR_T_B(const char*) 159812027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_fxval&) 159912027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 160012027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(int64) 160112027Sjungma@eit.uni-kl.deDEFN_CTOR_T_A(uint64) 160212027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_int_base&) 160312027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_uint_base&) 160412027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_signed&) 160512027Sjungma@eit.uni-kl.deDEFN_CTOR_T_C(const sc_unsigned&) 160612027Sjungma@eit.uni-kl.de#endif 160712027Sjungma@eit.uni-kl.de 160812027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T 160912027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_A 161012027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_B 161112027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_C 161212027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_D 161312027Sjungma@eit.uni-kl.de#undef DEFN_CTOR_T_E 161412027Sjungma@eit.uni-kl.de 161512027Sjungma@eit.uni-kl.de 161612027Sjungma@eit.uni-kl.deinline 161712027Sjungma@eit.uni-kl.desc_fxval_fast::~sc_fxval_fast() 161812027Sjungma@eit.uni-kl.de{ 161912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_DESTRUCT_( *this ) 162012027Sjungma@eit.uni-kl.de} 162112027Sjungma@eit.uni-kl.de 162212027Sjungma@eit.uni-kl.de 162312027Sjungma@eit.uni-kl.de// internal use only; 162412027Sjungma@eit.uni-kl.deinline 162512027Sjungma@eit.uni-kl.dedouble 162612027Sjungma@eit.uni-kl.desc_fxval_fast::get_val() const 162712027Sjungma@eit.uni-kl.de{ 162812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 162912027Sjungma@eit.uni-kl.de return m_val; 163012027Sjungma@eit.uni-kl.de} 163112027Sjungma@eit.uni-kl.de 163212027Sjungma@eit.uni-kl.de// internal use only; 163312027Sjungma@eit.uni-kl.deinline 163412027Sjungma@eit.uni-kl.devoid 163512027Sjungma@eit.uni-kl.desc_fxval_fast::set_val( double val_ ) 163612027Sjungma@eit.uni-kl.de{ 163712027Sjungma@eit.uni-kl.de m_val = val_; 163812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 163912027Sjungma@eit.uni-kl.de} 164012027Sjungma@eit.uni-kl.de 164112027Sjungma@eit.uni-kl.de 164212027Sjungma@eit.uni-kl.de// unary operators 164312027Sjungma@eit.uni-kl.de 164412027Sjungma@eit.uni-kl.deinline 164512027Sjungma@eit.uni-kl.deconst sc_fxval_fast 164612027Sjungma@eit.uni-kl.desc_fxval_fast::operator - () const 164712027Sjungma@eit.uni-kl.de{ 164812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 164912027Sjungma@eit.uni-kl.de return sc_fxval_fast( - m_val ); 165012027Sjungma@eit.uni-kl.de} 165112027Sjungma@eit.uni-kl.de 165212027Sjungma@eit.uni-kl.deinline 165312027Sjungma@eit.uni-kl.deconst sc_fxval_fast& 165412027Sjungma@eit.uni-kl.desc_fxval_fast::operator + () const 165512027Sjungma@eit.uni-kl.de{ 165612027Sjungma@eit.uni-kl.de // SC_FXVAL_FAST_OBSERVER_READ_( *this ) 165712027Sjungma@eit.uni-kl.de return *this; 165812027Sjungma@eit.uni-kl.de} 165912027Sjungma@eit.uni-kl.de 166012027Sjungma@eit.uni-kl.de 166112027Sjungma@eit.uni-kl.de// unary functions 166212027Sjungma@eit.uni-kl.de 166312027Sjungma@eit.uni-kl.deinline 166412027Sjungma@eit.uni-kl.devoid 166512027Sjungma@eit.uni-kl.deneg( sc_fxval_fast& c, const sc_fxval_fast& a ) 166612027Sjungma@eit.uni-kl.de{ 166712027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) 166812027Sjungma@eit.uni-kl.de c.m_val = - a.m_val; 166912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( c ) 167012027Sjungma@eit.uni-kl.de} 167112027Sjungma@eit.uni-kl.de 167212027Sjungma@eit.uni-kl.de 167312027Sjungma@eit.uni-kl.de// binary operators 167412027Sjungma@eit.uni-kl.de 167512027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_T(op,tp) \ 167612027Sjungma@eit.uni-kl.deinline \ 167712027Sjungma@eit.uni-kl.deconst sc_fxval_fast \ 167812027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval_fast& a, tp b ) \ 167912027Sjungma@eit.uni-kl.de{ \ 168012027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) \ 168112027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 168212027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val op tmp.m_val ); \ 168312027Sjungma@eit.uni-kl.de} \ 168412027Sjungma@eit.uni-kl.de \ 168512027Sjungma@eit.uni-kl.deinline \ 168612027Sjungma@eit.uni-kl.deconst sc_fxval_fast \ 168712027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxval_fast& b ) \ 168812027Sjungma@eit.uni-kl.de{ \ 168912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) \ 169012027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 169112027Sjungma@eit.uni-kl.de return sc_fxval_fast( tmp.m_val op b.m_val ); \ 169212027Sjungma@eit.uni-kl.de} 169312027Sjungma@eit.uni-kl.de 169412027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 169512027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_OTHER(op) \ 169612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,int64) \ 169712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,uint64) \ 169812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const sc_int_base&) \ 169912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const sc_uint_base&) \ 170012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const sc_signed&) \ 170112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const sc_unsigned&) 170212027Sjungma@eit.uni-kl.de#else 170312027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP_OTHER(op) 170412027Sjungma@eit.uni-kl.de#endif 170512027Sjungma@eit.uni-kl.de 170612027Sjungma@eit.uni-kl.de#define DEFN_BIN_OP(op,dummy) \ 170712027Sjungma@eit.uni-kl.deinline \ 170812027Sjungma@eit.uni-kl.deconst sc_fxval_fast \ 170912027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval_fast& a, const sc_fxval_fast& b ) \ 171012027Sjungma@eit.uni-kl.de{ \ 171112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) \ 171212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) \ 171312027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val op b.m_val ); \ 171412027Sjungma@eit.uni-kl.de} \ 171512027Sjungma@eit.uni-kl.de \ 171612027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,int) \ 171712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,unsigned int) \ 171812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,long) \ 171912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,unsigned long) \ 172012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,float) \ 172112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,double) \ 172212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(op,const char*) \ 172312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_OTHER(op) 172412027Sjungma@eit.uni-kl.de 172512027Sjungma@eit.uni-kl.deDEFN_BIN_OP(*,mult) 172612027Sjungma@eit.uni-kl.deDEFN_BIN_OP(+,add) 172712027Sjungma@eit.uni-kl.deDEFN_BIN_OP(-,sub) 172812027Sjungma@eit.uni-kl.de//DEFN_BIN_OP(/,div) 172912027Sjungma@eit.uni-kl.deinline 173012027Sjungma@eit.uni-kl.deconst sc_fxval_fast 173112027Sjungma@eit.uni-kl.deoperator / ( const sc_fxval_fast& a, const sc_fxval_fast& b ) 173212027Sjungma@eit.uni-kl.de{ 173312027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) 173412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) 173512027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val / b.m_val ); 173612027Sjungma@eit.uni-kl.de} 173712027Sjungma@eit.uni-kl.de 173812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,int) 173912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,unsigned int) 174012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,long) 174112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,unsigned long) 174212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,float) 174312027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,double) 174412027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const char*) 174512027Sjungma@eit.uni-kl.de//DEFN_BIN_OP_OTHER(/) 174612027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 174712027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,int64) 174812027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,uint64) 174912027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const sc_int_base&) 175012027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const sc_uint_base&) 175112027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const sc_signed&) 175212027Sjungma@eit.uni-kl.deDEFN_BIN_OP_T(/,const sc_unsigned&) 175312027Sjungma@eit.uni-kl.de#endif 175412027Sjungma@eit.uni-kl.de 175512027Sjungma@eit.uni-kl.de 175612027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_T 175712027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP_OTHER 175812027Sjungma@eit.uni-kl.de#undef DEFN_BIN_OP 175912027Sjungma@eit.uni-kl.de 176012027Sjungma@eit.uni-kl.de 176112027Sjungma@eit.uni-kl.deinline 176212027Sjungma@eit.uni-kl.deconst sc_fxval_fast 176312027Sjungma@eit.uni-kl.deoperator << ( const sc_fxval_fast& a, int b ) 176412027Sjungma@eit.uni-kl.de{ 176512027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) 176612027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val * scfx_pow2( b ) ); 176712027Sjungma@eit.uni-kl.de} 176812027Sjungma@eit.uni-kl.de 176912027Sjungma@eit.uni-kl.deinline 177012027Sjungma@eit.uni-kl.deconst sc_fxval_fast 177112027Sjungma@eit.uni-kl.deoperator >> ( const sc_fxval_fast& a, int b ) 177212027Sjungma@eit.uni-kl.de{ 177312027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) 177412027Sjungma@eit.uni-kl.de return sc_fxval_fast( a.m_val * scfx_pow2( -b ) ); 177512027Sjungma@eit.uni-kl.de} 177612027Sjungma@eit.uni-kl.de 177712027Sjungma@eit.uni-kl.de 177812027Sjungma@eit.uni-kl.de// binary functions 177912027Sjungma@eit.uni-kl.de 178012027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_T(fnc,op,tp) \ 178112027Sjungma@eit.uni-kl.deinline \ 178212027Sjungma@eit.uni-kl.devoid \ 178312027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, const sc_fxval_fast& a, tp b ) \ 178412027Sjungma@eit.uni-kl.de{ \ 178512027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) \ 178612027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 178712027Sjungma@eit.uni-kl.de c.m_val = a.m_val op tmp.m_val; \ 178812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ 178912027Sjungma@eit.uni-kl.de} \ 179012027Sjungma@eit.uni-kl.de \ 179112027Sjungma@eit.uni-kl.deinline \ 179212027Sjungma@eit.uni-kl.devoid \ 179312027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, tp a, const sc_fxval_fast& b ) \ 179412027Sjungma@eit.uni-kl.de{ \ 179512027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) \ 179612027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 179712027Sjungma@eit.uni-kl.de c.m_val = tmp.m_val op b.m_val; \ 179812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ 179912027Sjungma@eit.uni-kl.de} 180012027Sjungma@eit.uni-kl.de 180112027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 180212027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_OTHER(fnc,op) \ 180312027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,int64) \ 180412027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,uint64) \ 180512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_int_base&) \ 180612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_uint_base&) \ 180712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_signed&) \ 180812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const sc_unsigned&) 180912027Sjungma@eit.uni-kl.de#else 181012027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC_OTHER(fnc,op) 181112027Sjungma@eit.uni-kl.de#endif 181212027Sjungma@eit.uni-kl.de 181312027Sjungma@eit.uni-kl.de#define DEFN_BIN_FNC(fnc,op) \ 181412027Sjungma@eit.uni-kl.deinline \ 181512027Sjungma@eit.uni-kl.devoid \ 181612027Sjungma@eit.uni-kl.defnc ( sc_fxval_fast& c, const sc_fxval_fast& a, const sc_fxval_fast& b ) \ 181712027Sjungma@eit.uni-kl.de{ \ 181812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) \ 181912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) \ 182012027Sjungma@eit.uni-kl.de c.m_val = a.m_val op b.m_val; \ 182112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ 182212027Sjungma@eit.uni-kl.de} \ 182312027Sjungma@eit.uni-kl.de \ 182412027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,int) \ 182512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,unsigned int) \ 182612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,long) \ 182712027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,unsigned long) \ 182812027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,float) \ 182912027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,double) \ 183012027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_T(fnc,op,const char*) \ 183112027Sjungma@eit.uni-kl.deDEFN_BIN_FNC_OTHER(fnc,op) 183212027Sjungma@eit.uni-kl.de 183312027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(mult,*) 183412027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(div,/) 183512027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(add,+) 183612027Sjungma@eit.uni-kl.deDEFN_BIN_FNC(sub,-) 183712027Sjungma@eit.uni-kl.de 183812027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_T 183912027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC_OTHER 184012027Sjungma@eit.uni-kl.de#undef DEFN_BIN_FNC 184112027Sjungma@eit.uni-kl.de 184212027Sjungma@eit.uni-kl.de 184312027Sjungma@eit.uni-kl.deinline 184412027Sjungma@eit.uni-kl.devoid 184512027Sjungma@eit.uni-kl.delshift( sc_fxval_fast& c, const sc_fxval_fast& a, int b ) 184612027Sjungma@eit.uni-kl.de{ 184712027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) 184812027Sjungma@eit.uni-kl.de c.m_val = a.m_val * scfx_pow2( b ); 184912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( c ) 185012027Sjungma@eit.uni-kl.de} 185112027Sjungma@eit.uni-kl.de 185212027Sjungma@eit.uni-kl.deinline 185312027Sjungma@eit.uni-kl.devoid 185412027Sjungma@eit.uni-kl.dershift( sc_fxval_fast& c, const sc_fxval_fast& a, int b ) 185512027Sjungma@eit.uni-kl.de{ 185612027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) 185712027Sjungma@eit.uni-kl.de c.m_val = a.m_val * scfx_pow2( -b ); 185812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( c ) 185912027Sjungma@eit.uni-kl.de} 186012027Sjungma@eit.uni-kl.de 186112027Sjungma@eit.uni-kl.de 186212027Sjungma@eit.uni-kl.de// relational (including equality) operators 186312027Sjungma@eit.uni-kl.de 186412027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_T(op,tp) \ 186512027Sjungma@eit.uni-kl.deinline \ 186612027Sjungma@eit.uni-kl.debool \ 186712027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval_fast& a, tp b ) \ 186812027Sjungma@eit.uni-kl.de{ \ 186912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) \ 187012027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 187112027Sjungma@eit.uni-kl.de return ( a.m_val op tmp.m_val ); \ 187212027Sjungma@eit.uni-kl.de} \ 187312027Sjungma@eit.uni-kl.de \ 187412027Sjungma@eit.uni-kl.deinline \ 187512027Sjungma@eit.uni-kl.debool \ 187612027Sjungma@eit.uni-kl.deoperator op ( tp a, const sc_fxval_fast& b ) \ 187712027Sjungma@eit.uni-kl.de{ \ 187812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) \ 187912027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 188012027Sjungma@eit.uni-kl.de return ( tmp.m_val op b.m_val ); \ 188112027Sjungma@eit.uni-kl.de} 188212027Sjungma@eit.uni-kl.de 188312027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 188412027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_OTHER(op) \ 188512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,int64) \ 188612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,uint64) \ 188712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_int_base&) \ 188812027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_uint_base&) \ 188912027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_signed&) \ 189012027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const sc_unsigned&) 189112027Sjungma@eit.uni-kl.de#else 189212027Sjungma@eit.uni-kl.de#define DEFN_REL_OP_OTHER(op) 189312027Sjungma@eit.uni-kl.de#endif 189412027Sjungma@eit.uni-kl.de 189512027Sjungma@eit.uni-kl.de#define DEFN_REL_OP(op) \ 189612027Sjungma@eit.uni-kl.deinline \ 189712027Sjungma@eit.uni-kl.debool \ 189812027Sjungma@eit.uni-kl.deoperator op ( const sc_fxval_fast& a, const sc_fxval_fast& b ) \ 189912027Sjungma@eit.uni-kl.de{ \ 190012027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) \ 190112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) \ 190212027Sjungma@eit.uni-kl.de return ( a.m_val op b.m_val ); \ 190312027Sjungma@eit.uni-kl.de} \ 190412027Sjungma@eit.uni-kl.de \ 190512027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,int) \ 190612027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,unsigned int) \ 190712027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,long) \ 190812027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,unsigned long) \ 190912027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,float) \ 191012027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,double) \ 191112027Sjungma@eit.uni-kl.deDEFN_REL_OP_T(op,const char*) \ 191212027Sjungma@eit.uni-kl.deDEFN_REL_OP_OTHER(op) 191312027Sjungma@eit.uni-kl.de 191412027Sjungma@eit.uni-kl.deDEFN_REL_OP(<) 191512027Sjungma@eit.uni-kl.deDEFN_REL_OP(<=) 191612027Sjungma@eit.uni-kl.deDEFN_REL_OP(>) 191712027Sjungma@eit.uni-kl.deDEFN_REL_OP(>=) 191812027Sjungma@eit.uni-kl.deDEFN_REL_OP(==) 191912027Sjungma@eit.uni-kl.deDEFN_REL_OP(!=) 192012027Sjungma@eit.uni-kl.de 192112027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_T 192212027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP_OTHER 192312027Sjungma@eit.uni-kl.de#undef DEFN_REL_OP 192412027Sjungma@eit.uni-kl.de 192512027Sjungma@eit.uni-kl.de 192612027Sjungma@eit.uni-kl.de// assignment operators 192712027Sjungma@eit.uni-kl.de 192812027Sjungma@eit.uni-kl.deinline 192912027Sjungma@eit.uni-kl.desc_fxval_fast& 193012027Sjungma@eit.uni-kl.desc_fxval_fast::operator = ( const sc_fxval_fast& a ) 193112027Sjungma@eit.uni-kl.de{ 193212027Sjungma@eit.uni-kl.de if( &a != this ) 193312027Sjungma@eit.uni-kl.de { 193412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( a ) 193512027Sjungma@eit.uni-kl.de m_val = a.m_val; 193612027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 193712027Sjungma@eit.uni-kl.de } 193812027Sjungma@eit.uni-kl.de return *this; 193912027Sjungma@eit.uni-kl.de} 194012027Sjungma@eit.uni-kl.de 194112027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(tp) \ 194212027Sjungma@eit.uni-kl.deinline \ 194312027Sjungma@eit.uni-kl.desc_fxval_fast& \ 194412027Sjungma@eit.uni-kl.desc_fxval_fast::operator = ( tp a ) \ 194512027Sjungma@eit.uni-kl.de{ \ 194612027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( a ); \ 194712027Sjungma@eit.uni-kl.de m_val = tmp.m_val; \ 194812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ 194912027Sjungma@eit.uni-kl.de return *this; \ 195012027Sjungma@eit.uni-kl.de} 195112027Sjungma@eit.uni-kl.de 195212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int) 195312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned int) 195412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(long) 195512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(unsigned long) 195612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(float) 195712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(double) 195812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const char*) 195912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_fxval&) 196012027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 196112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(int64) 196212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(uint64) 196312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_int_base&) 196412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_uint_base&) 196512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_signed&) 196612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(const sc_unsigned&) 196712027Sjungma@eit.uni-kl.de#endif 196812027Sjungma@eit.uni-kl.de 196912027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 197012027Sjungma@eit.uni-kl.de 197112027Sjungma@eit.uni-kl.de 197212027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,tp) \ 197312027Sjungma@eit.uni-kl.deinline \ 197412027Sjungma@eit.uni-kl.desc_fxval_fast& \ 197512027Sjungma@eit.uni-kl.desc_fxval_fast::operator op ( tp b ) \ 197612027Sjungma@eit.uni-kl.de{ \ 197712027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) \ 197812027Sjungma@eit.uni-kl.de sc_fxval_fast tmp( b ); \ 197912027Sjungma@eit.uni-kl.de m_val op tmp.m_val; \ 198012027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ 198112027Sjungma@eit.uni-kl.de return *this; \ 198212027Sjungma@eit.uni-kl.de} 198312027Sjungma@eit.uni-kl.de 198412027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER 198512027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op) \ 198612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,int64) \ 198712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,uint64) \ 198812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_int_base&) \ 198912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_uint_base&) \ 199012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_signed&) \ 199112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_unsigned&) 199212027Sjungma@eit.uni-kl.de#else 199312027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op) 199412027Sjungma@eit.uni-kl.de#endif 199512027Sjungma@eit.uni-kl.de 199612027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op) \ 199712027Sjungma@eit.uni-kl.deinline \ 199812027Sjungma@eit.uni-kl.desc_fxval_fast& \ 199912027Sjungma@eit.uni-kl.desc_fxval_fast::operator op ( const sc_fxval_fast& b ) \ 200012027Sjungma@eit.uni-kl.de{ \ 200112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) \ 200212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( b ) \ 200312027Sjungma@eit.uni-kl.de m_val op b.m_val; \ 200412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ 200512027Sjungma@eit.uni-kl.de return *this; \ 200612027Sjungma@eit.uni-kl.de} \ 200712027Sjungma@eit.uni-kl.de \ 200812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,int) \ 200912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,unsigned int) \ 201012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,long) \ 201112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,unsigned long) \ 201212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,float) \ 201312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,double) \ 201412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const char*) \ 201512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxval&) \ 201612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_OTHER(op) 201712027Sjungma@eit.uni-kl.de 201812027Sjungma@eit.uni-kl.deDEFN_ASN_OP(*=) 201912027Sjungma@eit.uni-kl.deDEFN_ASN_OP(/=) 202012027Sjungma@eit.uni-kl.deDEFN_ASN_OP(+=) 202112027Sjungma@eit.uni-kl.deDEFN_ASN_OP(-=) 202212027Sjungma@eit.uni-kl.de 202312027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T 202412027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_OTHER 202512027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP 202612027Sjungma@eit.uni-kl.de 202712027Sjungma@eit.uni-kl.de 202812027Sjungma@eit.uni-kl.deinline 202912027Sjungma@eit.uni-kl.desc_fxval_fast& 203012027Sjungma@eit.uni-kl.desc_fxval_fast::operator <<= ( int b ) 203112027Sjungma@eit.uni-kl.de{ 203212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 203312027Sjungma@eit.uni-kl.de m_val *= scfx_pow2( b ); 203412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 203512027Sjungma@eit.uni-kl.de return *this; 203612027Sjungma@eit.uni-kl.de} 203712027Sjungma@eit.uni-kl.de 203812027Sjungma@eit.uni-kl.deinline 203912027Sjungma@eit.uni-kl.desc_fxval_fast& 204012027Sjungma@eit.uni-kl.desc_fxval_fast::operator >>= ( int b ) 204112027Sjungma@eit.uni-kl.de{ 204212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 204312027Sjungma@eit.uni-kl.de m_val *= scfx_pow2( -b ); 204412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 204512027Sjungma@eit.uni-kl.de return *this; 204612027Sjungma@eit.uni-kl.de} 204712027Sjungma@eit.uni-kl.de 204812027Sjungma@eit.uni-kl.de 204912027Sjungma@eit.uni-kl.de// auto-increment and auto-decrement 205012027Sjungma@eit.uni-kl.de 205112027Sjungma@eit.uni-kl.deinline 205212027Sjungma@eit.uni-kl.deconst sc_fxval_fast 205312027Sjungma@eit.uni-kl.desc_fxval_fast::operator ++ ( int ) 205412027Sjungma@eit.uni-kl.de{ 205512027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 205612027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 205712027Sjungma@eit.uni-kl.de double c = m_val; 205812027Sjungma@eit.uni-kl.de m_val = m_val + 1; 205912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 206012027Sjungma@eit.uni-kl.de return sc_fxval_fast( c ); 206112027Sjungma@eit.uni-kl.de} 206212027Sjungma@eit.uni-kl.de 206312027Sjungma@eit.uni-kl.deinline 206412027Sjungma@eit.uni-kl.deconst sc_fxval_fast 206512027Sjungma@eit.uni-kl.desc_fxval_fast::operator -- ( int ) 206612027Sjungma@eit.uni-kl.de{ 206712027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 206812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 206912027Sjungma@eit.uni-kl.de double c = m_val; 207012027Sjungma@eit.uni-kl.de m_val = m_val - 1; 207112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 207212027Sjungma@eit.uni-kl.de return sc_fxval_fast( c ); 207312027Sjungma@eit.uni-kl.de} 207412027Sjungma@eit.uni-kl.de 207512027Sjungma@eit.uni-kl.deinline 207612027Sjungma@eit.uni-kl.desc_fxval_fast& 207712027Sjungma@eit.uni-kl.desc_fxval_fast::operator ++ () 207812027Sjungma@eit.uni-kl.de{ 207912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 208012027Sjungma@eit.uni-kl.de m_val = m_val + 1; 208112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 208212027Sjungma@eit.uni-kl.de return *this; 208312027Sjungma@eit.uni-kl.de} 208412027Sjungma@eit.uni-kl.de 208512027Sjungma@eit.uni-kl.deinline 208612027Sjungma@eit.uni-kl.desc_fxval_fast& 208712027Sjungma@eit.uni-kl.desc_fxval_fast::operator -- () 208812027Sjungma@eit.uni-kl.de{ 208912027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 209012027Sjungma@eit.uni-kl.de m_val = m_val - 1; 209112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) 209212027Sjungma@eit.uni-kl.de return *this; 209312027Sjungma@eit.uni-kl.de} 209412027Sjungma@eit.uni-kl.de 209512027Sjungma@eit.uni-kl.de 209612027Sjungma@eit.uni-kl.de// implicit conversion 209712027Sjungma@eit.uni-kl.de 209812027Sjungma@eit.uni-kl.deinline 209912027Sjungma@eit.uni-kl.desc_fxval_fast::operator double() const 210012027Sjungma@eit.uni-kl.de{ 210112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 210212027Sjungma@eit.uni-kl.de return m_val; 210312027Sjungma@eit.uni-kl.de} 210412027Sjungma@eit.uni-kl.de 210512027Sjungma@eit.uni-kl.de 210612027Sjungma@eit.uni-kl.de// explicit conversion to primitive types 210712027Sjungma@eit.uni-kl.de 210812027Sjungma@eit.uni-kl.deinline 210912027Sjungma@eit.uni-kl.deshort 211012027Sjungma@eit.uni-kl.desc_fxval_fast::to_short() const 211112027Sjungma@eit.uni-kl.de{ 211212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 211312027Sjungma@eit.uni-kl.de return static_cast<short>( m_val ); 211412027Sjungma@eit.uni-kl.de} 211512027Sjungma@eit.uni-kl.de 211612027Sjungma@eit.uni-kl.deinline 211712027Sjungma@eit.uni-kl.deunsigned short 211812027Sjungma@eit.uni-kl.desc_fxval_fast::to_ushort() const 211912027Sjungma@eit.uni-kl.de{ 212012027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 212112027Sjungma@eit.uni-kl.de return static_cast<unsigned short>( m_val ); 212212027Sjungma@eit.uni-kl.de} 212312027Sjungma@eit.uni-kl.de 212412027Sjungma@eit.uni-kl.deinline 212512027Sjungma@eit.uni-kl.deint64 212612027Sjungma@eit.uni-kl.desc_fxval_fast::to_int64() const 212712027Sjungma@eit.uni-kl.de{ 212812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 212912027Sjungma@eit.uni-kl.de return static_cast<int64>( m_val ); 213012027Sjungma@eit.uni-kl.de} 213112027Sjungma@eit.uni-kl.de 213212027Sjungma@eit.uni-kl.deinline 213312027Sjungma@eit.uni-kl.deint 213412027Sjungma@eit.uni-kl.desc_fxval_fast::to_int() const 213512027Sjungma@eit.uni-kl.de{ 213612027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 213712027Sjungma@eit.uni-kl.de return static_cast<int>( m_val ); 213812027Sjungma@eit.uni-kl.de} 213912027Sjungma@eit.uni-kl.de 214012027Sjungma@eit.uni-kl.deinline 214112027Sjungma@eit.uni-kl.deunsigned int 214212027Sjungma@eit.uni-kl.desc_fxval_fast::to_uint() const 214312027Sjungma@eit.uni-kl.de{ 214412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 214512027Sjungma@eit.uni-kl.de return static_cast<unsigned int>( m_val ); 214612027Sjungma@eit.uni-kl.de} 214712027Sjungma@eit.uni-kl.de 214812027Sjungma@eit.uni-kl.deinline 214912027Sjungma@eit.uni-kl.deuint64 215012027Sjungma@eit.uni-kl.desc_fxval_fast::to_uint64() const 215112027Sjungma@eit.uni-kl.de{ 215212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 215312027Sjungma@eit.uni-kl.de return static_cast<uint64>( m_val ); 215412027Sjungma@eit.uni-kl.de} 215512027Sjungma@eit.uni-kl.de 215612027Sjungma@eit.uni-kl.deinline 215712027Sjungma@eit.uni-kl.delong 215812027Sjungma@eit.uni-kl.desc_fxval_fast::to_long() const 215912027Sjungma@eit.uni-kl.de{ 216012027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 216112027Sjungma@eit.uni-kl.de return static_cast<long>( m_val ); 216212027Sjungma@eit.uni-kl.de} 216312027Sjungma@eit.uni-kl.de 216412027Sjungma@eit.uni-kl.deinline 216512027Sjungma@eit.uni-kl.deunsigned long 216612027Sjungma@eit.uni-kl.desc_fxval_fast::to_ulong() const 216712027Sjungma@eit.uni-kl.de{ 216812027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 216912027Sjungma@eit.uni-kl.de return static_cast<unsigned long>( m_val ); 217012027Sjungma@eit.uni-kl.de} 217112027Sjungma@eit.uni-kl.de 217212027Sjungma@eit.uni-kl.deinline 217312027Sjungma@eit.uni-kl.defloat 217412027Sjungma@eit.uni-kl.desc_fxval_fast::to_float() const 217512027Sjungma@eit.uni-kl.de{ 217612027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 217712027Sjungma@eit.uni-kl.de return static_cast<float>( m_val ); 217812027Sjungma@eit.uni-kl.de} 217912027Sjungma@eit.uni-kl.de 218012027Sjungma@eit.uni-kl.deinline 218112027Sjungma@eit.uni-kl.dedouble 218212027Sjungma@eit.uni-kl.desc_fxval_fast::to_double() const 218312027Sjungma@eit.uni-kl.de{ 218412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 218512027Sjungma@eit.uni-kl.de return m_val; 218612027Sjungma@eit.uni-kl.de} 218712027Sjungma@eit.uni-kl.de 218812027Sjungma@eit.uni-kl.de 218912027Sjungma@eit.uni-kl.de// query value 219012027Sjungma@eit.uni-kl.de 219112027Sjungma@eit.uni-kl.deinline 219212027Sjungma@eit.uni-kl.debool 219312027Sjungma@eit.uni-kl.desc_fxval_fast::is_neg() const 219412027Sjungma@eit.uni-kl.de{ 219512027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 219612027Sjungma@eit.uni-kl.de scfx_ieee_double id( m_val ); 219712027Sjungma@eit.uni-kl.de return ( id.negative() != 0 ); 219812027Sjungma@eit.uni-kl.de} 219912027Sjungma@eit.uni-kl.de 220012027Sjungma@eit.uni-kl.deinline 220112027Sjungma@eit.uni-kl.debool 220212027Sjungma@eit.uni-kl.desc_fxval_fast::is_zero() const 220312027Sjungma@eit.uni-kl.de{ 220412027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 220512027Sjungma@eit.uni-kl.de scfx_ieee_double id( m_val ); 220612027Sjungma@eit.uni-kl.de return id.is_zero(); 220712027Sjungma@eit.uni-kl.de} 220812027Sjungma@eit.uni-kl.de 220912027Sjungma@eit.uni-kl.deinline 221012027Sjungma@eit.uni-kl.debool 221112027Sjungma@eit.uni-kl.desc_fxval_fast::is_nan() const 221212027Sjungma@eit.uni-kl.de{ 221312027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 221412027Sjungma@eit.uni-kl.de scfx_ieee_double id( m_val ); 221512027Sjungma@eit.uni-kl.de return id.is_nan(); 221612027Sjungma@eit.uni-kl.de} 221712027Sjungma@eit.uni-kl.de 221812027Sjungma@eit.uni-kl.deinline 221912027Sjungma@eit.uni-kl.debool 222012027Sjungma@eit.uni-kl.desc_fxval_fast::is_inf() const 222112027Sjungma@eit.uni-kl.de{ 222212027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 222312027Sjungma@eit.uni-kl.de scfx_ieee_double id( m_val ); 222412027Sjungma@eit.uni-kl.de return id.is_inf(); 222512027Sjungma@eit.uni-kl.de} 222612027Sjungma@eit.uni-kl.de 222712027Sjungma@eit.uni-kl.deinline 222812027Sjungma@eit.uni-kl.debool 222912027Sjungma@eit.uni-kl.desc_fxval_fast::is_normal() const 223012027Sjungma@eit.uni-kl.de{ 223112027Sjungma@eit.uni-kl.de SC_FXVAL_FAST_OBSERVER_READ_( *this ) 223212027Sjungma@eit.uni-kl.de scfx_ieee_double id( m_val ); 223312027Sjungma@eit.uni-kl.de return ( id.is_normal() || id.is_subnormal() || id.is_zero() ); 223412027Sjungma@eit.uni-kl.de} 223512027Sjungma@eit.uni-kl.de 223612027Sjungma@eit.uni-kl.de 223712027Sjungma@eit.uni-kl.deinline 223812027Sjungma@eit.uni-kl.debool 223912027Sjungma@eit.uni-kl.desc_fxval_fast::rounding_flag() const 224012027Sjungma@eit.uni-kl.de{ 224112027Sjungma@eit.uni-kl.de // does not apply to sc_fxval_fast; included for API compatibility 224212027Sjungma@eit.uni-kl.de return false; 224312027Sjungma@eit.uni-kl.de} 224412027Sjungma@eit.uni-kl.de 224512027Sjungma@eit.uni-kl.de 224612027Sjungma@eit.uni-kl.deinline 224712027Sjungma@eit.uni-kl.de::std::ostream& 224812027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_fxval_fast& a ) 224912027Sjungma@eit.uni-kl.de{ 225012027Sjungma@eit.uni-kl.de a.print( os ); 225112027Sjungma@eit.uni-kl.de return os; 225212027Sjungma@eit.uni-kl.de} 225312027Sjungma@eit.uni-kl.de 225412027Sjungma@eit.uni-kl.deinline 225512027Sjungma@eit.uni-kl.de::std::istream& 225612027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_fxval_fast& a ) 225712027Sjungma@eit.uni-kl.de{ 225812027Sjungma@eit.uni-kl.de a.scan( is ); 225912027Sjungma@eit.uni-kl.de return is; 226012027Sjungma@eit.uni-kl.de} 226112027Sjungma@eit.uni-kl.de 226212027Sjungma@eit.uni-kl.de} // namespace sc_dt 226312027Sjungma@eit.uni-kl.de 226412027Sjungma@eit.uni-kl.de#undef SCFX_EXPLICIT_ 226512027Sjungma@eit.uni-kl.de#undef SCFX_EXPLICIT_OTHER_ 226612027Sjungma@eit.uni-kl.de 226712027Sjungma@eit.uni-kl.de#endif 226812027Sjungma@eit.uni-kl.de 226912027Sjungma@eit.uni-kl.de// Taf! 2270