CRequestManager Class Reference

#include <request.h>

Public Member Functions

 CRequestManager ()
 ~CRequestManager ()
int Initialize (const unsigned int nRequests, const unsigned int BufferSize)
void Free (StrRequest *Request)
StrRequestNew ()
StrRequestGet (const u32 ReqId)

Private Attributes

unsigned int m_n
CRioFreeList m_FreeList
StrRequestm_Request
CBufferManager m_BufferManager

Detailed Description

Definition at line 96 of file request.h.


Constructor & Destructor Documentation

CRequestManager::CRequestManager (  ) 

Definition at line 64 of file request.cpp.

00065 {
00066     m_Request = NULL;
00067     m_n       = 0;
00068 }

CRequestManager::~CRequestManager (  ) 

Definition at line 70 of file request.cpp.

00071 {
00072     if(m_Request != 0)
00073     {
00074         delete[] m_Request;
00075     }
00076 }


Member Function Documentation

void CRequestManager::Free ( StrRequest Request  ) 

Definition at line 131 of file request.cpp.

00132 {
00133     // Higher order 16 bits are version number, incremented every time
00134     // request is free. Lower order 16 bits are index to
00135     // vector m_Request
00136 
00137     //RioErr << "Free request: (before): " << (void *) Request->Id << endl;
00138 
00139     u32 Version = ((Request->Id & 0xffff0000) >> 16 );
00140     Version ++;
00141     u32 Ind     = Request->Id & 0xffff;
00142     Request->Id = Ind | (Version << 16);
00143     Request->Status = RequestStatusFree;
00144 
00145 
00146     //RioErr << "Version: " << (void*) Version << endl;
00147     //RioErr << "Free request: (after): " << (void*) Request->Id << endl;
00148 
00149     m_FreeList.Free( (RioQueueEle*)Request);
00150 }

StrRequest * CRequestManager::Get ( const u32  ReqId  ) 

Definition at line 166 of file request.cpp.

00167 {
00168     StrRequest* rp;
00169 
00170     // lower 16 bits are index to vector m_Request;
00171     unsigned int ind = ReqId & 0xffff;
00172 
00173     if(ind >= m_n)
00174         return 0;
00175 
00176     rp = &m_Request[ind];
00177 
00178     // Request must be in use and Request Id version must match
00179     if( (rp->Status != RequestStatusFree) && (rp->Id == ReqId) )
00180         return rp;
00181     else
00182         return 0;
00183 }

int CRequestManager::Initialize ( const unsigned int  nRequests,
const unsigned int  BufferSize 
)

Definition at line 79 of file request.cpp.

00081 {
00082 
00083     // debug -----------------------------------------------
00084     RioErr << "RequestManager: Max number = " << 0xffff << endl;
00085     RioErr << "RequestManager: Using = "<< nRequest << endl;
00086     // ------------------------------------------------------------------------
00087 
00088     // Request index has to fit in 16 bits
00089     if( ( nRequest <= 0 ) || ( nRequest > 0xffff ))
00090     {
00091         return ERROR_SS_PROGRAM_ERROR;
00092     }
00093 
00094     // In case was initialized before
00095     if(m_Request != 0)
00096     {
00097         delete[] m_Request;
00098         m_n = 0;
00099     }
00100 
00101     m_Request = new StrRequest[nRequest];
00102 
00103     if( m_Request == 0 )
00104         return ERROR_SS_MEMORY;
00105 
00106     m_n = nRequest;
00107 
00108     int stat = m_BufferManager.Initialize( nRequest,BufferSize );
00109 
00110     if(stat < 0)
00111     {
00112         delete[] m_Request;
00113         return stat;
00114     }
00115 
00116     for( int i= ((int)(nRequest))-1; i>=0; i-- )
00117     {
00118         m_Request[i].Status = RequestStatusFree;
00119         m_Request[i].Id = i;
00120         m_Request[i].Buffer = m_BufferManager.New();
00121         m_Request[i].Data = m_Request[i].Buffer->Data;
00122         m_FreeList.Free((RioQueueEle*)&m_Request[i]);
00123     }
00124 
00125     return (0);
00126 
00127 }

StrRequest * CRequestManager::New (  ) 

Definition at line 155 of file request.cpp.

00156 {
00157     StrRequest* rp;
00158 
00159     rp = (StrRequest*) m_FreeList.GetNB();
00160 
00161     return rp;
00162 }


Field Documentation

Definition at line 113 of file request.h.

Definition at line 111 of file request.h.

unsigned int CRequestManager::m_n [private]

Definition at line 110 of file request.h.

Definition at line 112 of file request.h.


The documentation for this class was generated from the following files:
Generated on Wed Jul 4 16:03:32 2012 for RIO by  doxygen 1.6.3