CFragmentQueue Class Reference

Classe base usada para gerenciar uma fila FIFO de objetos FragmentInfo. More...

#include <StreamControl.h>

Inherited by CFPool [private], and CLeakBucket.

Public Member Functions

 CFragmentQueue ()
 CFragmentQueue construtor da classe, chamado quando um objeto e criado usando o comando new.
virtual ~CFragmentQueue ()
 ~CFragmentQueue destrutor da classe, chamado quando um objeto e removido usando o comando delete.
virtual int Insert (FragmentInfo *fip)
 Insert Insere um objeto FragmentInfo no final da fila.
virtual FragmentInfoRemove ()
 Remove remove um objeto FragmentInfo do inicio da fila.
virtual bool IsEmpty ()
 IsEmpty verifica se a fila esta vazia.

Private Member Functions

void DeleteFragmentQueue ()
 DeleteFragmentQueue funcao usada para remover a fila FIFO com os fragmentos.

Private Attributes

struct FragmentInfoListm_Start
 Ponteiro para o primeiro objeto da fila FIFO com os objetos FragmentInfo.
struct FragmentInfoListm_End
 Ponteiro para o ultimo objeto da fila FIFO com os objetos FragmentInfo.

Detailed Description

Classe base usada para gerenciar uma fila FIFO de objetos FragmentInfo.

Ela e usada como base para as classes CLeakBucket e CFPool (indiretamente tambem pela classe CSendData, que como veremos sera derivada de CLeakBucket). Ela implementa duas funcoes: Insert para inserir objetos FragmentInfo no final da fila e Remove para remover objetos FragmentInfo do inicio da fila. Um mutex e usado para acessar a fila, para garantir o acesso exclusivo, pois como veremos duas threads diferentes usarao as funcoes Insert e Remove (indiratamente, pelas classes que serao derivadas dela).

Definition at line 75 of file StreamControl.h.


Constructor & Destructor Documentation

CFragmentQueue::CFragmentQueue (  ) 

CFragmentQueue construtor da classe, chamado quando um objeto e criado usando o comando new.

Definition at line 39 of file StreamControl.cpp.

00040 {
00041     #ifdef RIO_DEBUG1
00042     RioErr << "[CFragmentQueue - Construtor] Start" << endl;
00043     #endif
00044     
00045     // Inicializa as variaveis da classe (para uma lista vazia).
00046     m_Start = NULL;
00047     m_End = NULL;
00048 
00049     #ifdef RIO_DEBUG2
00050     // Inicializa o contador usado pela depuracao, que conta o numero de 
00051     // fragmentos na fila.
00052     FragmentQueueSize = 0;
00053     #endif
00054 
00055     #ifdef RIO_DEBUG1
00056     RioErr << "[CFragmentQueue - Construtor] Finish" << endl;
00057     #endif
00058 } 

CFragmentQueue::~CFragmentQueue (  )  [virtual]

~CFragmentQueue destrutor da classe, chamado quando um objeto e removido usando o comando delete.

Definition at line 62 of file StreamControl.cpp.

00063 {
00064     #ifdef RIO_DEBUG1
00065     RioErr << "[CFragmentQueue - Destrutor] Start" << endl;
00066     #endif
00067 
00068     // Remove a fila FIFO de objetos FragmentInfo da classe.
00069     DeleteFragmentQueue();
00070 
00071     #ifdef RIO_DEBUG1
00072     RioErr << "[CFragmentQueue - Destrutor] Finish" << endl;
00073     #endif
00074 }


Member Function Documentation

void CFragmentQueue::DeleteFragmentQueue (  )  [private]

DeleteFragmentQueue funcao usada para remover a fila FIFO com os fragmentos.

Usada pelo destrutor ao removermos um objeto da classe.

Definition at line 78 of file StreamControl.cpp.

00079 {
00080     FragmentInfoList *Object, *NextObject;
00081 
00082     #ifdef RIO_DEBUG1
00083     RioErr << "[CFragmentQueue - DeleteFragmentQueue] Start" << endl;
00084     #endif
00085 
00086     // Remove cada um dos objetos da fila FIFO da classe.
00087     Object = m_Start;
00088     while( Object != NULL )
00089     {
00090         // Salva o ponteiro para o proximo objeto FragmentInfo.
00091         NextObject = Object->NextObject;
00092         // Remove o buffer com a copia dos dados do fragmento.
00093         delete Object->fip->FragmentData;
00094         // Revome a estrutura com as informacoes do fragmento.
00095         delete Object->fip;
00096         // Remove o objeto da lista associado ao fragmento.
00097         delete Object;
00098         // Recupera o ponteiro para o proximo objeto FragmentInfo.
00099         Object = NextObject;
00100     }
00101     // Inicializa as variaveis da classe (para uma lista vazia).
00102     m_Start = NULL;
00103     m_End = NULL;
00104 
00105     #ifdef RIO_DEBUG2
00106     FragmentQueueSize = 0;
00107     #endif
00108 
00109     #ifdef RIO_DEBUG1
00110     RioErr << "[CFragmentQueue - DeleteFragmentQueue] Finish" << endl;
00111     #endif
00112 }

