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