Re: Help for multiple class involved definition
On 22 d=E9c, 19:26, fl <rxjw...@gmail.com> wrote:
Hi,
I am new to C++. I do not understand why the following definition of
"request_in_port" is a pointer:
.............................
typedef tlm::tlm_generic_payload *gp_ptr; // generi=
c payload
. . . . .
sc_core::sc_port<sc_core::sc_fifo_in_if <gp_ptr> >
request_in_port;
............................
because I find that "request_in_port->read()" is used in this way:
............................
tlm::tlm_generic_payload *transaction_ptr; // transaction poin=
ter
. . . . . .
transaction_ptr = request_in_port->read(); // get request fr=
om
input fifo
............................
I know that "gp_ptr" is a pointer, but what type does
"sc_core::sc_fifo_in_if <gp_ptr>" return?
"<sc_core::sc_fifo_in_if <gp_ptr> >" should be a class type?
"sc_fifo_in_if<T>" is given below:
............................
//
-------------------------------------------------------------------------=
--=AD-
// CLASS : sc_fifo_in_if<T>
//
// The sc_fifo<T> input interface class.
//
-------------------------------------------------------------------------=
--=AD-
template <class T>
class sc_fifo_in_if
: public sc_fifo_nonblocking_in_if<T>,
public sc_fifo_blocking_in_if<T>
{
public:
// get the number of available samples
virtual int num_available() const = 0;
protected:}
........................
I am puzzled on why "request_in_port" is a pointer. Could you help me?
Thanks.
BTW, the fifo read() is as below.
............................
// blocking read
template <class T>
inline
void
sc_fifo<T>::read( T& val_ )
{
while( num_available() == 0 ) {
sc_core::wait( m_data_written_event );
}
m_num_read ++;
buf_read( val_ );
request_update();
}
template <class T>
inline
T
sc_fifo<T>::read()
{
T tmp;
read( tmp );
return tmp;}
................................
Hi,
I just find that there is a redefinenition of -> for:
"
sc_core::sc_port
"
See below please. So, the '->" in my original post does not mean
"request_in_port" is a pointer?
"->" has been redefined as a method indicator? Is it so used? Am I
right now? Thanks.
...................................
//
---------------------------------------------------------------------------=
-
// CLASS : sc_port_b
//
// Abstract base class for class sc_port.
//
---------------------------------------------------------------------------=
-
// allow to call methods provided by the first interface
template <class IF>
inline
IF*
sc_port_b<IF>::operator -> ()
{
if( m_interface == 0 ) {
report_error( SC_ID_GET_IF_, "port is not bound" );
}
return m_interface;
}
.....................................................................