41#if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN)
43#pragma warning(disable: 4251)
95 virtual const char*
kind()
const
96 {
return "sc_port_base"; }
125 virtual int interface_count()
const = 0;
127 const char* if_typename()
const
128 {
return get_interface_type().name(); }
164 void insert_parent(
int );
167 void construction_done();
170 void complete_binding();
171 void elaboration_done();
174 void start_simulation();
177 void simulation_done();
212 {
return static_cast<int>(m_port_vec.size()); }
223 void complete_binding();
226 bool construction_done();
229 void elaboration_done();
232 void start_simulation();
235 void simulation_done();
241 int m_construction_done;
242 std::vector<sc_port_base*> m_port_vec;
280 virtual void bind( IF& interface_ )
284 { this->
bind( interface_ ); }
293 { this->
bind( parent_ ); }
299 {
return static_cast<int>(m_interface_vec.size()); }
319 {
return m_interface; }
322 {
return m_interface; }
333 base_type( max_size_, policy ), m_interface( 0 ), m_interface_vec()
338 base_type( name_, max_size_, policy ), m_interface( 0 ),
360 virtual int interface_count()
const;
370 std::vector<IF*> m_interface_vec;
384template <
class IF,
int N = 1, sc_port_policy P=SC_ONE_OR_MORE_BOUND>
435 virtual const char*
kind()
const
436 {
return "sc_port"; }
442 this_type& operator = (
const this_type& );
461 if( m_interface == 0 ) {
474 return const_cast<sc_port_b&
>(*this).operator->();
492 else if( index_ < 0 || index_ >= size() ) {
496 return m_interface_vec[index_];
516 IF* iface =
dynamic_cast<IF*
>( &interface_ );
521 base_type::bind( *iface );
535 base_type::bind( *parent );
547 IF* iface =
dynamic_cast<IF*
>( interface_ );
553 for (
int i = 0; i < if_n; i++ )
555 if ( iface == m_interface_vec[i] )
558 "interface already bound to port" );
565 m_interface_vec.push_back( iface );
566 m_interface = m_interface_vec[0];
590 if ( m_bind_info == 0 )
593 for (
int if_i = 0; if_i < if_n; if_i++ )
595 IF* iface_p = m_interface_vec[if_i];
597 add_static_event( handle_p, iface_p->default_event() );
611 if ( m_bind_info == 0 )
614 for (
int if_i = 0; if_i < if_n; if_i++ )
616 IF* iface_p = m_interface_vec[if_i];
618 add_static_event( handle_p, iface_p->default_event() );
637#if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN)
const char SC_ID_BIND_IF_TO_PORT_[]
class sc_method_process * sc_method_handle
class SC_API sc_port_base
SC_API void sc_warn_port_constructor()
class sc_thread_process * sc_thread_handle
const char SC_ID_GET_IF_[]
virtual void make_sensitive(sc_method_handle, sc_event_finder *=0) const
void bind(sc_interface &interface_)
sc_port_base(const char *name_, int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND)
virtual void start_of_simulation()
virtual sc_interface * get_interface()=0
sc_port_base(int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND)
void add_static_event(sc_method_handle process_p, const sc_event &event) const
virtual int vbind(sc_port_base &)=0
virtual void end_of_elaboration()
void report_error(const char *id, const char *add_msg=0) const
virtual void make_sensitive(sc_thread_handle, sc_event_finder *=0) const
virtual const sc_interface * get_interface() const =0
sc_bind_info * m_bind_info
virtual void before_end_of_elaboration()
void bind(this_type &parent_)
virtual int vbind(sc_interface &)=0
void add_static_event(sc_thread_handle process_p, const sc_event &event) const
virtual void end_of_simulation()
virtual std::type_index get_interface_type() const =0
virtual const char * kind() const
void insert(sc_port_base *)
void remove(sc_port_base *)
virtual sc_interface * get_interface()
sc_port_b(int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND)
sc_port_b< IF > this_type
virtual void make_sensitive(sc_method_handle, sc_event_finder *=0) const
virtual int vbind(sc_interface &)
virtual void make_sensitive(sc_thread_handle, sc_event_finder *=0) const
virtual const sc_interface * get_interface() const
sc_port_b(const char *name_, int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND)
IF * operator[](int index_)
virtual std::type_index get_interface_type() const
const IF * get_interface(int iface_i) const
void operator()(IF &interface_)
virtual int vbind(sc_port_base &)
IF * get_interface(int iface_i)
virtual void bind(IF &interface_)
virtual void bind(port_type &parent_)
sc_port(const char *name_, this_type &parent_)
virtual const char * kind() const
sc_port(this_type &parent_)
sc_port(base_type &parent_)
sc_port(const char *name_, IF &interface_)
sc_port(const char *name_)
sc_port(const char *name_, base_type &parent_)