CDiskRequestManager Class Reference

#include <diskrequest.h>

Public Member Functions

 CDiskRequestManager ()
 ~CDiskRequestManager ()
int Initialize (const unsigned int nDiskRequests)
void Free (StrDiskRequest *DiskRequest)
StrDiskRequestNew ()
StrDiskRequestGet (const u32 ReqId)

Private Attributes

unsigned int m_n
CDiskRequestQueue m_FreeList
StrDiskRequestm_DiskRequest

Detailed Description

Definition at line 69 of file diskrequest.h.


Constructor & Destructor Documentation

CDiskRequestManager::CDiskRequestManager (  ) 

Definition at line 57 of file diskrequest.cpp.

00058 {
00059    m_n = 0;
00060    // m_FreeList does not need to be initialized
00061    m_DiskRequest = 0;
00062 }

CDiskRequestManager::~CDiskRequestManager (  ) 

Definition at line 64 of file diskrequest.cpp.

00065 {
00066     if( m_DiskRequest != 0 )
00067     {
00068         delete[] m_DiskRequest;
00069     }
00070 }


Member Function Documentation

void CDiskRequestManager::Free ( StrDiskRequest DiskRequest  ) 

Definition at line 107 of file diskrequest.cpp.

00108 {
00109     // Higher order 16 bits are version number, incremented every time
00110     // request is free. Lower order 16 bits are index to
00111     // vector m_DiskRequest
00112 
00113     u32 Version = (( DiskRequest->Id & 0xffff0000 ) >> 16 );
00114     Version ++;
00115     u32 Ind     = DiskRequest->Id & 0xffff;
00116     DiskRequest->Id = Ind | ( Version << 16 );
00117     DiskRequest->Status = DiskRequestStatusFree;
00118 
00119     m_FreeList.Put( DiskRequest );
00120 }

StrDiskRequest * CDiskRequestManager::Get ( const u32  ReqId  ) 

Definition at line 141 of file diskrequest.cpp.

00142 {
00143     StrDiskRequest* rp;
00144 
00145     // lower 16 bits are index to vector m_DiskRequest;
00146     u32 ind = ReqId & 0xffff;
00147 
00148     if( ind >= m_n )
00149         return 0;
00150 
00151     rp = &m_DiskRequest[ind];
00152 
00153     // Request must be in use and Request Id version must match
00154     if( ( rp->Status != DiskRequestStatusFree ) && ( rp->Id == ReqId ) )
00155         return rp;
00156     else
00157         return 0;
00158 }

int CDiskRequestManager::Initialize ( const unsigned int  nDiskRequests  ) 

Definition at line 73 of file diskrequest.cpp.

00074 {
00075     // Request index has to fit in 16 bits
00076     if( ( nDiskRequest <= 0 ) || ( nDiskRequest > 0xffff ) )
00077     {
00078         return ERROR_ROUTER + ERROR_INVALID_PARAM;
00079     }
00080 
00081     // In case was initialized before
00082     if( m_DiskRequest != 0 )
00083     {
00084         delete[] m_DiskRequest;
00085         m_n = 0;
00086     }
00087 
00088     m_DiskRequest = new StrDiskRequest[nDiskRequest];
00089 
00090     if( m_DiskRequest == 0 )
00091         return ERROR_ROUTER + ERROR_MEMORY;
00092 
00093     m_n = nDiskRequest;
00094 
00095     for( int i = ((int)( nDiskRequest )) - 1; i >= 0; i-- )
00096     {
00097         m_DiskRequest[i].Status = DiskRequestStatusFree;
00098         m_DiskRequest[i].Id = i;
00099         m_FreeList.Put( &m_DiskRequest[i] );
00100     }
00101 
00102     return (0);
00103 }

StrDiskRequest * CDiskRequestManager::New (  ) 

Definition at line 125 of file diskrequest.cpp.

00126 {
00127     StrDiskRequest* rp;
00128 
00129     rp = ( StrDiskRequest* ) m_FreeList.Get();
00130 
00131     if( rp !=0 )
00132     {
00133         rp->Status = DiskRequestStatusInUse;
00134     }
00135 
00136     return rp;
00137 }


Field Documentation

Definition at line 85 of file diskrequest.h.

Definition at line 84 of file diskrequest.h.

unsigned int CDiskRequestManager::m_n [private]

Definition at line 83 of file diskrequest.h.


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