genericBuffer.cc

Go to the documentation of this file.
00001 
00018 #ifndef  _genericbuffer_cc_INC
00019 #define  _genericbuffer_cc_INC
00020 
00021 #include        "genericBuffer.h"
00022 
00023 GenericBuffer::GenericBuffer ()
00024 {
00025     pull_channel = 0;
00026     push_channel = 0;
00027 }               /* -----  end of function GenericBuffer::GenericBuffer  ----- */
00028 
00029 GenericBuffer::~GenericBuffer ()
00030 {
00031 }
00032 
00033 void
00034 GenericBuffer::push ( Flit* f )
00035 {
00036     buffers[push_channel].push_back(f);
00037     assert(buffers[push_channel].size() <= buffer_size);
00038     return;
00039 }               /* -----  end of function GenericBuffer::push  ----- */
00040 
00041 Flit*
00042 GenericBuffer::pull ()
00043 {
00044     if( pull_channel > buffers.size() || buffers[pull_channel].size() == 0)
00045     {
00046         fprintf( stdout, "\nERROR: Invalid pull channel pull_ch:%d  no_of_ch:%d buff_occ:%d",
00047                  pull_channel, buffers.size(),buffers[pull_channel].size());
00048         exit(1);
00049     }
00050     Flit* f = buffers[pull_channel].front();
00051     buffers[pull_channel].pop_front();
00052     assert(buffers[pull_channel].size() <= buffer_size);
00053     return f;
00054 }               /* -----  end of function GenericBuffer::pull  ----- */
00055 
00064 Flit*
00065 GenericBuffer::peek ()
00066 {
00067     if( pull_channel > buffers.size() || buffers[pull_channel].size() == 0)
00068     {
00069         fprintf( stdout, "\nERROR: **Invalid pull channel");
00070         exit(1);
00071     }
00072     Flit* f = buffers[pull_channel].front();
00073     assert(buffers[pull_channel].size() <= buffer_size);
00074     return f;
00075 }               /* -----  end of function GenericBuffer::pull  ----- */
00076 
00077 uint
00078 GenericBuffer::get_occupancy ( uint ch ) const
00079 {
00080     return buffers[ch].size();
00081 }               /* -----  end of function GenericBuffer::get_occupancy  ----- */
00082 
00083 void
00084 GenericBuffer::resize( uint v, uint bs )
00085 {
00086     /* 
00087     for ( uint i = vcs; i<buffers.size(); i++ )
00088         while( !buffers[i].empty())
00089         {
00090             delete buffers[i].front();
00091             buffers[i].pop();
00092         }
00093      * */
00094     vcs =v;
00095     buffer_size = bs;
00096     buffers.resize(vcs);
00097     for( uint i=0; i<vcs; i++)
00098     {
00099        buffers[i].clear();
00100        assert(buffers[i].size()<=buffer_size);
00101     }
00102 
00103     return;
00104 }               /* -----  end of function GenericBuffer::change_vcs  ----- */
00105 
00106 uint
00107 GenericBuffer::get_no_vcs() const
00108 {
00109     /*  should be return the pvt variable but for now using this to ensure
00110      *  init was right and not accessing member variable. */
00111     return buffers.size();
00112 }
00113 
00114 void
00115 GenericBuffer::change_pull_channel ( uint ch )
00116 {
00117     assert(ch<vcs);
00118     pull_channel = ch;
00119     return;
00120 }               /* -----  end of function GenericBuffer::change_pull_channel  ----- */
00121 
00122 void
00123 GenericBuffer::change_push_channel ( uint ch )
00124 {
00125     push_channel = ch;
00126     return;
00127 }               /* -----  end of function GenericBuffer::change_pull_channel  ----- */
00128 
00129 
00130 uint
00131 GenericBuffer::get_pull_channel () const
00132 {
00133     return pull_channel;
00134 }               /* -----  end of function GenericBuffer::get_pull_channel  ----- */
00135 
00136 uint
00137 GenericBuffer::get_push_channel () const
00138 {
00139     return push_channel;
00140 }               /* -----  end of function GenericBuffer::get_push_channel  ----- */
00141 
00142 bool
00143 GenericBuffer::is_channel_full ( uint ch ) const
00144 {
00145     /* this is the buffer size that the router is configured for the implementation allow for a bigger buffer[i].size which is the simulation artifact and not the buffer size in the physical router */
00146     return buffers[ch].size() > buffer_size;  
00147 }               /* -----  end of function GenericBuffer::full  ----- */
00148 
00149 bool
00150 GenericBuffer::is_empty (uint ch ) const
00151 {
00152     return buffers[ch].empty();
00153 }               /* -----  end of function GenericBuffer::empty  ----- */
00154 
00155 string
00156 GenericBuffer::toString () const
00157 {
00158     stringstream str;
00159     str << "GenericBuffer"
00160         << "\t buffer_size: " << buffer_size
00161         << "\t No of buffers: " << buffers.size() << "\n";
00162     for( uint i=0; i<buffers.size() && !buffers[i].empty(); i++)
00163         str << buffers[i].front()->toString();
00164     return str.str();
00165 }               /* -----  end of function GenericBuffer::toString  ----- */
00166 
00167 #endif   /* ----- #ifndef _genericbuffer_cc_INC  ----- */
00168 

Generated on Tue Oct 19 17:22:00 2010 for IRIS by  doxygen 1.5.8