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