00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __TLM_FIFO_PEEK_H__
00019 #define __TLM_FIFO_PEEK_H__
00020
00021 namespace tlm {
00022
00023 template < typename T>
00024 inline
00025 T
00026 tlm_fifo<T>::peek( tlm_tag<T> * ) const {
00027
00028 while( is_empty() ) {
00029
00030
00031
00032
00033 const_cast< tlm_fifo<T> * >( this )->wait( m_data_written_event );
00034
00035 }
00036
00037 return buffer->read_data();
00038
00039 }
00040
00041 template < typename T>
00042 inline
00043 bool
00044 tlm_fifo<T>::nb_peek( T &t ) const {
00045
00046 if( used() < 1 ) {
00047 return false;
00048 }
00049
00050 t = buffer->peek_data( 0 );
00051 return true;
00052
00053 }
00054
00055 template < typename T>
00056 inline
00057 bool
00058 tlm_fifo<T>::nb_peek( T &t , int n ) const {
00059
00060 if( n >= used() || n < -1 ) {
00061 return false;
00062 }
00063
00064 if( n == -1 ) {
00065 n = used() - 1;
00066 }
00067
00068 t = buffer->peek_data( n );
00069 return true;
00070
00071 }
00072
00073 template< typename T >
00074 inline
00075 bool
00076 tlm_fifo<T>::nb_can_peek( tlm_tag<T> * ) const
00077 {
00078 return !is_empty();
00079 }
00080
00081 template < typename T>
00082 inline
00083 bool
00084 tlm_fifo<T>::nb_poke( const T &t , int n ) {
00085
00086 if( n >= used() || n < 0 ) {
00087 return false;
00088 }
00089
00090 buffer->poke_data( n ) = t;
00091 return true;
00092
00093 }
00094
00095 }
00096
00097 #endif