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_signed_subref.h -- Proxy class that is declared in sc_signed.h.
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Author: Ali Dasdan, Synopsys, Inc.
2512027Sjungma@eit.uni-kl.de
2612027Sjungma@eit.uni-kl.de *****************************************************************************/
2712027Sjungma@eit.uni-kl.de
2812027Sjungma@eit.uni-kl.de/*****************************************************************************
2912027Sjungma@eit.uni-kl.de
3012027Sjungma@eit.uni-kl.de  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3112027Sjungma@eit.uni-kl.de  changes you are making here.
3212027Sjungma@eit.uni-kl.de
3312027Sjungma@eit.uni-kl.de      Name, Affiliation, Date:
3412027Sjungma@eit.uni-kl.de  Description of Modification:
3512027Sjungma@eit.uni-kl.de
3612027Sjungma@eit.uni-kl.de *****************************************************************************/
3712027Sjungma@eit.uni-kl.de
3812027Sjungma@eit.uni-kl.de
3912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
4012027Sjungma@eit.uni-kl.de//  CLASS : sc_signed_subref_r
4112027Sjungma@eit.uni-kl.de//
4212027Sjungma@eit.uni-kl.de//  Proxy class for sc_signed part selection (r-value only).
4312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
4412027Sjungma@eit.uni-kl.de
4512027Sjungma@eit.uni-kl.de// concatenation support
4612027Sjungma@eit.uni-kl.de
4712027Sjungma@eit.uni-kl.deuint64 sc_signed_subref_r::concat_get_uint64() const
4812027Sjungma@eit.uni-kl.de{
4912027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
5012027Sjungma@eit.uni-kl.de    return a.to_uint64();
5112027Sjungma@eit.uni-kl.de}
5212027Sjungma@eit.uni-kl.de
5312027Sjungma@eit.uni-kl.de
5412027Sjungma@eit.uni-kl.debool sc_signed_subref_r::concat_get_ctrl(sc_digit* dst_p, int low_i ) const
5512027Sjungma@eit.uni-kl.de{
5612027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
5712027Sjungma@eit.uni-kl.de    return a.concat_get_ctrl( dst_p, low_i );
5812027Sjungma@eit.uni-kl.de}
5912027Sjungma@eit.uni-kl.de
6012027Sjungma@eit.uni-kl.de
6112027Sjungma@eit.uni-kl.debool sc_signed_subref_r::concat_get_data(sc_digit* dst_p, int low_i ) const
6212027Sjungma@eit.uni-kl.de{
6312027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
6412027Sjungma@eit.uni-kl.de    return a.concat_get_data( dst_p, low_i );
6512027Sjungma@eit.uni-kl.de}
6612027Sjungma@eit.uni-kl.de
6712027Sjungma@eit.uni-kl.de
6812027Sjungma@eit.uni-kl.de// implicit conversion to sc_signed
6912027Sjungma@eit.uni-kl.de
7012027Sjungma@eit.uni-kl.desc_signed_subref_r::operator sc_unsigned () const
7112027Sjungma@eit.uni-kl.de{
7212027Sjungma@eit.uni-kl.de    return sc_unsigned( m_obj_p, m_left, m_right );
7312027Sjungma@eit.uni-kl.de}
7412027Sjungma@eit.uni-kl.de
7512027Sjungma@eit.uni-kl.de
7612027Sjungma@eit.uni-kl.de// explicit conversions
7712027Sjungma@eit.uni-kl.de
7812027Sjungma@eit.uni-kl.deint
7912027Sjungma@eit.uni-kl.desc_signed_subref_r::to_int() const
8012027Sjungma@eit.uni-kl.de{
8112027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
8212027Sjungma@eit.uni-kl.de    return a.to_int();
8312027Sjungma@eit.uni-kl.de}
8412027Sjungma@eit.uni-kl.de
8512027Sjungma@eit.uni-kl.deunsigned int
8612027Sjungma@eit.uni-kl.desc_signed_subref_r::to_uint() const
8712027Sjungma@eit.uni-kl.de{
8812027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
8912027Sjungma@eit.uni-kl.de    return a.to_uint();
9012027Sjungma@eit.uni-kl.de}
9112027Sjungma@eit.uni-kl.de
9212027Sjungma@eit.uni-kl.delong
9312027Sjungma@eit.uni-kl.desc_signed_subref_r::to_long() const
9412027Sjungma@eit.uni-kl.de{
9512027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
9612027Sjungma@eit.uni-kl.de    return a.to_long();
9712027Sjungma@eit.uni-kl.de}
9812027Sjungma@eit.uni-kl.de
9912027Sjungma@eit.uni-kl.deunsigned long
10012027Sjungma@eit.uni-kl.desc_signed_subref_r::to_ulong() const
10112027Sjungma@eit.uni-kl.de{
10212027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
10312027Sjungma@eit.uni-kl.de    return a.to_ulong();
10412027Sjungma@eit.uni-kl.de}
10512027Sjungma@eit.uni-kl.de
10612027Sjungma@eit.uni-kl.deint64
10712027Sjungma@eit.uni-kl.desc_signed_subref_r::to_int64() const
10812027Sjungma@eit.uni-kl.de{
10912027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
11012027Sjungma@eit.uni-kl.de    return a.to_int64();
11112027Sjungma@eit.uni-kl.de}
11212027Sjungma@eit.uni-kl.de
11312027Sjungma@eit.uni-kl.deuint64
11412027Sjungma@eit.uni-kl.desc_signed_subref_r::to_uint64() const
11512027Sjungma@eit.uni-kl.de{
11612027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
11712027Sjungma@eit.uni-kl.de    return a.to_uint64();
11812027Sjungma@eit.uni-kl.de}
11912027Sjungma@eit.uni-kl.de
12012027Sjungma@eit.uni-kl.dedouble
12112027Sjungma@eit.uni-kl.desc_signed_subref_r::to_double() const
12212027Sjungma@eit.uni-kl.de{
12312027Sjungma@eit.uni-kl.de    sc_unsigned a( m_obj_p, m_left, m_right );
12412027Sjungma@eit.uni-kl.de    return a.to_double();
12512027Sjungma@eit.uni-kl.de}
12612027Sjungma@eit.uni-kl.de
12712027Sjungma@eit.uni-kl.de
12812027Sjungma@eit.uni-kl.de// explicit conversion to character string
12912027Sjungma@eit.uni-kl.de
13012027Sjungma@eit.uni-kl.deconst std::string
13112027Sjungma@eit.uni-kl.desc_signed_subref_r::to_string( sc_numrep numrep ) const
13212027Sjungma@eit.uni-kl.de{
13312027Sjungma@eit.uni-kl.de    sc_unsigned a( length() );
13412027Sjungma@eit.uni-kl.de    a = *this;
13512027Sjungma@eit.uni-kl.de    return a.to_string( numrep );
13612027Sjungma@eit.uni-kl.de}
13712027Sjungma@eit.uni-kl.de
13812027Sjungma@eit.uni-kl.deconst std::string
13912027Sjungma@eit.uni-kl.desc_signed_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const
14012027Sjungma@eit.uni-kl.de{
14112027Sjungma@eit.uni-kl.de    sc_unsigned a( length() );
14212027Sjungma@eit.uni-kl.de    a = *this;
14312027Sjungma@eit.uni-kl.de    return a.to_string( numrep, w_prefix );
14412027Sjungma@eit.uni-kl.de}
14512027Sjungma@eit.uni-kl.de
14612027Sjungma@eit.uni-kl.de
14712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
14812027Sjungma@eit.uni-kl.de//  CLASS : sc_signed_subref
14912027Sjungma@eit.uni-kl.de//
15012027Sjungma@eit.uni-kl.de//  Proxy class for sc_signed part selection (r-value and l-value).
15112027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
15212027Sjungma@eit.uni-kl.de
15312027Sjungma@eit.uni-kl.de// assignment operators
15412027Sjungma@eit.uni-kl.de
15512027Sjungma@eit.uni-kl.deconst sc_signed_subref&
15612027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_signed_subref_r& a )
15712027Sjungma@eit.uni-kl.de{
15812027Sjungma@eit.uni-kl.de    return operator = ( (sc_unsigned)( a ) );
15912027Sjungma@eit.uni-kl.de}
16012027Sjungma@eit.uni-kl.de
16112027Sjungma@eit.uni-kl.deconst sc_signed_subref&
16212027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_signed_subref& v )
16312027Sjungma@eit.uni-kl.de{
16412027Sjungma@eit.uni-kl.de    if( this == &v ) {
16512027Sjungma@eit.uni-kl.de	return *this;
16612027Sjungma@eit.uni-kl.de    }
16712027Sjungma@eit.uni-kl.de    return operator = ( (sc_unsigned)( v ) );
16812027Sjungma@eit.uni-kl.de}
16912027Sjungma@eit.uni-kl.de
17012027Sjungma@eit.uni-kl.deconst sc_signed_subref&
17112027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_signed& v )
17212027Sjungma@eit.uni-kl.de{
17312027Sjungma@eit.uni-kl.de    int i;
17412027Sjungma@eit.uni-kl.de    int l = sc_min( m_left, v.nbits - 1 + m_right );
17512027Sjungma@eit.uni-kl.de
17612027Sjungma@eit.uni-kl.de    for( i = m_right; i <= l; ++ i ) m_obj_p->set( i, v.test( i - m_right ) );
17712027Sjungma@eit.uni-kl.de    for ( ; i <= m_left; i++ ) m_obj_p->set( i, v.test( l ) );
17812027Sjungma@eit.uni-kl.de
17912027Sjungma@eit.uni-kl.de    return *this;
18012027Sjungma@eit.uni-kl.de}
18112027Sjungma@eit.uni-kl.de
18212027Sjungma@eit.uni-kl.deconst sc_signed_subref&
18312027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_unsigned_subref_r& v )
18412027Sjungma@eit.uni-kl.de{
18512027Sjungma@eit.uni-kl.de    return operator = ( (sc_unsigned)( v ) );
18612027Sjungma@eit.uni-kl.de}
18712027Sjungma@eit.uni-kl.de
18812027Sjungma@eit.uni-kl.deconst sc_signed_subref&
18912027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_unsigned& v )
19012027Sjungma@eit.uni-kl.de{
19112027Sjungma@eit.uni-kl.de    int i;
19212027Sjungma@eit.uni-kl.de    int l = sc_min( m_left, v.nbits - 1 + m_right );
19312027Sjungma@eit.uni-kl.de
19412027Sjungma@eit.uni-kl.de    for( i = m_right; i <= l; ++ i ) m_obj_p->set( i, v.test( i - m_right ) );
19512027Sjungma@eit.uni-kl.de    for ( ; i <= m_left; i++ ) m_obj_p->set( i, 0 );
19612027Sjungma@eit.uni-kl.de    return *this;
19712027Sjungma@eit.uni-kl.de}
19812027Sjungma@eit.uni-kl.de
19912027Sjungma@eit.uni-kl.deconst sc_signed_subref&
20012027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( unsigned long v )
20112027Sjungma@eit.uni-kl.de{
20212027Sjungma@eit.uni-kl.de    for( int i = m_right; i <= m_left; ++ i ) {
20312027Sjungma@eit.uni-kl.de	m_obj_p->set( i, static_cast<bool>( v & 1 ) );
20412027Sjungma@eit.uni-kl.de	v >>= 1;
20512027Sjungma@eit.uni-kl.de    }
20612027Sjungma@eit.uni-kl.de    return *this;
20712027Sjungma@eit.uni-kl.de}
20812027Sjungma@eit.uni-kl.de
20912027Sjungma@eit.uni-kl.deconst sc_signed_subref&
21012027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( long v )
21112027Sjungma@eit.uni-kl.de{
21212027Sjungma@eit.uni-kl.de    unsigned long v2 = (unsigned long) v;
21312027Sjungma@eit.uni-kl.de    for( int i = m_right; i <= m_left; ++ i ) {
21412027Sjungma@eit.uni-kl.de	m_obj_p->set( i, static_cast<bool>( v2 & 1 ) );
21512027Sjungma@eit.uni-kl.de	v2 >>= 1;
21612027Sjungma@eit.uni-kl.de    }
21712027Sjungma@eit.uni-kl.de    return *this;
21812027Sjungma@eit.uni-kl.de}
21912027Sjungma@eit.uni-kl.de
22012027Sjungma@eit.uni-kl.deconst sc_signed_subref&
22112027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( uint64 v )
22212027Sjungma@eit.uni-kl.de{
22312027Sjungma@eit.uni-kl.de    for( int i = m_right; i <= m_left; ++ i ) {
22412027Sjungma@eit.uni-kl.de	m_obj_p->set( i, static_cast<bool>( v & 1 ) );
22512027Sjungma@eit.uni-kl.de	v >>= 1;
22612027Sjungma@eit.uni-kl.de    }
22712027Sjungma@eit.uni-kl.de    return *this;
22812027Sjungma@eit.uni-kl.de}
22912027Sjungma@eit.uni-kl.de
23012027Sjungma@eit.uni-kl.deconst sc_signed_subref&
23112027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( int64 v )
23212027Sjungma@eit.uni-kl.de{
23312027Sjungma@eit.uni-kl.de    uint64 v2 = (uint64) v;
23412027Sjungma@eit.uni-kl.de    for( int i = m_right; i <= m_left; ++ i ) {
23512027Sjungma@eit.uni-kl.de	m_obj_p->set( i, static_cast<bool>( v2 & 1 ) );
23612027Sjungma@eit.uni-kl.de	v2 >>= 1;
23712027Sjungma@eit.uni-kl.de    }
23812027Sjungma@eit.uni-kl.de    return *this;
23912027Sjungma@eit.uni-kl.de}
24012027Sjungma@eit.uni-kl.de
24112027Sjungma@eit.uni-kl.deconst sc_signed_subref&
24212027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( double v )
24312027Sjungma@eit.uni-kl.de{
24412027Sjungma@eit.uni-kl.de    is_bad_double(v);
24512027Sjungma@eit.uni-kl.de
24612027Sjungma@eit.uni-kl.de    int nb = m_left - m_right + 1;
24712027Sjungma@eit.uni-kl.de    int nd = DIV_CEIL(nb);
24812027Sjungma@eit.uni-kl.de
24912027Sjungma@eit.uni-kl.de#ifdef SC_MAX_NBITS
25012027Sjungma@eit.uni-kl.de    sc_digit d[MAX_NDIGITS];
25112027Sjungma@eit.uni-kl.de#else
25212027Sjungma@eit.uni-kl.de    sc_digit *d = new sc_digit[nd];
25312027Sjungma@eit.uni-kl.de#endif
25412027Sjungma@eit.uni-kl.de
25512027Sjungma@eit.uni-kl.de    if (v < 0)
25612027Sjungma@eit.uni-kl.de	v = -v;
25712027Sjungma@eit.uni-kl.de
25812027Sjungma@eit.uni-kl.de    int i = 0;
25912027Sjungma@eit.uni-kl.de
26012027Sjungma@eit.uni-kl.de    while (floor(v) && (i < nd)) {
26112027Sjungma@eit.uni-kl.de#ifndef _WIN32
26212027Sjungma@eit.uni-kl.de	d[i++] = (sc_digit) floor(remainder(v, DIGIT_RADIX));
26312027Sjungma@eit.uni-kl.de#else
26412027Sjungma@eit.uni-kl.de	d[i++] = (sc_digit) floor(fmod(v, DIGIT_RADIX));
26512027Sjungma@eit.uni-kl.de#endif
26612027Sjungma@eit.uni-kl.de	v /= DIGIT_RADIX;
26712027Sjungma@eit.uni-kl.de    }
26812027Sjungma@eit.uni-kl.de
26912027Sjungma@eit.uni-kl.de    vec_zero(i, nd, d);
27012027Sjungma@eit.uni-kl.de
27112027Sjungma@eit.uni-kl.de    sc_digit val = 1;  // Bit value.
27212027Sjungma@eit.uni-kl.de    int j = 0;   // Current digit in d.
27312027Sjungma@eit.uni-kl.de
27412027Sjungma@eit.uni-kl.de    i = 0;  // Current bit in d.
27512027Sjungma@eit.uni-kl.de
27612027Sjungma@eit.uni-kl.de    while (i < nb) {
27712027Sjungma@eit.uni-kl.de
27812027Sjungma@eit.uni-kl.de	m_obj_p->set(i + m_right, (bool) (d[j] & val));
27912027Sjungma@eit.uni-kl.de
28012027Sjungma@eit.uni-kl.de	++i;
28112027Sjungma@eit.uni-kl.de
28212027Sjungma@eit.uni-kl.de	if (i % BITS_PER_DIGIT == 0) {
28312027Sjungma@eit.uni-kl.de	    val = 1;
28412027Sjungma@eit.uni-kl.de	    ++j;
28512027Sjungma@eit.uni-kl.de	}
28612027Sjungma@eit.uni-kl.de	else
28712027Sjungma@eit.uni-kl.de	    val <<= 1;
28812027Sjungma@eit.uni-kl.de    }
28912027Sjungma@eit.uni-kl.de
29012027Sjungma@eit.uni-kl.de#ifndef SC_MAX_NBITS
29112027Sjungma@eit.uni-kl.de    delete [] d;
29212027Sjungma@eit.uni-kl.de#endif
29312027Sjungma@eit.uni-kl.de
29412027Sjungma@eit.uni-kl.de    return *this;
29512027Sjungma@eit.uni-kl.de}
29612027Sjungma@eit.uni-kl.de
29712027Sjungma@eit.uni-kl.deconst sc_signed_subref&
29812027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_int_base& a )
29912027Sjungma@eit.uni-kl.de{
30012027Sjungma@eit.uni-kl.de    return operator = ( (int64) a );
30112027Sjungma@eit.uni-kl.de}
30212027Sjungma@eit.uni-kl.de
30312027Sjungma@eit.uni-kl.deconst sc_signed_subref&
30412027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_uint_base& a )
30512027Sjungma@eit.uni-kl.de{
30612027Sjungma@eit.uni-kl.de    return operator = ( (uint64) a );
30712027Sjungma@eit.uni-kl.de}
30812027Sjungma@eit.uni-kl.de
30912027Sjungma@eit.uni-kl.de// concatenation methods
31012027Sjungma@eit.uni-kl.de
31112027Sjungma@eit.uni-kl.de
31212027Sjungma@eit.uni-kl.devoid sc_signed_subref::concat_set( int64 src, int low_i )
31312027Sjungma@eit.uni-kl.de{
31412027Sjungma@eit.uni-kl.de    int  i;
31512027Sjungma@eit.uni-kl.de    int  l;
31612027Sjungma@eit.uni-kl.de    bool sign = src < 0;
31712027Sjungma@eit.uni-kl.de
31812027Sjungma@eit.uni-kl.de    if ( low_i < 64 )
31912027Sjungma@eit.uni-kl.de    {
32012027Sjungma@eit.uni-kl.de	src = src >> low_i;
32112027Sjungma@eit.uni-kl.de	l = sc_min( m_left, (63-low_i) + m_right );
32212027Sjungma@eit.uni-kl.de	for( i = m_right; i <= l; ++ i ) {
32312027Sjungma@eit.uni-kl.de		m_obj_p->set( i, src & 1 );
32412027Sjungma@eit.uni-kl.de		src = src >> 1;
32512027Sjungma@eit.uni-kl.de	}
32612027Sjungma@eit.uni-kl.de	for ( ; i <= m_left; i++ ) m_obj_p->set(i, sign);
32712027Sjungma@eit.uni-kl.de    }
32812027Sjungma@eit.uni-kl.de    else
32912027Sjungma@eit.uni-kl.de    {
33012027Sjungma@eit.uni-kl.de	for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(i, sign);
33112027Sjungma@eit.uni-kl.de    }
33212027Sjungma@eit.uni-kl.de}
33312027Sjungma@eit.uni-kl.de
33412027Sjungma@eit.uni-kl.devoid sc_signed_subref::concat_set( const sc_signed& src, int low_i )
33512027Sjungma@eit.uni-kl.de{
33612027Sjungma@eit.uni-kl.de    int i;
33712027Sjungma@eit.uni-kl.de    int l;
33812027Sjungma@eit.uni-kl.de    int src_i;
33912027Sjungma@eit.uni-kl.de    bool sign = src.test(src.nbits-1);
34012027Sjungma@eit.uni-kl.de    l = src.nbits - (low_i+1);
34112027Sjungma@eit.uni-kl.de    if ( l >= 0 )
34212027Sjungma@eit.uni-kl.de    {
34312027Sjungma@eit.uni-kl.de	l = sc_min( m_left, l + m_right );
34412027Sjungma@eit.uni-kl.de	src_i = low_i;
34512027Sjungma@eit.uni-kl.de	for( i = m_right; i <= l; ++ i, src_i++ ) {
34612027Sjungma@eit.uni-kl.de	    m_obj_p->set( i, src.test( src_i ) );
34712027Sjungma@eit.uni-kl.de	}
34812027Sjungma@eit.uni-kl.de	for ( ; i <= m_left; i++ ) m_obj_p->set(i, sign);
34912027Sjungma@eit.uni-kl.de    }
35012027Sjungma@eit.uni-kl.de    else
35112027Sjungma@eit.uni-kl.de    {
35212027Sjungma@eit.uni-kl.de	for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(i, sign);
35312027Sjungma@eit.uni-kl.de    }
35412027Sjungma@eit.uni-kl.de}
35512027Sjungma@eit.uni-kl.de
35612027Sjungma@eit.uni-kl.devoid sc_signed_subref::concat_set( const sc_unsigned& src, int low_i )
35712027Sjungma@eit.uni-kl.de{
35812027Sjungma@eit.uni-kl.de    int i;
35912027Sjungma@eit.uni-kl.de    int l;
36012027Sjungma@eit.uni-kl.de    int src_i;
36112027Sjungma@eit.uni-kl.de    l = src.nbits - (low_i+2);
36212027Sjungma@eit.uni-kl.de    if ( l >= 0 )
36312027Sjungma@eit.uni-kl.de    {
36412027Sjungma@eit.uni-kl.de	l = sc_min( m_left, l + m_right );
36512027Sjungma@eit.uni-kl.de	src_i = low_i;
36612027Sjungma@eit.uni-kl.de	for( i = m_right; i <= l; ++ i, src_i++ ) {
36712027Sjungma@eit.uni-kl.de	    m_obj_p->set( i, src.test( src_i ) );
36812027Sjungma@eit.uni-kl.de	}
36912027Sjungma@eit.uni-kl.de	for ( ; i <= m_left; i++ ) m_obj_p->set(false);
37012027Sjungma@eit.uni-kl.de    }
37112027Sjungma@eit.uni-kl.de    else
37212027Sjungma@eit.uni-kl.de    {
37312027Sjungma@eit.uni-kl.de	for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(false);
37412027Sjungma@eit.uni-kl.de    }
37512027Sjungma@eit.uni-kl.de}
37612027Sjungma@eit.uni-kl.de
37712027Sjungma@eit.uni-kl.devoid sc_signed_subref::concat_set( uint64 src, int low_i )
37812027Sjungma@eit.uni-kl.de{
37912027Sjungma@eit.uni-kl.de    int  i;
38012027Sjungma@eit.uni-kl.de    int  l;
38112027Sjungma@eit.uni-kl.de
38212027Sjungma@eit.uni-kl.de    if ( low_i < 64 )
38312027Sjungma@eit.uni-kl.de    {
38412027Sjungma@eit.uni-kl.de	src = src >> low_i;
38512027Sjungma@eit.uni-kl.de	l = sc_min( m_left, (63-low_i) + m_right );
38612027Sjungma@eit.uni-kl.de	for( i = m_right; i <= l; ++ i ) {
38712027Sjungma@eit.uni-kl.de		m_obj_p->set( i, src & 1 );
38812027Sjungma@eit.uni-kl.de		src = src >> 1;
38912027Sjungma@eit.uni-kl.de	}
39012027Sjungma@eit.uni-kl.de	for ( ; i <= m_left; i++ ) m_obj_p->set(false);
39112027Sjungma@eit.uni-kl.de    }
39212027Sjungma@eit.uni-kl.de    else
39312027Sjungma@eit.uni-kl.de    {
39412027Sjungma@eit.uni-kl.de	for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(false);
39512027Sjungma@eit.uni-kl.de    }
39612027Sjungma@eit.uni-kl.de}
39712027Sjungma@eit.uni-kl.de// other methods
39812027Sjungma@eit.uni-kl.de
39912027Sjungma@eit.uni-kl.devoid
40012027Sjungma@eit.uni-kl.desc_signed_subref::scan( ::std::istream& is )
40112027Sjungma@eit.uni-kl.de{
40212027Sjungma@eit.uni-kl.de    std::string s;
40312027Sjungma@eit.uni-kl.de    is >> s;
40412027Sjungma@eit.uni-kl.de    *this = s.c_str();
40512027Sjungma@eit.uni-kl.de}
40612027Sjungma@eit.uni-kl.de
40712027Sjungma@eit.uni-kl.de
40812027Sjungma@eit.uni-kl.de// End of file
409