Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include "jaus/mobility/list/executelist.h"
00041 #include "jaus/core/scaledinteger.h"
00042
00043 const double JAUS::ExecuteList::Limits::MinSpeed = 0.0;
00044 const double JAUS::ExecuteList::Limits::MaxSpeed = 327.67;
00045
00046 using namespace JAUS;
00047
00056 ExecuteList::ExecuteList(const Address& dest, const Address& src) : Message(EXECUTE_LIST, dest, src)
00057 {
00058 mPresenceVector = 0;
00059 mSpeed = 0;
00060 mElementUID = 0;
00061 }
00062
00063
00069 ExecuteList::ExecuteList(const ExecuteList& message) : Message(EXECUTE_LIST)
00070 {
00071 mPresenceVector = 0;
00072 mSpeed = 0;
00073 mElementUID = 0;
00074 *this = message;
00075 }
00076
00077
00083 ExecuteList::~ExecuteList()
00084 {
00085 }
00086
00087
00097 bool ExecuteList::SetSpeed(const double value)
00098 {
00099 if(value >= Limits::MinSpeed && value <= Limits::MaxSpeed)
00100 {
00101 mSpeed = value;
00102 return true;
00103 }
00104 return false;
00105 }
00106
00107
00118 UShort ExecuteList::SetElementUID(const UShort uid)
00119 {
00120 mPresenceVector |= PresenceVector::ElementUID;
00121 return mElementUID = uid;
00122 }
00123
00124
00136 int ExecuteList::WriteMessageBody(Packet& packet) const
00137 {
00138 int expected = BYTE_SIZE;
00139 int written = 0;
00140
00141 written += packet.Write(mPresenceVector);
00142
00143 expected += USHORT_SIZE;
00144 written += ScaledInteger::Write(packet, mSpeed, Limits::MaxSpeed, Limits::MinSpeed, ScaledInteger::UShort);
00145 if((mPresenceVector & PresenceVector::ElementUID) > 0)
00146 {
00147 expected += USHORT_SIZE;
00148 written += packet.Write(mElementUID);
00149 }
00150
00151 return expected == written ? written : -1;
00152 }
00153
00154
00166 int ExecuteList::ReadMessageBody(const Packet& packet)
00167 {
00168 int expected = BYTE_SIZE;
00169 int read = 0;
00170
00171 read += packet.Read(mPresenceVector);
00172
00173 expected+= USHORT_SIZE;
00174 read += ScaledInteger::Read(packet, mSpeed, Limits::MaxSpeed, Limits::MinSpeed, ScaledInteger::UShort);
00175 if((mPresenceVector & PresenceVector::ElementUID) > 0)
00176 {
00177 expected += USHORT_SIZE;
00178 read += packet.Read(mElementUID);
00179 }
00180
00181 return expected == read ? read : -1;
00182 }
00183
00184
00190 void ExecuteList::ClearMessageBody()
00191 {
00192 mPresenceVector = 0;
00193 mSpeed = 0;
00194 mElementUID = 0;
00195 }
00196
00197
00205 int ExecuteList::RunTestCase() const
00206 {
00207 int result = 0;
00208
00209 Packet packet;
00210
00211 ExecuteList msg1, msg2;
00212
00213 msg1.SetElementUID(54);
00214 msg1.SetSpeed(5.5);
00215
00216 if((msg1.WriteMessageBody(packet) != -1) &&
00217 (msg2.ReadMessageBody(packet) != -1))
00218 {
00219 double diff = msg1.GetSpeed() - msg2.GetSpeed();
00220 if(msg2.AreFieldsPresent(PresenceVector::ElementUID) &&
00221 (msg1.GetElementUID() == msg2.GetElementUID()) &&
00222 (diff < 0.001))
00223 {
00224 result = 1;
00225 }
00226 }
00227
00228 return result;
00229 }
00230
00231
00237 ExecuteList& ExecuteList::operator=(const ExecuteList& message)
00238 {
00239 if(this != &message)
00240 {
00241 CopyHeaderData(&message);
00242 mPresenceVector = message.mPresenceVector;
00243 mSpeed = message.mSpeed;
00244 mElementUID = message.mElementUID;
00245 }
00246 return *this;
00247 }
00248
00249
00250