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_signal_ports.cpp -- The sc_signal<T> port classes.
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Author: Martin Janssen, Synopsys, Inc., 2001-08-20
2512027Sjungma@eit.uni-kl.de
2612027Sjungma@eit.uni-kl.de  CHANGE LOG IS AT THE END OF THE FILE
2712027Sjungma@eit.uni-kl.de *****************************************************************************/
2812027Sjungma@eit.uni-kl.de
2912027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_signal_ports.h"
3012027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_signed.h"
3112027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_unsigned.h"
3212027Sjungma@eit.uni-kl.de#include "sysc/datatypes/bit/sc_lv_base.h"
3312027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_utils_ids.h"
3412027Sjungma@eit.uni-kl.de
3512027Sjungma@eit.uni-kl.denamespace sc_core {
3612027Sjungma@eit.uni-kl.de
3712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
3812027Sjungma@eit.uni-kl.de//  CLASS : sc_in<bool>
3912027Sjungma@eit.uni-kl.de//
4012027Sjungma@eit.uni-kl.de//  Specialization of sc_in<T> for type bool.
4112027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
4212027Sjungma@eit.uni-kl.de
4312027Sjungma@eit.uni-kl.de// called when elaboration is done
4412027Sjungma@eit.uni-kl.de
4512027Sjungma@eit.uni-kl.devoid
4612027Sjungma@eit.uni-kl.desc_in<bool>::end_of_elaboration()
4712027Sjungma@eit.uni-kl.de{
4812027Sjungma@eit.uni-kl.de    if( m_traces != 0 ) {
4912027Sjungma@eit.uni-kl.de	for( int i = 0; i < (int)m_traces->size(); ++ i ) {
5012027Sjungma@eit.uni-kl.de	    sc_trace_params* p = (*m_traces)[i];
5112027Sjungma@eit.uni-kl.de	    in_if_type* iface = DCAST<in_if_type*>( get_interface() );
5212027Sjungma@eit.uni-kl.de	    sc_trace( p->tf, iface->read(), p->name );
5312027Sjungma@eit.uni-kl.de	}
5412027Sjungma@eit.uni-kl.de	remove_traces();
5512027Sjungma@eit.uni-kl.de    }
5612027Sjungma@eit.uni-kl.de}
5712027Sjungma@eit.uni-kl.de
5812027Sjungma@eit.uni-kl.de// called by sc_trace
5912027Sjungma@eit.uni-kl.de
6012027Sjungma@eit.uni-kl.devoid
6112027Sjungma@eit.uni-kl.desc_in<bool>::add_trace_internal(sc_trace_file* tf_,
6212027Sjungma@eit.uni-kl.de	const std::string& name_) const
6312027Sjungma@eit.uni-kl.de{
6412027Sjungma@eit.uni-kl.de    if( tf_ != 0 ) {
6512027Sjungma@eit.uni-kl.de	if( m_traces == 0 ) {
6612027Sjungma@eit.uni-kl.de	    m_traces = new sc_trace_params_vec;
6712027Sjungma@eit.uni-kl.de	}
6812027Sjungma@eit.uni-kl.de	m_traces->push_back( new sc_trace_params( tf_, name_ ) );
6912027Sjungma@eit.uni-kl.de    }
7012027Sjungma@eit.uni-kl.de}
7112027Sjungma@eit.uni-kl.de
7212027Sjungma@eit.uni-kl.devoid
7312027Sjungma@eit.uni-kl.desc_in<bool>::add_trace(sc_trace_file* tf_,
7412027Sjungma@eit.uni-kl.de	const std::string& name_) const
7512027Sjungma@eit.uni-kl.de{
7612027Sjungma@eit.uni-kl.de    sc_deprecated_add_trace();
7712027Sjungma@eit.uni-kl.de	add_trace_internal(tf_, name_);
7812027Sjungma@eit.uni-kl.de}
7912027Sjungma@eit.uni-kl.de
8012027Sjungma@eit.uni-kl.devoid
8112027Sjungma@eit.uni-kl.desc_in<bool>::remove_traces() const
8212027Sjungma@eit.uni-kl.de{
8312027Sjungma@eit.uni-kl.de    if( m_traces != 0 ) {
8412027Sjungma@eit.uni-kl.de	for( int i = m_traces->size() - 1; i >= 0; -- i ) {
8512027Sjungma@eit.uni-kl.de	    delete (*m_traces)[i];
8612027Sjungma@eit.uni-kl.de	}
8712027Sjungma@eit.uni-kl.de	delete m_traces;
8812027Sjungma@eit.uni-kl.de	m_traces = 0;
8912027Sjungma@eit.uni-kl.de    }
9012027Sjungma@eit.uni-kl.de}
9112027Sjungma@eit.uni-kl.de
9212027Sjungma@eit.uni-kl.de
9312027Sjungma@eit.uni-kl.de// called by pbind (for internal use only)
9412027Sjungma@eit.uni-kl.de
9512027Sjungma@eit.uni-kl.deint
9612027Sjungma@eit.uni-kl.desc_in<bool>::vbind( sc_interface& interface_ )
9712027Sjungma@eit.uni-kl.de{
9812027Sjungma@eit.uni-kl.de    return sc_port_b<if_type>::vbind( interface_ );
9912027Sjungma@eit.uni-kl.de}
10012027Sjungma@eit.uni-kl.de
10112027Sjungma@eit.uni-kl.deint
10212027Sjungma@eit.uni-kl.desc_in<bool>::vbind( sc_port_base& parent_ )
10312027Sjungma@eit.uni-kl.de{
10412027Sjungma@eit.uni-kl.de    in_port_type* in_parent = DCAST<in_port_type*>( &parent_ );
10512027Sjungma@eit.uni-kl.de    if( in_parent != 0 ) {
10612027Sjungma@eit.uni-kl.de	sc_port_base::bind( *in_parent );
10712027Sjungma@eit.uni-kl.de	return 0;
10812027Sjungma@eit.uni-kl.de    }
10912027Sjungma@eit.uni-kl.de    inout_port_type* inout_parent = DCAST<inout_port_type*>( &parent_ );
11012027Sjungma@eit.uni-kl.de    if( inout_parent != 0 ) {
11112027Sjungma@eit.uni-kl.de	sc_port_base::bind( *inout_parent );
11212027Sjungma@eit.uni-kl.de	return 0;
11312027Sjungma@eit.uni-kl.de    }
11412027Sjungma@eit.uni-kl.de    // type mismatch
11512027Sjungma@eit.uni-kl.de    return 2;
11612027Sjungma@eit.uni-kl.de}
11712027Sjungma@eit.uni-kl.de
11812027Sjungma@eit.uni-kl.de
11912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
12012027Sjungma@eit.uni-kl.de//  CLASS : sc_in<sc_logic>
12112027Sjungma@eit.uni-kl.de//
12212027Sjungma@eit.uni-kl.de//  Specialization of sc_in<T> for type sc_logic.
12312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
12412027Sjungma@eit.uni-kl.de
12512027Sjungma@eit.uni-kl.de// called when elaboration is done
12612027Sjungma@eit.uni-kl.de
12712027Sjungma@eit.uni-kl.devoid
12812027Sjungma@eit.uni-kl.desc_in<sc_dt::sc_logic>::end_of_elaboration()
12912027Sjungma@eit.uni-kl.de{
13012027Sjungma@eit.uni-kl.de    if( m_traces != 0 ) {
13112027Sjungma@eit.uni-kl.de	for( int i = 0; i < (int)m_traces->size(); ++ i ) {
13212027Sjungma@eit.uni-kl.de	    sc_trace_params* p = (*m_traces)[i];
13312027Sjungma@eit.uni-kl.de	    in_if_type* iface = DCAST<in_if_type*>( get_interface() );
13412027Sjungma@eit.uni-kl.de	    sc_trace( p->tf, iface->read(), p->name );
13512027Sjungma@eit.uni-kl.de	}
13612027Sjungma@eit.uni-kl.de	remove_traces();
13712027Sjungma@eit.uni-kl.de    }
13812027Sjungma@eit.uni-kl.de}
13912027Sjungma@eit.uni-kl.de
14012027Sjungma@eit.uni-kl.de
14112027Sjungma@eit.uni-kl.de// called by sc_trace
14212027Sjungma@eit.uni-kl.de
14312027Sjungma@eit.uni-kl.devoid
14412027Sjungma@eit.uni-kl.desc_in<sc_dt::sc_logic>::add_trace_internal( sc_trace_file* tf_,
14512027Sjungma@eit.uni-kl.de    const std::string& name_ ) const
14612027Sjungma@eit.uni-kl.de{
14712027Sjungma@eit.uni-kl.de    if( tf_ != 0 ) {
14812027Sjungma@eit.uni-kl.de	if( m_traces == 0 ) {
14912027Sjungma@eit.uni-kl.de	    m_traces = new sc_trace_params_vec;
15012027Sjungma@eit.uni-kl.de	}
15112027Sjungma@eit.uni-kl.de	m_traces->push_back( new sc_trace_params( tf_, name_ ) );
15212027Sjungma@eit.uni-kl.de    }
15312027Sjungma@eit.uni-kl.de}
15412027Sjungma@eit.uni-kl.de
15512027Sjungma@eit.uni-kl.devoid
15612027Sjungma@eit.uni-kl.desc_in<sc_dt::sc_logic>::add_trace( sc_trace_file* tf_,
15712027Sjungma@eit.uni-kl.de    const std::string& name_ ) const
15812027Sjungma@eit.uni-kl.de{
15912027Sjungma@eit.uni-kl.de    sc_deprecated_add_trace();
16012027Sjungma@eit.uni-kl.de    add_trace_internal(tf_, name_);
16112027Sjungma@eit.uni-kl.de}
16212027Sjungma@eit.uni-kl.de
16312027Sjungma@eit.uni-kl.devoid
16412027Sjungma@eit.uni-kl.desc_in<sc_dt::sc_logic>::remove_traces() const
16512027Sjungma@eit.uni-kl.de{
16612027Sjungma@eit.uni-kl.de    if( m_traces != 0 ) {
16712027Sjungma@eit.uni-kl.de	for( int i = m_traces->size() - 1; i >= 0; -- i ) {
16812027Sjungma@eit.uni-kl.de	    delete (*m_traces)[i];
16912027Sjungma@eit.uni-kl.de	}
17012027Sjungma@eit.uni-kl.de	delete m_traces;
17112027Sjungma@eit.uni-kl.de	m_traces = 0;
17212027Sjungma@eit.uni-kl.de    }
17312027Sjungma@eit.uni-kl.de}
17412027Sjungma@eit.uni-kl.de
17512027Sjungma@eit.uni-kl.de
17612027Sjungma@eit.uni-kl.de// called by pbind (for internal use only)
17712027Sjungma@eit.uni-kl.de
17812027Sjungma@eit.uni-kl.deint
17912027Sjungma@eit.uni-kl.desc_in<sc_dt::sc_logic>::vbind( sc_interface& interface_ )
18012027Sjungma@eit.uni-kl.de{
18112027Sjungma@eit.uni-kl.de    return sc_port_b<if_type>::vbind( interface_ );
18212027Sjungma@eit.uni-kl.de}
18312027Sjungma@eit.uni-kl.de
18412027Sjungma@eit.uni-kl.deint
18512027Sjungma@eit.uni-kl.desc_in<sc_dt::sc_logic>::vbind( sc_port_base& parent_ )
18612027Sjungma@eit.uni-kl.de{
18712027Sjungma@eit.uni-kl.de    in_port_type* in_parent = DCAST<in_port_type*>( &parent_ );
18812027Sjungma@eit.uni-kl.de    if( in_parent != 0 ) {
18912027Sjungma@eit.uni-kl.de	sc_port_base::bind( *in_parent );
19012027Sjungma@eit.uni-kl.de	return 0;
19112027Sjungma@eit.uni-kl.de    }
19212027Sjungma@eit.uni-kl.de    inout_port_type* inout_parent = DCAST<inout_port_type*>( &parent_ );
19312027Sjungma@eit.uni-kl.de    if( inout_parent != 0 ) {
19412027Sjungma@eit.uni-kl.de	sc_port_base::bind( *inout_parent );
19512027Sjungma@eit.uni-kl.de	return 0;
19612027Sjungma@eit.uni-kl.de    }
19712027Sjungma@eit.uni-kl.de    // type mismatch
19812027Sjungma@eit.uni-kl.de    return 2;
19912027Sjungma@eit.uni-kl.de}
20012027Sjungma@eit.uni-kl.de
20112027Sjungma@eit.uni-kl.de
20212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
20312027Sjungma@eit.uni-kl.de//  CLASS : sc_inout<bool>
20412027Sjungma@eit.uni-kl.de//
20512027Sjungma@eit.uni-kl.de//  Specialization of sc_inout<T> for type bool.
20612027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
20712027Sjungma@eit.uni-kl.de
20812027Sjungma@eit.uni-kl.de// destructor
20912027Sjungma@eit.uni-kl.de
21012027Sjungma@eit.uni-kl.desc_inout<bool>::~sc_inout()
21112027Sjungma@eit.uni-kl.de{
21212027Sjungma@eit.uni-kl.de    delete m_change_finder_p;
21312027Sjungma@eit.uni-kl.de    delete m_neg_finder_p;
21412027Sjungma@eit.uni-kl.de    delete m_pos_finder_p;
21512027Sjungma@eit.uni-kl.de    delete m_init_val;
21612027Sjungma@eit.uni-kl.de    remove_traces();
21712027Sjungma@eit.uni-kl.de}
21812027Sjungma@eit.uni-kl.de
21912027Sjungma@eit.uni-kl.de
22012027Sjungma@eit.uni-kl.de// set initial value (can also be called when port is not bound yet)
22112027Sjungma@eit.uni-kl.de
22212027Sjungma@eit.uni-kl.devoid
22312027Sjungma@eit.uni-kl.desc_inout<bool>::initialize( const data_type& value_ )
22412027Sjungma@eit.uni-kl.de{
22512027Sjungma@eit.uni-kl.de    inout_if_type* iface = DCAST<inout_if_type*>( get_interface() );
22612027Sjungma@eit.uni-kl.de    if( iface != 0 ) {
22712027Sjungma@eit.uni-kl.de	iface->write( value_ );
22812027Sjungma@eit.uni-kl.de    } else {
22912027Sjungma@eit.uni-kl.de	if( m_init_val == 0 ) {
23012027Sjungma@eit.uni-kl.de	    m_init_val = new data_type;
23112027Sjungma@eit.uni-kl.de	}
23212027Sjungma@eit.uni-kl.de	*m_init_val = value_;
23312027Sjungma@eit.uni-kl.de    }
23412027Sjungma@eit.uni-kl.de}
23512027Sjungma@eit.uni-kl.de
23612027Sjungma@eit.uni-kl.de
23712027Sjungma@eit.uni-kl.de// called when elaboration is done
23812027Sjungma@eit.uni-kl.de
23912027Sjungma@eit.uni-kl.devoid
24012027Sjungma@eit.uni-kl.desc_inout<bool>::end_of_elaboration()
24112027Sjungma@eit.uni-kl.de{
24212027Sjungma@eit.uni-kl.de    if( m_init_val != 0 ) {
24312027Sjungma@eit.uni-kl.de	write( *m_init_val );
24412027Sjungma@eit.uni-kl.de	delete m_init_val;
24512027Sjungma@eit.uni-kl.de	m_init_val = 0;
24612027Sjungma@eit.uni-kl.de    }
24712027Sjungma@eit.uni-kl.de    if( m_traces != 0 ) {
24812027Sjungma@eit.uni-kl.de	for( int i = 0; i < (int)m_traces->size(); ++ i ) {
24912027Sjungma@eit.uni-kl.de	    sc_trace_params* p = (*m_traces)[i];
25012027Sjungma@eit.uni-kl.de	    in_if_type* iface = DCAST<in_if_type*>( get_interface() );
25112027Sjungma@eit.uni-kl.de	    sc_trace( p->tf, iface->read(), p->name );
25212027Sjungma@eit.uni-kl.de	}
25312027Sjungma@eit.uni-kl.de	remove_traces();
25412027Sjungma@eit.uni-kl.de    }
25512027Sjungma@eit.uni-kl.de}
25612027Sjungma@eit.uni-kl.de
25712027Sjungma@eit.uni-kl.de
25812027Sjungma@eit.uni-kl.de// called by sc_trace
25912027Sjungma@eit.uni-kl.de
26012027Sjungma@eit.uni-kl.devoid
26112027Sjungma@eit.uni-kl.desc_inout<bool>::add_trace_internal( sc_trace_file* tf_,
26212027Sjungma@eit.uni-kl.de    const std::string& name_ ) const
26312027Sjungma@eit.uni-kl.de{
26412027Sjungma@eit.uni-kl.de    if( tf_ != 0 ) {
26512027Sjungma@eit.uni-kl.de	if( m_traces == 0 ) {
26612027Sjungma@eit.uni-kl.de	    m_traces = new sc_trace_params_vec;
26712027Sjungma@eit.uni-kl.de	}
26812027Sjungma@eit.uni-kl.de	m_traces->push_back( new sc_trace_params( tf_, name_ ) );
26912027Sjungma@eit.uni-kl.de    }
27012027Sjungma@eit.uni-kl.de}
27112027Sjungma@eit.uni-kl.de
27212027Sjungma@eit.uni-kl.devoid
27312027Sjungma@eit.uni-kl.desc_inout<bool>::add_trace( sc_trace_file* tf_,
27412027Sjungma@eit.uni-kl.de    const std::string& name_ ) const
27512027Sjungma@eit.uni-kl.de{
27612027Sjungma@eit.uni-kl.de    sc_deprecated_add_trace();
27712027Sjungma@eit.uni-kl.de    add_trace_internal(tf_, name_);
27812027Sjungma@eit.uni-kl.de}
27912027Sjungma@eit.uni-kl.de
28012027Sjungma@eit.uni-kl.devoid
28112027Sjungma@eit.uni-kl.desc_inout<bool>::remove_traces() const
28212027Sjungma@eit.uni-kl.de{
28312027Sjungma@eit.uni-kl.de    if( m_traces != 0 ) {
28412027Sjungma@eit.uni-kl.de	for( int i = m_traces->size() - 1; i >= 0; -- i ) {
28512027Sjungma@eit.uni-kl.de	    delete (*m_traces)[i];
28612027Sjungma@eit.uni-kl.de	}
28712027Sjungma@eit.uni-kl.de	delete m_traces;
28812027Sjungma@eit.uni-kl.de	m_traces = 0;
28912027Sjungma@eit.uni-kl.de    }
29012027Sjungma@eit.uni-kl.de}
29112027Sjungma@eit.uni-kl.de
29212027Sjungma@eit.uni-kl.de
29312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
29412027Sjungma@eit.uni-kl.de//  CLASS : sc_inout<sc_dt::sc_logic>
29512027Sjungma@eit.uni-kl.de//
29612027Sjungma@eit.uni-kl.de//  Specialization of sc_inout<T> for type sc_dt::sc_logic.
29712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
29812027Sjungma@eit.uni-kl.de
29912027Sjungma@eit.uni-kl.de// destructor
30012027Sjungma@eit.uni-kl.de
30112027Sjungma@eit.uni-kl.desc_inout<sc_dt::sc_logic>::~sc_inout()
30212027Sjungma@eit.uni-kl.de{
30312027Sjungma@eit.uni-kl.de    delete m_change_finder_p;
30412027Sjungma@eit.uni-kl.de    delete m_neg_finder_p;
30512027Sjungma@eit.uni-kl.de    delete m_pos_finder_p;
30612027Sjungma@eit.uni-kl.de    delete m_init_val;
30712027Sjungma@eit.uni-kl.de    remove_traces();
30812027Sjungma@eit.uni-kl.de}
30912027Sjungma@eit.uni-kl.de
31012027Sjungma@eit.uni-kl.de
31112027Sjungma@eit.uni-kl.de// set initial value (can also be called when port is not bound yet)
31212027Sjungma@eit.uni-kl.de
31312027Sjungma@eit.uni-kl.devoid
31412027Sjungma@eit.uni-kl.desc_inout<sc_dt::sc_logic>::initialize( const data_type& value_ )
31512027Sjungma@eit.uni-kl.de{
31612027Sjungma@eit.uni-kl.de    inout_if_type* iface = DCAST<inout_if_type*>( get_interface() );
31712027Sjungma@eit.uni-kl.de    if( iface != 0 ) {
31812027Sjungma@eit.uni-kl.de	iface->write( value_ );
31912027Sjungma@eit.uni-kl.de    } else {
32012027Sjungma@eit.uni-kl.de	if( m_init_val == 0 ) {
32112027Sjungma@eit.uni-kl.de	    m_init_val = new data_type;
32212027Sjungma@eit.uni-kl.de	}
32312027Sjungma@eit.uni-kl.de	*m_init_val = value_;
32412027Sjungma@eit.uni-kl.de    }
32512027Sjungma@eit.uni-kl.de}
32612027Sjungma@eit.uni-kl.de
32712027Sjungma@eit.uni-kl.de
32812027Sjungma@eit.uni-kl.de// called when elaboration is done
32912027Sjungma@eit.uni-kl.de
33012027Sjungma@eit.uni-kl.devoid
33112027Sjungma@eit.uni-kl.desc_inout<sc_dt::sc_logic>::end_of_elaboration()
33212027Sjungma@eit.uni-kl.de{
33312027Sjungma@eit.uni-kl.de    if( m_init_val != 0 ) {
33412027Sjungma@eit.uni-kl.de	write( *m_init_val );
33512027Sjungma@eit.uni-kl.de	delete m_init_val;
33612027Sjungma@eit.uni-kl.de	m_init_val = 0;
33712027Sjungma@eit.uni-kl.de    }
33812027Sjungma@eit.uni-kl.de    if( m_traces != 0 ) {
33912027Sjungma@eit.uni-kl.de	for( int i = 0; i < (int)m_traces->size(); ++ i ) {
34012027Sjungma@eit.uni-kl.de	    sc_trace_params* p = (*m_traces)[i];
34112027Sjungma@eit.uni-kl.de	    in_if_type* iface = DCAST<in_if_type*>( get_interface() );
34212027Sjungma@eit.uni-kl.de	    sc_trace( p->tf, iface->read(), p->name );
34312027Sjungma@eit.uni-kl.de	}
34412027Sjungma@eit.uni-kl.de	remove_traces();
34512027Sjungma@eit.uni-kl.de    }
34612027Sjungma@eit.uni-kl.de}
34712027Sjungma@eit.uni-kl.de
34812027Sjungma@eit.uni-kl.de
34912027Sjungma@eit.uni-kl.de// called by sc_trace
35012027Sjungma@eit.uni-kl.de
35112027Sjungma@eit.uni-kl.devoid
35212027Sjungma@eit.uni-kl.desc_inout<sc_dt::sc_logic>::add_trace_internal( sc_trace_file* tf_,
35312027Sjungma@eit.uni-kl.de			       const std::string& name_ ) const
35412027Sjungma@eit.uni-kl.de{
35512027Sjungma@eit.uni-kl.de    if( tf_ != 0 ) {
35612027Sjungma@eit.uni-kl.de	if( m_traces == 0 ) {
35712027Sjungma@eit.uni-kl.de	    m_traces = new sc_trace_params_vec;
35812027Sjungma@eit.uni-kl.de	}
35912027Sjungma@eit.uni-kl.de	m_traces->push_back( new sc_trace_params( tf_, name_ ) );
36012027Sjungma@eit.uni-kl.de    }
36112027Sjungma@eit.uni-kl.de}
36212027Sjungma@eit.uni-kl.de
36312027Sjungma@eit.uni-kl.de
36412027Sjungma@eit.uni-kl.devoid
36512027Sjungma@eit.uni-kl.desc_inout<sc_dt::sc_logic>::add_trace( sc_trace_file* tf_,
36612027Sjungma@eit.uni-kl.de			       const std::string& name_ ) const
36712027Sjungma@eit.uni-kl.de{
36812027Sjungma@eit.uni-kl.de    sc_deprecated_add_trace();
36912027Sjungma@eit.uni-kl.de    add_trace_internal(tf_, name_);
37012027Sjungma@eit.uni-kl.de}
37112027Sjungma@eit.uni-kl.de
37212027Sjungma@eit.uni-kl.devoid
37312027Sjungma@eit.uni-kl.desc_inout<sc_dt::sc_logic>::remove_traces() const
37412027Sjungma@eit.uni-kl.de{
37512027Sjungma@eit.uni-kl.de    if( m_traces != 0 ) {
37612027Sjungma@eit.uni-kl.de	for( int i = m_traces->size() - 1; i >= 0; -- i ) {
37712027Sjungma@eit.uni-kl.de	    delete (*m_traces)[i];
37812027Sjungma@eit.uni-kl.de	}
37912027Sjungma@eit.uni-kl.de	delete m_traces;
38012027Sjungma@eit.uni-kl.de	m_traces = 0;
38112027Sjungma@eit.uni-kl.de    }
38212027Sjungma@eit.uni-kl.de}
38312027Sjungma@eit.uni-kl.de
38412027Sjungma@eit.uni-kl.devoid sc_deprecated_add_trace()
38512027Sjungma@eit.uni-kl.de{
38612027Sjungma@eit.uni-kl.de    static bool warn_add_trace_deprecated=true;
38712027Sjungma@eit.uni-kl.de    if ( warn_add_trace_deprecated )
38812027Sjungma@eit.uni-kl.de    {
38912027Sjungma@eit.uni-kl.de        warn_add_trace_deprecated=false;
39012027Sjungma@eit.uni-kl.de	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
39112027Sjungma@eit.uni-kl.de	    "sc_signal<T>::addtrace() is deprecated");
39212027Sjungma@eit.uni-kl.de    }
39312027Sjungma@eit.uni-kl.de}
39412027Sjungma@eit.uni-kl.de} // namespace sc_core
39512027Sjungma@eit.uni-kl.de
39612027Sjungma@eit.uni-kl.de// $Log: sc_signal_ports.cpp,v $
39712027Sjungma@eit.uni-kl.de// Revision 1.3  2011/08/26 20:45:43  acg
39812027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
39912027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
40012027Sjungma@eit.uni-kl.de//
40112027Sjungma@eit.uni-kl.de// Revision 1.2  2011/02/18 20:23:45  acg
40212027Sjungma@eit.uni-kl.de//  Andy Goodrich: Copyright update.
40312027Sjungma@eit.uni-kl.de//
40412027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:04  acg
40512027Sjungma@eit.uni-kl.de// SystemC 2.3
40612027Sjungma@eit.uni-kl.de//
40712027Sjungma@eit.uni-kl.de// Revision 1.8  2006/05/08 17:52:47  acg
40812027Sjungma@eit.uni-kl.de//  Andy Goodrich:
40912027Sjungma@eit.uni-kl.de//    (1) added David Long's forward declarations for friend functions,
41012027Sjungma@eit.uni-kl.de//        methods, and operators to keep the Microsoft compiler happy.
41112027Sjungma@eit.uni-kl.de//    (2) Added delta_count() method to sc_prim_channel for use by
41212027Sjungma@eit.uni-kl.de//        sc_signal so that the friend declaration in sc_simcontext.h
41312027Sjungma@eit.uni-kl.de// 	   can be for a non-templated class (i.e., sc_prim_channel.)
41412027Sjungma@eit.uni-kl.de//
41512027Sjungma@eit.uni-kl.de// Revision 1.7  2006/04/18 18:01:26  acg
41612027Sjungma@eit.uni-kl.de//  Andy Goodrich: added an add_trace_internal() method to the various port
41712027Sjungma@eit.uni-kl.de//  classes so that sc_trace has something to call that won't emit an
41812027Sjungma@eit.uni-kl.de//  IEEE 1666 deprecation message.
41912027Sjungma@eit.uni-kl.de//
42012027Sjungma@eit.uni-kl.de// Revision 1.6  2006/02/02 23:42:37  acg
42112027Sjungma@eit.uni-kl.de//  Andy Goodrich: implemented a much better fix to the sc_event_finder
42212027Sjungma@eit.uni-kl.de//  proliferation problem. This new version allocates only a single event
42312027Sjungma@eit.uni-kl.de//  finder for each port for each type of event, e.g., pos(), neg(), and
42412027Sjungma@eit.uni-kl.de//  value_change(). The event finder persists as long as the port does,
42512027Sjungma@eit.uni-kl.de//  which is what the LRM dictates. Because only a single instance is
42612027Sjungma@eit.uni-kl.de//  allocated for each event type per port there is not a potential
42712027Sjungma@eit.uni-kl.de//  explosion of storage as was true in the 2.0.1/2.1 versions.
42812027Sjungma@eit.uni-kl.de//
42912027Sjungma@eit.uni-kl.de// Revision 1.5  2006/01/25 00:31:11  acg
43012027Sjungma@eit.uni-kl.de//  Andy Goodrich: Changed over to use a standard message id of
43112027Sjungma@eit.uni-kl.de//  SC_ID_IEEE_1666_DEPRECATION for all deprecation messages.
43212027Sjungma@eit.uni-kl.de//
43312027Sjungma@eit.uni-kl.de// Revision 1.4  2006/01/24 20:46:32  acg
43412027Sjungma@eit.uni-kl.de// Andy Goodrich: changes to eliminate use of deprecated features. For instance,
43512027Sjungma@eit.uni-kl.de// using notify(SC_ZERO_TIME) in place of notify_delayed().
43612027Sjungma@eit.uni-kl.de//
43712027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:47:42  acg
43812027Sjungma@eit.uni-kl.de// Added $Log command so that CVS comments are reproduced in the source.
43912027Sjungma@eit.uni-kl.de//
44012027Sjungma@eit.uni-kl.de
44112027Sjungma@eit.uni-kl.de// Taf!
442