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_port.h -- Base classes of all port classes.
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21
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#ifndef SC_PORT_H
3012027Sjungma@eit.uni-kl.de#define SC_PORT_H
3112027Sjungma@eit.uni-kl.de
3212027Sjungma@eit.uni-kl.de
3312027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_communication_ids.h"
3412027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_interface.h"
3512027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_event.h"
3612027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_object.h"
3712027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process.h"
3812027Sjungma@eit.uni-kl.de#include <typeinfo>
3912027Sjungma@eit.uni-kl.de
4012027Sjungma@eit.uni-kl.de#if ! defined( SC_DISABLE_VIRTUAL_BIND )
4112027Sjungma@eit.uni-kl.de#  define SC_VIRTUAL_ virtual
4212027Sjungma@eit.uni-kl.de#else
4312027Sjungma@eit.uni-kl.de#  define SC_VIRTUAL_ /* non-virtual */
4412027Sjungma@eit.uni-kl.de#endif
4512027Sjungma@eit.uni-kl.de
4612027Sjungma@eit.uni-kl.denamespace sc_core {
4712027Sjungma@eit.uni-kl.de
4812027Sjungma@eit.uni-kl.declass sc_event_finder;
4912027Sjungma@eit.uni-kl.de
5012027Sjungma@eit.uni-kl.destruct sc_bind_info;
5112027Sjungma@eit.uni-kl.de
5212027Sjungma@eit.uni-kl.deenum sc_port_policy
5312027Sjungma@eit.uni-kl.de{
5412027Sjungma@eit.uni-kl.de    SC_ONE_OR_MORE_BOUND,   // Default
5512027Sjungma@eit.uni-kl.de    SC_ZERO_OR_MORE_BOUND,
5612027Sjungma@eit.uni-kl.de    SC_ALL_BOUND
5712027Sjungma@eit.uni-kl.de};
5812027Sjungma@eit.uni-kl.de
5912027Sjungma@eit.uni-kl.de
6012027Sjungma@eit.uni-kl.de// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6112027Sjungma@eit.uni-kl.de//  BEWARE: Ports can only be created and bound during elaboration.
6212027Sjungma@eit.uni-kl.de// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6312027Sjungma@eit.uni-kl.de
6412027Sjungma@eit.uni-kl.de
6512027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
6612027Sjungma@eit.uni-kl.de//  CLASS : sc_port_base
6712027Sjungma@eit.uni-kl.de//
6812027Sjungma@eit.uni-kl.de//  Abstract base class for class sc_port_b.
6912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
7012027Sjungma@eit.uni-kl.de
7112027Sjungma@eit.uni-kl.declass sc_port_base
7212027Sjungma@eit.uni-kl.de: public sc_object
7312027Sjungma@eit.uni-kl.de{
7412027Sjungma@eit.uni-kl.de    friend class sc_module;
7512027Sjungma@eit.uni-kl.de    friend class sc_port_registry;
7612027Sjungma@eit.uni-kl.de    friend class sc_sensitive;
7712027Sjungma@eit.uni-kl.de    friend class sc_sensitive_pos;
7812027Sjungma@eit.uni-kl.de    friend class sc_sensitive_neg;
7912027Sjungma@eit.uni-kl.de
8012027Sjungma@eit.uni-kl.depublic:
8112027Sjungma@eit.uni-kl.de
8212027Sjungma@eit.uni-kl.de    // typedefs
8312027Sjungma@eit.uni-kl.de
8412027Sjungma@eit.uni-kl.de    typedef sc_port_base this_type;
8512027Sjungma@eit.uni-kl.de
8612027Sjungma@eit.uni-kl.depublic:
8712027Sjungma@eit.uni-kl.de
8812027Sjungma@eit.uni-kl.de    int bind_count();
8912027Sjungma@eit.uni-kl.de
9012027Sjungma@eit.uni-kl.de    // get the first interface without checking for nil
9112027Sjungma@eit.uni-kl.de    virtual       sc_interface* get_interface()       = 0;
9212027Sjungma@eit.uni-kl.de    virtual const sc_interface* get_interface() const = 0;
9312027Sjungma@eit.uni-kl.de
9412027Sjungma@eit.uni-kl.de    virtual const char* kind() const
9512027Sjungma@eit.uni-kl.de        { return "sc_port_base"; }
9612027Sjungma@eit.uni-kl.de
9712027Sjungma@eit.uni-kl.deprotected:
9812027Sjungma@eit.uni-kl.de
9912027Sjungma@eit.uni-kl.de    // constructors
10012027Sjungma@eit.uni-kl.de    explicit sc_port_base( int max_size_,
10112027Sjungma@eit.uni-kl.de	    sc_port_policy policy=SC_ONE_OR_MORE_BOUND );
10212027Sjungma@eit.uni-kl.de    sc_port_base( const char* name_, int max_size_,
10312027Sjungma@eit.uni-kl.de		  sc_port_policy policy=SC_ONE_OR_MORE_BOUND );
10412027Sjungma@eit.uni-kl.de
10512027Sjungma@eit.uni-kl.de    // destructor
10612027Sjungma@eit.uni-kl.de    virtual ~sc_port_base();
10712027Sjungma@eit.uni-kl.de
10812027Sjungma@eit.uni-kl.de    // bind interface to this port
10912027Sjungma@eit.uni-kl.de    void bind( sc_interface& interface_ );
11012027Sjungma@eit.uni-kl.de
11112027Sjungma@eit.uni-kl.de    // bind parent port to this port
11212027Sjungma@eit.uni-kl.de    void bind( this_type& parent_ );
11312027Sjungma@eit.uni-kl.de
11412027Sjungma@eit.uni-kl.de    // called by pbind (for internal use only)
11512027Sjungma@eit.uni-kl.de    virtual int vbind( sc_interface& ) = 0;
11612027Sjungma@eit.uni-kl.de    virtual int vbind( sc_port_base& ) = 0;
11712027Sjungma@eit.uni-kl.de
11812027Sjungma@eit.uni-kl.de    // called by complete_binding (for internal use only)
11912027Sjungma@eit.uni-kl.de    virtual void add_interface( sc_interface* ) = 0;
12012027Sjungma@eit.uni-kl.de	virtual int interface_count() = 0;
12112027Sjungma@eit.uni-kl.de    virtual const char* if_typename() const = 0;
12212027Sjungma@eit.uni-kl.de
12312027Sjungma@eit.uni-kl.de    // called by construction_done (does nothing by default)
12412027Sjungma@eit.uni-kl.de    virtual void before_end_of_elaboration();
12512027Sjungma@eit.uni-kl.de
12612027Sjungma@eit.uni-kl.de    // called by elaboration_done (does nothing)
12712027Sjungma@eit.uni-kl.de    virtual void end_of_elaboration();
12812027Sjungma@eit.uni-kl.de
12912027Sjungma@eit.uni-kl.de    // called by start_simulation (does nothing by default)
13012027Sjungma@eit.uni-kl.de    virtual void start_of_simulation();
13112027Sjungma@eit.uni-kl.de
13212027Sjungma@eit.uni-kl.de    // called by simulation_done (does nothing by default)
13312027Sjungma@eit.uni-kl.de    virtual void end_of_simulation();
13412027Sjungma@eit.uni-kl.de
13512027Sjungma@eit.uni-kl.de    // error reporting
13612027Sjungma@eit.uni-kl.de    void report_error( const char* id, const char* add_msg = 0) const;
13712027Sjungma@eit.uni-kl.de
13812027Sjungma@eit.uni-kl.deprotected:
13912027Sjungma@eit.uni-kl.de    // called by the sc_sensitive* classes
14012027Sjungma@eit.uni-kl.de    virtual void make_sensitive( sc_thread_handle, sc_event_finder* = 0 ) const;
14112027Sjungma@eit.uni-kl.de    virtual void make_sensitive( sc_method_handle, sc_event_finder* = 0 ) const;
14212027Sjungma@eit.uni-kl.de    void add_static_event(
14312027Sjungma@eit.uni-kl.de		sc_method_handle process_p, const sc_event& event) const;
14412027Sjungma@eit.uni-kl.de    void add_static_event(
14512027Sjungma@eit.uni-kl.de		sc_thread_handle process_p, const sc_event& event) const;
14612027Sjungma@eit.uni-kl.de
14712027Sjungma@eit.uni-kl.deprivate:
14812027Sjungma@eit.uni-kl.de
14912027Sjungma@eit.uni-kl.de    // called by class sc_module for positional binding
15012027Sjungma@eit.uni-kl.de    int pbind( sc_interface& );
15112027Sjungma@eit.uni-kl.de    int pbind( sc_port_base& );
15212027Sjungma@eit.uni-kl.de
15312027Sjungma@eit.uni-kl.de
15412027Sjungma@eit.uni-kl.de    // support methods
15512027Sjungma@eit.uni-kl.de    int first_parent();
15612027Sjungma@eit.uni-kl.de    void insert_parent( int );
15712027Sjungma@eit.uni-kl.de
15812027Sjungma@eit.uni-kl.de    // called when construction is done
15912027Sjungma@eit.uni-kl.de    void construction_done();
16012027Sjungma@eit.uni-kl.de
16112027Sjungma@eit.uni-kl.de    // called when elaboration is done
16212027Sjungma@eit.uni-kl.de    void complete_binding();
16312027Sjungma@eit.uni-kl.de    void elaboration_done();
16412027Sjungma@eit.uni-kl.de
16512027Sjungma@eit.uni-kl.de    // called before simulation starts
16612027Sjungma@eit.uni-kl.de    void start_simulation();
16712027Sjungma@eit.uni-kl.de
16812027Sjungma@eit.uni-kl.de    // called after simulation ends
16912027Sjungma@eit.uni-kl.de    void simulation_done();
17012027Sjungma@eit.uni-kl.de
17112027Sjungma@eit.uni-kl.deprotected:
17212027Sjungma@eit.uni-kl.de
17312027Sjungma@eit.uni-kl.de    sc_bind_info* m_bind_info;
17412027Sjungma@eit.uni-kl.de
17512027Sjungma@eit.uni-kl.deprivate:
17612027Sjungma@eit.uni-kl.de
17712027Sjungma@eit.uni-kl.de    // disabled
17812027Sjungma@eit.uni-kl.de    sc_port_base();
17912027Sjungma@eit.uni-kl.de    sc_port_base( const this_type& );
18012027Sjungma@eit.uni-kl.de    this_type& operator = ( const this_type& );
18112027Sjungma@eit.uni-kl.de};
18212027Sjungma@eit.uni-kl.de
18312027Sjungma@eit.uni-kl.de
18412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
18512027Sjungma@eit.uni-kl.de//  CLASS : sc_port_registry
18612027Sjungma@eit.uni-kl.de//
18712027Sjungma@eit.uni-kl.de//  Registry for all ports.
18812027Sjungma@eit.uni-kl.de//  FOR INTERNAL USE ONLY!
18912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
19012027Sjungma@eit.uni-kl.de
19112027Sjungma@eit.uni-kl.declass sc_port_registry
19212027Sjungma@eit.uni-kl.de{
19312027Sjungma@eit.uni-kl.de    friend class sc_simcontext;
19412027Sjungma@eit.uni-kl.de
19512027Sjungma@eit.uni-kl.depublic:
19612027Sjungma@eit.uni-kl.de
19712027Sjungma@eit.uni-kl.de    void insert( sc_port_base* );
19812027Sjungma@eit.uni-kl.de    void remove( sc_port_base* );
19912027Sjungma@eit.uni-kl.de
20012027Sjungma@eit.uni-kl.de    int size() const
20112027Sjungma@eit.uni-kl.de        { return m_port_vec.size(); }
20212027Sjungma@eit.uni-kl.de
20312027Sjungma@eit.uni-kl.deprivate:
20412027Sjungma@eit.uni-kl.de
20512027Sjungma@eit.uni-kl.de    // constructor
20612027Sjungma@eit.uni-kl.de    explicit sc_port_registry( sc_simcontext& simc_ );
20712027Sjungma@eit.uni-kl.de
20812027Sjungma@eit.uni-kl.de    // destructor
20912027Sjungma@eit.uni-kl.de    ~sc_port_registry();
21012027Sjungma@eit.uni-kl.de
21112027Sjungma@eit.uni-kl.de    // called when by construction_done and elaboration done
21212027Sjungma@eit.uni-kl.de    void complete_binding();
21312027Sjungma@eit.uni-kl.de
21412027Sjungma@eit.uni-kl.de    // called when construction is done
21512027Sjungma@eit.uni-kl.de    bool construction_done();
21612027Sjungma@eit.uni-kl.de
21712027Sjungma@eit.uni-kl.de    // called when elaboration is done
21812027Sjungma@eit.uni-kl.de    void elaboration_done();
21912027Sjungma@eit.uni-kl.de
22012027Sjungma@eit.uni-kl.de    // called before simulation starts
22112027Sjungma@eit.uni-kl.de    void start_simulation();
22212027Sjungma@eit.uni-kl.de
22312027Sjungma@eit.uni-kl.de    // called after simulation ends
22412027Sjungma@eit.uni-kl.de    void simulation_done();
22512027Sjungma@eit.uni-kl.de
22612027Sjungma@eit.uni-kl.de    static void replace_port( sc_port_registry* );
22712027Sjungma@eit.uni-kl.de
22812027Sjungma@eit.uni-kl.deprivate:
22912027Sjungma@eit.uni-kl.de
23012027Sjungma@eit.uni-kl.de    int                         m_construction_done;
23112027Sjungma@eit.uni-kl.de    std::vector<sc_port_base*>  m_port_vec;
23212027Sjungma@eit.uni-kl.de    sc_simcontext*              m_simc;
23312027Sjungma@eit.uni-kl.de
23412027Sjungma@eit.uni-kl.deprivate:
23512027Sjungma@eit.uni-kl.de
23612027Sjungma@eit.uni-kl.de    // disabled
23712027Sjungma@eit.uni-kl.de    sc_port_registry();
23812027Sjungma@eit.uni-kl.de    sc_port_registry( const sc_port_registry& );
23912027Sjungma@eit.uni-kl.de    sc_port_registry& operator = ( const sc_port_registry& );
24012027Sjungma@eit.uni-kl.de};
24112027Sjungma@eit.uni-kl.de
24212027Sjungma@eit.uni-kl.de
24312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
24412027Sjungma@eit.uni-kl.de//  CLASS : sc_port_b
24512027Sjungma@eit.uni-kl.de//
24612027Sjungma@eit.uni-kl.de//  Abstract base class for class sc_port.
24712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
24812027Sjungma@eit.uni-kl.de
24912027Sjungma@eit.uni-kl.detemplate <class IF>
25012027Sjungma@eit.uni-kl.declass sc_port_b
25112027Sjungma@eit.uni-kl.de: public sc_port_base
25212027Sjungma@eit.uni-kl.de{
25312027Sjungma@eit.uni-kl.depublic:
25412027Sjungma@eit.uni-kl.de
25512027Sjungma@eit.uni-kl.de    friend class sc_sensitive;
25612027Sjungma@eit.uni-kl.de    friend class sc_sensitive_neg;
25712027Sjungma@eit.uni-kl.de    friend class sc_sensitive_pos;
25812027Sjungma@eit.uni-kl.de
25912027Sjungma@eit.uni-kl.de    // typedefs
26012027Sjungma@eit.uni-kl.de
26112027Sjungma@eit.uni-kl.de    typedef sc_port_base  base_type;
26212027Sjungma@eit.uni-kl.de    typedef sc_port_b<IF> this_type;
26312027Sjungma@eit.uni-kl.de    typedef this_type     port_type;
26412027Sjungma@eit.uni-kl.de
26512027Sjungma@eit.uni-kl.depublic:
26612027Sjungma@eit.uni-kl.de
26712027Sjungma@eit.uni-kl.de    // bind an interface of type IF to this port
26812027Sjungma@eit.uni-kl.de
26912027Sjungma@eit.uni-kl.de    SC_VIRTUAL_ void bind( IF& interface_ )
27012027Sjungma@eit.uni-kl.de	{ base_type::bind( interface_ ); }
27112027Sjungma@eit.uni-kl.de
27212027Sjungma@eit.uni-kl.de    void operator () ( IF& interface_ )
27312027Sjungma@eit.uni-kl.de	{ this->bind( interface_ ); }
27412027Sjungma@eit.uni-kl.de
27512027Sjungma@eit.uni-kl.de
27612027Sjungma@eit.uni-kl.de    // bind a parent port with type IF to this port
27712027Sjungma@eit.uni-kl.de
27812027Sjungma@eit.uni-kl.de    SC_VIRTUAL_ void bind( port_type& parent_ )
27912027Sjungma@eit.uni-kl.de	{ base_type::bind( parent_ ); }
28012027Sjungma@eit.uni-kl.de
28112027Sjungma@eit.uni-kl.de    void operator () ( port_type& parent_ )
28212027Sjungma@eit.uni-kl.de	{ this->bind( parent_ ); }
28312027Sjungma@eit.uni-kl.de
28412027Sjungma@eit.uni-kl.de
28512027Sjungma@eit.uni-kl.de    // number of connected interfaces
28612027Sjungma@eit.uni-kl.de
28712027Sjungma@eit.uni-kl.de    int size() const
28812027Sjungma@eit.uni-kl.de	{ return m_interface_vec.size(); }
28912027Sjungma@eit.uni-kl.de
29012027Sjungma@eit.uni-kl.de
29112027Sjungma@eit.uni-kl.de    // allow to call methods provided by the first interface
29212027Sjungma@eit.uni-kl.de    IF* operator -> ();
29312027Sjungma@eit.uni-kl.de    const IF* operator -> () const;
29412027Sjungma@eit.uni-kl.de
29512027Sjungma@eit.uni-kl.de
29612027Sjungma@eit.uni-kl.de    // allow to call methods provided by interface at index
29712027Sjungma@eit.uni-kl.de    inline const IF* get_interface( int iface_i ) const;
29812027Sjungma@eit.uni-kl.de    inline IF* get_interface( int iface_i );
29912027Sjungma@eit.uni-kl.de    IF* operator [] ( int index_ )
30012027Sjungma@eit.uni-kl.de        { return get_interface( index_ ); }
30112027Sjungma@eit.uni-kl.de    const IF* operator [] ( int index_ ) const
30212027Sjungma@eit.uni-kl.de        { return get_interface( index_ ); }
30312027Sjungma@eit.uni-kl.de
30412027Sjungma@eit.uni-kl.de
30512027Sjungma@eit.uni-kl.de    // get the first interface without checking for nil
30612027Sjungma@eit.uni-kl.de
30712027Sjungma@eit.uni-kl.de    virtual sc_interface* get_interface()
30812027Sjungma@eit.uni-kl.de        { return m_interface; }
30912027Sjungma@eit.uni-kl.de
31012027Sjungma@eit.uni-kl.de    virtual const sc_interface* get_interface() const
31112027Sjungma@eit.uni-kl.de        { return m_interface; }
31212027Sjungma@eit.uni-kl.de
31312027Sjungma@eit.uni-kl.deprotected:
31412027Sjungma@eit.uni-kl.de
31512027Sjungma@eit.uni-kl.de    // constructors
31612027Sjungma@eit.uni-kl.de
31712027Sjungma@eit.uni-kl.de    explicit sc_port_b( int max_size_,
31812027Sjungma@eit.uni-kl.de	                sc_port_policy policy=SC_ONE_OR_MORE_BOUND ) :
31912027Sjungma@eit.uni-kl.de	base_type( max_size_, policy ), m_interface( 0 ), m_interface_vec()
32012027Sjungma@eit.uni-kl.de	{}
32112027Sjungma@eit.uni-kl.de
32212027Sjungma@eit.uni-kl.de    sc_port_b( const char* name_, int max_size_,
32312027Sjungma@eit.uni-kl.de               sc_port_policy policy=SC_ONE_OR_MORE_BOUND ) :
32412027Sjungma@eit.uni-kl.de	base_type( name_, max_size_, policy ), m_interface( 0 ),
32512027Sjungma@eit.uni-kl.de	m_interface_vec()
32612027Sjungma@eit.uni-kl.de	{}
32712027Sjungma@eit.uni-kl.de
32812027Sjungma@eit.uni-kl.de
32912027Sjungma@eit.uni-kl.de    // destructor (does nothing)
33012027Sjungma@eit.uni-kl.de
33112027Sjungma@eit.uni-kl.de    virtual ~sc_port_b()
33212027Sjungma@eit.uni-kl.de	{}
33312027Sjungma@eit.uni-kl.de
33412027Sjungma@eit.uni-kl.de
33512027Sjungma@eit.uni-kl.de    // called by pbind (for internal use only)
33612027Sjungma@eit.uni-kl.de    virtual int vbind( sc_interface& );
33712027Sjungma@eit.uni-kl.de    virtual int vbind( sc_port_base& );
33812027Sjungma@eit.uni-kl.de
33912027Sjungma@eit.uni-kl.deprotected:
34012027Sjungma@eit.uni-kl.de
34112027Sjungma@eit.uni-kl.de    // called by the sc_sensitive* classes
34212027Sjungma@eit.uni-kl.de    virtual void make_sensitive( sc_thread_handle, sc_event_finder* = 0 ) const;
34312027Sjungma@eit.uni-kl.de    virtual void make_sensitive( sc_method_handle, sc_event_finder* = 0 ) const;
34412027Sjungma@eit.uni-kl.de
34512027Sjungma@eit.uni-kl.deprivate:
34612027Sjungma@eit.uni-kl.de
34712027Sjungma@eit.uni-kl.de    // called by complete_binding (for internal use only)
34812027Sjungma@eit.uni-kl.de    virtual void add_interface( sc_interface* );
34912027Sjungma@eit.uni-kl.de    virtual const char* if_typename() const;
35012027Sjungma@eit.uni-kl.de	virtual int interface_count();
35112027Sjungma@eit.uni-kl.de
35212027Sjungma@eit.uni-kl.de    // disabled
35312027Sjungma@eit.uni-kl.de    sc_port_b();
35412027Sjungma@eit.uni-kl.de    sc_port_b( const this_type& );
35512027Sjungma@eit.uni-kl.de    this_type& operator = ( const this_type& );
35612027Sjungma@eit.uni-kl.de
35712027Sjungma@eit.uni-kl.deprivate:
35812027Sjungma@eit.uni-kl.de
35912027Sjungma@eit.uni-kl.de    IF*              m_interface;	// first interface in interface vec
36012027Sjungma@eit.uni-kl.de    std::vector<IF*> m_interface_vec;
36112027Sjungma@eit.uni-kl.de};
36212027Sjungma@eit.uni-kl.de
36312027Sjungma@eit.uni-kl.de
36412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
36512027Sjungma@eit.uni-kl.de//  CLASS : sc_port
36612027Sjungma@eit.uni-kl.de//
36712027Sjungma@eit.uni-kl.de//  Generic port class and base class for other port classes.
36812027Sjungma@eit.uni-kl.de//  N is the maximum number of channels (with interface IF) that can be bound
36912027Sjungma@eit.uni-kl.de//  to this port. N <= 0 means no maximum.
37012027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
37112027Sjungma@eit.uni-kl.de
37212027Sjungma@eit.uni-kl.deextern void sc_warn_port_constructor();
37312027Sjungma@eit.uni-kl.de
37412027Sjungma@eit.uni-kl.detemplate <class IF, int N = 1, sc_port_policy P=SC_ONE_OR_MORE_BOUND>
37512027Sjungma@eit.uni-kl.declass sc_port
37612027Sjungma@eit.uni-kl.de: public sc_port_b<IF>
37712027Sjungma@eit.uni-kl.de{
37812027Sjungma@eit.uni-kl.de    // typdefs
37912027Sjungma@eit.uni-kl.de
38012027Sjungma@eit.uni-kl.de    typedef sc_port_b<IF> base_type;
38112027Sjungma@eit.uni-kl.de    typedef sc_port<IF,N,P> this_type;
38212027Sjungma@eit.uni-kl.de
38312027Sjungma@eit.uni-kl.depublic:
38412027Sjungma@eit.uni-kl.de
38512027Sjungma@eit.uni-kl.de    // constructors
38612027Sjungma@eit.uni-kl.de
38712027Sjungma@eit.uni-kl.de    sc_port()
38812027Sjungma@eit.uni-kl.de	: base_type( N, P )
38912027Sjungma@eit.uni-kl.de	{}
39012027Sjungma@eit.uni-kl.de
39112027Sjungma@eit.uni-kl.de    explicit sc_port( const char* name_ )
39212027Sjungma@eit.uni-kl.de	: base_type( name_, N, P )
39312027Sjungma@eit.uni-kl.de	{}
39412027Sjungma@eit.uni-kl.de
39512027Sjungma@eit.uni-kl.de    explicit sc_port( IF& interface_ )
39612027Sjungma@eit.uni-kl.de	: base_type( N, P )
39712027Sjungma@eit.uni-kl.de	{ sc_warn_port_constructor(); base_type::bind( interface_ ); }
39812027Sjungma@eit.uni-kl.de
39912027Sjungma@eit.uni-kl.de    sc_port( const char* name_, IF& interface_ )
40012027Sjungma@eit.uni-kl.de	: base_type( name_, N, P )
40112027Sjungma@eit.uni-kl.de	{ sc_warn_port_constructor(); base_type::bind( interface_ ); }
40212027Sjungma@eit.uni-kl.de
40312027Sjungma@eit.uni-kl.de    explicit sc_port( base_type& parent_ )
40412027Sjungma@eit.uni-kl.de	: base_type( N, P )
40512027Sjungma@eit.uni-kl.de	{ sc_warn_port_constructor(); base_type::bind( parent_ ); }
40612027Sjungma@eit.uni-kl.de
40712027Sjungma@eit.uni-kl.de    sc_port( const char* name_, base_type& parent_ )
40812027Sjungma@eit.uni-kl.de	: base_type( name_, N, P )
40912027Sjungma@eit.uni-kl.de	{ sc_warn_port_constructor(); base_type::bind( parent_ ); }
41012027Sjungma@eit.uni-kl.de
41112027Sjungma@eit.uni-kl.de    sc_port( this_type& parent_ )
41212027Sjungma@eit.uni-kl.de	: base_type( N, P )
41312027Sjungma@eit.uni-kl.de	{ sc_warn_port_constructor(); base_type::bind( parent_ ); }
41412027Sjungma@eit.uni-kl.de
41512027Sjungma@eit.uni-kl.de    sc_port( const char* name_, this_type& parent_ )
41612027Sjungma@eit.uni-kl.de	: base_type( name_, N, P )
41712027Sjungma@eit.uni-kl.de	{ sc_warn_port_constructor(); base_type::bind( parent_ ); }
41812027Sjungma@eit.uni-kl.de
41912027Sjungma@eit.uni-kl.de
42012027Sjungma@eit.uni-kl.de    // destructor (does nothing)
42112027Sjungma@eit.uni-kl.de
42212027Sjungma@eit.uni-kl.de    virtual ~sc_port()
42312027Sjungma@eit.uni-kl.de	{}
42412027Sjungma@eit.uni-kl.de
42512027Sjungma@eit.uni-kl.de    virtual const char* kind() const
42612027Sjungma@eit.uni-kl.de        { return "sc_port"; }
42712027Sjungma@eit.uni-kl.de
42812027Sjungma@eit.uni-kl.deprivate:
42912027Sjungma@eit.uni-kl.de
43012027Sjungma@eit.uni-kl.de    // disabled
43112027Sjungma@eit.uni-kl.de    sc_port( const this_type& );
43212027Sjungma@eit.uni-kl.de    this_type& operator = ( const this_type& );
43312027Sjungma@eit.uni-kl.de};
43412027Sjungma@eit.uni-kl.de
43512027Sjungma@eit.uni-kl.de
43612027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
43712027Sjungma@eit.uni-kl.de
43812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
43912027Sjungma@eit.uni-kl.de//  CLASS : sc_port_b
44012027Sjungma@eit.uni-kl.de//
44112027Sjungma@eit.uni-kl.de//  Abstract base class for class sc_port.
44212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
44312027Sjungma@eit.uni-kl.de
44412027Sjungma@eit.uni-kl.de// allow to call methods provided by the first interface
44512027Sjungma@eit.uni-kl.de
44612027Sjungma@eit.uni-kl.detemplate <class IF>
44712027Sjungma@eit.uni-kl.deinline
44812027Sjungma@eit.uni-kl.deIF*
44912027Sjungma@eit.uni-kl.desc_port_b<IF>::operator -> ()
45012027Sjungma@eit.uni-kl.de{
45112027Sjungma@eit.uni-kl.de    if( m_interface == 0 ) {
45212027Sjungma@eit.uni-kl.de	report_error( SC_ID_GET_IF_, "port is not bound" );
45312027Sjungma@eit.uni-kl.de    }
45412027Sjungma@eit.uni-kl.de    return m_interface;
45512027Sjungma@eit.uni-kl.de}
45612027Sjungma@eit.uni-kl.de
45712027Sjungma@eit.uni-kl.detemplate <class IF>
45812027Sjungma@eit.uni-kl.deinline
45912027Sjungma@eit.uni-kl.deconst IF*
46012027Sjungma@eit.uni-kl.desc_port_b<IF>::operator -> () const
46112027Sjungma@eit.uni-kl.de{
46212027Sjungma@eit.uni-kl.de    if( m_interface == 0 ) {
46312027Sjungma@eit.uni-kl.de	report_error( SC_ID_GET_IF_, "port is not bound" );
46412027Sjungma@eit.uni-kl.de    }
46512027Sjungma@eit.uni-kl.de    return m_interface;
46612027Sjungma@eit.uni-kl.de}
46712027Sjungma@eit.uni-kl.de
46812027Sjungma@eit.uni-kl.de
46912027Sjungma@eit.uni-kl.de// allow to call methods provided by interface at index
47012027Sjungma@eit.uni-kl.de//
47112027Sjungma@eit.uni-kl.de// note that we special-case index of zero, since the method may be
47212027Sjungma@eit.uni-kl.de// called before binding has occurred, and we need to return a zero
47312027Sjungma@eit.uni-kl.de// in that case not an error.
47412027Sjungma@eit.uni-kl.de
47512027Sjungma@eit.uni-kl.detemplate <class IF>
47612027Sjungma@eit.uni-kl.deinline
47712027Sjungma@eit.uni-kl.deIF*
47812027Sjungma@eit.uni-kl.desc_port_b<IF>::get_interface( int index_ )
47912027Sjungma@eit.uni-kl.de{
48012027Sjungma@eit.uni-kl.de    if ( index_ == 0 ) {
48112027Sjungma@eit.uni-kl.de    	return m_interface;
48212027Sjungma@eit.uni-kl.de    }
48312027Sjungma@eit.uni-kl.de    else if( index_ < 0 || index_ >= size() ) {
48412027Sjungma@eit.uni-kl.de	report_error( SC_ID_GET_IF_, "index out of range" );
48512027Sjungma@eit.uni-kl.de    }
48612027Sjungma@eit.uni-kl.de    return m_interface_vec[index_];
48712027Sjungma@eit.uni-kl.de}
48812027Sjungma@eit.uni-kl.de
48912027Sjungma@eit.uni-kl.detemplate <class IF>
49012027Sjungma@eit.uni-kl.deinline
49112027Sjungma@eit.uni-kl.deconst IF*
49212027Sjungma@eit.uni-kl.desc_port_b<IF>::get_interface( int index_ ) const
49312027Sjungma@eit.uni-kl.de{
49412027Sjungma@eit.uni-kl.de    if ( index_ == 0 ) {
49512027Sjungma@eit.uni-kl.de    	return m_interface;
49612027Sjungma@eit.uni-kl.de    }
49712027Sjungma@eit.uni-kl.de    else if( index_ < 0 || index_ >= size() ) {
49812027Sjungma@eit.uni-kl.de	report_error( SC_ID_GET_IF_, "index out of range" );
49912027Sjungma@eit.uni-kl.de    }
50012027Sjungma@eit.uni-kl.de    return m_interface_vec[index_];
50112027Sjungma@eit.uni-kl.de}
50212027Sjungma@eit.uni-kl.de
50312027Sjungma@eit.uni-kl.de
50412027Sjungma@eit.uni-kl.de// called by pbind (for internal use only)
50512027Sjungma@eit.uni-kl.de
50612027Sjungma@eit.uni-kl.detemplate <class IF>
50712027Sjungma@eit.uni-kl.deinline
50812027Sjungma@eit.uni-kl.deint
50912027Sjungma@eit.uni-kl.desc_port_b<IF>::vbind( sc_interface& interface_ )
51012027Sjungma@eit.uni-kl.de{
51112027Sjungma@eit.uni-kl.de    IF* iface = DCAST<IF*>( &interface_ );
51212027Sjungma@eit.uni-kl.de    if( iface == 0 ) {
51312027Sjungma@eit.uni-kl.de	// type mismatch
51412027Sjungma@eit.uni-kl.de	return 2;
51512027Sjungma@eit.uni-kl.de    }
51612027Sjungma@eit.uni-kl.de    base_type::bind( *iface );
51712027Sjungma@eit.uni-kl.de    return 0;
51812027Sjungma@eit.uni-kl.de}
51912027Sjungma@eit.uni-kl.de
52012027Sjungma@eit.uni-kl.detemplate <class IF>
52112027Sjungma@eit.uni-kl.deinline
52212027Sjungma@eit.uni-kl.deint
52312027Sjungma@eit.uni-kl.desc_port_b<IF>::vbind( sc_port_base& parent_ )
52412027Sjungma@eit.uni-kl.de{
52512027Sjungma@eit.uni-kl.de    this_type* parent = DCAST<this_type*>( &parent_ );
52612027Sjungma@eit.uni-kl.de    if( parent == 0 ) {
52712027Sjungma@eit.uni-kl.de	// type mismatch
52812027Sjungma@eit.uni-kl.de	return 2;
52912027Sjungma@eit.uni-kl.de    }
53012027Sjungma@eit.uni-kl.de    base_type::bind( *parent );
53112027Sjungma@eit.uni-kl.de    return 0;
53212027Sjungma@eit.uni-kl.de}
53312027Sjungma@eit.uni-kl.de
53412027Sjungma@eit.uni-kl.de
53512027Sjungma@eit.uni-kl.de// called by complete_binding (for internal use only)
53612027Sjungma@eit.uni-kl.de
53712027Sjungma@eit.uni-kl.detemplate <class IF>
53812027Sjungma@eit.uni-kl.deinline
53912027Sjungma@eit.uni-kl.devoid
54012027Sjungma@eit.uni-kl.desc_port_b<IF>::add_interface( sc_interface* interface_ )
54112027Sjungma@eit.uni-kl.de{
54212027Sjungma@eit.uni-kl.de    IF* iface = DCAST<IF*>( interface_ );
54312027Sjungma@eit.uni-kl.de    assert( iface != 0 );
54412027Sjungma@eit.uni-kl.de
54512027Sjungma@eit.uni-kl.de    // make sure that the interface is not already bound:
54612027Sjungma@eit.uni-kl.de
54712027Sjungma@eit.uni-kl.de    int size = m_interface_vec.size();
54812027Sjungma@eit.uni-kl.de    for ( int i = 0; i < size; i++ )
54912027Sjungma@eit.uni-kl.de    {
55012027Sjungma@eit.uni-kl.de    	if ( iface == m_interface_vec[i] )
55112027Sjungma@eit.uni-kl.de	{
55212027Sjungma@eit.uni-kl.de	    report_error( SC_ID_BIND_IF_TO_PORT_,
55312027Sjungma@eit.uni-kl.de	    	"interface already bound to port" );
55412027Sjungma@eit.uni-kl.de	}
55512027Sjungma@eit.uni-kl.de    }
55612027Sjungma@eit.uni-kl.de
55712027Sjungma@eit.uni-kl.de    // "bind" the interface and make sure our short cut for 0 is set up.
55812027Sjungma@eit.uni-kl.de
55912027Sjungma@eit.uni-kl.de    m_interface_vec.push_back( iface );
56012027Sjungma@eit.uni-kl.de    m_interface = m_interface_vec[0];
56112027Sjungma@eit.uni-kl.de}
56212027Sjungma@eit.uni-kl.de
56312027Sjungma@eit.uni-kl.detemplate <class IF>
56412027Sjungma@eit.uni-kl.deinline
56512027Sjungma@eit.uni-kl.deconst char*
56612027Sjungma@eit.uni-kl.desc_port_b<IF>::if_typename() const
56712027Sjungma@eit.uni-kl.de{
56812027Sjungma@eit.uni-kl.de    return typeid( IF ).name();
56912027Sjungma@eit.uni-kl.de}
57012027Sjungma@eit.uni-kl.de
57112027Sjungma@eit.uni-kl.detemplate <class IF>
57212027Sjungma@eit.uni-kl.deinline
57312027Sjungma@eit.uni-kl.deint
57412027Sjungma@eit.uni-kl.desc_port_b<IF>::interface_count()
57512027Sjungma@eit.uni-kl.de{
57612027Sjungma@eit.uni-kl.de	return m_interface_vec.size();
57712027Sjungma@eit.uni-kl.de}
57812027Sjungma@eit.uni-kl.de
57912027Sjungma@eit.uni-kl.detemplate <class IF>
58012027Sjungma@eit.uni-kl.devoid
58112027Sjungma@eit.uni-kl.desc_port_b<IF>::make_sensitive( sc_thread_handle handle_p,
58212027Sjungma@eit.uni-kl.de                  sc_event_finder* event_finder_ ) const
58312027Sjungma@eit.uni-kl.de{
58412027Sjungma@eit.uni-kl.de    if ( m_bind_info == 0 )
58512027Sjungma@eit.uni-kl.de    {
58612027Sjungma@eit.uni-kl.de        int if_n = m_interface_vec.size();
58712027Sjungma@eit.uni-kl.de        for ( int if_i = 0; if_i < if_n; if_i++ )
58812027Sjungma@eit.uni-kl.de	{
58912027Sjungma@eit.uni-kl.de	    IF* iface_p = m_interface_vec[if_i];
59012027Sjungma@eit.uni-kl.de	    assert( iface_p != 0 );
59112027Sjungma@eit.uni-kl.de	    add_static_event( handle_p, iface_p->default_event() );
59212027Sjungma@eit.uni-kl.de	}
59312027Sjungma@eit.uni-kl.de    }
59412027Sjungma@eit.uni-kl.de    else
59512027Sjungma@eit.uni-kl.de    {
59612027Sjungma@eit.uni-kl.de        sc_port_base::make_sensitive( handle_p, event_finder_ );
59712027Sjungma@eit.uni-kl.de    }
59812027Sjungma@eit.uni-kl.de}
59912027Sjungma@eit.uni-kl.de
60012027Sjungma@eit.uni-kl.detemplate <class IF>
60112027Sjungma@eit.uni-kl.devoid
60212027Sjungma@eit.uni-kl.desc_port_b<IF>::make_sensitive( sc_method_handle handle_p,
60312027Sjungma@eit.uni-kl.de                  sc_event_finder* event_finder_ ) const
60412027Sjungma@eit.uni-kl.de{
60512027Sjungma@eit.uni-kl.de    if ( m_bind_info == 0 )
60612027Sjungma@eit.uni-kl.de    {
60712027Sjungma@eit.uni-kl.de        int if_n = m_interface_vec.size();
60812027Sjungma@eit.uni-kl.de        for ( int if_i = 0; if_i < if_n; if_i++ )
60912027Sjungma@eit.uni-kl.de	{
61012027Sjungma@eit.uni-kl.de	    IF* iface_p = m_interface_vec[if_i];
61112027Sjungma@eit.uni-kl.de	    assert( iface_p != 0 );
61212027Sjungma@eit.uni-kl.de	    add_static_event( handle_p, iface_p->default_event() );
61312027Sjungma@eit.uni-kl.de	}
61412027Sjungma@eit.uni-kl.de    }
61512027Sjungma@eit.uni-kl.de    else
61612027Sjungma@eit.uni-kl.de    {
61712027Sjungma@eit.uni-kl.de        sc_port_base::make_sensitive( handle_p, event_finder_ );
61812027Sjungma@eit.uni-kl.de    }
61912027Sjungma@eit.uni-kl.de}
62012027Sjungma@eit.uni-kl.de
62112027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
62212027Sjungma@eit.uni-kl.de//  CLASS : sc_port
62312027Sjungma@eit.uni-kl.de//
62412027Sjungma@eit.uni-kl.de//  Generic port class and base class for other port classes.
62512027Sjungma@eit.uni-kl.de//  N is the maximum number of channels (with interface IF) that can be bound
62612027Sjungma@eit.uni-kl.de//  to this port. N <= 0 means no maximum.
62712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
62812027Sjungma@eit.uni-kl.de
62912027Sjungma@eit.uni-kl.de} // namespace sc_core
63012027Sjungma@eit.uni-kl.de
63112027Sjungma@eit.uni-kl.de#undef SC_VIRTUAL_
63212027Sjungma@eit.uni-kl.de
63312027Sjungma@eit.uni-kl.de/*****************************************************************************
63412027Sjungma@eit.uni-kl.de
63512027Sjungma@eit.uni-kl.de  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
63612027Sjungma@eit.uni-kl.de  changes you are making here.
63712027Sjungma@eit.uni-kl.de
63812027Sjungma@eit.uni-kl.de      Name, Affiliation, Date: Andy Goodrich, Forte,
63912027Sjungma@eit.uni-kl.de                               Bishnupriya Bhattacharya, Cadence Design Systems,
64012027Sjungma@eit.uni-kl.de                               25 August, 2003
64112027Sjungma@eit.uni-kl.de  Description of Modification: phase callbacks
64212027Sjungma@eit.uni-kl.de
64312027Sjungma@eit.uni-kl.de      Name, Affiliation, Date: Andy Goodrich, Forte Design Systems
64412027Sjungma@eit.uni-kl.de                               12 December, 2005
64512027Sjungma@eit.uni-kl.de  Description of Modification: multiport binding policy changes
64612027Sjungma@eit.uni-kl.de
64712027Sjungma@eit.uni-kl.de
64812027Sjungma@eit.uni-kl.de *****************************************************************************/
64912027Sjungma@eit.uni-kl.de
65012027Sjungma@eit.uni-kl.de/*
65112027Sjungma@eit.uni-kl.de$Log: sc_port.h,v $
65212027Sjungma@eit.uni-kl.deRevision 1.10  2011/08/26 20:45:41  acg
65312027Sjungma@eit.uni-kl.de Andy Goodrich: moved the modification log to the end of the file to
65412027Sjungma@eit.uni-kl.de eliminate source line number skew when check-ins are done.
65512027Sjungma@eit.uni-kl.de
65612027Sjungma@eit.uni-kl.deRevision 1.9  2011/08/24 22:05:36  acg
65712027Sjungma@eit.uni-kl.de Torsten Maehne: initialization changes to remove warnings.
65812027Sjungma@eit.uni-kl.de
65912027Sjungma@eit.uni-kl.deRevision 1.8  2011/08/07 19:08:01  acg
66012027Sjungma@eit.uni-kl.de Andy Goodrich: moved logs to end of file so line number synching works
66112027Sjungma@eit.uni-kl.de better between versions.
66212027Sjungma@eit.uni-kl.de
66312027Sjungma@eit.uni-kl.deRevision 1.7  2011/08/07 18:53:09  acg
66412027Sjungma@eit.uni-kl.de Philipp A. Hartmann: add virtual instances of the bind function for
66512027Sjungma@eit.uni-kl.de base classes to eliminate warning messages for clang platforms.
66612027Sjungma@eit.uni-kl.de
66712027Sjungma@eit.uni-kl.deRevision 1.6  2011/05/09 04:07:37  acg
66812027Sjungma@eit.uni-kl.de Philipp A. Hartmann:
66912027Sjungma@eit.uni-kl.de   (1) Restore hierarchy in all phase callbacks.
67012027Sjungma@eit.uni-kl.de   (2) Ensure calls to before_end_of_elaboration.
67112027Sjungma@eit.uni-kl.de
67212027Sjungma@eit.uni-kl.deRevision 1.5  2011/03/30 16:46:10  acg
67312027Sjungma@eit.uni-kl.de Andy Goodrich: added a signature and removed a virtual specification
67412027Sjungma@eit.uni-kl.de to eliminate warnings with certain compilers.
67512027Sjungma@eit.uni-kl.de
67612027Sjungma@eit.uni-kl.deRevision 1.4  2011/02/18 20:23:45  acg
67712027Sjungma@eit.uni-kl.de Andy Goodrich: Copyright update.
67812027Sjungma@eit.uni-kl.de
67912027Sjungma@eit.uni-kl.deRevision 1.3  2011/01/20 16:52:15  acg
68012027Sjungma@eit.uni-kl.de Andy Goodrich: changes for IEEE 1666 2011.
68112027Sjungma@eit.uni-kl.de
68212027Sjungma@eit.uni-kl.deRevision 1.2  2010/08/03 18:01:11  acg
68312027Sjungma@eit.uni-kl.de Andy Goodrich: formatting.
68412027Sjungma@eit.uni-kl.de
68512027Sjungma@eit.uni-kl.deRevision 1.1.1.1  2006/12/15 20:20:04  acg
68612027Sjungma@eit.uni-kl.deSystemC 2.3
68712027Sjungma@eit.uni-kl.de
68812027Sjungma@eit.uni-kl.deRevision 1.5  2006/08/29 23:35:00  acg
68912027Sjungma@eit.uni-kl.de Andy Goodrich: added bind_count() method to allow users to determine which
69012027Sjungma@eit.uni-kl.de ports are connected in before_end_of_elaboration().
69112027Sjungma@eit.uni-kl.de
69212027Sjungma@eit.uni-kl.deRevision 1.4  2006/05/08 17:52:47  acg
69312027Sjungma@eit.uni-kl.de Andy Goodrich:
69412027Sjungma@eit.uni-kl.de   (1) added David Long's forward declarations for friend functions,
69512027Sjungma@eit.uni-kl.de       methods, and operators to keep the Microsoft compiler happy.
69612027Sjungma@eit.uni-kl.de   (2) Added delta_count() method to sc_prim_channel for use by
69712027Sjungma@eit.uni-kl.de       sc_signal so that the friend declaration in sc_simcontext.h
69812027Sjungma@eit.uni-kl.de	   can be for a non-templated class (i.e., sc_prim_channel.)
69912027Sjungma@eit.uni-kl.de
70012027Sjungma@eit.uni-kl.deRevision 1.3  2006/01/24 20:46:31  acg
70112027Sjungma@eit.uni-kl.deAndy Goodrich: changes to eliminate use of deprecated features. For instance,
70212027Sjungma@eit.uni-kl.deusing notify(SC_ZERO_TIME) in place of notify_delayed().
70312027Sjungma@eit.uni-kl.de
70412027Sjungma@eit.uni-kl.deRevision 1.2  2006/01/03 23:18:26  acg
70512027Sjungma@eit.uni-kl.deChanged copyright to include 2006.
70612027Sjungma@eit.uni-kl.de
70712027Sjungma@eit.uni-kl.deRevision 1.1.1.1  2005/12/19 23:16:43  acg
70812027Sjungma@eit.uni-kl.deFirst check in of SystemC 2.1 into its own archive.
70912027Sjungma@eit.uni-kl.de
71012027Sjungma@eit.uni-kl.deRevision 1.10  2005/09/15 23:01:51  acg
71112027Sjungma@eit.uni-kl.deAdded std:: prefix to appropriate methods and types to get around
71212027Sjungma@eit.uni-kl.deissues with the Edison Front End.
71312027Sjungma@eit.uni-kl.de
71412027Sjungma@eit.uni-kl.deRevision 1.9  2005/08/10 01:35:59  acg
71512027Sjungma@eit.uni-kl.deChanges for 64-bit support.
71612027Sjungma@eit.uni-kl.de
71712027Sjungma@eit.uni-kl.deRevision 1.8  2005/04/03 22:52:51  acg
71812027Sjungma@eit.uni-kl.deNamespace changes.
71912027Sjungma@eit.uni-kl.de
72012027Sjungma@eit.uni-kl.deRevision 1.7  2005/03/21 22:31:32  acg
72112027Sjungma@eit.uni-kl.deChanges to sc_core namespace.
72212027Sjungma@eit.uni-kl.de
72312027Sjungma@eit.uni-kl.deRevision 1.6  2004/09/27 21:02:54  acg
72412027Sjungma@eit.uni-kl.deAndy Goodrich - Forte Design Systems, Inc.
72512027Sjungma@eit.uni-kl.de   - Added a $Log comment so that CVS checkin comments will appear in
72612027Sjungma@eit.uni-kl.de     checked out source.
72712027Sjungma@eit.uni-kl.de
72812027Sjungma@eit.uni-kl.de*/
72912027Sjungma@eit.uni-kl.de
73012027Sjungma@eit.uni-kl.de#endif
73112027Sjungma@eit.uni-kl.de
73212027Sjungma@eit.uni-kl.de// Taf!
733