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 FragmentInfo * | Remove () |
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 FragmentInfoList * | m_Start |
Ponteiro para o primeiro objeto da fila FIFO com os objetos FragmentInfo. | |
struct FragmentInfoList * | m_End |
Ponteiro para o ultimo objeto da fila FIFO com os objetos FragmentInfo. |
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.
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 }
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.
fip | ponteiro para o objeto a ser inserido no final da fila. |
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.
Definition at line 205 of file StreamControl.cpp.
FragmentInfo * CFragmentQueue::Remove | ( | void | ) | [virtual] |
Remove remove um objeto FragmentInfo do inicio da fila.
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 }
struct FragmentInfoList* CFragmentQueue::m_End [private] |
Ponteiro para o ultimo objeto da fila FIFO com os objetos FragmentInfo.
Definition at line 85 of file StreamControl.h.
struct FragmentInfoList* CFragmentQueue::m_Start [private] |
Ponteiro para o primeiro objeto da fila FIFO com os objetos FragmentInfo.
Definition at line 81 of file StreamControl.h.