genericArbiter.cc

Go to the documentation of this file.
00001 
00018 #ifndef  _genericarbiter_cc_INC
00019 #define  _genericarbiter_cc_INC
00020 
00021 #include        "genericArbiter.h"
00022 
00023 GenericArbiter::GenericArbiter()
00024 {
00025     name = "GenericArbiter";
00026     address = -1;
00027     node_ip = -1;
00028     last_winner = -1;
00029     done = false;
00030 }               /* -----  end of function GenericArbiter  ----- */
00031 
00032 GenericArbiter::~GenericArbiter()
00033 {
00034 
00035 }
00036 
00037 void
00038 GenericArbiter::set_no_requestors(uint ch)
00039 {
00040     vcs = ch;
00041     requests.resize(ch);
00042     for ( uint i=0 ; i<ch ; i++ )
00043         requests[i] = false;
00044 }
00045 
00046 void
00047 GenericArbiter::request( uint ch)
00048 {
00049     requests[ch] = true;
00050     done = false;
00051     return;
00052 }
00053 
00054 bool
00055 GenericArbiter::is_requested( uint ch)
00056 {
00057     assert(ch<requests.size());
00058     return requests[ch];
00059 }
00060 
00061 bool
00062 GenericArbiter::is_empty()
00063 {
00064     for ( uint i=0; i<vcs; i++)
00065     {
00066         if( requests[i] )
00067             return false;
00068     }
00069     return true;
00070 }
00071 
00072 uint
00073 GenericArbiter::get_no_requestors()
00074 {
00075     uint no =0;
00076     for ( uint i=0; i<vcs; i++)
00077         if ( requests[i] )
00078             no++;
00079 
00080     return no;
00081 }
00082 
00083 void
00084 GenericArbiter::clear_winner()
00085 {
00086     done = false;
00087     requests[last_winner] = false;
00088     return;
00089 }
00090 
00091 uint
00092 GenericArbiter::pick_winner()
00093 {
00094     if(!done)
00095     {
00096         done = true;
00097         for ( uint i=last_winner+1 ; i<requests.size() ; i++ )
00098             if ( requests[i] )
00099             {
00100                 last_winner = i;
00101                 return i;
00102             }
00103 
00104         for ( uint i=0 ; i<last_winner+1 ; i++ )
00105             if ( requests[i])
00106             {
00107                 last_winner = i;
00108                 return i;
00109             }
00110     }
00111     else
00112         return last_winner;
00113 
00114     printf("Was requested to pick winner but dint find a winner " );
00115 
00116     return -1;
00117 }
00118 
00119 string
00120 GenericArbiter::toString () const
00121 {
00122     stringstream str;
00123     str << "GenericArbiter: "
00124         << "\t last_winner: " << last_winner
00125         << "\t no of requests: " << requests.size();
00126     return str.str();
00127 }       
00128 
00129 #endif   /* ----- #ifndef _genericarbiter_cc_INC  ----- */
00130 

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