00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <config.h>
00025 #include "Files.hh"
00026
00027 using std::list ;
00028
00029 namespace certi {
00030 namespace rtia {
00031
00032
00034 void
00035 Queues::nextTsoDate(bool &found, FederationTime &time)
00036 {
00037 NetworkMessage *msg_buffer ;
00038
00039 if (tsos.empty()) {
00040 found = false ;
00041 time = -1.0 ;
00042 }
00043 else {
00044 msg_buffer = tsos.front();
00045 found = true ;
00046 time = msg_buffer->getDate();
00047 }
00048 }
00049
00050
00054 NetworkMessage *
00055 Queues::giveCommandMessage(bool &msg_donne, bool &msg_restant)
00056 {
00057 NetworkMessage *msg ;
00058
00059 msg_donne = false ;
00060 msg_restant = false ;
00061
00062 if (!commands.empty()) {
00063
00064 msg = commands.front();
00065 commands.pop_front();
00066 msg_donne = true ;
00067
00068 if (!commands.empty())
00069 msg_restant = true ;
00070
00071 return msg ;
00072 }
00073 else return 0 ;
00074 }
00075
00076
00078 NetworkMessage *
00079 Queues::giveFifoMessage(bool &msg_donne, bool &msg_restant)
00080 {
00081 NetworkMessage *msg_tampon ;
00082
00083 msg_donne = false ;
00084 msg_restant = false ;
00085
00086 if (!fifos.empty()) {
00087
00088 msg_tampon = fifos.front();
00089 fifos.pop_front();
00090 msg_donne = true ;
00091
00092 if (!fifos.empty())
00093 msg_restant = true ;
00094
00095 return msg_tampon ;
00096 }
00097 else return 0 ;
00098 }
00099
00100
00104 NetworkMessage *
00105 Queues::giveTsoMessage(FederationTime heure_logique,
00106 bool &msg_donne,
00107 bool &msg_restant)
00108 {
00109 NetworkMessage *buffer_msg = NULL ;
00110
00111 msg_donne = false ;
00112 msg_restant = false ;
00113
00114 if (!tsos.empty()) {
00115 buffer_msg = tsos.front();
00116 if (buffer_msg->getDate() <= heure_logique) {
00117
00118
00119 tsos.pop_front();
00120 msg_donne = true ;
00121
00122
00123 if (!tsos.empty()) {
00124 NetworkMessage *buffer_msg2 ;
00125 buffer_msg2 = tsos.front();
00126
00127 if (buffer_msg2->getDate() <= heure_logique)
00128 msg_restant = true ;
00129 }
00130 return buffer_msg ;
00131 }
00132 else return NULL;
00133 }
00134 else return NULL;
00135 }
00136
00137
00141 void
00142 Queues::insertBeginCommand(NetworkMessage *msg)
00143 {
00144 commands.push_front(msg);
00145 }
00146
00147
00149 void
00150 Queues::insertLastCommand(NetworkMessage *msg)
00151 {
00152 commands.push_back(msg);
00153 }
00154
00155
00157 void
00158 Queues::insertFifoMessage(NetworkMessage *msg)
00159 {
00160 fifos.push_back(msg);
00161 }
00162
00163
00165 void
00166 Queues::insertTsoMessage(NetworkMessage *msg)
00167 {
00168 if (tsos.empty()) {
00169 tsos.push_front(msg);
00170 return ;
00171 }
00172 else {
00173 list<NetworkMessage *>::iterator i ;
00174 for (i = tsos.begin(); i != tsos.end(); i++) {
00175
00176
00177
00178 if ((*i)->getDate() > msg->getDate()) {
00179 tsos.insert(i, msg);
00180 return ;
00181 }
00182 }
00183 }
00184 tsos.push_back(msg);
00185 }
00186
00187 }}
00188
00189