00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __TLM_FIFO_RESIZE_H__
00019 #define __TLM_FIFO_RESIZE_H__
00020
00021
00022
00023
00024
00025
00026
00027 namespace tlm {
00028
00029 template < typename T>
00030 inline
00031 void
00032 tlm_fifo<T>::nb_expand( unsigned int n ) {
00033
00034 m_expand = true;
00035 m_size += n;
00036 request_update();
00037
00038 }
00039
00040 template < typename T>
00041 inline
00042 void
00043 tlm_fifo<T>::nb_unbound( unsigned int n ) {
00044
00045 m_expand = true;
00046 m_size = -n;
00047
00048 if( buffer->size() < static_cast<int>( n ) ) {
00049 buffer->resize( n );
00050 }
00051
00052 request_update();
00053
00054 }
00055
00056 template < typename T>
00057 inline
00058 bool
00059 tlm_fifo<T>::nb_reduce( unsigned int n ) {
00060
00061 if( m_size < 0 ) {
00062 return false;
00063 }
00064
00065 return nb_bound( size() - n );
00066
00067 }
00068
00069 template < typename T>
00070 inline
00071 bool
00072 tlm_fifo<T>::nb_bound( unsigned int new_size ) {
00073
00074 bool ret = true;
00075
00076 if( static_cast<int>( new_size ) < used() ) {
00077
00078 new_size = used();
00079 ret = false;
00080
00081 }
00082
00083 m_size = new_size;
00084 return ret;
00085
00086 }
00087
00088 }
00089
00090 #endif