Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Help for multiple class involved definition

Reply
Thread Tools

Help for multiple class involved definition

 
 
fl
Guest
Posts: n/a
 
      12-23-2010
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; // generic 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 pointer
.. . . . . .
transaction_ptr = request_in_port->read(); // get request from
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:
.............................
//
----------------------------------------------------------------------------
// CLASS : sc_fifo_in_if<T>
//
// The sc_fifo<T> input interface class.
//
----------------------------------------------------------------------------

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;
}
.................................
 
Reply With Quote
 
 
 
 
fl
Guest
Posts: n/a
 
      12-23-2010
On 22 déc, 19:26, fl <(E-Mail Removed)> 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; * * * *// generic 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 pointer
> . . . . . .
> * * transaction_ptr = request_in_port->read(); *// get request from
> 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:
> ............................
> //
> ---------------------------------------------------------------------------*-
> // *CLASS : sc_fifo_in_if<T>
> //
> // *The sc_fifo<T> input interface class.
> //
> ---------------------------------------------------------------------------*-
>
> 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>:perator -> ()
{
if( m_interface == 0 ) {
report_error( SC_ID_GET_IF_, "port is not bound" );
}
return m_interface;
}
.................................................. ...................
 
Reply With Quote
 
 
 
 
Nick Keighley
Guest
Posts: n/a
 
      12-30-2010
On Dec 23, 12:26*am, fl <(E-Mail Removed)> wrote:

> 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; * * * *// generic 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 pointer
> . . . . . .
> * * transaction_ptr = request_in_port->read(); *// get request from
> input fifo
> ............................
>
> I know that "gp_ptr" is a pointer, but what type does
> "sc_core::sc_fifo_in_if *<gp_ptr>" return?


it doesn't return anything. It's a template type not a function.

> "<sc_core::sc_fifo_in_if *<gp_ptr> >" should be a class type?


well a type anyway

> "sc_fifo_in_if<T>" is given below:
> ............................
> //
> ---------------------------------------------------------------------------*-
> // *CLASS : sc_fifo_in_if<T>
> //
> // *The sc_fifo<T> input interface class.
> //
> ---------------------------------------------------------------------------*-
>
> 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;}
>
> ................................


 
Reply With Quote
 
Nick Keighley
Guest
Posts: n/a
 
      12-30-2010
On Dec 23, 12:49*am, fl <(E-Mail Removed)> wrote:
> On 22 déc, 19:26, fl <(E-Mail Removed)> wrote:



> > 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; * * * *// generic 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 pointer
> > . . . . . .
> > * * transaction_ptr = request_in_port->read(); *// get request from
> > input fifo
> > ............................

>
> > I know that "gp_ptr" is a pointer,


<snip>

> > I am puzzled on why "request_in_port" is a pointer. Could you help me?


<snip>

> 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?


not necessarily, though it ought to have "pointer like" semantics
(that is is it should act like a pointer)

> "->" has been redefined as a method indicator? Is it so used? Am I
> right now? Thanks.


well, the -> operator has been redefined for this class. It's better
to think of all classes having a default operator->() (IMO)


> //
> ---------------------------------------------------------------------------*-
> // *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>:perator -> ()
> {
> * * if( m_interface == 0 ) {
> * * * * report_error( SC_ID_GET_IF_, "port is not bound" );
> * * }
> * * return m_interface;}
>



this is probably what C++ calls a "smart pointer". Your C++ reference
should be able to answer basic questions about templates and smart
pointers
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Referring to the class name from a class variable where inheritanceis involved Paul Moore Python 5 12-06-2011 06:59 PM
Decralation of class inside other class and definition outside this class =?ISO-8859-2?Q?Miros=B3aw?= Makowiecki C++ 2 07-12-2007 11:52 PM
An initialization with a class involved Tony Young C++ 8 03-16-2006 10:12 AM
can a class definition inside another class's definition Jianli Shen C++ 1 03-13-2005 06:02 PM
help?: incomplete definition with complete definition in scope Ark C Programming 1 08-07-2004 04:21 PM



Advertisments