int CFragmentQueue::Insert ( FragmentInfo fip  )  [virtual]

Insert Insere um objeto FragmentInfo no final da fila.

Parameters:
fip ponteiro para o objeto a ser inserido no final da fila.
Returns:
S_OK se o objeto foi corretamente inserido na fila, e valor diferente de S_OK se algum erro ocorreu ao inserir o objeto.

Reimplemented in CSendData, CFPool, and CClientInfo.

Definition at line 115 of file StreamControl.cpp.

00116 {
00117     FragmentInfoList *Object;
00118 
00119     #ifdef RIO_DEBUG1
00120     RioErr << "[CFragmentQueue - Insert] Start" << endl;
00121     #endif
00122 
00123     // Tenta alocar um novo objeto da fila.
00124     Object = new FragmentInfoList;
00125     if( Object == NULL )
00126     {
00127         
00128         #ifdef RIO_DEBUG1
00129         RioErr << "[CFragmentQueue - Insert] Finish1" << endl;
00130         #endif
00131 
00132         return ERROR_STREAMCONTROL + ERROR_MEMORY;
00133     } 
00134     // Inicializa o objeto criado.
00135     Object->fip = fip;
00136     // Coloca o objeto criado no final da fila FIFO.
00137     Object->NextObject = NULL;
00138     if( m_End == NULL )
00139         m_Start = Object;
00140     else
00141         m_End->NextObject = Object;
00142     m_End = Object;
00143 
00144     #ifdef RIO_DEBUG2
00145     // Incrementa o contador usado pela depuracao (que conta o numero de 
00146     // fragmentos na fila), pois inserimos um fragmento no final da fila.
00147     FragmentQueueSize++;
00148     #endif
00149 
00150     #ifdef RIO_DEBUG1
00151     RioErr << "[CFragmentQueue - Insert] Finish2" << endl;
00152     #endif
00153 
00154     return S_OK; 
00155 }

bool CFragmentQueue::IsEmpty (  )  [virtual]

IsEmpty verifica se a fila esta vazia.

Returns:
valor booleano que sera true se a fila estiver vazia, e false se ela nao estiver vazia.

Definition at line 205 of file StreamControl.cpp.

00206 {
00207     #ifdef RIO_DEBUG1
00208     RioErr << "[CFragmentQueue - Remove] Single" << endl;
00209     #endif
00210 
00211     // Retorna true somente se a fila estiver vazia (pois somente neste caso
00212     // teremos m_Start igual a NULL).
00213     return m_Start == NULL;
00214 }

FragmentInfo * CFragmentQueue::Remove ( void   )  [virtual]

Remove remove um objeto FragmentInfo do inicio da fila.

Returns:
Ponteiro para o objeto que estava no inicio da fila, se a fila nao estiver vazia, ou NULL caso ela esteja vazia.

Reimplemented in CLeakBucket, CSendData, CFPool, and CClientInfo.

Definition at line 158 of file StreamControl.cpp.

00159 {
00160     FragmentInfoList *Object;
00161     FragmentInfo *fip;
00162 
00163     #ifdef RIO_DEBUG1
00164     RioErr << "[CFragmentQueue - Remove] Start" << endl;
00165     #endif
00166 
00167     // Se nao existir nenhum objeto, entao retornamos NULL.
00168     if( m_Start == NULL )
00169     {
00170 
00171         #ifdef RIO_DEBUG1
00172         RioErr << "[CFragmentQueue - Remove] Finish1" << endl;
00173         #endif
00174 
00175         return NULL;
00176     }
00177     // Obtem o ponteiro para o primeiro elemento da fila FIFO.
00178     Object = m_Start;
00179     // Atualiza a fila, removendo o objeto do inicio da fila.
00180     m_Start = m_Start->NextObject;
00181     if( m_Start == NULL )
00182         m_End = NULL;
00183     // Obtem o campo FragmentInfo do objeto (que sera retornado pela funcao).
00184     fip = Object->fip;
00185     // Remove o objeto retirado da fila.
00186     delete Object;
00187 
00188     #ifdef RIO_DEBUG2
00189     // Incrementa o contador usado pela depuracao (que conta o numero de 
00190     // fragmentos na fila), pois removemos um fragmento do final da fila.
00191     FragmentQueueSize--;
00192     #endif
00193     // Retorna o objeto FragmentInfo associado ao primeiro elemento da fila que 
00194     // acabou de ser removido.
00195 
00196     #ifdef RIO_DEBUG1
00197     RioErr << "[CFragmentQueue - Remove] Finish2" << endl;
00198     #endif
00199 
00200     return fip;
00201 }


Field Documentation

Ponteiro para o ultimo objeto da fila FIFO com os objetos FragmentInfo.

Definition at line 85 of file StreamControl.h.

Ponteiro para o primeiro objeto da fila FIFO com os objetos FragmentInfo.

Definition at line 81 of file StreamControl.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