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_bit_proxies.h -- Proxy classes for vector data types.
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Author: Gene Bushuyev, Synopsys, Inc.
2512027Sjungma@eit.uni-kl.de
2612027Sjungma@eit.uni-kl.de CHANGE LOG AT THE END OF THE FILE
2712027Sjungma@eit.uni-kl.de *****************************************************************************/
2812027Sjungma@eit.uni-kl.de
2912027Sjungma@eit.uni-kl.de#ifndef SC_BIT_PROXIES_H
3012027Sjungma@eit.uni-kl.de#define SC_BIT_PROXIES_H
3112027Sjungma@eit.uni-kl.de
3212027Sjungma@eit.uni-kl.de
3312027Sjungma@eit.uni-kl.de#include "sysc/datatypes/bit/sc_bit_ids.h"
3412027Sjungma@eit.uni-kl.de#include "sysc/datatypes/bit/sc_proxy.h"
3512027Sjungma@eit.uni-kl.de
3612027Sjungma@eit.uni-kl.de
3712027Sjungma@eit.uni-kl.denamespace sc_dt
3812027Sjungma@eit.uni-kl.de{
3912027Sjungma@eit.uni-kl.de
4012027Sjungma@eit.uni-kl.de// classes defined in this module
4112027Sjungma@eit.uni-kl.detemplate <class X> class sc_bitref_r;
4212027Sjungma@eit.uni-kl.detemplate <class X> class sc_bitref;
4312027Sjungma@eit.uni-kl.detemplate <class X> class sc_subref_r;
4412027Sjungma@eit.uni-kl.detemplate <class X> class sc_subref;
4512027Sjungma@eit.uni-kl.detemplate <class X, class Y> class sc_concref_r;
4612027Sjungma@eit.uni-kl.detemplate <class X, class Y> class sc_concref;
4712027Sjungma@eit.uni-kl.de
4812027Sjungma@eit.uni-kl.de
4912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
5012027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_bitref_r<T>
5112027Sjungma@eit.uni-kl.de//
5212027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy bit selection (r-value only).
5312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
5412027Sjungma@eit.uni-kl.de
5512027Sjungma@eit.uni-kl.detemplate <class T>
5612027Sjungma@eit.uni-kl.declass sc_bitref_r
5712027Sjungma@eit.uni-kl.de{
5812027Sjungma@eit.uni-kl.de    friend class sc_bv_base;
5912027Sjungma@eit.uni-kl.de    friend class sc_lv_base;
6012027Sjungma@eit.uni-kl.de
6112027Sjungma@eit.uni-kl.depublic:
6212027Sjungma@eit.uni-kl.de
6312027Sjungma@eit.uni-kl.de    // typedefs
6412027Sjungma@eit.uni-kl.de
6512027Sjungma@eit.uni-kl.de    typedef typename T::traits_type          traits_type;
6612027Sjungma@eit.uni-kl.de    typedef typename traits_type::bit_type   bit_type;
6712027Sjungma@eit.uni-kl.de
6812027Sjungma@eit.uni-kl.de    // constructor
6912027Sjungma@eit.uni-kl.de
7012027Sjungma@eit.uni-kl.de    sc_bitref_r( const T& obj_, int index_ )
7112027Sjungma@eit.uni-kl.de	: m_obj( CCAST<T&>( obj_ ) ), m_index( index_ )
7212027Sjungma@eit.uni-kl.de	{}
7312027Sjungma@eit.uni-kl.de
7412027Sjungma@eit.uni-kl.de
7512027Sjungma@eit.uni-kl.de    // copy constructor
7612027Sjungma@eit.uni-kl.de
7712027Sjungma@eit.uni-kl.de    sc_bitref_r( const sc_bitref_r<T>& a )
7812027Sjungma@eit.uni-kl.de	: m_obj( a.m_obj ), m_index( a.m_index )
7912027Sjungma@eit.uni-kl.de	{}
8012027Sjungma@eit.uni-kl.de
8112027Sjungma@eit.uni-kl.de    // cloning
8212027Sjungma@eit.uni-kl.de
8312027Sjungma@eit.uni-kl.de    sc_bitref_r<T>* clone() const
8412027Sjungma@eit.uni-kl.de	{ return new sc_bitref_r<T>( *this ); }
8512027Sjungma@eit.uni-kl.de
8612027Sjungma@eit.uni-kl.de
8712027Sjungma@eit.uni-kl.de    // bitwise operators and functions
8812027Sjungma@eit.uni-kl.de
8912027Sjungma@eit.uni-kl.de    // bitwise complement
9012027Sjungma@eit.uni-kl.de
9112027Sjungma@eit.uni-kl.de    const bit_type operator ~ () const
9212027Sjungma@eit.uni-kl.de        { return bit_type( sc_logic::not_table[value()] ); }
9312027Sjungma@eit.uni-kl.de
9412027Sjungma@eit.uni-kl.de
9512027Sjungma@eit.uni-kl.de    // implicit conversion to bit_type
9612027Sjungma@eit.uni-kl.de
9712027Sjungma@eit.uni-kl.de    operator const bit_type() const
9812027Sjungma@eit.uni-kl.de        { return bit_type( m_obj.get_bit( m_index ) ); }
9912027Sjungma@eit.uni-kl.de
10012027Sjungma@eit.uni-kl.de
10112027Sjungma@eit.uni-kl.de    // explicit conversions
10212027Sjungma@eit.uni-kl.de
10312027Sjungma@eit.uni-kl.de    sc_logic_value_t value() const
10412027Sjungma@eit.uni-kl.de	{ return m_obj.get_bit( m_index ); }
10512027Sjungma@eit.uni-kl.de
10612027Sjungma@eit.uni-kl.de
10712027Sjungma@eit.uni-kl.de    bool is_01() const
10812027Sjungma@eit.uni-kl.de	{ return sc_logic( value() ).is_01(); }
10912027Sjungma@eit.uni-kl.de
11012027Sjungma@eit.uni-kl.de    bool to_bool() const
11112027Sjungma@eit.uni-kl.de	{ return sc_logic( value() ).to_bool(); }
11212027Sjungma@eit.uni-kl.de
11312027Sjungma@eit.uni-kl.de    char to_char() const
11412027Sjungma@eit.uni-kl.de	{ return sc_logic( value() ).to_char(); }
11512027Sjungma@eit.uni-kl.de
11612027Sjungma@eit.uni-kl.de
11712027Sjungma@eit.uni-kl.de    // common methods
11812027Sjungma@eit.uni-kl.de
11912027Sjungma@eit.uni-kl.de    int length() const
12012027Sjungma@eit.uni-kl.de	{ return 1; }
12112027Sjungma@eit.uni-kl.de
12212027Sjungma@eit.uni-kl.de    int size() const
12312027Sjungma@eit.uni-kl.de	{ return ( (length() - 1) / SC_DIGIT_SIZE + 1 ); }
12412027Sjungma@eit.uni-kl.de
12512027Sjungma@eit.uni-kl.de    sc_logic_value_t get_bit( int n ) const;
12612027Sjungma@eit.uni-kl.de
12712027Sjungma@eit.uni-kl.de    sc_digit get_word( int i ) const;
12812027Sjungma@eit.uni-kl.de    sc_digit get_cword( int i ) const;
12912027Sjungma@eit.uni-kl.de
13012027Sjungma@eit.uni-kl.de
13112027Sjungma@eit.uni-kl.de    // other methods
13212027Sjungma@eit.uni-kl.de
13312027Sjungma@eit.uni-kl.de    void print( ::std::ostream& os = ::std::cout ) const
13412027Sjungma@eit.uni-kl.de	{ os << to_char(); }
13512027Sjungma@eit.uni-kl.de
13612027Sjungma@eit.uni-kl.deprotected:
13712027Sjungma@eit.uni-kl.de
13812027Sjungma@eit.uni-kl.de    T&  m_obj;
13912027Sjungma@eit.uni-kl.de    int m_index;
14012027Sjungma@eit.uni-kl.de
14112027Sjungma@eit.uni-kl.deprivate:
14212027Sjungma@eit.uni-kl.de
14312027Sjungma@eit.uni-kl.de    // disabled
14412027Sjungma@eit.uni-kl.de    sc_bitref_r();
14512027Sjungma@eit.uni-kl.de    sc_bitref_r<T>& operator = ( const sc_bitref_r<T>& );
14612027Sjungma@eit.uni-kl.de};
14712027Sjungma@eit.uni-kl.de
14812027Sjungma@eit.uni-kl.de
14912027Sjungma@eit.uni-kl.de// bitwise operators and functions
15012027Sjungma@eit.uni-kl.de
15112027Sjungma@eit.uni-kl.de// bitwise and
15212027Sjungma@eit.uni-kl.de
15312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
15412027Sjungma@eit.uni-kl.deinline
15512027Sjungma@eit.uni-kl.deconst sc_logic
15612027Sjungma@eit.uni-kl.deoperator & ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b );
15712027Sjungma@eit.uni-kl.de
15812027Sjungma@eit.uni-kl.de
15912027Sjungma@eit.uni-kl.de// bitwise or
16012027Sjungma@eit.uni-kl.de
16112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
16212027Sjungma@eit.uni-kl.deinline
16312027Sjungma@eit.uni-kl.deconst sc_logic
16412027Sjungma@eit.uni-kl.deoperator | ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b );
16512027Sjungma@eit.uni-kl.de
16612027Sjungma@eit.uni-kl.de
16712027Sjungma@eit.uni-kl.de// bitwise xor
16812027Sjungma@eit.uni-kl.de
16912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
17012027Sjungma@eit.uni-kl.deinline
17112027Sjungma@eit.uni-kl.deconst sc_logic
17212027Sjungma@eit.uni-kl.deoperator ^ ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b );
17312027Sjungma@eit.uni-kl.de
17412027Sjungma@eit.uni-kl.de
17512027Sjungma@eit.uni-kl.de// relational operators and functions
17612027Sjungma@eit.uni-kl.de
17712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
17812027Sjungma@eit.uni-kl.deinline
17912027Sjungma@eit.uni-kl.debool
18012027Sjungma@eit.uni-kl.deoperator == ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b );
18112027Sjungma@eit.uni-kl.de
18212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
18312027Sjungma@eit.uni-kl.deinline
18412027Sjungma@eit.uni-kl.debool
18512027Sjungma@eit.uni-kl.deoperator != ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b );
18612027Sjungma@eit.uni-kl.de
18712027Sjungma@eit.uni-kl.de
18812027Sjungma@eit.uni-kl.de// r-value concatenation operators and functions
18912027Sjungma@eit.uni-kl.de
19012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
19112027Sjungma@eit.uni-kl.deinline
19212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
19312027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1>, sc_bitref_r<T2> );
19412027Sjungma@eit.uni-kl.de
19512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
19612027Sjungma@eit.uni-kl.deinline
19712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
19812027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1>, sc_subref_r<T2> );
19912027Sjungma@eit.uni-kl.de
20012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
20112027Sjungma@eit.uni-kl.deinline
20212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
20312027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1>, sc_concref_r<T2,T3> );
20412027Sjungma@eit.uni-kl.de
20512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
20612027Sjungma@eit.uni-kl.deinline
20712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
20812027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1>, const sc_proxy<T2>& );
20912027Sjungma@eit.uni-kl.de
21012027Sjungma@eit.uni-kl.detemplate <class T>
21112027Sjungma@eit.uni-kl.deinline
21212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
21312027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T>, const char* );
21412027Sjungma@eit.uni-kl.de
21512027Sjungma@eit.uni-kl.detemplate <class T>
21612027Sjungma@eit.uni-kl.deinline
21712027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
21812027Sjungma@eit.uni-kl.deoperator , ( const char*, sc_bitref_r<T> );
21912027Sjungma@eit.uni-kl.de
22012027Sjungma@eit.uni-kl.detemplate <class T>
22112027Sjungma@eit.uni-kl.deinline
22212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
22312027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T>, const sc_logic& );
22412027Sjungma@eit.uni-kl.de
22512027Sjungma@eit.uni-kl.detemplate <class T>
22612027Sjungma@eit.uni-kl.deinline
22712027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
22812027Sjungma@eit.uni-kl.deoperator , ( const sc_logic&, sc_bitref_r<T> );
22912027Sjungma@eit.uni-kl.de
23012027Sjungma@eit.uni-kl.detemplate <class T>
23112027Sjungma@eit.uni-kl.deinline
23212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
23312027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T>, bool );
23412027Sjungma@eit.uni-kl.de
23512027Sjungma@eit.uni-kl.detemplate <class T>
23612027Sjungma@eit.uni-kl.deinline
23712027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
23812027Sjungma@eit.uni-kl.deoperator , ( bool, sc_bitref_r<T> );
23912027Sjungma@eit.uni-kl.de
24012027Sjungma@eit.uni-kl.de
24112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
24212027Sjungma@eit.uni-kl.deinline
24312027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
24412027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1>, sc_bitref_r<T2> );
24512027Sjungma@eit.uni-kl.de
24612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
24712027Sjungma@eit.uni-kl.deinline
24812027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
24912027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1>, sc_subref_r<T2> );
25012027Sjungma@eit.uni-kl.de
25112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
25212027Sjungma@eit.uni-kl.deinline
25312027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
25412027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1>, sc_concref_r<T2,T3> );
25512027Sjungma@eit.uni-kl.de
25612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
25712027Sjungma@eit.uni-kl.deinline
25812027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
25912027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1>, const sc_proxy<T2>& );
26012027Sjungma@eit.uni-kl.de
26112027Sjungma@eit.uni-kl.detemplate <class T>
26212027Sjungma@eit.uni-kl.deinline
26312027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
26412027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T>, const char* );
26512027Sjungma@eit.uni-kl.de
26612027Sjungma@eit.uni-kl.detemplate <class T>
26712027Sjungma@eit.uni-kl.deinline
26812027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
26912027Sjungma@eit.uni-kl.deconcat( const char*, sc_bitref_r<T> );
27012027Sjungma@eit.uni-kl.de
27112027Sjungma@eit.uni-kl.detemplate <class T>
27212027Sjungma@eit.uni-kl.deinline
27312027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
27412027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T>, const sc_logic& );
27512027Sjungma@eit.uni-kl.de
27612027Sjungma@eit.uni-kl.detemplate <class T>
27712027Sjungma@eit.uni-kl.deinline
27812027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
27912027Sjungma@eit.uni-kl.deconcat( const sc_logic&, sc_bitref_r<T> );
28012027Sjungma@eit.uni-kl.de
28112027Sjungma@eit.uni-kl.detemplate <class T>
28212027Sjungma@eit.uni-kl.deinline
28312027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
28412027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T>, bool );
28512027Sjungma@eit.uni-kl.de
28612027Sjungma@eit.uni-kl.detemplate <class T>
28712027Sjungma@eit.uni-kl.deinline
28812027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
28912027Sjungma@eit.uni-kl.deconcat( bool, sc_bitref_r<T> );
29012027Sjungma@eit.uni-kl.de
29112027Sjungma@eit.uni-kl.de
29212027Sjungma@eit.uni-kl.de#ifdef SC_DT_MIXED_COMMA_OPERATORS
29312027Sjungma@eit.uni-kl.de
29412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
29512027Sjungma@eit.uni-kl.deinline
29612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
29712027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1>, sc_bitref<T2> );
29812027Sjungma@eit.uni-kl.de
29912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
30012027Sjungma@eit.uni-kl.deinline
30112027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
30212027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1>, sc_bitref_r<T2> );
30312027Sjungma@eit.uni-kl.de
30412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
30512027Sjungma@eit.uni-kl.deinline
30612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
30712027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1>, sc_subref<T2> );
30812027Sjungma@eit.uni-kl.de
30912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
31012027Sjungma@eit.uni-kl.deinline
31112027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
31212027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1>, sc_subref_r<T2> );
31312027Sjungma@eit.uni-kl.de
31412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
31512027Sjungma@eit.uni-kl.deinline
31612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
31712027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1>, sc_concref<T2,T3> );
31812027Sjungma@eit.uni-kl.de
31912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
32012027Sjungma@eit.uni-kl.deinline
32112027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
32212027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1>, sc_concref_r<T2,T3> );
32312027Sjungma@eit.uni-kl.de
32412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
32512027Sjungma@eit.uni-kl.deinline
32612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
32712027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1>, const sc_proxy<T2>& );
32812027Sjungma@eit.uni-kl.de
32912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
33012027Sjungma@eit.uni-kl.deinline
33112027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
33212027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1>, sc_proxy<T2>& );
33312027Sjungma@eit.uni-kl.de
33412027Sjungma@eit.uni-kl.detemplate <class T>
33512027Sjungma@eit.uni-kl.deinline
33612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
33712027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T>, const char* );
33812027Sjungma@eit.uni-kl.de
33912027Sjungma@eit.uni-kl.detemplate <class T>
34012027Sjungma@eit.uni-kl.deinline
34112027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
34212027Sjungma@eit.uni-kl.deoperator , ( const char*, sc_bitref<T> );
34312027Sjungma@eit.uni-kl.de
34412027Sjungma@eit.uni-kl.detemplate <class T>
34512027Sjungma@eit.uni-kl.deinline
34612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
34712027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T>, const sc_logic& );
34812027Sjungma@eit.uni-kl.de
34912027Sjungma@eit.uni-kl.detemplate <class T>
35012027Sjungma@eit.uni-kl.deinline
35112027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
35212027Sjungma@eit.uni-kl.deoperator , ( const sc_logic&, sc_bitref<T> );
35312027Sjungma@eit.uni-kl.de
35412027Sjungma@eit.uni-kl.detemplate <class T>
35512027Sjungma@eit.uni-kl.deinline
35612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
35712027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T>, bool );
35812027Sjungma@eit.uni-kl.de
35912027Sjungma@eit.uni-kl.detemplate <class T>
36012027Sjungma@eit.uni-kl.deinline
36112027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
36212027Sjungma@eit.uni-kl.deoperator , ( bool, sc_bitref<T> );
36312027Sjungma@eit.uni-kl.de
36412027Sjungma@eit.uni-kl.de
36512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
36612027Sjungma@eit.uni-kl.deinline
36712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
36812027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1>, sc_bitref<T2> );
36912027Sjungma@eit.uni-kl.de
37012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
37112027Sjungma@eit.uni-kl.deinline
37212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
37312027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1>, sc_bitref_r<T2> );
37412027Sjungma@eit.uni-kl.de
37512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
37612027Sjungma@eit.uni-kl.deinline
37712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
37812027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1>, sc_subref<T2> );
37912027Sjungma@eit.uni-kl.de
38012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
38112027Sjungma@eit.uni-kl.deinline
38212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
38312027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1>, sc_subref_r<T2> );
38412027Sjungma@eit.uni-kl.de
38512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
38612027Sjungma@eit.uni-kl.deinline
38712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
38812027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1>, sc_concref<T2,T3> );
38912027Sjungma@eit.uni-kl.de
39012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
39112027Sjungma@eit.uni-kl.deinline
39212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
39312027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1>, sc_concref_r<T2,T3> );
39412027Sjungma@eit.uni-kl.de
39512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
39612027Sjungma@eit.uni-kl.deinline
39712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
39812027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1>, const sc_proxy<T2>& );
39912027Sjungma@eit.uni-kl.de
40012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
40112027Sjungma@eit.uni-kl.deinline
40212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
40312027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1>, sc_proxy<T2>& );
40412027Sjungma@eit.uni-kl.de
40512027Sjungma@eit.uni-kl.detemplate <class T>
40612027Sjungma@eit.uni-kl.deinline
40712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
40812027Sjungma@eit.uni-kl.deconcat( sc_bitref<T>, const char* );
40912027Sjungma@eit.uni-kl.de
41012027Sjungma@eit.uni-kl.detemplate <class T>
41112027Sjungma@eit.uni-kl.deinline
41212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
41312027Sjungma@eit.uni-kl.deconcat( const char*, sc_bitref<T> );
41412027Sjungma@eit.uni-kl.de
41512027Sjungma@eit.uni-kl.detemplate <class T>
41612027Sjungma@eit.uni-kl.deinline
41712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
41812027Sjungma@eit.uni-kl.deconcat( sc_bitref<T>, const sc_logic& );
41912027Sjungma@eit.uni-kl.de
42012027Sjungma@eit.uni-kl.detemplate <class T>
42112027Sjungma@eit.uni-kl.deinline
42212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
42312027Sjungma@eit.uni-kl.deconcat( const sc_logic&, sc_bitref<T> );
42412027Sjungma@eit.uni-kl.de
42512027Sjungma@eit.uni-kl.detemplate <class T>
42612027Sjungma@eit.uni-kl.deinline
42712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T>,sc_lv_base>
42812027Sjungma@eit.uni-kl.deconcat( sc_bitref<T>, bool );
42912027Sjungma@eit.uni-kl.de
43012027Sjungma@eit.uni-kl.detemplate <class T>
43112027Sjungma@eit.uni-kl.deinline
43212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_bitref_r<T> >
43312027Sjungma@eit.uni-kl.deconcat( bool, sc_bitref<T> );
43412027Sjungma@eit.uni-kl.de
43512027Sjungma@eit.uni-kl.de#endif
43612027Sjungma@eit.uni-kl.de
43712027Sjungma@eit.uni-kl.de
43812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
43912027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_bitref<X>
44012027Sjungma@eit.uni-kl.de//
44112027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy bit selection (r-value and l-value).
44212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
44312027Sjungma@eit.uni-kl.de
44412027Sjungma@eit.uni-kl.detemplate <class X>
44512027Sjungma@eit.uni-kl.declass sc_bitref
44612027Sjungma@eit.uni-kl.de    : public sc_bitref_r<X>
44712027Sjungma@eit.uni-kl.de{
44812027Sjungma@eit.uni-kl.de    friend class sc_bv_base;
44912027Sjungma@eit.uni-kl.de    friend class sc_lv_base;
45012027Sjungma@eit.uni-kl.de
45112027Sjungma@eit.uni-kl.depublic:
45212027Sjungma@eit.uni-kl.de
45312027Sjungma@eit.uni-kl.de    // constructor
45412027Sjungma@eit.uni-kl.de
45512027Sjungma@eit.uni-kl.de    sc_bitref( X& obj_, int index_ )
45612027Sjungma@eit.uni-kl.de	: sc_bitref_r<X>( obj_, index_ )
45712027Sjungma@eit.uni-kl.de	{}
45812027Sjungma@eit.uni-kl.de
45912027Sjungma@eit.uni-kl.de
46012027Sjungma@eit.uni-kl.de    // copy constructor
46112027Sjungma@eit.uni-kl.de
46212027Sjungma@eit.uni-kl.de    sc_bitref( const sc_bitref<X>& a )
46312027Sjungma@eit.uni-kl.de	: sc_bitref_r<X>( a )
46412027Sjungma@eit.uni-kl.de	{}
46512027Sjungma@eit.uni-kl.de
46612027Sjungma@eit.uni-kl.de
46712027Sjungma@eit.uni-kl.de    // cloning
46812027Sjungma@eit.uni-kl.de
46912027Sjungma@eit.uni-kl.de    sc_bitref<X>* clone() const
47012027Sjungma@eit.uni-kl.de	{ return new sc_bitref<X>( *this ); }
47112027Sjungma@eit.uni-kl.de
47212027Sjungma@eit.uni-kl.de
47312027Sjungma@eit.uni-kl.de    // assignment operators
47412027Sjungma@eit.uni-kl.de
47512027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator = ( const sc_bitref_r<X>& a );
47612027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator = ( const sc_bitref<X>& a );
47712027Sjungma@eit.uni-kl.de
47812027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator = ( const sc_logic& a )
47912027Sjungma@eit.uni-kl.de	{ this->m_obj.set_bit( this->m_index, a.value() ); return *this; }
48012027Sjungma@eit.uni-kl.de
48112027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator = ( sc_logic_value_t v )
48212027Sjungma@eit.uni-kl.de	{ *this = sc_logic( v ); return *this; }
48312027Sjungma@eit.uni-kl.de
48412027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator = ( bool a )
48512027Sjungma@eit.uni-kl.de	{ *this = sc_logic( a ); return *this; }
48612027Sjungma@eit.uni-kl.de
48712027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator = ( char a )
48812027Sjungma@eit.uni-kl.de	{ *this = sc_logic( a ); return *this; }
48912027Sjungma@eit.uni-kl.de
49012027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator = ( int a )
49112027Sjungma@eit.uni-kl.de	{ *this = sc_logic( a ); return *this; }
49212027Sjungma@eit.uni-kl.de
49312027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator = ( const sc_bit& a )
49412027Sjungma@eit.uni-kl.de	{ *this = sc_logic( a ); return *this; }
49512027Sjungma@eit.uni-kl.de
49612027Sjungma@eit.uni-kl.de
49712027Sjungma@eit.uni-kl.de    // bitwise assignment operators
49812027Sjungma@eit.uni-kl.de
49912027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator &= ( const sc_bitref_r<X>& a );
50012027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator &= ( const sc_logic& a );
50112027Sjungma@eit.uni-kl.de
50212027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator &= ( sc_logic_value_t v )
50312027Sjungma@eit.uni-kl.de	{ *this &= sc_logic( v ); return *this; }
50412027Sjungma@eit.uni-kl.de
50512027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator &= ( bool a )
50612027Sjungma@eit.uni-kl.de	{ *this &= sc_logic( a ); return *this; }
50712027Sjungma@eit.uni-kl.de
50812027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator &= ( char a )
50912027Sjungma@eit.uni-kl.de	{ *this &= sc_logic( a ); return *this; }
51012027Sjungma@eit.uni-kl.de
51112027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator &= ( int a )
51212027Sjungma@eit.uni-kl.de	{ *this &= sc_logic( a ); return *this; }
51312027Sjungma@eit.uni-kl.de
51412027Sjungma@eit.uni-kl.de
51512027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator |= ( const sc_bitref_r<X>& a );
51612027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator |= ( const sc_logic& a );
51712027Sjungma@eit.uni-kl.de
51812027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator |= ( sc_logic_value_t v )
51912027Sjungma@eit.uni-kl.de	{ *this |= sc_logic( v ); return *this; }
52012027Sjungma@eit.uni-kl.de
52112027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator |= ( bool a )
52212027Sjungma@eit.uni-kl.de	{ *this |= sc_logic( a ); return *this; }
52312027Sjungma@eit.uni-kl.de
52412027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator |= ( char a )
52512027Sjungma@eit.uni-kl.de	{ *this |= sc_logic( a ); return *this; }
52612027Sjungma@eit.uni-kl.de
52712027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator |= ( int a )
52812027Sjungma@eit.uni-kl.de	{ *this |= sc_logic( a ); return *this; }
52912027Sjungma@eit.uni-kl.de
53012027Sjungma@eit.uni-kl.de
53112027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator ^= ( const sc_bitref_r<X>& a );
53212027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator ^= ( const sc_logic& a );
53312027Sjungma@eit.uni-kl.de
53412027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator ^= ( sc_logic_value_t v )
53512027Sjungma@eit.uni-kl.de	{ *this ^= sc_logic( v ); return *this; }
53612027Sjungma@eit.uni-kl.de
53712027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator ^= ( bool a )
53812027Sjungma@eit.uni-kl.de	{ *this ^= sc_logic( a ); return *this; }
53912027Sjungma@eit.uni-kl.de
54012027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator ^= ( char a )
54112027Sjungma@eit.uni-kl.de	{ *this ^= sc_logic( a ); return *this; }
54212027Sjungma@eit.uni-kl.de
54312027Sjungma@eit.uni-kl.de    sc_bitref<X>& operator ^= ( int a )
54412027Sjungma@eit.uni-kl.de	{ *this ^= sc_logic( a ); return *this; }
54512027Sjungma@eit.uni-kl.de
54612027Sjungma@eit.uni-kl.de
54712027Sjungma@eit.uni-kl.de    // bitwise operators and functions
54812027Sjungma@eit.uni-kl.de
54912027Sjungma@eit.uni-kl.de    // bitwise complement
55012027Sjungma@eit.uni-kl.de
55112027Sjungma@eit.uni-kl.de    sc_bitref<X>& b_not();
55212027Sjungma@eit.uni-kl.de
55312027Sjungma@eit.uni-kl.de
55412027Sjungma@eit.uni-kl.de    // common methods
55512027Sjungma@eit.uni-kl.de
55612027Sjungma@eit.uni-kl.de    void set_bit( int n, sc_logic_value_t value );
55712027Sjungma@eit.uni-kl.de
55812027Sjungma@eit.uni-kl.de    void set_word( int i, sc_digit w );
55912027Sjungma@eit.uni-kl.de    void set_cword( int i, sc_digit w );
56012027Sjungma@eit.uni-kl.de
56112027Sjungma@eit.uni-kl.de    void clean_tail()
56212027Sjungma@eit.uni-kl.de	{ this->m_obj.clean_tail(); }
56312027Sjungma@eit.uni-kl.de
56412027Sjungma@eit.uni-kl.de
56512027Sjungma@eit.uni-kl.de    // other methods
56612027Sjungma@eit.uni-kl.de
56712027Sjungma@eit.uni-kl.de    void scan( ::std::istream& is = ::std::cin );
56812027Sjungma@eit.uni-kl.de
56912027Sjungma@eit.uni-kl.deprivate:
57012027Sjungma@eit.uni-kl.de
57112027Sjungma@eit.uni-kl.de    // disabled
57212027Sjungma@eit.uni-kl.de    sc_bitref();
57312027Sjungma@eit.uni-kl.de};
57412027Sjungma@eit.uni-kl.de
57512027Sjungma@eit.uni-kl.de
57612027Sjungma@eit.uni-kl.de// l-value concatenation operators and functions
57712027Sjungma@eit.uni-kl.de
57812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
57912027Sjungma@eit.uni-kl.deinline
58012027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_bitref<T2> >
58112027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1>, sc_bitref<T2> );
58212027Sjungma@eit.uni-kl.de
58312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
58412027Sjungma@eit.uni-kl.deinline
58512027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_subref<T2> >
58612027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1>, sc_subref<T2> );
58712027Sjungma@eit.uni-kl.de
58812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
58912027Sjungma@eit.uni-kl.deinline
59012027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_concref<T2,T3> >
59112027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1>, sc_concref<T2,T3> );
59212027Sjungma@eit.uni-kl.de
59312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
59412027Sjungma@eit.uni-kl.deinline
59512027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,T2>
59612027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1>, sc_proxy<T2>& );
59712027Sjungma@eit.uni-kl.de
59812027Sjungma@eit.uni-kl.de
59912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
60012027Sjungma@eit.uni-kl.deinline
60112027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_bitref<T2> >
60212027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1>, sc_bitref<T2> );
60312027Sjungma@eit.uni-kl.de
60412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
60512027Sjungma@eit.uni-kl.deinline
60612027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_subref<T2> >
60712027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1>, sc_subref<T2> );
60812027Sjungma@eit.uni-kl.de
60912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
61012027Sjungma@eit.uni-kl.deinline
61112027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_concref<T2,T3> >
61212027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1>, sc_concref<T2,T3> );
61312027Sjungma@eit.uni-kl.de
61412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
61512027Sjungma@eit.uni-kl.deinline
61612027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,T2>
61712027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1>, sc_proxy<T2>& );
61812027Sjungma@eit.uni-kl.de
61912027Sjungma@eit.uni-kl.de
62012027Sjungma@eit.uni-kl.detemplate <class T>
62112027Sjungma@eit.uni-kl.de::std::istream&
62212027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream&, sc_bitref<T> );
62312027Sjungma@eit.uni-kl.de
62412027Sjungma@eit.uni-kl.de
62512027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
62612027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_subref_r<X>
62712027Sjungma@eit.uni-kl.de//
62812027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy part selection (r-value only).
62912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
63012027Sjungma@eit.uni-kl.de
63112027Sjungma@eit.uni-kl.detemplate <class X>
63212027Sjungma@eit.uni-kl.declass sc_subref_r
63312027Sjungma@eit.uni-kl.de    : public sc_proxy<sc_subref_r<X> >
63412027Sjungma@eit.uni-kl.de{
63512027Sjungma@eit.uni-kl.de    void check_bounds();
63612027Sjungma@eit.uni-kl.de
63712027Sjungma@eit.uni-kl.depublic:
63812027Sjungma@eit.uni-kl.de
63912027Sjungma@eit.uni-kl.de    // constructor
64012027Sjungma@eit.uni-kl.de
64112027Sjungma@eit.uni-kl.de    sc_subref_r( const X& obj_, int hi_, int lo_ )
64212027Sjungma@eit.uni-kl.de	: m_obj( CCAST<X&>( obj_ ) ), m_hi( hi_ ), m_lo( lo_ ), m_len( 0 )
64312027Sjungma@eit.uni-kl.de	{ check_bounds(); }
64412027Sjungma@eit.uni-kl.de
64512027Sjungma@eit.uni-kl.de
64612027Sjungma@eit.uni-kl.de    // copy constructor
64712027Sjungma@eit.uni-kl.de
64812027Sjungma@eit.uni-kl.de    sc_subref_r( const sc_subref_r<X>& a )
64912027Sjungma@eit.uni-kl.de	: m_obj( a.m_obj ), m_hi( a.m_hi ), m_lo( a.m_lo ), m_len( a.m_len )
65012027Sjungma@eit.uni-kl.de	{}
65112027Sjungma@eit.uni-kl.de
65212027Sjungma@eit.uni-kl.de
65312027Sjungma@eit.uni-kl.de    // cloning
65412027Sjungma@eit.uni-kl.de
65512027Sjungma@eit.uni-kl.de    sc_subref_r<X>* clone() const
65612027Sjungma@eit.uni-kl.de	{ return new sc_subref_r<X>( *this ); }
65712027Sjungma@eit.uni-kl.de
65812027Sjungma@eit.uni-kl.de
65912027Sjungma@eit.uni-kl.de    // common methods
66012027Sjungma@eit.uni-kl.de
66112027Sjungma@eit.uni-kl.de    int length() const
66212027Sjungma@eit.uni-kl.de	{ return m_len; }
66312027Sjungma@eit.uni-kl.de
66412027Sjungma@eit.uni-kl.de    int size() const
66512027Sjungma@eit.uni-kl.de	{ return ( (length() - 1) / SC_DIGIT_SIZE + 1 ); }
66612027Sjungma@eit.uni-kl.de
66712027Sjungma@eit.uni-kl.de    sc_logic_value_t get_bit( int n ) const;
66812027Sjungma@eit.uni-kl.de    void set_bit( int n, sc_logic_value_t value );
66912027Sjungma@eit.uni-kl.de
67012027Sjungma@eit.uni-kl.de    sc_digit get_word( int i )const;
67112027Sjungma@eit.uni-kl.de    void set_word( int i, sc_digit w );
67212027Sjungma@eit.uni-kl.de
67312027Sjungma@eit.uni-kl.de    sc_digit get_cword( int i ) const;
67412027Sjungma@eit.uni-kl.de    void set_cword( int i, sc_digit w );
67512027Sjungma@eit.uni-kl.de
67612027Sjungma@eit.uni-kl.de    void clean_tail()
67712027Sjungma@eit.uni-kl.de	{ m_obj.clean_tail(); }
67812027Sjungma@eit.uni-kl.de
67912027Sjungma@eit.uni-kl.de
68012027Sjungma@eit.uni-kl.de    // other methods
68112027Sjungma@eit.uni-kl.de
68212027Sjungma@eit.uni-kl.de    bool is_01() const;
68312027Sjungma@eit.uni-kl.de
68412027Sjungma@eit.uni-kl.de    bool reversed() const
68512027Sjungma@eit.uni-kl.de	{ return m_lo > m_hi; }
68612027Sjungma@eit.uni-kl.de
68712027Sjungma@eit.uni-kl.deprotected:
68812027Sjungma@eit.uni-kl.de
68912027Sjungma@eit.uni-kl.de    X&  m_obj;
69012027Sjungma@eit.uni-kl.de    int m_hi;
69112027Sjungma@eit.uni-kl.de    int m_lo;
69212027Sjungma@eit.uni-kl.de    int m_len;
69312027Sjungma@eit.uni-kl.de
69412027Sjungma@eit.uni-kl.deprivate:
69512027Sjungma@eit.uni-kl.de
69612027Sjungma@eit.uni-kl.de    // disabled
69712027Sjungma@eit.uni-kl.de    sc_subref_r();
69812027Sjungma@eit.uni-kl.de    sc_subref_r<X>& operator = ( const sc_subref_r<X>& );
69912027Sjungma@eit.uni-kl.de};
70012027Sjungma@eit.uni-kl.de
70112027Sjungma@eit.uni-kl.de
70212027Sjungma@eit.uni-kl.de// r-value concatenation operators and functions
70312027Sjungma@eit.uni-kl.de
70412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
70512027Sjungma@eit.uni-kl.deinline
70612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
70712027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1>, sc_bitref_r<T2> );
70812027Sjungma@eit.uni-kl.de
70912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
71012027Sjungma@eit.uni-kl.deinline
71112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
71212027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1>, sc_subref_r<T2> );
71312027Sjungma@eit.uni-kl.de
71412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
71512027Sjungma@eit.uni-kl.deinline
71612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
71712027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1>, sc_concref_r<T2,T3> );
71812027Sjungma@eit.uni-kl.de
71912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
72012027Sjungma@eit.uni-kl.deinline
72112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
72212027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1>, const sc_proxy<T2>& );
72312027Sjungma@eit.uni-kl.de
72412027Sjungma@eit.uni-kl.detemplate <class T>
72512027Sjungma@eit.uni-kl.deinline
72612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_lv_base>
72712027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T>, const char* );
72812027Sjungma@eit.uni-kl.de
72912027Sjungma@eit.uni-kl.detemplate <class T>
73012027Sjungma@eit.uni-kl.deinline
73112027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_subref_r<T> >
73212027Sjungma@eit.uni-kl.deoperator , ( const char*, sc_subref_r<T> );
73312027Sjungma@eit.uni-kl.de
73412027Sjungma@eit.uni-kl.detemplate <class T>
73512027Sjungma@eit.uni-kl.deinline
73612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_lv_base>
73712027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T>, const sc_logic& );
73812027Sjungma@eit.uni-kl.de
73912027Sjungma@eit.uni-kl.detemplate <class T>
74012027Sjungma@eit.uni-kl.deinline
74112027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_subref_r<T> >
74212027Sjungma@eit.uni-kl.deoperator , ( const sc_logic&, sc_subref_r<T> );
74312027Sjungma@eit.uni-kl.de
74412027Sjungma@eit.uni-kl.detemplate <class T>
74512027Sjungma@eit.uni-kl.deinline
74612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_bv_base>
74712027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T>, bool );
74812027Sjungma@eit.uni-kl.de
74912027Sjungma@eit.uni-kl.detemplate <class T>
75012027Sjungma@eit.uni-kl.deinline
75112027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,sc_subref_r<T> >
75212027Sjungma@eit.uni-kl.deoperator , ( bool, sc_subref_r<T> );
75312027Sjungma@eit.uni-kl.de
75412027Sjungma@eit.uni-kl.de
75512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
75612027Sjungma@eit.uni-kl.deinline
75712027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
75812027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1>, sc_bitref_r<T2> );
75912027Sjungma@eit.uni-kl.de
76012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
76112027Sjungma@eit.uni-kl.deinline
76212027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
76312027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1>, sc_subref_r<T2> );
76412027Sjungma@eit.uni-kl.de
76512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
76612027Sjungma@eit.uni-kl.deinline
76712027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
76812027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1>, sc_concref_r<T2,T3> );
76912027Sjungma@eit.uni-kl.de
77012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
77112027Sjungma@eit.uni-kl.deinline
77212027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
77312027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1>, const sc_proxy<T2>& );
77412027Sjungma@eit.uni-kl.de
77512027Sjungma@eit.uni-kl.detemplate <class T>
77612027Sjungma@eit.uni-kl.deinline
77712027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_lv_base>
77812027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T>, const char* );
77912027Sjungma@eit.uni-kl.de
78012027Sjungma@eit.uni-kl.detemplate <class T>
78112027Sjungma@eit.uni-kl.deinline
78212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_subref_r<T> >
78312027Sjungma@eit.uni-kl.deconcat( const char*, sc_subref_r<T> );
78412027Sjungma@eit.uni-kl.de
78512027Sjungma@eit.uni-kl.detemplate <class T>
78612027Sjungma@eit.uni-kl.deinline
78712027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_lv_base>
78812027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T>, const sc_logic& );
78912027Sjungma@eit.uni-kl.de
79012027Sjungma@eit.uni-kl.detemplate <class T>
79112027Sjungma@eit.uni-kl.deinline
79212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_subref_r<T> >
79312027Sjungma@eit.uni-kl.deconcat( const sc_logic&, sc_subref_r<T> );
79412027Sjungma@eit.uni-kl.de
79512027Sjungma@eit.uni-kl.detemplate <class T>
79612027Sjungma@eit.uni-kl.deinline
79712027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_bv_base>
79812027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T>, bool );
79912027Sjungma@eit.uni-kl.de
80012027Sjungma@eit.uni-kl.detemplate <class T>
80112027Sjungma@eit.uni-kl.deinline
80212027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,sc_subref_r<T> >
80312027Sjungma@eit.uni-kl.deconcat( bool, sc_subref_r<T> );
80412027Sjungma@eit.uni-kl.de
80512027Sjungma@eit.uni-kl.de
80612027Sjungma@eit.uni-kl.de#ifdef SC_DT_MIXED_COMMA_OPERATORS
80712027Sjungma@eit.uni-kl.de
80812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
80912027Sjungma@eit.uni-kl.deinline
81012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
81112027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1>, sc_bitref<T2> );
81212027Sjungma@eit.uni-kl.de
81312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
81412027Sjungma@eit.uni-kl.deinline
81512027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
81612027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1>, sc_bitref_r<T2> );
81712027Sjungma@eit.uni-kl.de
81812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
81912027Sjungma@eit.uni-kl.deinline
82012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
82112027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1>, sc_subref<T2> );
82212027Sjungma@eit.uni-kl.de
82312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
82412027Sjungma@eit.uni-kl.deinline
82512027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
82612027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1>, sc_subref_r<T2> );
82712027Sjungma@eit.uni-kl.de
82812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
82912027Sjungma@eit.uni-kl.deinline
83012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
83112027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1>, sc_concref<T2,T3> );
83212027Sjungma@eit.uni-kl.de
83312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
83412027Sjungma@eit.uni-kl.deinline
83512027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
83612027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1>, sc_concref_r<T2,T3> );
83712027Sjungma@eit.uni-kl.de
83812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
83912027Sjungma@eit.uni-kl.deinline
84012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
84112027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1>, const sc_proxy<T2>& );
84212027Sjungma@eit.uni-kl.de
84312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
84412027Sjungma@eit.uni-kl.deinline
84512027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
84612027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1>, sc_proxy<T2>& );
84712027Sjungma@eit.uni-kl.de
84812027Sjungma@eit.uni-kl.detemplate <class T>
84912027Sjungma@eit.uni-kl.deinline
85012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_lv_base>
85112027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T>, const char* );
85212027Sjungma@eit.uni-kl.de
85312027Sjungma@eit.uni-kl.detemplate <class T>
85412027Sjungma@eit.uni-kl.deinline
85512027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_subref_r<T> >
85612027Sjungma@eit.uni-kl.deoperator , ( const char*, sc_subref<T> );
85712027Sjungma@eit.uni-kl.de
85812027Sjungma@eit.uni-kl.detemplate <class T>
85912027Sjungma@eit.uni-kl.deinline
86012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_lv_base>
86112027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T>, const sc_logic& );
86212027Sjungma@eit.uni-kl.de
86312027Sjungma@eit.uni-kl.detemplate <class T>
86412027Sjungma@eit.uni-kl.deinline
86512027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_subref_r<T> >
86612027Sjungma@eit.uni-kl.deoperator , ( const sc_logic&, sc_subref<T> );
86712027Sjungma@eit.uni-kl.de
86812027Sjungma@eit.uni-kl.detemplate <class T>
86912027Sjungma@eit.uni-kl.deinline
87012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_bv_base>
87112027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T>, bool );
87212027Sjungma@eit.uni-kl.de
87312027Sjungma@eit.uni-kl.detemplate <class T>
87412027Sjungma@eit.uni-kl.deinline
87512027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,sc_subref_r<T> >
87612027Sjungma@eit.uni-kl.deoperator , ( bool, sc_subref<T> );
87712027Sjungma@eit.uni-kl.de
87812027Sjungma@eit.uni-kl.de
87912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
88012027Sjungma@eit.uni-kl.deinline
88112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
88212027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1>, sc_bitref<T2> );
88312027Sjungma@eit.uni-kl.de
88412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
88512027Sjungma@eit.uni-kl.deinline
88612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
88712027Sjungma@eit.uni-kl.deconcat( sc_subref<T1>, sc_bitref_r<T2> );
88812027Sjungma@eit.uni-kl.de
88912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
89012027Sjungma@eit.uni-kl.deinline
89112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
89212027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1>, sc_subref<T2> );
89312027Sjungma@eit.uni-kl.de
89412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
89512027Sjungma@eit.uni-kl.deinline
89612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
89712027Sjungma@eit.uni-kl.deconcat( sc_subref<T1>, sc_subref_r<T2> );
89812027Sjungma@eit.uni-kl.de
89912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
90012027Sjungma@eit.uni-kl.deinline
90112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
90212027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1>, sc_concref<T2,T3> );
90312027Sjungma@eit.uni-kl.de
90412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
90512027Sjungma@eit.uni-kl.deinline
90612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
90712027Sjungma@eit.uni-kl.deconcat( sc_subref<T1>, sc_concref_r<T2,T3> );
90812027Sjungma@eit.uni-kl.de
90912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
91012027Sjungma@eit.uni-kl.deinline
91112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
91212027Sjungma@eit.uni-kl.deconcat( sc_subref<T1>, const sc_proxy<T2>& );
91312027Sjungma@eit.uni-kl.de
91412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
91512027Sjungma@eit.uni-kl.deinline
91612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
91712027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1>, sc_proxy<T2>& );
91812027Sjungma@eit.uni-kl.de
91912027Sjungma@eit.uni-kl.detemplate <class T>
92012027Sjungma@eit.uni-kl.deinline
92112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_lv_base>
92212027Sjungma@eit.uni-kl.deconcat( sc_subref<T>, const char* );
92312027Sjungma@eit.uni-kl.de
92412027Sjungma@eit.uni-kl.detemplate <class T>
92512027Sjungma@eit.uni-kl.deinline
92612027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_subref_r<T> >
92712027Sjungma@eit.uni-kl.deconcat( const char*, sc_subref<T> );
92812027Sjungma@eit.uni-kl.de
92912027Sjungma@eit.uni-kl.detemplate <class T>
93012027Sjungma@eit.uni-kl.deinline
93112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_lv_base>
93212027Sjungma@eit.uni-kl.deconcat( sc_subref<T>, const sc_logic& );
93312027Sjungma@eit.uni-kl.de
93412027Sjungma@eit.uni-kl.detemplate <class T>
93512027Sjungma@eit.uni-kl.deinline
93612027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_subref_r<T> >
93712027Sjungma@eit.uni-kl.deconcat( const sc_logic&, sc_subref<T> );
93812027Sjungma@eit.uni-kl.de
93912027Sjungma@eit.uni-kl.detemplate <class T>
94012027Sjungma@eit.uni-kl.deinline
94112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T>,sc_bv_base>
94212027Sjungma@eit.uni-kl.deconcat( sc_subref<T>, bool );
94312027Sjungma@eit.uni-kl.de
94412027Sjungma@eit.uni-kl.detemplate <class T>
94512027Sjungma@eit.uni-kl.deinline
94612027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,sc_subref_r<T> >
94712027Sjungma@eit.uni-kl.deconcat( bool, sc_subref<T> );
94812027Sjungma@eit.uni-kl.de
94912027Sjungma@eit.uni-kl.de#endif
95012027Sjungma@eit.uni-kl.de
95112027Sjungma@eit.uni-kl.de
95212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
95312027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_subref<X>
95412027Sjungma@eit.uni-kl.de//
95512027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy part selection (r-value and l-value).
95612027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
95712027Sjungma@eit.uni-kl.de
95812027Sjungma@eit.uni-kl.detemplate <class X>
95912027Sjungma@eit.uni-kl.declass sc_subref
96012027Sjungma@eit.uni-kl.de    : public sc_subref_r<X>
96112027Sjungma@eit.uni-kl.de{
96212027Sjungma@eit.uni-kl.depublic:
96312027Sjungma@eit.uni-kl.de
96412027Sjungma@eit.uni-kl.de    // typedefs
96512027Sjungma@eit.uni-kl.de
96612027Sjungma@eit.uni-kl.de    typedef sc_subref_r<X> base_type;
96712027Sjungma@eit.uni-kl.de
96812027Sjungma@eit.uni-kl.de
96912027Sjungma@eit.uni-kl.de    // constructor
97012027Sjungma@eit.uni-kl.de
97112027Sjungma@eit.uni-kl.de    sc_subref( X& obj_, int hi_, int lo_ )
97212027Sjungma@eit.uni-kl.de	: sc_subref_r<X>( obj_, hi_, lo_ )
97312027Sjungma@eit.uni-kl.de	{}
97412027Sjungma@eit.uni-kl.de
97512027Sjungma@eit.uni-kl.de
97612027Sjungma@eit.uni-kl.de    // copy constructor
97712027Sjungma@eit.uni-kl.de
97812027Sjungma@eit.uni-kl.de    sc_subref( const sc_subref<X>& a )
97912027Sjungma@eit.uni-kl.de	: sc_subref_r<X>( a )
98012027Sjungma@eit.uni-kl.de	{}
98112027Sjungma@eit.uni-kl.de
98212027Sjungma@eit.uni-kl.de
98312027Sjungma@eit.uni-kl.de    // cloning
98412027Sjungma@eit.uni-kl.de
98512027Sjungma@eit.uni-kl.de    sc_subref<X>* clone() const
98612027Sjungma@eit.uni-kl.de	{ return new sc_subref<X>( *this ); }
98712027Sjungma@eit.uni-kl.de
98812027Sjungma@eit.uni-kl.de
98912027Sjungma@eit.uni-kl.de    // assignment operators
99012027Sjungma@eit.uni-kl.de
99112027Sjungma@eit.uni-kl.de    template <class Y>
99212027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const sc_proxy<Y>& a )
99312027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
99412027Sjungma@eit.uni-kl.de
99512027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const sc_subref_r<X>& a );
99612027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const sc_subref<X>& a );
99712027Sjungma@eit.uni-kl.de
99812027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const char* a )
99912027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
100012027Sjungma@eit.uni-kl.de
100112027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const bool* a )
100212027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
100312027Sjungma@eit.uni-kl.de
100412027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const sc_logic* a )
100512027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
100612027Sjungma@eit.uni-kl.de
100712027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const sc_unsigned& a )
100812027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
100912027Sjungma@eit.uni-kl.de
101012027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const sc_signed& a )
101112027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
101212027Sjungma@eit.uni-kl.de
101312027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const sc_uint_base& a )
101412027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
101512027Sjungma@eit.uni-kl.de
101612027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( const sc_int_base& a )
101712027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
101812027Sjungma@eit.uni-kl.de
101912027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( unsigned long a )
102012027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
102112027Sjungma@eit.uni-kl.de
102212027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( long a )
102312027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
102412027Sjungma@eit.uni-kl.de
102512027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( unsigned int a )
102612027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
102712027Sjungma@eit.uni-kl.de
102812027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( int a )
102912027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
103012027Sjungma@eit.uni-kl.de
103112027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( uint64 a )
103212027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
103312027Sjungma@eit.uni-kl.de
103412027Sjungma@eit.uni-kl.de    sc_subref<X>& operator = ( int64 a )
103512027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
103612027Sjungma@eit.uni-kl.de
103712027Sjungma@eit.uni-kl.de
103812027Sjungma@eit.uni-kl.de    // other methods
103912027Sjungma@eit.uni-kl.de
104012027Sjungma@eit.uni-kl.de    void scan( ::std::istream& = ::std::cin );
104112027Sjungma@eit.uni-kl.de
104212027Sjungma@eit.uni-kl.deprivate:
104312027Sjungma@eit.uni-kl.de
104412027Sjungma@eit.uni-kl.de    // disabled
104512027Sjungma@eit.uni-kl.de    sc_subref();
104612027Sjungma@eit.uni-kl.de};
104712027Sjungma@eit.uni-kl.de
104812027Sjungma@eit.uni-kl.de
104912027Sjungma@eit.uni-kl.de// l-value concatenation operators and functions
105012027Sjungma@eit.uni-kl.de
105112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
105212027Sjungma@eit.uni-kl.deinline
105312027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_bitref<T2> >
105412027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1>, sc_bitref<T2> );
105512027Sjungma@eit.uni-kl.de
105612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
105712027Sjungma@eit.uni-kl.deinline
105812027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_subref<T2> >
105912027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1>, sc_subref<T2> );
106012027Sjungma@eit.uni-kl.de
106112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
106212027Sjungma@eit.uni-kl.deinline
106312027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_concref<T2,T3> >
106412027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1>, sc_concref<T2,T3> );
106512027Sjungma@eit.uni-kl.de
106612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
106712027Sjungma@eit.uni-kl.deinline
106812027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,T2>
106912027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1>, sc_proxy<T2>& );
107012027Sjungma@eit.uni-kl.de
107112027Sjungma@eit.uni-kl.de
107212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
107312027Sjungma@eit.uni-kl.deinline
107412027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_bitref<T2> >
107512027Sjungma@eit.uni-kl.deconcat( sc_subref<T1>, sc_bitref<T2> );
107612027Sjungma@eit.uni-kl.de
107712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
107812027Sjungma@eit.uni-kl.deinline
107912027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_subref<T2> >
108012027Sjungma@eit.uni-kl.deconcat( sc_subref<T1>, sc_subref<T2> );
108112027Sjungma@eit.uni-kl.de
108212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
108312027Sjungma@eit.uni-kl.deinline
108412027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_concref<T2,T3> >
108512027Sjungma@eit.uni-kl.deconcat( sc_subref<T1>, sc_concref<T2,T3> );
108612027Sjungma@eit.uni-kl.de
108712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
108812027Sjungma@eit.uni-kl.deinline
108912027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,T2>
109012027Sjungma@eit.uni-kl.deconcat( sc_subref<T1>, sc_proxy<T2>& );
109112027Sjungma@eit.uni-kl.de
109212027Sjungma@eit.uni-kl.de
109312027Sjungma@eit.uni-kl.detemplate <class T>
109412027Sjungma@eit.uni-kl.deinline
109512027Sjungma@eit.uni-kl.de::std::istream&
109612027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream&, sc_subref<T> );
109712027Sjungma@eit.uni-kl.de
109812027Sjungma@eit.uni-kl.de
109912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
110012027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_concref_r<X,Y>
110112027Sjungma@eit.uni-kl.de//
110212027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy concatenation (r-value only).
110312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
110412027Sjungma@eit.uni-kl.de
110512027Sjungma@eit.uni-kl.detemplate <class X, class Y>
110612027Sjungma@eit.uni-kl.declass sc_concref_r
110712027Sjungma@eit.uni-kl.de    : public sc_proxy<sc_concref_r<X,Y> >
110812027Sjungma@eit.uni-kl.de{
110912027Sjungma@eit.uni-kl.depublic:
111012027Sjungma@eit.uni-kl.de
111112027Sjungma@eit.uni-kl.de    // constructor
111212027Sjungma@eit.uni-kl.de
111312027Sjungma@eit.uni-kl.de    sc_concref_r( const X& left_, const Y& right_, int delete_ = 0 )
111412027Sjungma@eit.uni-kl.de	: m_left( CCAST<X&>( left_ ) ), m_right( CCAST<Y&>( right_ ) ),
111512027Sjungma@eit.uni-kl.de	  m_delete( delete_ ), m_refs( *new int( 1 ) )
111612027Sjungma@eit.uni-kl.de	{}
111712027Sjungma@eit.uni-kl.de
111812027Sjungma@eit.uni-kl.de
111912027Sjungma@eit.uni-kl.de    // copy constructor
112012027Sjungma@eit.uni-kl.de
112112027Sjungma@eit.uni-kl.de    sc_concref_r( const sc_concref_r<X,Y>& a )
112212027Sjungma@eit.uni-kl.de	: m_left( a.m_left ), m_right( a.m_right ),
112312027Sjungma@eit.uni-kl.de	  m_delete( a.m_delete ), m_refs( a.m_refs )
112412027Sjungma@eit.uni-kl.de	{ ++ m_refs; }
112512027Sjungma@eit.uni-kl.de
112612027Sjungma@eit.uni-kl.de
112712027Sjungma@eit.uni-kl.de    // destructor
112812027Sjungma@eit.uni-kl.de
112912027Sjungma@eit.uni-kl.de    virtual ~sc_concref_r();
113012027Sjungma@eit.uni-kl.de
113112027Sjungma@eit.uni-kl.de
113212027Sjungma@eit.uni-kl.de    // cloning
113312027Sjungma@eit.uni-kl.de
113412027Sjungma@eit.uni-kl.de    sc_concref_r<X,Y>* clone() const
113512027Sjungma@eit.uni-kl.de	{ return new sc_concref_r<X,Y>( *this ); }
113612027Sjungma@eit.uni-kl.de
113712027Sjungma@eit.uni-kl.de
113812027Sjungma@eit.uni-kl.de    // common methods
113912027Sjungma@eit.uni-kl.de
114012027Sjungma@eit.uni-kl.de    int length() const
114112027Sjungma@eit.uni-kl.de	{ return ( m_left.length() + m_right.length() ); }
114212027Sjungma@eit.uni-kl.de
114312027Sjungma@eit.uni-kl.de    int size() const
114412027Sjungma@eit.uni-kl.de	{ return ( (length() - 1) / SC_DIGIT_SIZE + 1 ); }
114512027Sjungma@eit.uni-kl.de
114612027Sjungma@eit.uni-kl.de    sc_logic_value_t get_bit( int n ) const;
114712027Sjungma@eit.uni-kl.de    void set_bit( int n, sc_logic_value_t value );
114812027Sjungma@eit.uni-kl.de
114912027Sjungma@eit.uni-kl.de    sc_digit get_word( int i ) const;
115012027Sjungma@eit.uni-kl.de    void set_word( int i, sc_digit w );
115112027Sjungma@eit.uni-kl.de
115212027Sjungma@eit.uni-kl.de    sc_digit get_cword( int i ) const;
115312027Sjungma@eit.uni-kl.de    void set_cword( int i, sc_digit w );
115412027Sjungma@eit.uni-kl.de
115512027Sjungma@eit.uni-kl.de    void clean_tail()
115612027Sjungma@eit.uni-kl.de	{ m_left.clean_tail(); m_right.clean_tail(); }
115712027Sjungma@eit.uni-kl.de
115812027Sjungma@eit.uni-kl.de
115912027Sjungma@eit.uni-kl.de    // other methods
116012027Sjungma@eit.uni-kl.de
116112027Sjungma@eit.uni-kl.de    bool is_01() const
116212027Sjungma@eit.uni-kl.de	{ return ( m_left.is_01() && m_right.is_01() ); }
116312027Sjungma@eit.uni-kl.de
116412027Sjungma@eit.uni-kl.deprotected:
116512027Sjungma@eit.uni-kl.de
116612027Sjungma@eit.uni-kl.de    X&           m_left;
116712027Sjungma@eit.uni-kl.de    Y&           m_right;
116812027Sjungma@eit.uni-kl.de    mutable int  m_delete;
116912027Sjungma@eit.uni-kl.de    int&         m_refs;
117012027Sjungma@eit.uni-kl.de
117112027Sjungma@eit.uni-kl.deprivate:
117212027Sjungma@eit.uni-kl.de
117312027Sjungma@eit.uni-kl.de    // disabled
117412027Sjungma@eit.uni-kl.de    sc_concref_r();
117512027Sjungma@eit.uni-kl.de    sc_concref_r<X,Y>& operator = ( const sc_concref_r<X,Y>& );
117612027Sjungma@eit.uni-kl.de};
117712027Sjungma@eit.uni-kl.de
117812027Sjungma@eit.uni-kl.de
117912027Sjungma@eit.uni-kl.de// r-value concatenation operators and functions
118012027Sjungma@eit.uni-kl.de
118112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
118212027Sjungma@eit.uni-kl.deinline
118312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
118412027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, sc_bitref_r<T3> );
118512027Sjungma@eit.uni-kl.de
118612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
118712027Sjungma@eit.uni-kl.deinline
118812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
118912027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, sc_subref_r<T3> );
119012027Sjungma@eit.uni-kl.de
119112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
119212027Sjungma@eit.uni-kl.deinline
119312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
119412027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, sc_concref_r<T3,T4> );
119512027Sjungma@eit.uni-kl.de
119612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
119712027Sjungma@eit.uni-kl.deinline
119812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
119912027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, const sc_proxy<T3>& );
120012027Sjungma@eit.uni-kl.de
120112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
120212027Sjungma@eit.uni-kl.deinline
120312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
120412027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, const char* );
120512027Sjungma@eit.uni-kl.de
120612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
120712027Sjungma@eit.uni-kl.deinline
120812027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
120912027Sjungma@eit.uni-kl.deoperator , ( const char*, sc_concref_r<T1,T2> );
121012027Sjungma@eit.uni-kl.de
121112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
121212027Sjungma@eit.uni-kl.deinline
121312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
121412027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, const sc_logic& );
121512027Sjungma@eit.uni-kl.de
121612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
121712027Sjungma@eit.uni-kl.deinline
121812027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
121912027Sjungma@eit.uni-kl.deoperator , ( const sc_logic&, sc_concref_r<T1,T2> );
122012027Sjungma@eit.uni-kl.de
122112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
122212027Sjungma@eit.uni-kl.deinline
122312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bv_base>
122412027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, bool );
122512027Sjungma@eit.uni-kl.de
122612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
122712027Sjungma@eit.uni-kl.deinline
122812027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,sc_concref_r<T1,T2> >
122912027Sjungma@eit.uni-kl.deoperator , ( bool, sc_concref_r<T1,T2> );
123012027Sjungma@eit.uni-kl.de
123112027Sjungma@eit.uni-kl.de
123212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
123312027Sjungma@eit.uni-kl.deinline
123412027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
123512027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, sc_bitref_r<T3> );
123612027Sjungma@eit.uni-kl.de
123712027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
123812027Sjungma@eit.uni-kl.deinline
123912027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
124012027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, sc_subref_r<T3> );
124112027Sjungma@eit.uni-kl.de
124212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
124312027Sjungma@eit.uni-kl.deinline
124412027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
124512027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, sc_concref_r<T3,T4> );
124612027Sjungma@eit.uni-kl.de
124712027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
124812027Sjungma@eit.uni-kl.deinline
124912027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
125012027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, const sc_proxy<T3>& );
125112027Sjungma@eit.uni-kl.de
125212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
125312027Sjungma@eit.uni-kl.deinline
125412027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
125512027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, const char* );
125612027Sjungma@eit.uni-kl.de
125712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
125812027Sjungma@eit.uni-kl.deinline
125912027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
126012027Sjungma@eit.uni-kl.deconcat( const char*, sc_concref_r<T1,T2> );
126112027Sjungma@eit.uni-kl.de
126212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
126312027Sjungma@eit.uni-kl.deinline
126412027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
126512027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, const sc_logic& );
126612027Sjungma@eit.uni-kl.de
126712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
126812027Sjungma@eit.uni-kl.deinline
126912027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
127012027Sjungma@eit.uni-kl.deconcat( const sc_logic&, sc_concref_r<T1,T2> );
127112027Sjungma@eit.uni-kl.de
127212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
127312027Sjungma@eit.uni-kl.deinline
127412027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bv_base>
127512027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, bool );
127612027Sjungma@eit.uni-kl.de
127712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
127812027Sjungma@eit.uni-kl.deinline
127912027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,sc_concref_r<T1,T2> >
128012027Sjungma@eit.uni-kl.deconcat( bool, sc_concref_r<T1,T2> );
128112027Sjungma@eit.uni-kl.de
128212027Sjungma@eit.uni-kl.de
128312027Sjungma@eit.uni-kl.de#ifdef SC_DT_MIXED_COMMA_OPERATORS
128412027Sjungma@eit.uni-kl.de
128512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
128612027Sjungma@eit.uni-kl.deinline
128712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
128812027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, sc_bitref<T3> );
128912027Sjungma@eit.uni-kl.de
129012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
129112027Sjungma@eit.uni-kl.deinline
129212027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
129312027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, sc_bitref_r<T3> );
129412027Sjungma@eit.uni-kl.de
129512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
129612027Sjungma@eit.uni-kl.deinline
129712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
129812027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, sc_subref<T3> );
129912027Sjungma@eit.uni-kl.de
130012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
130112027Sjungma@eit.uni-kl.deinline
130212027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
130312027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, sc_subref_r<T3> );
130412027Sjungma@eit.uni-kl.de
130512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
130612027Sjungma@eit.uni-kl.deinline
130712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
130812027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, sc_concref<T3,T4> );
130912027Sjungma@eit.uni-kl.de
131012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
131112027Sjungma@eit.uni-kl.deinline
131212027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
131312027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, sc_concref_r<T3,T4> );
131412027Sjungma@eit.uni-kl.de
131512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
131612027Sjungma@eit.uni-kl.deinline
131712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
131812027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, const sc_proxy<T3>& );
131912027Sjungma@eit.uni-kl.de
132012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
132112027Sjungma@eit.uni-kl.deinline
132212027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
132312027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2>, sc_proxy<T3>& );
132412027Sjungma@eit.uni-kl.de
132512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
132612027Sjungma@eit.uni-kl.deinline
132712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
132812027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, const char* );
132912027Sjungma@eit.uni-kl.de
133012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
133112027Sjungma@eit.uni-kl.deinline
133212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
133312027Sjungma@eit.uni-kl.deoperator , ( const char*, sc_concref<T1,T2> );
133412027Sjungma@eit.uni-kl.de
133512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
133612027Sjungma@eit.uni-kl.deinline
133712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
133812027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, const sc_logic& );
133912027Sjungma@eit.uni-kl.de
134012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
134112027Sjungma@eit.uni-kl.deinline
134212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
134312027Sjungma@eit.uni-kl.deoperator , ( const sc_logic&, sc_concref<T1,T2> );
134412027Sjungma@eit.uni-kl.de
134512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
134612027Sjungma@eit.uni-kl.deinline
134712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bv_base>
134812027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, bool );
134912027Sjungma@eit.uni-kl.de
135012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
135112027Sjungma@eit.uni-kl.deinline
135212027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,sc_concref_r<T1,T2> >
135312027Sjungma@eit.uni-kl.deoperator , ( bool, sc_concref<T1,T2> );
135412027Sjungma@eit.uni-kl.de
135512027Sjungma@eit.uni-kl.de
135612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
135712027Sjungma@eit.uni-kl.deinline
135812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
135912027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, sc_bitref<T3> );
136012027Sjungma@eit.uni-kl.de
136112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
136212027Sjungma@eit.uni-kl.deinline
136312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
136412027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, sc_bitref_r<T3> );
136512027Sjungma@eit.uni-kl.de
136612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
136712027Sjungma@eit.uni-kl.deinline
136812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
136912027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, sc_subref<T3> );
137012027Sjungma@eit.uni-kl.de
137112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
137212027Sjungma@eit.uni-kl.deinline
137312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
137412027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, sc_subref_r<T3> );
137512027Sjungma@eit.uni-kl.de
137612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
137712027Sjungma@eit.uni-kl.deinline
137812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
137912027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, sc_concref<T3,T4> );
138012027Sjungma@eit.uni-kl.de
138112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
138212027Sjungma@eit.uni-kl.deinline
138312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
138412027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, sc_concref_r<T3,T4> );
138512027Sjungma@eit.uni-kl.de
138612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
138712027Sjungma@eit.uni-kl.deinline
138812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
138912027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, const sc_proxy<T3>& );
139012027Sjungma@eit.uni-kl.de
139112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
139212027Sjungma@eit.uni-kl.deinline
139312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
139412027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2>, sc_proxy<T3>& );
139512027Sjungma@eit.uni-kl.de
139612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
139712027Sjungma@eit.uni-kl.deinline
139812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
139912027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, const char* );
140012027Sjungma@eit.uni-kl.de
140112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
140212027Sjungma@eit.uni-kl.deinline
140312027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
140412027Sjungma@eit.uni-kl.deconcat( const char*, sc_concref<T1,T2> );
140512027Sjungma@eit.uni-kl.de
140612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
140712027Sjungma@eit.uni-kl.deinline
140812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_lv_base>
140912027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, const sc_logic& );
141012027Sjungma@eit.uni-kl.de
141112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
141212027Sjungma@eit.uni-kl.deinline
141312027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,sc_concref_r<T1,T2> >
141412027Sjungma@eit.uni-kl.deconcat( const sc_logic&, sc_concref<T1,T2> );
141512027Sjungma@eit.uni-kl.de
141612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
141712027Sjungma@eit.uni-kl.deinline
141812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bv_base>
141912027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, bool );
142012027Sjungma@eit.uni-kl.de
142112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
142212027Sjungma@eit.uni-kl.deinline
142312027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,sc_concref_r<T1,T2> >
142412027Sjungma@eit.uni-kl.deconcat( bool, sc_concref<T1,T2> );
142512027Sjungma@eit.uni-kl.de
142612027Sjungma@eit.uni-kl.de#endif
142712027Sjungma@eit.uni-kl.de
142812027Sjungma@eit.uni-kl.de
142912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
143012027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_concref<X,Y>
143112027Sjungma@eit.uni-kl.de//
143212027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy concatenation (r-value and l-value).
143312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
143412027Sjungma@eit.uni-kl.de
143512027Sjungma@eit.uni-kl.detemplate <class X, class Y>
143612027Sjungma@eit.uni-kl.declass sc_concref
143712027Sjungma@eit.uni-kl.de    : public sc_concref_r<X,Y>
143812027Sjungma@eit.uni-kl.de{
143912027Sjungma@eit.uni-kl.depublic:
144012027Sjungma@eit.uni-kl.de
144112027Sjungma@eit.uni-kl.de    // typedefs
144212027Sjungma@eit.uni-kl.de
144312027Sjungma@eit.uni-kl.de    typedef sc_concref_r<X,Y> base_type;
144412027Sjungma@eit.uni-kl.de
144512027Sjungma@eit.uni-kl.de
144612027Sjungma@eit.uni-kl.de    // constructor
144712027Sjungma@eit.uni-kl.de
144812027Sjungma@eit.uni-kl.de    sc_concref( X& left_, Y& right_, int delete_ = 0 )
144912027Sjungma@eit.uni-kl.de	: sc_concref_r<X,Y>( left_, right_, delete_ )
145012027Sjungma@eit.uni-kl.de	{}
145112027Sjungma@eit.uni-kl.de
145212027Sjungma@eit.uni-kl.de
145312027Sjungma@eit.uni-kl.de    // copy constructor
145412027Sjungma@eit.uni-kl.de
145512027Sjungma@eit.uni-kl.de    sc_concref( const sc_concref<X,Y>& a )
145612027Sjungma@eit.uni-kl.de	: sc_concref_r<X,Y>( a )
145712027Sjungma@eit.uni-kl.de	{}
145812027Sjungma@eit.uni-kl.de
145912027Sjungma@eit.uni-kl.de
146012027Sjungma@eit.uni-kl.de    // cloning
146112027Sjungma@eit.uni-kl.de
146212027Sjungma@eit.uni-kl.de    sc_concref<X,Y>* clone() const
146312027Sjungma@eit.uni-kl.de	{ return new sc_concref<X,Y>( *this ); }
146412027Sjungma@eit.uni-kl.de
146512027Sjungma@eit.uni-kl.de
146612027Sjungma@eit.uni-kl.de    // assignment operators
146712027Sjungma@eit.uni-kl.de
146812027Sjungma@eit.uni-kl.de    template <class Z>
146912027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const sc_proxy<Z>& a )
147012027Sjungma@eit.uni-kl.de        { base_type::assign_( a ); return *this; }
147112027Sjungma@eit.uni-kl.de
147212027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const sc_concref<X,Y>& a )
147312027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
147412027Sjungma@eit.uni-kl.de
147512027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const char* a )
147612027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
147712027Sjungma@eit.uni-kl.de
147812027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const bool* a )
147912027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
148012027Sjungma@eit.uni-kl.de
148112027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const sc_logic* a )
148212027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
148312027Sjungma@eit.uni-kl.de
148412027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const sc_unsigned& a )
148512027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
148612027Sjungma@eit.uni-kl.de
148712027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const sc_signed& a )
148812027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
148912027Sjungma@eit.uni-kl.de
149012027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const sc_uint_base& a )
149112027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
149212027Sjungma@eit.uni-kl.de
149312027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( const sc_int_base& a )
149412027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
149512027Sjungma@eit.uni-kl.de
149612027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( unsigned long a )
149712027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
149812027Sjungma@eit.uni-kl.de
149912027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( long a )
150012027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
150112027Sjungma@eit.uni-kl.de
150212027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( unsigned int a )
150312027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
150412027Sjungma@eit.uni-kl.de
150512027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( int a )
150612027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
150712027Sjungma@eit.uni-kl.de
150812027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( uint64 a )
150912027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
151012027Sjungma@eit.uni-kl.de
151112027Sjungma@eit.uni-kl.de    sc_concref<X,Y>& operator = ( int64 a )
151212027Sjungma@eit.uni-kl.de	{ base_type::assign_( a ); return *this; }
151312027Sjungma@eit.uni-kl.de
151412027Sjungma@eit.uni-kl.de
151512027Sjungma@eit.uni-kl.de    // other methods
151612027Sjungma@eit.uni-kl.de
151712027Sjungma@eit.uni-kl.de    void scan( ::std::istream& = ::std::cin );
151812027Sjungma@eit.uni-kl.de
151912027Sjungma@eit.uni-kl.deprivate:
152012027Sjungma@eit.uni-kl.de
152112027Sjungma@eit.uni-kl.de    // disabled
152212027Sjungma@eit.uni-kl.de    sc_concref();
152312027Sjungma@eit.uni-kl.de};
152412027Sjungma@eit.uni-kl.de
152512027Sjungma@eit.uni-kl.de
152612027Sjungma@eit.uni-kl.de// l-value concatenation operators and functions
152712027Sjungma@eit.uni-kl.de
152812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
152912027Sjungma@eit.uni-kl.deinline
153012027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_bitref<T3> >
153112027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, sc_bitref<T3> );
153212027Sjungma@eit.uni-kl.de
153312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
153412027Sjungma@eit.uni-kl.deinline
153512027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_subref<T3> >
153612027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, sc_subref<T3> );
153712027Sjungma@eit.uni-kl.de
153812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
153912027Sjungma@eit.uni-kl.deinline
154012027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >
154112027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, sc_concref<T3,T4> );
154212027Sjungma@eit.uni-kl.de
154312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
154412027Sjungma@eit.uni-kl.deinline
154512027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,T3>
154612027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2>, sc_proxy<T3>& );
154712027Sjungma@eit.uni-kl.de
154812027Sjungma@eit.uni-kl.de
154912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
155012027Sjungma@eit.uni-kl.deinline
155112027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_bitref<T3> >
155212027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, sc_bitref<T3> );
155312027Sjungma@eit.uni-kl.de
155412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
155512027Sjungma@eit.uni-kl.deinline
155612027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_subref<T3> >
155712027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, sc_subref<T3> );
155812027Sjungma@eit.uni-kl.de
155912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
156012027Sjungma@eit.uni-kl.deinline
156112027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >
156212027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, sc_concref<T3,T4> );
156312027Sjungma@eit.uni-kl.de
156412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
156512027Sjungma@eit.uni-kl.deinline
156612027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,T3>
156712027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2>, sc_proxy<T3>& );
156812027Sjungma@eit.uni-kl.de
156912027Sjungma@eit.uni-kl.de
157012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
157112027Sjungma@eit.uni-kl.deinline
157212027Sjungma@eit.uni-kl.de::std::istream&
157312027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream&, sc_concref<T1,T2> );
157412027Sjungma@eit.uni-kl.de
157512027Sjungma@eit.uni-kl.de
157612027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
157712027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_proxy<T>
157812027Sjungma@eit.uni-kl.de//
157912027Sjungma@eit.uni-kl.de//  Base class template for bit/logic vector classes.
158012027Sjungma@eit.uni-kl.de//  (Barton/Nackmann implementation)
158112027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
158212027Sjungma@eit.uni-kl.de
158312027Sjungma@eit.uni-kl.de// r-value concatenation operators and functions
158412027Sjungma@eit.uni-kl.de
158512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
158612027Sjungma@eit.uni-kl.deinline
158712027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
158812027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>&, sc_bitref_r<T2> );
158912027Sjungma@eit.uni-kl.de
159012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
159112027Sjungma@eit.uni-kl.deinline
159212027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
159312027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>&, sc_subref_r<T2> );
159412027Sjungma@eit.uni-kl.de
159512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
159612027Sjungma@eit.uni-kl.deinline
159712027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
159812027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>&, sc_concref_r<T2,T3> );
159912027Sjungma@eit.uni-kl.de
160012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
160112027Sjungma@eit.uni-kl.deinline
160212027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
160312027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>&, const sc_proxy<T2>& );
160412027Sjungma@eit.uni-kl.de
160512027Sjungma@eit.uni-kl.detemplate <class T>
160612027Sjungma@eit.uni-kl.deinline
160712027Sjungma@eit.uni-kl.desc_concref_r<T,sc_lv_base>
160812027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T>&, const char* );
160912027Sjungma@eit.uni-kl.de
161012027Sjungma@eit.uni-kl.detemplate <class T>
161112027Sjungma@eit.uni-kl.deinline
161212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,T>
161312027Sjungma@eit.uni-kl.deoperator , ( const char*, const sc_proxy<T>& );
161412027Sjungma@eit.uni-kl.de
161512027Sjungma@eit.uni-kl.detemplate <class T>
161612027Sjungma@eit.uni-kl.deinline
161712027Sjungma@eit.uni-kl.desc_concref_r<T,sc_lv_base>
161812027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T>&, const sc_logic& );
161912027Sjungma@eit.uni-kl.de
162012027Sjungma@eit.uni-kl.detemplate <class T>
162112027Sjungma@eit.uni-kl.deinline
162212027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,T>
162312027Sjungma@eit.uni-kl.deoperator , ( const sc_logic&, const sc_proxy<T>& );
162412027Sjungma@eit.uni-kl.de
162512027Sjungma@eit.uni-kl.detemplate <class T>
162612027Sjungma@eit.uni-kl.deinline
162712027Sjungma@eit.uni-kl.desc_concref_r<T,sc_bv_base>
162812027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T>&, bool );
162912027Sjungma@eit.uni-kl.de
163012027Sjungma@eit.uni-kl.detemplate <class T>
163112027Sjungma@eit.uni-kl.deinline
163212027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,T>
163312027Sjungma@eit.uni-kl.deoperator , ( bool, const sc_proxy<T>& );
163412027Sjungma@eit.uni-kl.de
163512027Sjungma@eit.uni-kl.de
163612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
163712027Sjungma@eit.uni-kl.deinline
163812027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
163912027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>&, sc_bitref_r<T2> );
164012027Sjungma@eit.uni-kl.de
164112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
164212027Sjungma@eit.uni-kl.deinline
164312027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
164412027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>&, sc_subref_r<T2> );
164512027Sjungma@eit.uni-kl.de
164612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
164712027Sjungma@eit.uni-kl.deinline
164812027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
164912027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>&, sc_concref_r<T2,T3> );
165012027Sjungma@eit.uni-kl.de
165112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
165212027Sjungma@eit.uni-kl.deinline
165312027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
165412027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>&, const sc_proxy<T2>& );
165512027Sjungma@eit.uni-kl.de
165612027Sjungma@eit.uni-kl.detemplate <class T>
165712027Sjungma@eit.uni-kl.deinline
165812027Sjungma@eit.uni-kl.desc_concref_r<T,sc_lv_base>
165912027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T>&, const char* );
166012027Sjungma@eit.uni-kl.de
166112027Sjungma@eit.uni-kl.detemplate <class T>
166212027Sjungma@eit.uni-kl.deinline
166312027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,T>
166412027Sjungma@eit.uni-kl.deconcat( const char*, const sc_proxy<T>& );
166512027Sjungma@eit.uni-kl.de
166612027Sjungma@eit.uni-kl.detemplate <class T>
166712027Sjungma@eit.uni-kl.deinline
166812027Sjungma@eit.uni-kl.desc_concref_r<T,sc_lv_base>
166912027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T>&, const sc_logic& );
167012027Sjungma@eit.uni-kl.de
167112027Sjungma@eit.uni-kl.detemplate <class T>
167212027Sjungma@eit.uni-kl.deinline
167312027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,T>
167412027Sjungma@eit.uni-kl.deconcat( const sc_logic&, const sc_proxy<T>& );
167512027Sjungma@eit.uni-kl.de
167612027Sjungma@eit.uni-kl.detemplate <class T>
167712027Sjungma@eit.uni-kl.deinline
167812027Sjungma@eit.uni-kl.desc_concref_r<T,sc_bv_base>
167912027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T>&, bool );
168012027Sjungma@eit.uni-kl.de
168112027Sjungma@eit.uni-kl.detemplate <class T>
168212027Sjungma@eit.uni-kl.deinline
168312027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,T>
168412027Sjungma@eit.uni-kl.deconcat( bool, const sc_proxy<T>& );
168512027Sjungma@eit.uni-kl.de
168612027Sjungma@eit.uni-kl.de
168712027Sjungma@eit.uni-kl.de#ifdef SC_DT_MIXED_COMMA_OPERATORS
168812027Sjungma@eit.uni-kl.de
168912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
169012027Sjungma@eit.uni-kl.deinline
169112027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
169212027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>&, sc_bitref<T2> );
169312027Sjungma@eit.uni-kl.de
169412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
169512027Sjungma@eit.uni-kl.deinline
169612027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
169712027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>&, sc_bitref_r<T2> );
169812027Sjungma@eit.uni-kl.de
169912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
170012027Sjungma@eit.uni-kl.deinline
170112027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
170212027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>&, sc_subref<T2> );
170312027Sjungma@eit.uni-kl.de
170412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
170512027Sjungma@eit.uni-kl.deinline
170612027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
170712027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>&, sc_subref_r<T2> );
170812027Sjungma@eit.uni-kl.de
170912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
171012027Sjungma@eit.uni-kl.deinline
171112027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
171212027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>&, sc_concref<T2,T3> );
171312027Sjungma@eit.uni-kl.de
171412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
171512027Sjungma@eit.uni-kl.deinline
171612027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
171712027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>&, sc_concref_r<T2,T3> );
171812027Sjungma@eit.uni-kl.de
171912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
172012027Sjungma@eit.uni-kl.deinline
172112027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
172212027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>&, sc_proxy<T2>& );
172312027Sjungma@eit.uni-kl.de
172412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
172512027Sjungma@eit.uni-kl.deinline
172612027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
172712027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>&, const sc_proxy<T2>& );
172812027Sjungma@eit.uni-kl.de
172912027Sjungma@eit.uni-kl.detemplate <class T>
173012027Sjungma@eit.uni-kl.deinline
173112027Sjungma@eit.uni-kl.desc_concref_r<T,sc_lv_base>
173212027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T>&, const char* );
173312027Sjungma@eit.uni-kl.de
173412027Sjungma@eit.uni-kl.detemplate <class T>
173512027Sjungma@eit.uni-kl.deinline
173612027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,T>
173712027Sjungma@eit.uni-kl.deoperator , ( const char*, sc_proxy<T>& );
173812027Sjungma@eit.uni-kl.de
173912027Sjungma@eit.uni-kl.detemplate <class T>
174012027Sjungma@eit.uni-kl.deinline
174112027Sjungma@eit.uni-kl.desc_concref_r<T,sc_lv_base>
174212027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T>&, const sc_logic& );
174312027Sjungma@eit.uni-kl.de
174412027Sjungma@eit.uni-kl.detemplate <class T>
174512027Sjungma@eit.uni-kl.deinline
174612027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,T>
174712027Sjungma@eit.uni-kl.deoperator , ( const sc_logic&, sc_proxy<T>& );
174812027Sjungma@eit.uni-kl.de
174912027Sjungma@eit.uni-kl.detemplate <class T>
175012027Sjungma@eit.uni-kl.deinline
175112027Sjungma@eit.uni-kl.desc_concref_r<T,sc_bv_base>
175212027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T>&, bool );
175312027Sjungma@eit.uni-kl.de
175412027Sjungma@eit.uni-kl.detemplate <class T>
175512027Sjungma@eit.uni-kl.deinline
175612027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,T>
175712027Sjungma@eit.uni-kl.deoperator , ( bool, sc_proxy<T>& );
175812027Sjungma@eit.uni-kl.de
175912027Sjungma@eit.uni-kl.de
176012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
176112027Sjungma@eit.uni-kl.deinline
176212027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
176312027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>&, sc_bitref<T2> );
176412027Sjungma@eit.uni-kl.de
176512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
176612027Sjungma@eit.uni-kl.deinline
176712027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
176812027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>&, sc_bitref_r<T2> );
176912027Sjungma@eit.uni-kl.de
177012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
177112027Sjungma@eit.uni-kl.deinline
177212027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
177312027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>&, sc_subref<T2> );
177412027Sjungma@eit.uni-kl.de
177512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
177612027Sjungma@eit.uni-kl.deinline
177712027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
177812027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>&, sc_subref_r<T2> );
177912027Sjungma@eit.uni-kl.de
178012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
178112027Sjungma@eit.uni-kl.deinline
178212027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
178312027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>&, sc_concref<T2,T3> );
178412027Sjungma@eit.uni-kl.de
178512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
178612027Sjungma@eit.uni-kl.deinline
178712027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
178812027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>&, sc_concref_r<T2,T3> );
178912027Sjungma@eit.uni-kl.de
179012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
179112027Sjungma@eit.uni-kl.deinline
179212027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
179312027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>&, sc_proxy<T2>& );
179412027Sjungma@eit.uni-kl.de
179512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
179612027Sjungma@eit.uni-kl.deinline
179712027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
179812027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>&, const sc_proxy<T2>& );
179912027Sjungma@eit.uni-kl.de
180012027Sjungma@eit.uni-kl.detemplate <class T>
180112027Sjungma@eit.uni-kl.deinline
180212027Sjungma@eit.uni-kl.desc_concref_r<T,sc_lv_base>
180312027Sjungma@eit.uni-kl.deconcat( sc_proxy<T>&, const char* );
180412027Sjungma@eit.uni-kl.de
180512027Sjungma@eit.uni-kl.detemplate <class T>
180612027Sjungma@eit.uni-kl.deinline
180712027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,T>
180812027Sjungma@eit.uni-kl.deconcat( const char*, sc_proxy<T>& );
180912027Sjungma@eit.uni-kl.de
181012027Sjungma@eit.uni-kl.detemplate <class T>
181112027Sjungma@eit.uni-kl.deinline
181212027Sjungma@eit.uni-kl.desc_concref_r<T,sc_lv_base>
181312027Sjungma@eit.uni-kl.deconcat( sc_proxy<T>&, const sc_logic& );
181412027Sjungma@eit.uni-kl.de
181512027Sjungma@eit.uni-kl.detemplate <class T>
181612027Sjungma@eit.uni-kl.deinline
181712027Sjungma@eit.uni-kl.desc_concref_r<sc_lv_base,T>
181812027Sjungma@eit.uni-kl.deconcat( const sc_logic&, sc_proxy<T>& );
181912027Sjungma@eit.uni-kl.de
182012027Sjungma@eit.uni-kl.detemplate <class T>
182112027Sjungma@eit.uni-kl.deinline
182212027Sjungma@eit.uni-kl.desc_concref_r<T,sc_bv_base>
182312027Sjungma@eit.uni-kl.deconcat( sc_proxy<T>&, bool );
182412027Sjungma@eit.uni-kl.de
182512027Sjungma@eit.uni-kl.detemplate <class T>
182612027Sjungma@eit.uni-kl.deinline
182712027Sjungma@eit.uni-kl.desc_concref_r<sc_bv_base,T>
182812027Sjungma@eit.uni-kl.deconcat( bool, sc_proxy<T>& );
182912027Sjungma@eit.uni-kl.de
183012027Sjungma@eit.uni-kl.de#endif
183112027Sjungma@eit.uni-kl.de
183212027Sjungma@eit.uni-kl.de
183312027Sjungma@eit.uni-kl.de// l-value concatenation operators and functions
183412027Sjungma@eit.uni-kl.de
183512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
183612027Sjungma@eit.uni-kl.deinline
183712027Sjungma@eit.uni-kl.desc_concref<T1,sc_bitref<T2> >
183812027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>&, sc_bitref<T2> );
183912027Sjungma@eit.uni-kl.de
184012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
184112027Sjungma@eit.uni-kl.deinline
184212027Sjungma@eit.uni-kl.desc_concref<T1,sc_subref<T2> >
184312027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>&, sc_subref<T2> );
184412027Sjungma@eit.uni-kl.de
184512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
184612027Sjungma@eit.uni-kl.deinline
184712027Sjungma@eit.uni-kl.desc_concref<T1,sc_concref<T2,T3> >
184812027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>&, sc_concref<T2,T3> );
184912027Sjungma@eit.uni-kl.de
185012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
185112027Sjungma@eit.uni-kl.deinline
185212027Sjungma@eit.uni-kl.desc_concref<T1,T2>
185312027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>&, sc_proxy<T2>& );
185412027Sjungma@eit.uni-kl.de
185512027Sjungma@eit.uni-kl.de
185612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
185712027Sjungma@eit.uni-kl.deinline
185812027Sjungma@eit.uni-kl.desc_concref<T1,sc_bitref<T2> >
185912027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>&, sc_bitref<T2> );
186012027Sjungma@eit.uni-kl.de
186112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
186212027Sjungma@eit.uni-kl.deinline
186312027Sjungma@eit.uni-kl.desc_concref<T1,sc_subref<T2> >
186412027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>&, sc_subref<T2> );
186512027Sjungma@eit.uni-kl.de
186612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
186712027Sjungma@eit.uni-kl.deinline
186812027Sjungma@eit.uni-kl.desc_concref<T1,sc_concref<T2,T3> >
186912027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>&, sc_concref<T2,T3> );
187012027Sjungma@eit.uni-kl.de
187112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
187212027Sjungma@eit.uni-kl.deinline
187312027Sjungma@eit.uni-kl.desc_concref<T1,T2>
187412027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>&, sc_proxy<T2>& );
187512027Sjungma@eit.uni-kl.de
187612027Sjungma@eit.uni-kl.de
187712027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
187812027Sjungma@eit.uni-kl.de
187912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
188012027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_bitref_r<T>
188112027Sjungma@eit.uni-kl.de//
188212027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy bit selection (r-value only).
188312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
188412027Sjungma@eit.uni-kl.de
188512027Sjungma@eit.uni-kl.de// bitwise operators and functions
188612027Sjungma@eit.uni-kl.de
188712027Sjungma@eit.uni-kl.de// bitwise and
188812027Sjungma@eit.uni-kl.de
188912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
189012027Sjungma@eit.uni-kl.deinline
189112027Sjungma@eit.uni-kl.deconst sc_logic
189212027Sjungma@eit.uni-kl.deoperator & ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b )
189312027Sjungma@eit.uni-kl.de{
189412027Sjungma@eit.uni-kl.de    return sc_logic( sc_logic::and_table[a.value()][b.value()] );
189512027Sjungma@eit.uni-kl.de}
189612027Sjungma@eit.uni-kl.de
189712027Sjungma@eit.uni-kl.de
189812027Sjungma@eit.uni-kl.de// bitwise or
189912027Sjungma@eit.uni-kl.de
190012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
190112027Sjungma@eit.uni-kl.deinline
190212027Sjungma@eit.uni-kl.deconst sc_logic
190312027Sjungma@eit.uni-kl.deoperator | ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b )
190412027Sjungma@eit.uni-kl.de{
190512027Sjungma@eit.uni-kl.de    return sc_logic( sc_logic::or_table[a.value()][b.value()] );
190612027Sjungma@eit.uni-kl.de}
190712027Sjungma@eit.uni-kl.de
190812027Sjungma@eit.uni-kl.de
190912027Sjungma@eit.uni-kl.de// bitwise xor
191012027Sjungma@eit.uni-kl.de
191112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
191212027Sjungma@eit.uni-kl.deinline
191312027Sjungma@eit.uni-kl.deconst sc_logic
191412027Sjungma@eit.uni-kl.deoperator ^ ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b )
191512027Sjungma@eit.uni-kl.de{
191612027Sjungma@eit.uni-kl.de    return sc_logic( sc_logic::xor_table[a.value()][b.value()] );
191712027Sjungma@eit.uni-kl.de}
191812027Sjungma@eit.uni-kl.de
191912027Sjungma@eit.uni-kl.de
192012027Sjungma@eit.uni-kl.de// relational operators and functions
192112027Sjungma@eit.uni-kl.de
192212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
192312027Sjungma@eit.uni-kl.deinline
192412027Sjungma@eit.uni-kl.debool
192512027Sjungma@eit.uni-kl.deoperator == ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b )
192612027Sjungma@eit.uni-kl.de{
192712027Sjungma@eit.uni-kl.de    return ( (int) a.value() == b.value() );
192812027Sjungma@eit.uni-kl.de}
192912027Sjungma@eit.uni-kl.de
193012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
193112027Sjungma@eit.uni-kl.deinline
193212027Sjungma@eit.uni-kl.debool
193312027Sjungma@eit.uni-kl.deoperator != ( const sc_bitref_r<T1>& a, const sc_bitref_r<T2>& b )
193412027Sjungma@eit.uni-kl.de{
193512027Sjungma@eit.uni-kl.de    return ( (int) a.value() != b.value() );
193612027Sjungma@eit.uni-kl.de}
193712027Sjungma@eit.uni-kl.de
193812027Sjungma@eit.uni-kl.de
193912027Sjungma@eit.uni-kl.de// common methods
194012027Sjungma@eit.uni-kl.de
194112027Sjungma@eit.uni-kl.detemplate <class T>
194212027Sjungma@eit.uni-kl.deinline
194312027Sjungma@eit.uni-kl.desc_logic_value_t
194412027Sjungma@eit.uni-kl.desc_bitref_r<T>::get_bit( int n ) const
194512027Sjungma@eit.uni-kl.de{
194612027Sjungma@eit.uni-kl.de    if( n == 0 ) {
194712027Sjungma@eit.uni-kl.de	return m_obj.get_bit( m_index );
194812027Sjungma@eit.uni-kl.de    } else {
194912027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_ , 0 );
195012027Sjungma@eit.uni-kl.de        // never reached
195112027Sjungma@eit.uni-kl.de	return Log_0;
195212027Sjungma@eit.uni-kl.de    }
195312027Sjungma@eit.uni-kl.de}
195412027Sjungma@eit.uni-kl.de
195512027Sjungma@eit.uni-kl.de
195612027Sjungma@eit.uni-kl.detemplate <class T>
195712027Sjungma@eit.uni-kl.deinline
195812027Sjungma@eit.uni-kl.desc_digit
195912027Sjungma@eit.uni-kl.desc_bitref_r<T>::get_word( int n ) const
196012027Sjungma@eit.uni-kl.de{
196112027Sjungma@eit.uni-kl.de    if( n == 0 ) {
196212027Sjungma@eit.uni-kl.de	return ( get_bit( n ) & SC_DIGIT_ONE );
196312027Sjungma@eit.uni-kl.de    } else {
196412027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
196512027Sjungma@eit.uni-kl.de	// never reached
196612027Sjungma@eit.uni-kl.de	return 0;
196712027Sjungma@eit.uni-kl.de    }
196812027Sjungma@eit.uni-kl.de}
196912027Sjungma@eit.uni-kl.de
197012027Sjungma@eit.uni-kl.detemplate <class T>
197112027Sjungma@eit.uni-kl.deinline
197212027Sjungma@eit.uni-kl.desc_digit
197312027Sjungma@eit.uni-kl.desc_bitref_r<T>::get_cword( int n ) const
197412027Sjungma@eit.uni-kl.de{
197512027Sjungma@eit.uni-kl.de    if( n == 0 ) {
197612027Sjungma@eit.uni-kl.de	return ( (get_bit( n ) & SC_DIGIT_TWO) >> 1 );
197712027Sjungma@eit.uni-kl.de    } else {
197812027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
197912027Sjungma@eit.uni-kl.de	// never reached
198012027Sjungma@eit.uni-kl.de	return 0;
198112027Sjungma@eit.uni-kl.de    }
198212027Sjungma@eit.uni-kl.de}
198312027Sjungma@eit.uni-kl.de
198412027Sjungma@eit.uni-kl.de
198512027Sjungma@eit.uni-kl.de// r-value concatenation operators and functions
198612027Sjungma@eit.uni-kl.de
198712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
198812027Sjungma@eit.uni-kl.deinline
198912027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
199012027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1> a, sc_bitref_r<T2> b )
199112027Sjungma@eit.uni-kl.de{
199212027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >(
199312027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
199412027Sjungma@eit.uni-kl.de}
199512027Sjungma@eit.uni-kl.de
199612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
199712027Sjungma@eit.uni-kl.deinline
199812027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
199912027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1> a, sc_subref_r<T2> b )
200012027Sjungma@eit.uni-kl.de{
200112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >(
200212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
200312027Sjungma@eit.uni-kl.de}
200412027Sjungma@eit.uni-kl.de
200512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
200612027Sjungma@eit.uni-kl.deinline
200712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
200812027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1> a, sc_concref_r<T2,T3> b )
200912027Sjungma@eit.uni-kl.de{
201012027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >(
201112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
201212027Sjungma@eit.uni-kl.de}
201312027Sjungma@eit.uni-kl.de
201412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
201512027Sjungma@eit.uni-kl.deinline
201612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
201712027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1> a, const sc_proxy<T2>& b )
201812027Sjungma@eit.uni-kl.de{
201912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,T2>(
202012027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
202112027Sjungma@eit.uni-kl.de}
202212027Sjungma@eit.uni-kl.de
202312027Sjungma@eit.uni-kl.de
202412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
202512027Sjungma@eit.uni-kl.deinline
202612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
202712027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1> a, sc_bitref_r<T2> b )
202812027Sjungma@eit.uni-kl.de{
202912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >(
203012027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
203112027Sjungma@eit.uni-kl.de}
203212027Sjungma@eit.uni-kl.de
203312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
203412027Sjungma@eit.uni-kl.deinline
203512027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
203612027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1> a, sc_subref_r<T2> b )
203712027Sjungma@eit.uni-kl.de{
203812027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >(
203912027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
204012027Sjungma@eit.uni-kl.de}
204112027Sjungma@eit.uni-kl.de
204212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
204312027Sjungma@eit.uni-kl.deinline
204412027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
204512027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1> a, sc_concref_r<T2,T3> b )
204612027Sjungma@eit.uni-kl.de{
204712027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >(
204812027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
204912027Sjungma@eit.uni-kl.de}
205012027Sjungma@eit.uni-kl.de
205112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
205212027Sjungma@eit.uni-kl.deinline
205312027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
205412027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1> a, const sc_proxy<T2>& b )
205512027Sjungma@eit.uni-kl.de{
205612027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,T2>(
205712027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
205812027Sjungma@eit.uni-kl.de}
205912027Sjungma@eit.uni-kl.de
206012027Sjungma@eit.uni-kl.de
206112027Sjungma@eit.uni-kl.de#ifdef SC_DT_MIXED_COMMA_OPERATORS
206212027Sjungma@eit.uni-kl.de
206312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
206412027Sjungma@eit.uni-kl.deinline
206512027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
206612027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1> a, sc_bitref<T2> b )
206712027Sjungma@eit.uni-kl.de{
206812027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >(
206912027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
207012027Sjungma@eit.uni-kl.de}
207112027Sjungma@eit.uni-kl.de
207212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
207312027Sjungma@eit.uni-kl.deinline
207412027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
207512027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1> a, sc_bitref_r<T2> b )
207612027Sjungma@eit.uni-kl.de{
207712027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >(
207812027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
207912027Sjungma@eit.uni-kl.de}
208012027Sjungma@eit.uni-kl.de
208112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
208212027Sjungma@eit.uni-kl.deinline
208312027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
208412027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1> a, sc_subref<T2> b )
208512027Sjungma@eit.uni-kl.de{
208612027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >(
208712027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
208812027Sjungma@eit.uni-kl.de}
208912027Sjungma@eit.uni-kl.de
209012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
209112027Sjungma@eit.uni-kl.deinline
209212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
209312027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1> a, sc_subref_r<T2> b )
209412027Sjungma@eit.uni-kl.de{
209512027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >(
209612027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
209712027Sjungma@eit.uni-kl.de}
209812027Sjungma@eit.uni-kl.de
209912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
210012027Sjungma@eit.uni-kl.deinline
210112027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
210212027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1> a, sc_concref<T2,T3> b )
210312027Sjungma@eit.uni-kl.de{
210412027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >(
210512027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
210612027Sjungma@eit.uni-kl.de}
210712027Sjungma@eit.uni-kl.de
210812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
210912027Sjungma@eit.uni-kl.deinline
211012027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
211112027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1> a, sc_concref_r<T2,T3> b )
211212027Sjungma@eit.uni-kl.de{
211312027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >(
211412027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
211512027Sjungma@eit.uni-kl.de}
211612027Sjungma@eit.uni-kl.de
211712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
211812027Sjungma@eit.uni-kl.deinline
211912027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
212012027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1> a, const sc_proxy<T2>& b )
212112027Sjungma@eit.uni-kl.de{
212212027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,T2>(
212312027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
212412027Sjungma@eit.uni-kl.de}
212512027Sjungma@eit.uni-kl.de
212612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
212712027Sjungma@eit.uni-kl.deinline
212812027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
212912027Sjungma@eit.uni-kl.deoperator , ( sc_bitref_r<T1> a, sc_proxy<T2>& b )
213012027Sjungma@eit.uni-kl.de{
213112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,T2>(
213212027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
213312027Sjungma@eit.uni-kl.de}
213412027Sjungma@eit.uni-kl.de
213512027Sjungma@eit.uni-kl.de
213612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
213712027Sjungma@eit.uni-kl.deinline
213812027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
213912027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1> a, sc_bitref<T2> b )
214012027Sjungma@eit.uni-kl.de{
214112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >(
214212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
214312027Sjungma@eit.uni-kl.de}
214412027Sjungma@eit.uni-kl.de
214512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
214612027Sjungma@eit.uni-kl.deinline
214712027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >
214812027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1> a, sc_bitref_r<T2> b )
214912027Sjungma@eit.uni-kl.de{
215012027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_bitref_r<T2> >(
215112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
215212027Sjungma@eit.uni-kl.de}
215312027Sjungma@eit.uni-kl.de
215412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
215512027Sjungma@eit.uni-kl.deinline
215612027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
215712027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1> a, sc_subref<T2> b )
215812027Sjungma@eit.uni-kl.de{
215912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >(
216012027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
216112027Sjungma@eit.uni-kl.de}
216212027Sjungma@eit.uni-kl.de
216312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
216412027Sjungma@eit.uni-kl.deinline
216512027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >
216612027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1> a, sc_subref_r<T2> b )
216712027Sjungma@eit.uni-kl.de{
216812027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_subref_r<T2> >(
216912027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
217012027Sjungma@eit.uni-kl.de}
217112027Sjungma@eit.uni-kl.de
217212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
217312027Sjungma@eit.uni-kl.deinline
217412027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
217512027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1> a, sc_concref<T2,T3> b )
217612027Sjungma@eit.uni-kl.de{
217712027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >(
217812027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
217912027Sjungma@eit.uni-kl.de}
218012027Sjungma@eit.uni-kl.de
218112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
218212027Sjungma@eit.uni-kl.deinline
218312027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >
218412027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1> a, sc_concref_r<T2,T3> b )
218512027Sjungma@eit.uni-kl.de{
218612027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,sc_concref_r<T2,T3> >(
218712027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
218812027Sjungma@eit.uni-kl.de}
218912027Sjungma@eit.uni-kl.de
219012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
219112027Sjungma@eit.uni-kl.deinline
219212027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
219312027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1> a, const sc_proxy<T2>& b )
219412027Sjungma@eit.uni-kl.de{
219512027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,T2>(
219612027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
219712027Sjungma@eit.uni-kl.de}
219812027Sjungma@eit.uni-kl.de
219912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
220012027Sjungma@eit.uni-kl.deinline
220112027Sjungma@eit.uni-kl.desc_concref_r<sc_bitref_r<T1>,T2>
220212027Sjungma@eit.uni-kl.deconcat( sc_bitref_r<T1> a, sc_proxy<T2>& b )
220312027Sjungma@eit.uni-kl.de{
220412027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_bitref_r<T1>,T2>(
220512027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
220612027Sjungma@eit.uni-kl.de}
220712027Sjungma@eit.uni-kl.de
220812027Sjungma@eit.uni-kl.de#endif
220912027Sjungma@eit.uni-kl.de
221012027Sjungma@eit.uni-kl.de
221112027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
221212027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_bitref<X>
221312027Sjungma@eit.uni-kl.de//
221412027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy bit selection (r-value and l-value).
221512027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
221612027Sjungma@eit.uni-kl.de
221712027Sjungma@eit.uni-kl.de// assignment operators
221812027Sjungma@eit.uni-kl.de
221912027Sjungma@eit.uni-kl.detemplate <class X>
222012027Sjungma@eit.uni-kl.deinline
222112027Sjungma@eit.uni-kl.desc_bitref<X>&
222212027Sjungma@eit.uni-kl.desc_bitref<X>::operator = ( const sc_bitref_r<X>& a )
222312027Sjungma@eit.uni-kl.de{
222412027Sjungma@eit.uni-kl.de    this->m_obj.set_bit( this->m_index, a.value() );
222512027Sjungma@eit.uni-kl.de	return *this;
222612027Sjungma@eit.uni-kl.de}
222712027Sjungma@eit.uni-kl.de
222812027Sjungma@eit.uni-kl.detemplate <class X>
222912027Sjungma@eit.uni-kl.deinline
223012027Sjungma@eit.uni-kl.desc_bitref<X>&
223112027Sjungma@eit.uni-kl.desc_bitref<X>::operator = ( const sc_bitref<X>& a )
223212027Sjungma@eit.uni-kl.de{
223312027Sjungma@eit.uni-kl.de    if( &a != this ) {
223412027Sjungma@eit.uni-kl.de	this->m_obj.set_bit( this->m_index, a.value() );
223512027Sjungma@eit.uni-kl.de    }
223612027Sjungma@eit.uni-kl.de    return *this;
223712027Sjungma@eit.uni-kl.de}
223812027Sjungma@eit.uni-kl.de
223912027Sjungma@eit.uni-kl.de
224012027Sjungma@eit.uni-kl.de// bitwise assignment operators
224112027Sjungma@eit.uni-kl.de
224212027Sjungma@eit.uni-kl.detemplate <class X>
224312027Sjungma@eit.uni-kl.deinline
224412027Sjungma@eit.uni-kl.desc_bitref<X>&
224512027Sjungma@eit.uni-kl.desc_bitref<X>::operator &= ( const sc_bitref_r<X>& a )
224612027Sjungma@eit.uni-kl.de{
224712027Sjungma@eit.uni-kl.de    if( &a != this ) {
224812027Sjungma@eit.uni-kl.de	this->m_obj.set_bit( this->m_index,
224912027Sjungma@eit.uni-kl.de			     sc_logic::and_table[this->value()][a.value()] );
225012027Sjungma@eit.uni-kl.de    }
225112027Sjungma@eit.uni-kl.de    return *this;
225212027Sjungma@eit.uni-kl.de}
225312027Sjungma@eit.uni-kl.de
225412027Sjungma@eit.uni-kl.detemplate <class X>
225512027Sjungma@eit.uni-kl.deinline
225612027Sjungma@eit.uni-kl.desc_bitref<X>&
225712027Sjungma@eit.uni-kl.desc_bitref<X>::operator &= ( const sc_logic& a )
225812027Sjungma@eit.uni-kl.de{
225912027Sjungma@eit.uni-kl.de    this->m_obj.set_bit( this->m_index,
226012027Sjungma@eit.uni-kl.de			 sc_logic::and_table[this->value()][a.value()] );
226112027Sjungma@eit.uni-kl.de    return *this;
226212027Sjungma@eit.uni-kl.de}
226312027Sjungma@eit.uni-kl.de
226412027Sjungma@eit.uni-kl.de
226512027Sjungma@eit.uni-kl.detemplate <class X>
226612027Sjungma@eit.uni-kl.deinline
226712027Sjungma@eit.uni-kl.desc_bitref<X>&
226812027Sjungma@eit.uni-kl.desc_bitref<X>::operator |= ( const sc_bitref_r<X>& a )
226912027Sjungma@eit.uni-kl.de{
227012027Sjungma@eit.uni-kl.de    if( &a != this ) {
227112027Sjungma@eit.uni-kl.de	this->m_obj.set_bit( this->m_index,
227212027Sjungma@eit.uni-kl.de			     sc_logic::or_table[this->value()][a.value()] );
227312027Sjungma@eit.uni-kl.de    }
227412027Sjungma@eit.uni-kl.de    return *this;
227512027Sjungma@eit.uni-kl.de}
227612027Sjungma@eit.uni-kl.de
227712027Sjungma@eit.uni-kl.detemplate <class X>
227812027Sjungma@eit.uni-kl.deinline
227912027Sjungma@eit.uni-kl.desc_bitref<X>&
228012027Sjungma@eit.uni-kl.desc_bitref<X>::operator |= ( const sc_logic& a )
228112027Sjungma@eit.uni-kl.de{
228212027Sjungma@eit.uni-kl.de    this->m_obj.set_bit( this->m_index,
228312027Sjungma@eit.uni-kl.de			 sc_logic::or_table[this->value()][a.value()] );
228412027Sjungma@eit.uni-kl.de    return *this;
228512027Sjungma@eit.uni-kl.de}
228612027Sjungma@eit.uni-kl.de
228712027Sjungma@eit.uni-kl.de
228812027Sjungma@eit.uni-kl.detemplate <class X>
228912027Sjungma@eit.uni-kl.deinline
229012027Sjungma@eit.uni-kl.desc_bitref<X>&
229112027Sjungma@eit.uni-kl.desc_bitref<X>::operator ^= ( const sc_bitref_r<X>& a )
229212027Sjungma@eit.uni-kl.de{
229312027Sjungma@eit.uni-kl.de    if( &a != this ) {
229412027Sjungma@eit.uni-kl.de	this->m_obj.set_bit( this->m_index,
229512027Sjungma@eit.uni-kl.de			     sc_logic::xor_table[this->value()][a.value()] );
229612027Sjungma@eit.uni-kl.de    }
229712027Sjungma@eit.uni-kl.de    return *this;
229812027Sjungma@eit.uni-kl.de}
229912027Sjungma@eit.uni-kl.de
230012027Sjungma@eit.uni-kl.detemplate <class X>
230112027Sjungma@eit.uni-kl.deinline
230212027Sjungma@eit.uni-kl.desc_bitref<X>&
230312027Sjungma@eit.uni-kl.desc_bitref<X>::operator ^= ( const sc_logic& a )
230412027Sjungma@eit.uni-kl.de{
230512027Sjungma@eit.uni-kl.de    this->m_obj.set_bit( this->m_index,
230612027Sjungma@eit.uni-kl.de			 sc_logic::xor_table[this->value()][a.value()] );
230712027Sjungma@eit.uni-kl.de    return *this;
230812027Sjungma@eit.uni-kl.de}
230912027Sjungma@eit.uni-kl.de
231012027Sjungma@eit.uni-kl.de
231112027Sjungma@eit.uni-kl.de// bitwise operators and functions
231212027Sjungma@eit.uni-kl.de
231312027Sjungma@eit.uni-kl.de// bitwise complement
231412027Sjungma@eit.uni-kl.de
231512027Sjungma@eit.uni-kl.detemplate <class X>
231612027Sjungma@eit.uni-kl.deinline
231712027Sjungma@eit.uni-kl.desc_bitref<X>&
231812027Sjungma@eit.uni-kl.desc_bitref<X>::b_not()
231912027Sjungma@eit.uni-kl.de{
232012027Sjungma@eit.uni-kl.de    this->m_obj.set_bit( this->m_index,
232112027Sjungma@eit.uni-kl.de			 sc_logic::not_table[this->value()] );
232212027Sjungma@eit.uni-kl.de    return *this;
232312027Sjungma@eit.uni-kl.de}
232412027Sjungma@eit.uni-kl.de
232512027Sjungma@eit.uni-kl.de
232612027Sjungma@eit.uni-kl.de// common methods
232712027Sjungma@eit.uni-kl.de
232812027Sjungma@eit.uni-kl.detemplate <class X>
232912027Sjungma@eit.uni-kl.deinline
233012027Sjungma@eit.uni-kl.devoid
233112027Sjungma@eit.uni-kl.desc_bitref<X>::set_bit( int n, sc_logic_value_t value )
233212027Sjungma@eit.uni-kl.de{
233312027Sjungma@eit.uni-kl.de    if( n == 0 ) {
233412027Sjungma@eit.uni-kl.de	this->m_obj.set_bit( this->m_index, value );
233512027Sjungma@eit.uni-kl.de    } else {
233612027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
233712027Sjungma@eit.uni-kl.de    }
233812027Sjungma@eit.uni-kl.de}
233912027Sjungma@eit.uni-kl.de
234012027Sjungma@eit.uni-kl.detemplate <class X>
234112027Sjungma@eit.uni-kl.deinline
234212027Sjungma@eit.uni-kl.devoid
234312027Sjungma@eit.uni-kl.desc_bitref<X>::set_word( int n, sc_digit w )
234412027Sjungma@eit.uni-kl.de{
234512027Sjungma@eit.uni-kl.de    unsigned int bi = this->m_index % (8*sizeof(sc_digit));
234612027Sjungma@eit.uni-kl.de    sc_digit     temp;
234712027Sjungma@eit.uni-kl.de    unsigned int wi = this->m_index / (8*sizeof(sc_digit));
234812027Sjungma@eit.uni-kl.de    if( n == 0 ) {
234912027Sjungma@eit.uni-kl.de        temp = this->m_obj.get_word(wi);
235012027Sjungma@eit.uni-kl.de        temp = (temp & ~(1 << bi)) | ((w&1) << bi);
235112027Sjungma@eit.uni-kl.de        this->m_obj.set_word(wi, temp);
235212027Sjungma@eit.uni-kl.de    } else {
235312027Sjungma@eit.uni-kl.de        SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
235412027Sjungma@eit.uni-kl.de    }
235512027Sjungma@eit.uni-kl.de
235612027Sjungma@eit.uni-kl.de}
235712027Sjungma@eit.uni-kl.de
235812027Sjungma@eit.uni-kl.detemplate <class X>
235912027Sjungma@eit.uni-kl.deinline
236012027Sjungma@eit.uni-kl.devoid
236112027Sjungma@eit.uni-kl.desc_bitref<X>::set_cword( int n, sc_digit w )
236212027Sjungma@eit.uni-kl.de{
236312027Sjungma@eit.uni-kl.de    unsigned int bi = this->m_index % (8*sizeof(sc_digit));
236412027Sjungma@eit.uni-kl.de    sc_digit     temp;
236512027Sjungma@eit.uni-kl.de    unsigned int wi = this->m_index / (8*sizeof(sc_digit));
236612027Sjungma@eit.uni-kl.de    if( n == 0 ) {
236712027Sjungma@eit.uni-kl.de        temp = this->m_obj.get_cword(wi);
236812027Sjungma@eit.uni-kl.de        temp = (temp & ~(1 << bi)) | ((w&1) << bi);
236912027Sjungma@eit.uni-kl.de        this->m_obj.set_cword(wi, temp);
237012027Sjungma@eit.uni-kl.de    } else {
237112027Sjungma@eit.uni-kl.de        SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
237212027Sjungma@eit.uni-kl.de    }
237312027Sjungma@eit.uni-kl.de}
237412027Sjungma@eit.uni-kl.de
237512027Sjungma@eit.uni-kl.de// other methods
237612027Sjungma@eit.uni-kl.de
237712027Sjungma@eit.uni-kl.detemplate <class X>
237812027Sjungma@eit.uni-kl.deinline
237912027Sjungma@eit.uni-kl.devoid
238012027Sjungma@eit.uni-kl.desc_bitref<X>::scan( ::std::istream& is )
238112027Sjungma@eit.uni-kl.de{
238212027Sjungma@eit.uni-kl.de    char c;
238312027Sjungma@eit.uni-kl.de    is >> c;
238412027Sjungma@eit.uni-kl.de    *this = c;
238512027Sjungma@eit.uni-kl.de}
238612027Sjungma@eit.uni-kl.de
238712027Sjungma@eit.uni-kl.de
238812027Sjungma@eit.uni-kl.de// l-value concatenation operators and functions
238912027Sjungma@eit.uni-kl.de
239012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
239112027Sjungma@eit.uni-kl.deinline
239212027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_bitref<T2> >
239312027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1> a, sc_bitref<T2> b )
239412027Sjungma@eit.uni-kl.de{
239512027Sjungma@eit.uni-kl.de    return sc_concref<sc_bitref<T1>,sc_bitref<T2> >(
239612027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
239712027Sjungma@eit.uni-kl.de}
239812027Sjungma@eit.uni-kl.de
239912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
240012027Sjungma@eit.uni-kl.deinline
240112027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_subref<T2> >
240212027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1> a, sc_subref<T2> b )
240312027Sjungma@eit.uni-kl.de{
240412027Sjungma@eit.uni-kl.de    return sc_concref<sc_bitref<T1>,sc_subref<T2> >(
240512027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
240612027Sjungma@eit.uni-kl.de}
240712027Sjungma@eit.uni-kl.de
240812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
240912027Sjungma@eit.uni-kl.deinline
241012027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_concref<T2,T3> >
241112027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1> a, sc_concref<T2,T3> b )
241212027Sjungma@eit.uni-kl.de{
241312027Sjungma@eit.uni-kl.de    return sc_concref<sc_bitref<T1>,sc_concref<T2,T3> >(
241412027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
241512027Sjungma@eit.uni-kl.de}
241612027Sjungma@eit.uni-kl.de
241712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
241812027Sjungma@eit.uni-kl.deinline
241912027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,T2>
242012027Sjungma@eit.uni-kl.deoperator , ( sc_bitref<T1> a, sc_proxy<T2>& b )
242112027Sjungma@eit.uni-kl.de{
242212027Sjungma@eit.uni-kl.de    return sc_concref<sc_bitref<T1>,T2>(
242312027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
242412027Sjungma@eit.uni-kl.de}
242512027Sjungma@eit.uni-kl.de
242612027Sjungma@eit.uni-kl.de
242712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
242812027Sjungma@eit.uni-kl.deinline
242912027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_bitref<T2> >
243012027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1> a, sc_bitref<T2> b )
243112027Sjungma@eit.uni-kl.de{
243212027Sjungma@eit.uni-kl.de    return sc_concref<sc_bitref<T1>,sc_bitref<T2> >(
243312027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
243412027Sjungma@eit.uni-kl.de}
243512027Sjungma@eit.uni-kl.de
243612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
243712027Sjungma@eit.uni-kl.deinline
243812027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_subref<T2> >
243912027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1> a, sc_subref<T2> b )
244012027Sjungma@eit.uni-kl.de{
244112027Sjungma@eit.uni-kl.de    return sc_concref<sc_bitref<T1>,sc_subref<T2> >(
244212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
244312027Sjungma@eit.uni-kl.de}
244412027Sjungma@eit.uni-kl.de
244512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
244612027Sjungma@eit.uni-kl.deinline
244712027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,sc_concref<T2,T3> >
244812027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1> a, sc_concref<T2,T3> b )
244912027Sjungma@eit.uni-kl.de{
245012027Sjungma@eit.uni-kl.de    return sc_concref<sc_bitref<T1>,sc_concref<T2,T3> >(
245112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
245212027Sjungma@eit.uni-kl.de}
245312027Sjungma@eit.uni-kl.de
245412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
245512027Sjungma@eit.uni-kl.deinline
245612027Sjungma@eit.uni-kl.desc_concref<sc_bitref<T1>,T2>
245712027Sjungma@eit.uni-kl.deconcat( sc_bitref<T1> a, sc_proxy<T2>& b )
245812027Sjungma@eit.uni-kl.de{
245912027Sjungma@eit.uni-kl.de    return sc_concref<sc_bitref<T1>,T2>(
246012027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
246112027Sjungma@eit.uni-kl.de}
246212027Sjungma@eit.uni-kl.de
246312027Sjungma@eit.uni-kl.de
246412027Sjungma@eit.uni-kl.detemplate <class X>
246512027Sjungma@eit.uni-kl.deinline
246612027Sjungma@eit.uni-kl.de::std::istream&
246712027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_bitref<X> a )
246812027Sjungma@eit.uni-kl.de{
246912027Sjungma@eit.uni-kl.de    a.scan( is );
247012027Sjungma@eit.uni-kl.de    return is;
247112027Sjungma@eit.uni-kl.de}
247212027Sjungma@eit.uni-kl.de
247312027Sjungma@eit.uni-kl.de
247412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
247512027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_subref_r<X>
247612027Sjungma@eit.uni-kl.de//
247712027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy part selection (r-value only).
247812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
247912027Sjungma@eit.uni-kl.de
248012027Sjungma@eit.uni-kl.detemplate <class X>
248112027Sjungma@eit.uni-kl.deinline
248212027Sjungma@eit.uni-kl.devoid
248312027Sjungma@eit.uni-kl.desc_subref_r<X>::check_bounds()
248412027Sjungma@eit.uni-kl.de{
248512027Sjungma@eit.uni-kl.de    int len = m_obj.length();
248612027Sjungma@eit.uni-kl.de    if( m_hi < 0 || m_hi >= len || m_lo < 0 || m_lo >= len ) {
248712027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
248812027Sjungma@eit.uni-kl.de    }
248912027Sjungma@eit.uni-kl.de    if( reversed() ) {
249012027Sjungma@eit.uni-kl.de	m_len = m_lo - m_hi + 1;
249112027Sjungma@eit.uni-kl.de    } else {
249212027Sjungma@eit.uni-kl.de	m_len = m_hi - m_lo + 1;
249312027Sjungma@eit.uni-kl.de    }
249412027Sjungma@eit.uni-kl.de}
249512027Sjungma@eit.uni-kl.de
249612027Sjungma@eit.uni-kl.de
249712027Sjungma@eit.uni-kl.de// common methods
249812027Sjungma@eit.uni-kl.de
249912027Sjungma@eit.uni-kl.detemplate <class X>
250012027Sjungma@eit.uni-kl.deinline
250112027Sjungma@eit.uni-kl.desc_logic_value_t
250212027Sjungma@eit.uni-kl.desc_subref_r<X>::get_bit( int n ) const
250312027Sjungma@eit.uni-kl.de{
250412027Sjungma@eit.uni-kl.de    if( reversed() ) {
250512027Sjungma@eit.uni-kl.de	return m_obj.get_bit( m_lo - n );
250612027Sjungma@eit.uni-kl.de    } else {
250712027Sjungma@eit.uni-kl.de	return m_obj.get_bit( m_lo + n );
250812027Sjungma@eit.uni-kl.de    }
250912027Sjungma@eit.uni-kl.de}
251012027Sjungma@eit.uni-kl.de
251112027Sjungma@eit.uni-kl.detemplate <class X>
251212027Sjungma@eit.uni-kl.deinline
251312027Sjungma@eit.uni-kl.devoid
251412027Sjungma@eit.uni-kl.desc_subref_r<X>::set_bit( int n, sc_logic_value_t value )
251512027Sjungma@eit.uni-kl.de{
251612027Sjungma@eit.uni-kl.de    if( reversed() ) {
251712027Sjungma@eit.uni-kl.de	m_obj.set_bit( m_lo - n, value );
251812027Sjungma@eit.uni-kl.de    } else {
251912027Sjungma@eit.uni-kl.de	m_obj.set_bit( m_lo + n, value );
252012027Sjungma@eit.uni-kl.de    }
252112027Sjungma@eit.uni-kl.de}
252212027Sjungma@eit.uni-kl.de
252312027Sjungma@eit.uni-kl.de
252412027Sjungma@eit.uni-kl.detemplate <class X>
252512027Sjungma@eit.uni-kl.deinline
252612027Sjungma@eit.uni-kl.desc_digit
252712027Sjungma@eit.uni-kl.desc_subref_r<X>::get_word( int i ) const
252812027Sjungma@eit.uni-kl.de{
252912027Sjungma@eit.uni-kl.de    int n1 = 0;
253012027Sjungma@eit.uni-kl.de    int n2 = 0;
253112027Sjungma@eit.uni-kl.de    sc_digit result = 0;
253212027Sjungma@eit.uni-kl.de    int k = 0;
253312027Sjungma@eit.uni-kl.de    if( reversed() ) {
253412027Sjungma@eit.uni-kl.de	n1 = m_lo - i * SC_DIGIT_SIZE;
253512027Sjungma@eit.uni-kl.de	n2 = sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 );
253612027Sjungma@eit.uni-kl.de	for( int n = n1; n > n2; n -- ) {
253712027Sjungma@eit.uni-kl.de	    result |= (m_obj[n].value() & SC_DIGIT_ONE) << k ++;
253812027Sjungma@eit.uni-kl.de	}
253912027Sjungma@eit.uni-kl.de    } else {
254012027Sjungma@eit.uni-kl.de	n1 = m_lo + i * SC_DIGIT_SIZE;
254112027Sjungma@eit.uni-kl.de	n2 = sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 );
254212027Sjungma@eit.uni-kl.de	for( int n = n1; n < n2; n ++ ) {
254312027Sjungma@eit.uni-kl.de	    result |= (m_obj[n].value() & SC_DIGIT_ONE) << k ++;
254412027Sjungma@eit.uni-kl.de	}
254512027Sjungma@eit.uni-kl.de    }
254612027Sjungma@eit.uni-kl.de    return result;
254712027Sjungma@eit.uni-kl.de}
254812027Sjungma@eit.uni-kl.de
254912027Sjungma@eit.uni-kl.detemplate <class X>
255012027Sjungma@eit.uni-kl.deinline
255112027Sjungma@eit.uni-kl.devoid
255212027Sjungma@eit.uni-kl.desc_subref_r<X>::set_word( int i, sc_digit w )
255312027Sjungma@eit.uni-kl.de{
255412027Sjungma@eit.uni-kl.de    int n1 = 0;
255512027Sjungma@eit.uni-kl.de    int n2 = 0;
255612027Sjungma@eit.uni-kl.de    int k = 0;
255712027Sjungma@eit.uni-kl.de    if( reversed() ) {
255812027Sjungma@eit.uni-kl.de	n1 = m_lo - i * SC_DIGIT_SIZE;
255912027Sjungma@eit.uni-kl.de	n2 = sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 );
256012027Sjungma@eit.uni-kl.de	for( int n = n1; n > n2; n -- ) {
256112027Sjungma@eit.uni-kl.de	    m_obj.set_bit( n, sc_logic_value_t(
256212027Sjungma@eit.uni-kl.de	                              ( (w >> k ++) & SC_DIGIT_ONE ) |
256312027Sjungma@eit.uni-kl.de				      ( m_obj[n].value() & SC_DIGIT_TWO ) ) );
256412027Sjungma@eit.uni-kl.de	}
256512027Sjungma@eit.uni-kl.de    } else {
256612027Sjungma@eit.uni-kl.de	n1 = m_lo + i * SC_DIGIT_SIZE;
256712027Sjungma@eit.uni-kl.de	n2 = sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 );
256812027Sjungma@eit.uni-kl.de	for( int n = n1; n < n2; n ++ ) {
256912027Sjungma@eit.uni-kl.de	    m_obj.set_bit( n, sc_logic_value_t(
257012027Sjungma@eit.uni-kl.de	                                ( (w >> k ++) & SC_DIGIT_ONE ) |
257112027Sjungma@eit.uni-kl.de					( m_obj[n].value() & SC_DIGIT_TWO ) ) );
257212027Sjungma@eit.uni-kl.de	}
257312027Sjungma@eit.uni-kl.de    }
257412027Sjungma@eit.uni-kl.de}
257512027Sjungma@eit.uni-kl.de
257612027Sjungma@eit.uni-kl.de
257712027Sjungma@eit.uni-kl.detemplate <class X>
257812027Sjungma@eit.uni-kl.deinline
257912027Sjungma@eit.uni-kl.desc_digit
258012027Sjungma@eit.uni-kl.desc_subref_r<X>::get_cword( int i ) const
258112027Sjungma@eit.uni-kl.de{
258212027Sjungma@eit.uni-kl.de    int n1 = 0;
258312027Sjungma@eit.uni-kl.de    int n2 = 0;
258412027Sjungma@eit.uni-kl.de    sc_digit result = 0;
258512027Sjungma@eit.uni-kl.de    int k = 0;
258612027Sjungma@eit.uni-kl.de    if( reversed() ) {
258712027Sjungma@eit.uni-kl.de	n1 = m_lo - i * SC_DIGIT_SIZE;
258812027Sjungma@eit.uni-kl.de	n2 = sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 );
258912027Sjungma@eit.uni-kl.de	for( int n = n1; n > n2; n -- ) {
259012027Sjungma@eit.uni-kl.de	    result |= ((m_obj[n].value() & SC_DIGIT_TWO) >> 1) << k ++;
259112027Sjungma@eit.uni-kl.de	}
259212027Sjungma@eit.uni-kl.de    } else {
259312027Sjungma@eit.uni-kl.de	n1 = m_lo + i * SC_DIGIT_SIZE;
259412027Sjungma@eit.uni-kl.de	n2 = sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 );
259512027Sjungma@eit.uni-kl.de	for( int n = n1; n < n2; n ++ ) {
259612027Sjungma@eit.uni-kl.de	    result |= ((m_obj[n].value() & SC_DIGIT_TWO) >> 1) << k ++;
259712027Sjungma@eit.uni-kl.de	}
259812027Sjungma@eit.uni-kl.de    }
259912027Sjungma@eit.uni-kl.de    return result;
260012027Sjungma@eit.uni-kl.de}
260112027Sjungma@eit.uni-kl.de
260212027Sjungma@eit.uni-kl.detemplate <class X>
260312027Sjungma@eit.uni-kl.deinline
260412027Sjungma@eit.uni-kl.devoid
260512027Sjungma@eit.uni-kl.desc_subref_r<X>::set_cword( int i, sc_digit w )
260612027Sjungma@eit.uni-kl.de{
260712027Sjungma@eit.uni-kl.de    int n1 = 0;
260812027Sjungma@eit.uni-kl.de    int n2 = 0;
260912027Sjungma@eit.uni-kl.de    int k = 0;
261012027Sjungma@eit.uni-kl.de    if( reversed() ) {
261112027Sjungma@eit.uni-kl.de	n1 = m_lo - i * SC_DIGIT_SIZE;
261212027Sjungma@eit.uni-kl.de	n2 = sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 );
261312027Sjungma@eit.uni-kl.de	for( int n = n1; n > n2; n -- ) {
261412027Sjungma@eit.uni-kl.de	    m_obj.set_bit( n, sc_logic_value_t(
261512027Sjungma@eit.uni-kl.de	                             ( ((w >> k ++) & SC_DIGIT_ONE) << 1 ) |
261612027Sjungma@eit.uni-kl.de				     ( m_obj[n].value() & SC_DIGIT_ONE ) ) );
261712027Sjungma@eit.uni-kl.de	}
261812027Sjungma@eit.uni-kl.de    } else {
261912027Sjungma@eit.uni-kl.de	n1 = m_lo + i * SC_DIGIT_SIZE;
262012027Sjungma@eit.uni-kl.de	n2 = sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 );
262112027Sjungma@eit.uni-kl.de	for( int n = n1; n < n2; n ++ ) {
262212027Sjungma@eit.uni-kl.de	    m_obj.set_bit( n, sc_logic_value_t(
262312027Sjungma@eit.uni-kl.de	                                ( ((w >> k ++) & SC_DIGIT_ONE) << 1 ) |
262412027Sjungma@eit.uni-kl.de					( m_obj[n].value() & SC_DIGIT_ONE ) ) );
262512027Sjungma@eit.uni-kl.de	}
262612027Sjungma@eit.uni-kl.de    }
262712027Sjungma@eit.uni-kl.de}
262812027Sjungma@eit.uni-kl.de
262912027Sjungma@eit.uni-kl.de
263012027Sjungma@eit.uni-kl.de// other methods
263112027Sjungma@eit.uni-kl.de
263212027Sjungma@eit.uni-kl.detemplate <class X>
263312027Sjungma@eit.uni-kl.deinline
263412027Sjungma@eit.uni-kl.debool
263512027Sjungma@eit.uni-kl.desc_subref_r<X>::is_01() const
263612027Sjungma@eit.uni-kl.de{
263712027Sjungma@eit.uni-kl.de    int sz = size();
263812027Sjungma@eit.uni-kl.de    for( int i = 0; i < sz; ++ i ) {
263912027Sjungma@eit.uni-kl.de	if( get_cword( i ) != SC_DIGIT_ZERO ) {
264012027Sjungma@eit.uni-kl.de	    return false;
264112027Sjungma@eit.uni-kl.de	}
264212027Sjungma@eit.uni-kl.de    }
264312027Sjungma@eit.uni-kl.de    return true;
264412027Sjungma@eit.uni-kl.de}
264512027Sjungma@eit.uni-kl.de
264612027Sjungma@eit.uni-kl.de
264712027Sjungma@eit.uni-kl.de// r-value concatenation operators and functions
264812027Sjungma@eit.uni-kl.de
264912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
265012027Sjungma@eit.uni-kl.deinline
265112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
265212027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1> a, sc_bitref_r<T2> b )
265312027Sjungma@eit.uni-kl.de{
265412027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >(
265512027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
265612027Sjungma@eit.uni-kl.de}
265712027Sjungma@eit.uni-kl.de
265812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
265912027Sjungma@eit.uni-kl.deinline
266012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
266112027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1> a, sc_subref_r<T2> b )
266212027Sjungma@eit.uni-kl.de{
266312027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >(
266412027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
266512027Sjungma@eit.uni-kl.de}
266612027Sjungma@eit.uni-kl.de
266712027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
266812027Sjungma@eit.uni-kl.deinline
266912027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
267012027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1> a, sc_concref_r<T2,T3> b )
267112027Sjungma@eit.uni-kl.de{
267212027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >(
267312027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
267412027Sjungma@eit.uni-kl.de}
267512027Sjungma@eit.uni-kl.de
267612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
267712027Sjungma@eit.uni-kl.deinline
267812027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
267912027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1> a, const sc_proxy<T2>& b )
268012027Sjungma@eit.uni-kl.de{
268112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,T2>(
268212027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
268312027Sjungma@eit.uni-kl.de}
268412027Sjungma@eit.uni-kl.de
268512027Sjungma@eit.uni-kl.de
268612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
268712027Sjungma@eit.uni-kl.deinline
268812027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
268912027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1> a, sc_bitref_r<T2> b )
269012027Sjungma@eit.uni-kl.de{
269112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >(
269212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
269312027Sjungma@eit.uni-kl.de}
269412027Sjungma@eit.uni-kl.de
269512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
269612027Sjungma@eit.uni-kl.deinline
269712027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
269812027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1> a, sc_subref_r<T2> b )
269912027Sjungma@eit.uni-kl.de{
270012027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >(
270112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
270212027Sjungma@eit.uni-kl.de}
270312027Sjungma@eit.uni-kl.de
270412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
270512027Sjungma@eit.uni-kl.deinline
270612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
270712027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1> a, sc_concref_r<T2,T3> b )
270812027Sjungma@eit.uni-kl.de{
270912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >(
271012027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
271112027Sjungma@eit.uni-kl.de}
271212027Sjungma@eit.uni-kl.de
271312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
271412027Sjungma@eit.uni-kl.deinline
271512027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
271612027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1> a, const sc_proxy<T2>& b )
271712027Sjungma@eit.uni-kl.de{
271812027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,T2>(
271912027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
272012027Sjungma@eit.uni-kl.de}
272112027Sjungma@eit.uni-kl.de
272212027Sjungma@eit.uni-kl.de
272312027Sjungma@eit.uni-kl.de#ifdef SC_DT_MIXED_COMMA_OPERATORS
272412027Sjungma@eit.uni-kl.de
272512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
272612027Sjungma@eit.uni-kl.deinline
272712027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
272812027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1> a, sc_bitref<T2> b )
272912027Sjungma@eit.uni-kl.de{
273012027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >(
273112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
273212027Sjungma@eit.uni-kl.de}
273312027Sjungma@eit.uni-kl.de
273412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
273512027Sjungma@eit.uni-kl.deinline
273612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
273712027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1> a, sc_bitref_r<T2> b )
273812027Sjungma@eit.uni-kl.de{
273912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >(
274012027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
274112027Sjungma@eit.uni-kl.de}
274212027Sjungma@eit.uni-kl.de
274312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
274412027Sjungma@eit.uni-kl.deinline
274512027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
274612027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1> a, sc_subref<T2> b )
274712027Sjungma@eit.uni-kl.de{
274812027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >(
274912027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
275012027Sjungma@eit.uni-kl.de}
275112027Sjungma@eit.uni-kl.de
275212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
275312027Sjungma@eit.uni-kl.deinline
275412027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
275512027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1> a, sc_subref_r<T2> b )
275612027Sjungma@eit.uni-kl.de{
275712027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >(
275812027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
275912027Sjungma@eit.uni-kl.de}
276012027Sjungma@eit.uni-kl.de
276112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
276212027Sjungma@eit.uni-kl.deinline
276312027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
276412027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1> a, sc_concref<T2,T3> b )
276512027Sjungma@eit.uni-kl.de{
276612027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >(
276712027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
276812027Sjungma@eit.uni-kl.de}
276912027Sjungma@eit.uni-kl.de
277012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
277112027Sjungma@eit.uni-kl.deinline
277212027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
277312027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1> a, sc_concref_r<T2,T3> b )
277412027Sjungma@eit.uni-kl.de{
277512027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >(
277612027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
277712027Sjungma@eit.uni-kl.de}
277812027Sjungma@eit.uni-kl.de
277912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
278012027Sjungma@eit.uni-kl.deinline
278112027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
278212027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1> a, const sc_proxy<T2>& b )
278312027Sjungma@eit.uni-kl.de{
278412027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,T2>(
278512027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
278612027Sjungma@eit.uni-kl.de}
278712027Sjungma@eit.uni-kl.de
278812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
278912027Sjungma@eit.uni-kl.deinline
279012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
279112027Sjungma@eit.uni-kl.deoperator , ( sc_subref_r<T1> a, sc_proxy<T2>& b )
279212027Sjungma@eit.uni-kl.de{
279312027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,T2>(
279412027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
279512027Sjungma@eit.uni-kl.de}
279612027Sjungma@eit.uni-kl.de
279712027Sjungma@eit.uni-kl.de
279812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
279912027Sjungma@eit.uni-kl.deinline
280012027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
280112027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1> a, sc_bitref<T2> b )
280212027Sjungma@eit.uni-kl.de{
280312027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >(
280412027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
280512027Sjungma@eit.uni-kl.de}
280612027Sjungma@eit.uni-kl.de
280712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
280812027Sjungma@eit.uni-kl.deinline
280912027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >
281012027Sjungma@eit.uni-kl.deconcat( sc_subref<T1> a, sc_bitref_r<T2> b )
281112027Sjungma@eit.uni-kl.de{
281212027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_bitref_r<T2> >(
281312027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
281412027Sjungma@eit.uni-kl.de}
281512027Sjungma@eit.uni-kl.de
281612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
281712027Sjungma@eit.uni-kl.deinline
281812027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
281912027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1> a, sc_subref<T2> b )
282012027Sjungma@eit.uni-kl.de{
282112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >(
282212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
282312027Sjungma@eit.uni-kl.de}
282412027Sjungma@eit.uni-kl.de
282512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
282612027Sjungma@eit.uni-kl.deinline
282712027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >
282812027Sjungma@eit.uni-kl.deconcat( sc_subref<T1> a, sc_subref_r<T2> b )
282912027Sjungma@eit.uni-kl.de{
283012027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_subref_r<T2> >(
283112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
283212027Sjungma@eit.uni-kl.de}
283312027Sjungma@eit.uni-kl.de
283412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
283512027Sjungma@eit.uni-kl.deinline
283612027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
283712027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1> a, sc_concref<T2,T3> b )
283812027Sjungma@eit.uni-kl.de{
283912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >(
284012027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
284112027Sjungma@eit.uni-kl.de}
284212027Sjungma@eit.uni-kl.de
284312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
284412027Sjungma@eit.uni-kl.deinline
284512027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >
284612027Sjungma@eit.uni-kl.deconcat( sc_subref<T1> a, sc_concref_r<T2,T3> b )
284712027Sjungma@eit.uni-kl.de{
284812027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,sc_concref_r<T2,T3> >(
284912027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
285012027Sjungma@eit.uni-kl.de}
285112027Sjungma@eit.uni-kl.de
285212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
285312027Sjungma@eit.uni-kl.deinline
285412027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
285512027Sjungma@eit.uni-kl.deconcat( sc_subref<T1> a, const sc_proxy<T2>& b )
285612027Sjungma@eit.uni-kl.de{
285712027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,T2>(
285812027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
285912027Sjungma@eit.uni-kl.de}
286012027Sjungma@eit.uni-kl.de
286112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
286212027Sjungma@eit.uni-kl.deinline
286312027Sjungma@eit.uni-kl.desc_concref_r<sc_subref_r<T1>,T2>
286412027Sjungma@eit.uni-kl.deconcat( sc_subref_r<T1> a, sc_proxy<T2>& b )
286512027Sjungma@eit.uni-kl.de{
286612027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_subref_r<T1>,T2>(
286712027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
286812027Sjungma@eit.uni-kl.de}
286912027Sjungma@eit.uni-kl.de
287012027Sjungma@eit.uni-kl.de#endif
287112027Sjungma@eit.uni-kl.de
287212027Sjungma@eit.uni-kl.de
287312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
287412027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_subref<X>
287512027Sjungma@eit.uni-kl.de//
287612027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy part selection (r-value and l-value).
287712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
287812027Sjungma@eit.uni-kl.de
287912027Sjungma@eit.uni-kl.de// assignment operators
288012027Sjungma@eit.uni-kl.de
288112027Sjungma@eit.uni-kl.de// sc_subref<X>::operator = ( const sc_subref_r<X>& ) in sc_lv_base.h
288212027Sjungma@eit.uni-kl.de// sc_subref<X>::operator = ( const sc_subref<X>& )   in sc_lv_base.h
288312027Sjungma@eit.uni-kl.de
288412027Sjungma@eit.uni-kl.de
288512027Sjungma@eit.uni-kl.de// other methods
288612027Sjungma@eit.uni-kl.de
288712027Sjungma@eit.uni-kl.detemplate <class T>
288812027Sjungma@eit.uni-kl.deinline
288912027Sjungma@eit.uni-kl.devoid
289012027Sjungma@eit.uni-kl.desc_subref<T>::scan( ::std::istream& is )
289112027Sjungma@eit.uni-kl.de{
289212027Sjungma@eit.uni-kl.de    std::string s;
289312027Sjungma@eit.uni-kl.de    is >> s;
289412027Sjungma@eit.uni-kl.de    *this = s.c_str();
289512027Sjungma@eit.uni-kl.de}
289612027Sjungma@eit.uni-kl.de
289712027Sjungma@eit.uni-kl.de
289812027Sjungma@eit.uni-kl.de// l-value concatenation operators and functions
289912027Sjungma@eit.uni-kl.de
290012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
290112027Sjungma@eit.uni-kl.deinline
290212027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_bitref<T2> >
290312027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1> a, sc_bitref<T2> b )
290412027Sjungma@eit.uni-kl.de{
290512027Sjungma@eit.uni-kl.de    return sc_concref<sc_subref<T1>,sc_bitref<T2> >(
290612027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
290712027Sjungma@eit.uni-kl.de}
290812027Sjungma@eit.uni-kl.de
290912027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
291012027Sjungma@eit.uni-kl.deinline
291112027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_subref<T2> >
291212027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1> a, sc_subref<T2> b )
291312027Sjungma@eit.uni-kl.de{
291412027Sjungma@eit.uni-kl.de    return sc_concref<sc_subref<T1>,sc_subref<T2> >(
291512027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
291612027Sjungma@eit.uni-kl.de}
291712027Sjungma@eit.uni-kl.de
291812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
291912027Sjungma@eit.uni-kl.deinline
292012027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_concref<T2,T3> >
292112027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1> a, sc_concref<T2,T3> b )
292212027Sjungma@eit.uni-kl.de{
292312027Sjungma@eit.uni-kl.de    return sc_concref<sc_subref<T1>,sc_concref<T2,T3> >(
292412027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
292512027Sjungma@eit.uni-kl.de}
292612027Sjungma@eit.uni-kl.de
292712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
292812027Sjungma@eit.uni-kl.deinline
292912027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,T2>
293012027Sjungma@eit.uni-kl.deoperator , ( sc_subref<T1> a, sc_proxy<T2>& b )
293112027Sjungma@eit.uni-kl.de{
293212027Sjungma@eit.uni-kl.de    return sc_concref<sc_subref<T1>,T2>(
293312027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
293412027Sjungma@eit.uni-kl.de}
293512027Sjungma@eit.uni-kl.de
293612027Sjungma@eit.uni-kl.de
293712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
293812027Sjungma@eit.uni-kl.deinline
293912027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_bitref<T2> >
294012027Sjungma@eit.uni-kl.deconcat( sc_subref<T1> a, sc_bitref<T2> b )
294112027Sjungma@eit.uni-kl.de{
294212027Sjungma@eit.uni-kl.de    return sc_concref<sc_subref<T1>,sc_bitref<T2> >(
294312027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
294412027Sjungma@eit.uni-kl.de}
294512027Sjungma@eit.uni-kl.de
294612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
294712027Sjungma@eit.uni-kl.deinline
294812027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_subref<T2> >
294912027Sjungma@eit.uni-kl.deconcat( sc_subref<T1> a, sc_subref<T2> b )
295012027Sjungma@eit.uni-kl.de{
295112027Sjungma@eit.uni-kl.de    return sc_concref<sc_subref<T1>,sc_subref<T2> >(
295212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
295312027Sjungma@eit.uni-kl.de}
295412027Sjungma@eit.uni-kl.de
295512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
295612027Sjungma@eit.uni-kl.deinline
295712027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,sc_concref<T2,T3> >
295812027Sjungma@eit.uni-kl.deconcat( sc_subref<T1> a, sc_concref<T2,T3> b )
295912027Sjungma@eit.uni-kl.de{
296012027Sjungma@eit.uni-kl.de    return sc_concref<sc_subref<T1>,sc_concref<T2,T3> >(
296112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
296212027Sjungma@eit.uni-kl.de}
296312027Sjungma@eit.uni-kl.de
296412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
296512027Sjungma@eit.uni-kl.deinline
296612027Sjungma@eit.uni-kl.desc_concref<sc_subref<T1>,T2>
296712027Sjungma@eit.uni-kl.deconcat( sc_subref<T1> a, sc_proxy<T2>& b )
296812027Sjungma@eit.uni-kl.de{
296912027Sjungma@eit.uni-kl.de    return sc_concref<sc_subref<T1>,T2>(
297012027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
297112027Sjungma@eit.uni-kl.de}
297212027Sjungma@eit.uni-kl.de
297312027Sjungma@eit.uni-kl.de
297412027Sjungma@eit.uni-kl.detemplate <class X>
297512027Sjungma@eit.uni-kl.deinline
297612027Sjungma@eit.uni-kl.de::std::istream&
297712027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_subref<X> a )
297812027Sjungma@eit.uni-kl.de{
297912027Sjungma@eit.uni-kl.de    a.scan( is );
298012027Sjungma@eit.uni-kl.de    return is;
298112027Sjungma@eit.uni-kl.de}
298212027Sjungma@eit.uni-kl.de
298312027Sjungma@eit.uni-kl.de
298412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
298512027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_concref_r<X,Y>
298612027Sjungma@eit.uni-kl.de//
298712027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy concatenation (r-value only).
298812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
298912027Sjungma@eit.uni-kl.de
299012027Sjungma@eit.uni-kl.de// destructor
299112027Sjungma@eit.uni-kl.de
299212027Sjungma@eit.uni-kl.detemplate <class X, class Y>
299312027Sjungma@eit.uni-kl.deinline
299412027Sjungma@eit.uni-kl.desc_concref_r<X,Y>::~sc_concref_r()
299512027Sjungma@eit.uni-kl.de{
299612027Sjungma@eit.uni-kl.de    if( -- m_refs == 0 ) {
299712027Sjungma@eit.uni-kl.de	delete &m_refs;
299812027Sjungma@eit.uni-kl.de	if( m_delete == 0 ) {
299912027Sjungma@eit.uni-kl.de	    return;
300012027Sjungma@eit.uni-kl.de	}
300112027Sjungma@eit.uni-kl.de	if( m_delete & 1 ) {
300212027Sjungma@eit.uni-kl.de	    delete &m_left;
300312027Sjungma@eit.uni-kl.de	}
300412027Sjungma@eit.uni-kl.de	if( m_delete & 2 ) {
300512027Sjungma@eit.uni-kl.de	    delete &m_right;
300612027Sjungma@eit.uni-kl.de	}
300712027Sjungma@eit.uni-kl.de    }
300812027Sjungma@eit.uni-kl.de}
300912027Sjungma@eit.uni-kl.de
301012027Sjungma@eit.uni-kl.de
301112027Sjungma@eit.uni-kl.de// common methods
301212027Sjungma@eit.uni-kl.de
301312027Sjungma@eit.uni-kl.detemplate <class X, class Y>
301412027Sjungma@eit.uni-kl.deinline
301512027Sjungma@eit.uni-kl.desc_logic_value_t
301612027Sjungma@eit.uni-kl.desc_concref_r<X,Y>::get_bit( int n ) const
301712027Sjungma@eit.uni-kl.de{
301812027Sjungma@eit.uni-kl.de    int r_len = m_right.length();
301912027Sjungma@eit.uni-kl.de    if( n < r_len ) {
302012027Sjungma@eit.uni-kl.de	return m_right.get_bit( n );
302112027Sjungma@eit.uni-kl.de    } else if( n < r_len + m_left.length() ) {
302212027Sjungma@eit.uni-kl.de	return m_left.get_bit( n - r_len );
302312027Sjungma@eit.uni-kl.de    } else {
302412027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
302512027Sjungma@eit.uni-kl.de	// never reached
302612027Sjungma@eit.uni-kl.de	return Log_0;
302712027Sjungma@eit.uni-kl.de    }
302812027Sjungma@eit.uni-kl.de}
302912027Sjungma@eit.uni-kl.de
303012027Sjungma@eit.uni-kl.detemplate <class X, class Y>
303112027Sjungma@eit.uni-kl.deinline
303212027Sjungma@eit.uni-kl.devoid
303312027Sjungma@eit.uni-kl.desc_concref_r<X,Y>::set_bit( int n, sc_logic_value_t v )
303412027Sjungma@eit.uni-kl.de{
303512027Sjungma@eit.uni-kl.de    int r_len = m_right.length();
303612027Sjungma@eit.uni-kl.de    if( n < r_len ) {
303712027Sjungma@eit.uni-kl.de	m_right.set_bit( n, v );
303812027Sjungma@eit.uni-kl.de    } else if( n < r_len + m_left.length() ) {
303912027Sjungma@eit.uni-kl.de	m_left.set_bit( n - r_len, v );
304012027Sjungma@eit.uni-kl.de    } else {
304112027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
304212027Sjungma@eit.uni-kl.de    }
304312027Sjungma@eit.uni-kl.de}
304412027Sjungma@eit.uni-kl.de
304512027Sjungma@eit.uni-kl.de
304612027Sjungma@eit.uni-kl.detemplate <class X, class Y>
304712027Sjungma@eit.uni-kl.deinline
304812027Sjungma@eit.uni-kl.desc_digit
304912027Sjungma@eit.uni-kl.desc_concref_r<X,Y>::get_word( int i ) const
305012027Sjungma@eit.uni-kl.de{
305112027Sjungma@eit.uni-kl.de    if( i < 0 || i >= size() ) {
305212027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
305312027Sjungma@eit.uni-kl.de    }
305412027Sjungma@eit.uni-kl.de    // 0 <= i < size()
305512027Sjungma@eit.uni-kl.de    Y& r = m_right;
305612027Sjungma@eit.uni-kl.de    int r_len = r.length();
305712027Sjungma@eit.uni-kl.de    int border = r_len / SC_DIGIT_SIZE;
305812027Sjungma@eit.uni-kl.de    if( i < border ) {
305912027Sjungma@eit.uni-kl.de	return r.get_word( i );
306012027Sjungma@eit.uni-kl.de    }
306112027Sjungma@eit.uni-kl.de    // border <= i < size()
306212027Sjungma@eit.uni-kl.de    X& l = m_left;
306312027Sjungma@eit.uni-kl.de    int shift = r_len % SC_DIGIT_SIZE;
306412027Sjungma@eit.uni-kl.de    int j = i - border;
306512027Sjungma@eit.uni-kl.de    if( shift == 0 ) {
306612027Sjungma@eit.uni-kl.de	return l.get_word( j );
306712027Sjungma@eit.uni-kl.de    }
306812027Sjungma@eit.uni-kl.de    // border <= i < size() && shift != 0
306912027Sjungma@eit.uni-kl.de    int nshift = SC_DIGIT_SIZE - shift;
307012027Sjungma@eit.uni-kl.de    if( i == border ) {
307112027Sjungma@eit.uni-kl.de	sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift;
307212027Sjungma@eit.uni-kl.de	return ( (r.get_word( i ) & rl_mask) | (l.get_word( 0 ) << shift) );
307312027Sjungma@eit.uni-kl.de    }
307412027Sjungma@eit.uni-kl.de    // border < i < size() && shift != 0
307512027Sjungma@eit.uni-kl.de    if ( j < l.size() )
307612027Sjungma@eit.uni-kl.de	return ( (l.get_word( j - 1 ) >> nshift) | (l.get_word( j ) << shift) );
307712027Sjungma@eit.uni-kl.de    else
307812027Sjungma@eit.uni-kl.de	return (l.get_word( j - 1 ) >> nshift);
307912027Sjungma@eit.uni-kl.de}
308012027Sjungma@eit.uni-kl.de
308112027Sjungma@eit.uni-kl.detemplate <class X, class Y>
308212027Sjungma@eit.uni-kl.deinline
308312027Sjungma@eit.uni-kl.devoid
308412027Sjungma@eit.uni-kl.desc_concref_r<X,Y>::set_word( int i, sc_digit w )
308512027Sjungma@eit.uni-kl.de{
308612027Sjungma@eit.uni-kl.de    if( i < 0 || i >= size() ) {
308712027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
308812027Sjungma@eit.uni-kl.de    }
308912027Sjungma@eit.uni-kl.de    // 0 <= i < size()
309012027Sjungma@eit.uni-kl.de    Y& r = m_right;
309112027Sjungma@eit.uni-kl.de    int r_len = r.length();
309212027Sjungma@eit.uni-kl.de    int border = r_len / SC_DIGIT_SIZE;
309312027Sjungma@eit.uni-kl.de    if( i < border ) {
309412027Sjungma@eit.uni-kl.de	r.set_word( i, w );
309512027Sjungma@eit.uni-kl.de	return;
309612027Sjungma@eit.uni-kl.de    }
309712027Sjungma@eit.uni-kl.de    // border <= i < size()
309812027Sjungma@eit.uni-kl.de    X& l = m_left;
309912027Sjungma@eit.uni-kl.de    int shift = r_len % SC_DIGIT_SIZE;
310012027Sjungma@eit.uni-kl.de    int j = i - border;
310112027Sjungma@eit.uni-kl.de    if( shift == 0 ) {
310212027Sjungma@eit.uni-kl.de	l.set_word( j, w );
310312027Sjungma@eit.uni-kl.de	return;
310412027Sjungma@eit.uni-kl.de    }
310512027Sjungma@eit.uni-kl.de    // border <= i < size() && shift != 0
310612027Sjungma@eit.uni-kl.de    int nshift = SC_DIGIT_SIZE - shift;
310712027Sjungma@eit.uni-kl.de    sc_digit lh_mask = ~SC_DIGIT_ZERO << nshift;
310812027Sjungma@eit.uni-kl.de    if( i == border ) {
310912027Sjungma@eit.uni-kl.de	sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift;
311012027Sjungma@eit.uni-kl.de	r.set_word( i, w & rl_mask );
311112027Sjungma@eit.uni-kl.de	l.set_word( 0, (l.get_word( 0 ) & lh_mask) | (w >> shift) );
311212027Sjungma@eit.uni-kl.de	return;
311312027Sjungma@eit.uni-kl.de    }
311412027Sjungma@eit.uni-kl.de    // border < i < size() && shift != 0
311512027Sjungma@eit.uni-kl.de    sc_digit ll_mask = ~SC_DIGIT_ZERO >> shift;
311612027Sjungma@eit.uni-kl.de    l.set_word( j - 1, (l.get_word( j - 1 ) & ll_mask) | (w << nshift) );
311712027Sjungma@eit.uni-kl.de    if ( j < l.size() )
311812027Sjungma@eit.uni-kl.de	l.set_word( j, (l.get_word( j ) & lh_mask) | (w >> shift) );
311912027Sjungma@eit.uni-kl.de}
312012027Sjungma@eit.uni-kl.de
312112027Sjungma@eit.uni-kl.de
312212027Sjungma@eit.uni-kl.detemplate <class X, class Y>
312312027Sjungma@eit.uni-kl.deinline
312412027Sjungma@eit.uni-kl.desc_digit
312512027Sjungma@eit.uni-kl.desc_concref_r<X,Y>::get_cword( int i ) const
312612027Sjungma@eit.uni-kl.de{
312712027Sjungma@eit.uni-kl.de    if( i < 0 || i >= size() ) {
312812027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
312912027Sjungma@eit.uni-kl.de    }
313012027Sjungma@eit.uni-kl.de    // 0 <= i < size()
313112027Sjungma@eit.uni-kl.de    Y& r = m_right;
313212027Sjungma@eit.uni-kl.de    int r_len = r.length();
313312027Sjungma@eit.uni-kl.de    int border = r_len / SC_DIGIT_SIZE;
313412027Sjungma@eit.uni-kl.de    if( i < border ) {
313512027Sjungma@eit.uni-kl.de	return r.get_cword( i );
313612027Sjungma@eit.uni-kl.de    }
313712027Sjungma@eit.uni-kl.de    // border <= i < size()
313812027Sjungma@eit.uni-kl.de    X& l = m_left;
313912027Sjungma@eit.uni-kl.de    int shift = r_len % SC_DIGIT_SIZE;
314012027Sjungma@eit.uni-kl.de    int j = i - border;
314112027Sjungma@eit.uni-kl.de    if( shift == 0 ) {
314212027Sjungma@eit.uni-kl.de	return l.get_cword( j );
314312027Sjungma@eit.uni-kl.de    }
314412027Sjungma@eit.uni-kl.de    // border <= i < size() && shift != 0
314512027Sjungma@eit.uni-kl.de    int nshift = SC_DIGIT_SIZE - shift;
314612027Sjungma@eit.uni-kl.de    if( i == border ) {
314712027Sjungma@eit.uni-kl.de	sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift;
314812027Sjungma@eit.uni-kl.de	return ( (r.get_cword( i ) & rl_mask) | (l.get_cword( 0 ) << shift) );
314912027Sjungma@eit.uni-kl.de    }
315012027Sjungma@eit.uni-kl.de    // border < i < size() && shift != 0
315112027Sjungma@eit.uni-kl.de    if ( j < l.size() )
315212027Sjungma@eit.uni-kl.de	return ( (l.get_cword(j - 1) >> nshift) | (l.get_cword(j) << shift) );
315312027Sjungma@eit.uni-kl.de    else
315412027Sjungma@eit.uni-kl.de	return (l.get_cword( j - 1 ) >> nshift);
315512027Sjungma@eit.uni-kl.de}
315612027Sjungma@eit.uni-kl.de
315712027Sjungma@eit.uni-kl.detemplate <class X, class Y>
315812027Sjungma@eit.uni-kl.deinline
315912027Sjungma@eit.uni-kl.devoid
316012027Sjungma@eit.uni-kl.desc_concref_r<X,Y>::set_cword( int i, sc_digit w )
316112027Sjungma@eit.uni-kl.de{
316212027Sjungma@eit.uni-kl.de    if( i < 0 || i >= size() ) {
316312027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 );
316412027Sjungma@eit.uni-kl.de    }
316512027Sjungma@eit.uni-kl.de    // 0 <= i < size()
316612027Sjungma@eit.uni-kl.de    Y& r = m_right;
316712027Sjungma@eit.uni-kl.de    int r_len = r.length();
316812027Sjungma@eit.uni-kl.de    int border = r_len / SC_DIGIT_SIZE;
316912027Sjungma@eit.uni-kl.de    if( i < border ) {
317012027Sjungma@eit.uni-kl.de	r.set_cword( i, w );
317112027Sjungma@eit.uni-kl.de	return;
317212027Sjungma@eit.uni-kl.de    }
317312027Sjungma@eit.uni-kl.de    // border <= i < size()
317412027Sjungma@eit.uni-kl.de    X& l = m_left;
317512027Sjungma@eit.uni-kl.de    int shift = r_len % SC_DIGIT_SIZE;
317612027Sjungma@eit.uni-kl.de    int j = i - border;
317712027Sjungma@eit.uni-kl.de    if( shift == 0 ) {
317812027Sjungma@eit.uni-kl.de	l.set_cword( j, w );
317912027Sjungma@eit.uni-kl.de	return;
318012027Sjungma@eit.uni-kl.de    }
318112027Sjungma@eit.uni-kl.de    // border <= i < size() && shift != 0
318212027Sjungma@eit.uni-kl.de    int nshift = SC_DIGIT_SIZE - shift;
318312027Sjungma@eit.uni-kl.de    sc_digit lh_mask = ~SC_DIGIT_ZERO << nshift;
318412027Sjungma@eit.uni-kl.de    if( i == border ) {
318512027Sjungma@eit.uni-kl.de	sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift;
318612027Sjungma@eit.uni-kl.de	r.set_cword( i, w & rl_mask );
318712027Sjungma@eit.uni-kl.de	l.set_cword( 0, (l.get_cword( 0 ) & lh_mask) | (w >> shift) );
318812027Sjungma@eit.uni-kl.de	return;
318912027Sjungma@eit.uni-kl.de    }
319012027Sjungma@eit.uni-kl.de    // border < i < size() && shift != 0
319112027Sjungma@eit.uni-kl.de    sc_digit ll_mask = ~SC_DIGIT_ZERO >> shift;
319212027Sjungma@eit.uni-kl.de    l.set_cword( j - 1, (l.get_cword( j - 1 ) & ll_mask) | (w << nshift) );
319312027Sjungma@eit.uni-kl.de    if ( j < l.size() )
319412027Sjungma@eit.uni-kl.de	l.set_cword( j, (l.get_cword( j ) & lh_mask) | (w >> shift) );
319512027Sjungma@eit.uni-kl.de}
319612027Sjungma@eit.uni-kl.de
319712027Sjungma@eit.uni-kl.de
319812027Sjungma@eit.uni-kl.de// r-value concatenation operators and functions
319912027Sjungma@eit.uni-kl.de
320012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
320112027Sjungma@eit.uni-kl.deinline
320212027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
320312027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2> a, sc_bitref_r<T3> b )
320412027Sjungma@eit.uni-kl.de{
320512027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >(
320612027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
320712027Sjungma@eit.uni-kl.de}
320812027Sjungma@eit.uni-kl.de
320912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
321012027Sjungma@eit.uni-kl.deinline
321112027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
321212027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2> a, sc_subref_r<T3> b )
321312027Sjungma@eit.uni-kl.de{
321412027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >(
321512027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
321612027Sjungma@eit.uni-kl.de}
321712027Sjungma@eit.uni-kl.de
321812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
321912027Sjungma@eit.uni-kl.deinline
322012027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
322112027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2> a, sc_concref_r<T3,T4> b )
322212027Sjungma@eit.uni-kl.de{
322312027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >(
322412027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
322512027Sjungma@eit.uni-kl.de}
322612027Sjungma@eit.uni-kl.de
322712027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
322812027Sjungma@eit.uni-kl.deinline
322912027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
323012027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2> a, const sc_proxy<T3>& b )
323112027Sjungma@eit.uni-kl.de{
323212027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,T3>(
323312027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
323412027Sjungma@eit.uni-kl.de}
323512027Sjungma@eit.uni-kl.de
323612027Sjungma@eit.uni-kl.de
323712027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
323812027Sjungma@eit.uni-kl.deinline
323912027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
324012027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2> a, sc_bitref_r<T3> b )
324112027Sjungma@eit.uni-kl.de{
324212027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >(
324312027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
324412027Sjungma@eit.uni-kl.de}
324512027Sjungma@eit.uni-kl.de
324612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
324712027Sjungma@eit.uni-kl.deinline
324812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
324912027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2> a, sc_subref_r<T3> b )
325012027Sjungma@eit.uni-kl.de{
325112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >(
325212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
325312027Sjungma@eit.uni-kl.de}
325412027Sjungma@eit.uni-kl.de
325512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
325612027Sjungma@eit.uni-kl.deinline
325712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
325812027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2> a, sc_concref_r<T3,T4> b )
325912027Sjungma@eit.uni-kl.de{
326012027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >(
326112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
326212027Sjungma@eit.uni-kl.de}
326312027Sjungma@eit.uni-kl.de
326412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
326512027Sjungma@eit.uni-kl.deinline
326612027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
326712027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2> a, const sc_proxy<T3>& b )
326812027Sjungma@eit.uni-kl.de{
326912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,T3>(
327012027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
327112027Sjungma@eit.uni-kl.de}
327212027Sjungma@eit.uni-kl.de
327312027Sjungma@eit.uni-kl.de
327412027Sjungma@eit.uni-kl.de#ifdef SC_DT_MIXED_COMMA_OPERATORS
327512027Sjungma@eit.uni-kl.de
327612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
327712027Sjungma@eit.uni-kl.deinline
327812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
327912027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2> a, sc_bitref<T3> b )
328012027Sjungma@eit.uni-kl.de{
328112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >(
328212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
328312027Sjungma@eit.uni-kl.de}
328412027Sjungma@eit.uni-kl.de
328512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
328612027Sjungma@eit.uni-kl.deinline
328712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
328812027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2> a, sc_bitref_r<T3> b )
328912027Sjungma@eit.uni-kl.de{
329012027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >(
329112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
329212027Sjungma@eit.uni-kl.de}
329312027Sjungma@eit.uni-kl.de
329412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
329512027Sjungma@eit.uni-kl.deinline
329612027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
329712027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2> a, sc_subref<T3> b )
329812027Sjungma@eit.uni-kl.de{
329912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >(
330012027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
330112027Sjungma@eit.uni-kl.de}
330212027Sjungma@eit.uni-kl.de
330312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
330412027Sjungma@eit.uni-kl.deinline
330512027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
330612027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2> a, sc_subref_r<T3> b )
330712027Sjungma@eit.uni-kl.de{
330812027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >(
330912027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
331012027Sjungma@eit.uni-kl.de}
331112027Sjungma@eit.uni-kl.de
331212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
331312027Sjungma@eit.uni-kl.deinline
331412027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
331512027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2> a, sc_concref<T3,T4> b )
331612027Sjungma@eit.uni-kl.de{
331712027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >(
331812027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
331912027Sjungma@eit.uni-kl.de}
332012027Sjungma@eit.uni-kl.de
332112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
332212027Sjungma@eit.uni-kl.deinline
332312027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
332412027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2> a, sc_concref_r<T3,T4> b )
332512027Sjungma@eit.uni-kl.de{
332612027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >(
332712027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
332812027Sjungma@eit.uni-kl.de}
332912027Sjungma@eit.uni-kl.de
333012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
333112027Sjungma@eit.uni-kl.deinline
333212027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
333312027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2> a, const sc_proxy<T3>& b )
333412027Sjungma@eit.uni-kl.de{
333512027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,T3>(
333612027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
333712027Sjungma@eit.uni-kl.de}
333812027Sjungma@eit.uni-kl.de
333912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
334012027Sjungma@eit.uni-kl.deinline
334112027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
334212027Sjungma@eit.uni-kl.deoperator , ( sc_concref_r<T1,T2> a, sc_proxy<T3>& b )
334312027Sjungma@eit.uni-kl.de{
334412027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,T3>(
334512027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
334612027Sjungma@eit.uni-kl.de}
334712027Sjungma@eit.uni-kl.de
334812027Sjungma@eit.uni-kl.de
334912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
335012027Sjungma@eit.uni-kl.deinline
335112027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
335212027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2> a, sc_bitref<T3> b )
335312027Sjungma@eit.uni-kl.de{
335412027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >(
335512027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
335612027Sjungma@eit.uni-kl.de}
335712027Sjungma@eit.uni-kl.de
335812027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
335912027Sjungma@eit.uni-kl.deinline
336012027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >
336112027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2> a, sc_bitref_r<T3> b )
336212027Sjungma@eit.uni-kl.de{
336312027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_bitref_r<T3> >(
336412027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
336512027Sjungma@eit.uni-kl.de}
336612027Sjungma@eit.uni-kl.de
336712027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
336812027Sjungma@eit.uni-kl.deinline
336912027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
337012027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2> a, sc_subref<T3> b )
337112027Sjungma@eit.uni-kl.de{
337212027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >(
337312027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
337412027Sjungma@eit.uni-kl.de}
337512027Sjungma@eit.uni-kl.de
337612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
337712027Sjungma@eit.uni-kl.deinline
337812027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >
337912027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2> a, sc_subref_r<T3> b )
338012027Sjungma@eit.uni-kl.de{
338112027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_subref_r<T3> >(
338212027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
338312027Sjungma@eit.uni-kl.de}
338412027Sjungma@eit.uni-kl.de
338512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
338612027Sjungma@eit.uni-kl.deinline
338712027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
338812027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2> a, sc_concref<T3,T4> b )
338912027Sjungma@eit.uni-kl.de{
339012027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >(
339112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
339212027Sjungma@eit.uni-kl.de}
339312027Sjungma@eit.uni-kl.de
339412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
339512027Sjungma@eit.uni-kl.deinline
339612027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >
339712027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2> a, sc_concref_r<T3,T4> b )
339812027Sjungma@eit.uni-kl.de{
339912027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,sc_concref_r<T3,T4> >(
340012027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
340112027Sjungma@eit.uni-kl.de}
340212027Sjungma@eit.uni-kl.de
340312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
340412027Sjungma@eit.uni-kl.deinline
340512027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
340612027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2> a, const sc_proxy<T3>& b )
340712027Sjungma@eit.uni-kl.de{
340812027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,T3>(
340912027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
341012027Sjungma@eit.uni-kl.de}
341112027Sjungma@eit.uni-kl.de
341212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
341312027Sjungma@eit.uni-kl.deinline
341412027Sjungma@eit.uni-kl.desc_concref_r<sc_concref_r<T1,T2>,T3>
341512027Sjungma@eit.uni-kl.deconcat( sc_concref_r<T1,T2> a, sc_proxy<T3>& b )
341612027Sjungma@eit.uni-kl.de{
341712027Sjungma@eit.uni-kl.de    return sc_concref_r<sc_concref_r<T1,T2>,T3>(
341812027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
341912027Sjungma@eit.uni-kl.de}
342012027Sjungma@eit.uni-kl.de
342112027Sjungma@eit.uni-kl.de#endif
342212027Sjungma@eit.uni-kl.de
342312027Sjungma@eit.uni-kl.de
342412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
342512027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_concref<X,Y>
342612027Sjungma@eit.uni-kl.de//
342712027Sjungma@eit.uni-kl.de//  Proxy class for sc_proxy concatenation (r-value and l-value).
342812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
342912027Sjungma@eit.uni-kl.de
343012027Sjungma@eit.uni-kl.de// other methods
343112027Sjungma@eit.uni-kl.de
343212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
343312027Sjungma@eit.uni-kl.deinline
343412027Sjungma@eit.uni-kl.devoid
343512027Sjungma@eit.uni-kl.desc_concref<T1,T2>::scan( ::std::istream& is )
343612027Sjungma@eit.uni-kl.de{
343712027Sjungma@eit.uni-kl.de    std::string s;
343812027Sjungma@eit.uni-kl.de    is >> s;
343912027Sjungma@eit.uni-kl.de    *this = s.c_str();
344012027Sjungma@eit.uni-kl.de}
344112027Sjungma@eit.uni-kl.de
344212027Sjungma@eit.uni-kl.de
344312027Sjungma@eit.uni-kl.de// l-value concatenation operators and functions
344412027Sjungma@eit.uni-kl.de
344512027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
344612027Sjungma@eit.uni-kl.deinline
344712027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_bitref<T3> >
344812027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2> a, sc_bitref<T3> b )
344912027Sjungma@eit.uni-kl.de{
345012027Sjungma@eit.uni-kl.de    return sc_concref<sc_concref<T1,T2>,sc_bitref<T3> >(
345112027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
345212027Sjungma@eit.uni-kl.de}
345312027Sjungma@eit.uni-kl.de
345412027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
345512027Sjungma@eit.uni-kl.deinline
345612027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_subref<T3> >
345712027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2> a, sc_subref<T3> b )
345812027Sjungma@eit.uni-kl.de{
345912027Sjungma@eit.uni-kl.de    return sc_concref<sc_concref<T1,T2>,sc_subref<T3> >(
346012027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
346112027Sjungma@eit.uni-kl.de}
346212027Sjungma@eit.uni-kl.de
346312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
346412027Sjungma@eit.uni-kl.deinline
346512027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >
346612027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2> a, sc_concref<T3,T4> b )
346712027Sjungma@eit.uni-kl.de{
346812027Sjungma@eit.uni-kl.de    return sc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >(
346912027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
347012027Sjungma@eit.uni-kl.de}
347112027Sjungma@eit.uni-kl.de
347212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
347312027Sjungma@eit.uni-kl.deinline
347412027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,T3>
347512027Sjungma@eit.uni-kl.deoperator , ( sc_concref<T1,T2> a, sc_proxy<T3>& b )
347612027Sjungma@eit.uni-kl.de{
347712027Sjungma@eit.uni-kl.de    return sc_concref<sc_concref<T1,T2>,T3>(
347812027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
347912027Sjungma@eit.uni-kl.de}
348012027Sjungma@eit.uni-kl.de
348112027Sjungma@eit.uni-kl.de
348212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
348312027Sjungma@eit.uni-kl.deinline
348412027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_bitref<T3> >
348512027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2> a, sc_bitref<T3> b )
348612027Sjungma@eit.uni-kl.de{
348712027Sjungma@eit.uni-kl.de    return sc_concref<sc_concref<T1,T2>,sc_bitref<T3> >(
348812027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
348912027Sjungma@eit.uni-kl.de}
349012027Sjungma@eit.uni-kl.de
349112027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
349212027Sjungma@eit.uni-kl.deinline
349312027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_subref<T3> >
349412027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2> a, sc_subref<T3> b )
349512027Sjungma@eit.uni-kl.de{
349612027Sjungma@eit.uni-kl.de    return sc_concref<sc_concref<T1,T2>,sc_subref<T3> >(
349712027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
349812027Sjungma@eit.uni-kl.de}
349912027Sjungma@eit.uni-kl.de
350012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3, class T4>
350112027Sjungma@eit.uni-kl.deinline
350212027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >
350312027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2> a, sc_concref<T3,T4> b )
350412027Sjungma@eit.uni-kl.de{
350512027Sjungma@eit.uni-kl.de    return sc_concref<sc_concref<T1,T2>,sc_concref<T3,T4> >(
350612027Sjungma@eit.uni-kl.de	*a.clone(), *b.clone(), 3 );
350712027Sjungma@eit.uni-kl.de}
350812027Sjungma@eit.uni-kl.de
350912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
351012027Sjungma@eit.uni-kl.deinline
351112027Sjungma@eit.uni-kl.desc_concref<sc_concref<T1,T2>,T3>
351212027Sjungma@eit.uni-kl.deconcat( sc_concref<T1,T2> a, sc_proxy<T3>& b )
351312027Sjungma@eit.uni-kl.de{
351412027Sjungma@eit.uni-kl.de    return sc_concref<sc_concref<T1,T2>,T3>(
351512027Sjungma@eit.uni-kl.de	*a.clone(), b.back_cast(), 1 );
351612027Sjungma@eit.uni-kl.de}
351712027Sjungma@eit.uni-kl.de
351812027Sjungma@eit.uni-kl.de
351912027Sjungma@eit.uni-kl.detemplate <class X, class Y>
352012027Sjungma@eit.uni-kl.deinline
352112027Sjungma@eit.uni-kl.de::std::istream&
352212027Sjungma@eit.uni-kl.deoperator >> ( ::std::istream& is, sc_concref<X,Y> a )
352312027Sjungma@eit.uni-kl.de{
352412027Sjungma@eit.uni-kl.de    a.scan( is );
352512027Sjungma@eit.uni-kl.de    return is;
352612027Sjungma@eit.uni-kl.de}
352712027Sjungma@eit.uni-kl.de
352812027Sjungma@eit.uni-kl.de
352912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
353012027Sjungma@eit.uni-kl.de//  CLASS TEMPLATE : sc_proxy<T>
353112027Sjungma@eit.uni-kl.de//
353212027Sjungma@eit.uni-kl.de//  Base class template for bit/logic vector classes.
353312027Sjungma@eit.uni-kl.de//  (Barton/Nackmann implementation)
353412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
353512027Sjungma@eit.uni-kl.de
353612027Sjungma@eit.uni-kl.de// r-value concatenation operators and functions
353712027Sjungma@eit.uni-kl.de
353812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
353912027Sjungma@eit.uni-kl.deinline
354012027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
354112027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>& a, sc_bitref_r<T2> b )
354212027Sjungma@eit.uni-kl.de{
354312027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_bitref_r<T2> >(
354412027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
354512027Sjungma@eit.uni-kl.de}
354612027Sjungma@eit.uni-kl.de
354712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
354812027Sjungma@eit.uni-kl.deinline
354912027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
355012027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>& a, sc_subref_r<T2> b )
355112027Sjungma@eit.uni-kl.de{
355212027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_subref_r<T2> >(
355312027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
355412027Sjungma@eit.uni-kl.de}
355512027Sjungma@eit.uni-kl.de
355612027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
355712027Sjungma@eit.uni-kl.deinline
355812027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
355912027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>& a, sc_concref_r<T2,T3> b )
356012027Sjungma@eit.uni-kl.de{
356112027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_concref_r<T2,T3> >(
356212027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
356312027Sjungma@eit.uni-kl.de}
356412027Sjungma@eit.uni-kl.de
356512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
356612027Sjungma@eit.uni-kl.deinline
356712027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
356812027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>& a, const sc_proxy<T2>& b )
356912027Sjungma@eit.uni-kl.de{
357012027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,T2>(
357112027Sjungma@eit.uni-kl.de	a.back_cast(), b.back_cast() );
357212027Sjungma@eit.uni-kl.de}
357312027Sjungma@eit.uni-kl.de
357412027Sjungma@eit.uni-kl.de
357512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
357612027Sjungma@eit.uni-kl.deinline
357712027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
357812027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>& a, sc_bitref_r<T2> b )
357912027Sjungma@eit.uni-kl.de{
358012027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_bitref_r<T2> >(
358112027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
358212027Sjungma@eit.uni-kl.de}
358312027Sjungma@eit.uni-kl.de
358412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
358512027Sjungma@eit.uni-kl.deinline
358612027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
358712027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>& a, sc_subref_r<T2> b )
358812027Sjungma@eit.uni-kl.de{
358912027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_subref_r<T2> >(
359012027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
359112027Sjungma@eit.uni-kl.de}
359212027Sjungma@eit.uni-kl.de
359312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
359412027Sjungma@eit.uni-kl.deinline
359512027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
359612027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>& a, sc_concref_r<T2,T3> b )
359712027Sjungma@eit.uni-kl.de{
359812027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_concref_r<T2,T3> >(
359912027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
360012027Sjungma@eit.uni-kl.de}
360112027Sjungma@eit.uni-kl.de
360212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
360312027Sjungma@eit.uni-kl.deinline
360412027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
360512027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>& a, const sc_proxy<T2>& b )
360612027Sjungma@eit.uni-kl.de{
360712027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,T2>(
360812027Sjungma@eit.uni-kl.de	a.back_cast(), b.back_cast() );
360912027Sjungma@eit.uni-kl.de}
361012027Sjungma@eit.uni-kl.de
361112027Sjungma@eit.uni-kl.de
361212027Sjungma@eit.uni-kl.de#ifdef SC_DT_MIXED_COMMA_OPERATORS
361312027Sjungma@eit.uni-kl.de
361412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
361512027Sjungma@eit.uni-kl.deinline
361612027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
361712027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>& a, sc_bitref<T2> b )
361812027Sjungma@eit.uni-kl.de{
361912027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_bitref_r<T2> >(
362012027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
362112027Sjungma@eit.uni-kl.de}
362212027Sjungma@eit.uni-kl.de
362312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
362412027Sjungma@eit.uni-kl.deinline
362512027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
362612027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>& a, sc_bitref_r<T2> b )
362712027Sjungma@eit.uni-kl.de{
362812027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_bitref_r<T2> >(
362912027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
363012027Sjungma@eit.uni-kl.de}
363112027Sjungma@eit.uni-kl.de
363212027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
363312027Sjungma@eit.uni-kl.deinline
363412027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
363512027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>& a, sc_subref<T2> b )
363612027Sjungma@eit.uni-kl.de{
363712027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_subref_r<T2> >(
363812027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
363912027Sjungma@eit.uni-kl.de}
364012027Sjungma@eit.uni-kl.de
364112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
364212027Sjungma@eit.uni-kl.deinline
364312027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
364412027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>& a, sc_subref_r<T2> b )
364512027Sjungma@eit.uni-kl.de{
364612027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_subref_r<T2> >(
364712027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
364812027Sjungma@eit.uni-kl.de}
364912027Sjungma@eit.uni-kl.de
365012027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
365112027Sjungma@eit.uni-kl.deinline
365212027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
365312027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>& a, sc_concref<T2,T3> b )
365412027Sjungma@eit.uni-kl.de{
365512027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_concref_r<T2,T3> >(
365612027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
365712027Sjungma@eit.uni-kl.de}
365812027Sjungma@eit.uni-kl.de
365912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
366012027Sjungma@eit.uni-kl.deinline
366112027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
366212027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>& a, sc_concref_r<T2,T3> b )
366312027Sjungma@eit.uni-kl.de{
366412027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_concref_r<T2,T3> >(
366512027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
366612027Sjungma@eit.uni-kl.de}
366712027Sjungma@eit.uni-kl.de
366812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
366912027Sjungma@eit.uni-kl.deinline
367012027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
367112027Sjungma@eit.uni-kl.deoperator , ( const sc_proxy<T1>& a, sc_proxy<T2>& b )
367212027Sjungma@eit.uni-kl.de{
367312027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,T2>(
367412027Sjungma@eit.uni-kl.de	a.back_cast(), b.back_cast() );
367512027Sjungma@eit.uni-kl.de}
367612027Sjungma@eit.uni-kl.de
367712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
367812027Sjungma@eit.uni-kl.deinline
367912027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
368012027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>& a, const sc_proxy<T2>& b )
368112027Sjungma@eit.uni-kl.de{
368212027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,T2>(
368312027Sjungma@eit.uni-kl.de	a.back_cast(), b.back_cast() );
368412027Sjungma@eit.uni-kl.de}
368512027Sjungma@eit.uni-kl.de
368612027Sjungma@eit.uni-kl.de
368712027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
368812027Sjungma@eit.uni-kl.deinline
368912027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
369012027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>& a, sc_bitref<T2> b )
369112027Sjungma@eit.uni-kl.de{
369212027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_bitref_r<T2> >(
369312027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
369412027Sjungma@eit.uni-kl.de}
369512027Sjungma@eit.uni-kl.de
369612027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
369712027Sjungma@eit.uni-kl.deinline
369812027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_bitref_r<T2> >
369912027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>& a, sc_bitref_r<T2> b )
370012027Sjungma@eit.uni-kl.de{
370112027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_bitref_r<T2> >(
370212027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
370312027Sjungma@eit.uni-kl.de}
370412027Sjungma@eit.uni-kl.de
370512027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
370612027Sjungma@eit.uni-kl.deinline
370712027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
370812027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>& a, sc_subref<T2> b )
370912027Sjungma@eit.uni-kl.de{
371012027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_subref_r<T2> >(
371112027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
371212027Sjungma@eit.uni-kl.de}
371312027Sjungma@eit.uni-kl.de
371412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
371512027Sjungma@eit.uni-kl.deinline
371612027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_subref_r<T2> >
371712027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>& a, sc_subref_r<T2> b )
371812027Sjungma@eit.uni-kl.de{
371912027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_subref_r<T2> >(
372012027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
372112027Sjungma@eit.uni-kl.de}
372212027Sjungma@eit.uni-kl.de
372312027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
372412027Sjungma@eit.uni-kl.deinline
372512027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
372612027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>& a, sc_concref<T2,T3> b )
372712027Sjungma@eit.uni-kl.de{
372812027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_concref_r<T2,T3> >(
372912027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
373012027Sjungma@eit.uni-kl.de}
373112027Sjungma@eit.uni-kl.de
373212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
373312027Sjungma@eit.uni-kl.deinline
373412027Sjungma@eit.uni-kl.desc_concref_r<T1,sc_concref_r<T2,T3> >
373512027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>& a, sc_concref_r<T2,T3> b )
373612027Sjungma@eit.uni-kl.de{
373712027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,sc_concref_r<T2,T3> >(
373812027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
373912027Sjungma@eit.uni-kl.de}
374012027Sjungma@eit.uni-kl.de
374112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
374212027Sjungma@eit.uni-kl.deinline
374312027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
374412027Sjungma@eit.uni-kl.deconcat( const sc_proxy<T1>& a, sc_proxy<T2>& b )
374512027Sjungma@eit.uni-kl.de{
374612027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,T2>(
374712027Sjungma@eit.uni-kl.de	a.back_cast(), b.back_cast() );
374812027Sjungma@eit.uni-kl.de}
374912027Sjungma@eit.uni-kl.de
375012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
375112027Sjungma@eit.uni-kl.deinline
375212027Sjungma@eit.uni-kl.desc_concref_r<T1,T2>
375312027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>& a, const sc_proxy<T2>& b )
375412027Sjungma@eit.uni-kl.de{
375512027Sjungma@eit.uni-kl.de    return sc_concref_r<T1,T2>(
375612027Sjungma@eit.uni-kl.de	a.back_cast(), b.back_cast() );
375712027Sjungma@eit.uni-kl.de}
375812027Sjungma@eit.uni-kl.de
375912027Sjungma@eit.uni-kl.de#endif
376012027Sjungma@eit.uni-kl.de
376112027Sjungma@eit.uni-kl.de
376212027Sjungma@eit.uni-kl.de// l-value concatenation operators and functions
376312027Sjungma@eit.uni-kl.de
376412027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
376512027Sjungma@eit.uni-kl.deinline
376612027Sjungma@eit.uni-kl.desc_concref<T1,sc_bitref<T2> >
376712027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>& a, sc_bitref<T2> b )
376812027Sjungma@eit.uni-kl.de{
376912027Sjungma@eit.uni-kl.de    return sc_concref<T1,sc_bitref<T2> >(
377012027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
377112027Sjungma@eit.uni-kl.de}
377212027Sjungma@eit.uni-kl.de
377312027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
377412027Sjungma@eit.uni-kl.deinline
377512027Sjungma@eit.uni-kl.desc_concref<T1,sc_subref<T2> >
377612027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>& a, sc_subref<T2> b )
377712027Sjungma@eit.uni-kl.de{
377812027Sjungma@eit.uni-kl.de    return sc_concref<T1,sc_subref<T2> >(
377912027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
378012027Sjungma@eit.uni-kl.de}
378112027Sjungma@eit.uni-kl.de
378212027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
378312027Sjungma@eit.uni-kl.deinline
378412027Sjungma@eit.uni-kl.desc_concref<T1,sc_concref<T2,T3> >
378512027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>& a, sc_concref<T2,T3> b )
378612027Sjungma@eit.uni-kl.de{
378712027Sjungma@eit.uni-kl.de    return sc_concref<T1,sc_concref<T2,T3> >(
378812027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
378912027Sjungma@eit.uni-kl.de}
379012027Sjungma@eit.uni-kl.de
379112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
379212027Sjungma@eit.uni-kl.deinline
379312027Sjungma@eit.uni-kl.desc_concref<T1,T2>
379412027Sjungma@eit.uni-kl.deoperator , ( sc_proxy<T1>& a, sc_proxy<T2>& b )
379512027Sjungma@eit.uni-kl.de{
379612027Sjungma@eit.uni-kl.de    return sc_concref<T1,T2>(
379712027Sjungma@eit.uni-kl.de	a.back_cast(), b.back_cast() );
379812027Sjungma@eit.uni-kl.de}
379912027Sjungma@eit.uni-kl.de
380012027Sjungma@eit.uni-kl.de
380112027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
380212027Sjungma@eit.uni-kl.deinline
380312027Sjungma@eit.uni-kl.desc_concref<T1,sc_bitref<T2> >
380412027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>& a, sc_bitref<T2> b )
380512027Sjungma@eit.uni-kl.de{
380612027Sjungma@eit.uni-kl.de    return sc_concref<T1,sc_bitref<T2> >(
380712027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
380812027Sjungma@eit.uni-kl.de}
380912027Sjungma@eit.uni-kl.de
381012027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
381112027Sjungma@eit.uni-kl.deinline
381212027Sjungma@eit.uni-kl.desc_concref<T1,sc_subref<T2> >
381312027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>& a, sc_subref<T2> b )
381412027Sjungma@eit.uni-kl.de{
381512027Sjungma@eit.uni-kl.de    return sc_concref<T1,sc_subref<T2> >(
381612027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
381712027Sjungma@eit.uni-kl.de}
381812027Sjungma@eit.uni-kl.de
381912027Sjungma@eit.uni-kl.detemplate <class T1, class T2, class T3>
382012027Sjungma@eit.uni-kl.deinline
382112027Sjungma@eit.uni-kl.desc_concref<T1,sc_concref<T2,T3> >
382212027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>& a, sc_concref<T2,T3> b )
382312027Sjungma@eit.uni-kl.de{
382412027Sjungma@eit.uni-kl.de    return sc_concref<T1,sc_concref<T2,T3> >(
382512027Sjungma@eit.uni-kl.de	a.back_cast(), *b.clone(), 2 );
382612027Sjungma@eit.uni-kl.de}
382712027Sjungma@eit.uni-kl.de
382812027Sjungma@eit.uni-kl.detemplate <class T1, class T2>
382912027Sjungma@eit.uni-kl.deinline
383012027Sjungma@eit.uni-kl.desc_concref<T1,T2>
383112027Sjungma@eit.uni-kl.deconcat( sc_proxy<T1>& a, sc_proxy<T2>& b )
383212027Sjungma@eit.uni-kl.de{
383312027Sjungma@eit.uni-kl.de    return sc_concref<T1,T2>(
383412027Sjungma@eit.uni-kl.de	a.back_cast(), b.back_cast() );
383512027Sjungma@eit.uni-kl.de}
383612027Sjungma@eit.uni-kl.de
383712027Sjungma@eit.uni-kl.de} // namespace sc_dt
383812027Sjungma@eit.uni-kl.de
383912027Sjungma@eit.uni-kl.de// $Log: sc_bit_proxies.h,v $
384012027Sjungma@eit.uni-kl.de// Revision 1.10  2011/09/05 21:19:53  acg
384112027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: added parentheses to expressions to eliminate
384212027Sjungma@eit.uni-kl.de//  compiler warnings.
384312027Sjungma@eit.uni-kl.de//
384412027Sjungma@eit.uni-kl.de// Revision 1.9  2011/09/01 15:03:42  acg
384512027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: add parentheses to eliminate compiler warnings.
384612027Sjungma@eit.uni-kl.de//
384712027Sjungma@eit.uni-kl.de// Revision 1.8  2011/08/29 18:04:32  acg
384812027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: miscellaneous clean ups.
384912027Sjungma@eit.uni-kl.de//
385012027Sjungma@eit.uni-kl.de// Revision 1.7  2011/08/24 22:05:40  acg
385112027Sjungma@eit.uni-kl.de//  Torsten Maehne: initialization changes to remove warnings.
385212027Sjungma@eit.uni-kl.de//
385312027Sjungma@eit.uni-kl.de// Revision 1.6  2010/02/22 14:25:43  acg
385412027Sjungma@eit.uni-kl.de//  Andy Goodrich: removed 'mutable' directive from references, since it
385512027Sjungma@eit.uni-kl.de//  is not a legal C++ construct.
385612027Sjungma@eit.uni-kl.de//
385712027Sjungma@eit.uni-kl.de// Revision 1.5  2009/02/28 00:26:14  acg
385812027Sjungma@eit.uni-kl.de//  Andy Goodrich: bug fixes.
385912027Sjungma@eit.uni-kl.de//
386012027Sjungma@eit.uni-kl.de// Revision 1.4  2007/03/14 17:48:37  acg
386112027Sjungma@eit.uni-kl.de//  Andy Goodrich: fixed bug.
386212027Sjungma@eit.uni-kl.de//
386312027Sjungma@eit.uni-kl.de// Revision 1.3  2007/01/18 19:29:18  acg
386412027Sjungma@eit.uni-kl.de//  Andy Goodrich: fixed bug in concatenations of bit selects on sc_lv and
386512027Sjungma@eit.uni-kl.de//  sc_bv types. The offending code was in sc_bitref<X>::set_word and
386612027Sjungma@eit.uni-kl.de//  sc_bitref<X>::get_word. These methods were not writing the bit they
386712027Sjungma@eit.uni-kl.de//  represented, but rather writing an entire word whose index was the
386812027Sjungma@eit.uni-kl.de//  index of the bit they represented. This not only did not write the
386912027Sjungma@eit.uni-kl.de//  correct bit, but clobbered a word that might not even be in the
387012027Sjungma@eit.uni-kl.de//  variable the reference was for.
387112027Sjungma@eit.uni-kl.de//
387212027Sjungma@eit.uni-kl.de// Revision 1.2  2007/01/17 22:45:08  acg
387312027Sjungma@eit.uni-kl.de//  Andy Goodrich: fixed sc_bitref<X>::set_bit().
387412027Sjungma@eit.uni-kl.de//
387512027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:31:36  acg
387612027Sjungma@eit.uni-kl.de// SystemC 2.2
387712027Sjungma@eit.uni-kl.de//
387812027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:53:53  acg
387912027Sjungma@eit.uni-kl.de// Andy Goodrich: added $Log command so that CVS comments are reproduced in
388012027Sjungma@eit.uni-kl.de// the source.
388112027Sjungma@eit.uni-kl.de//
388212027Sjungma@eit.uni-kl.de
388312027Sjungma@eit.uni-kl.de
388412027Sjungma@eit.uni-kl.de#endif
3885