Signal.cc

00001 #include "Signal_.h"
00002 
00003 Signal::Signal(simtime_t start, simtime_t length):
00004   signalStart(start), signalLength(length),
00005   propDelay(0),
00006   power(0), bitrate(0),
00007   txBitrate(0),
00008   rcvPower(0)
00009 {}
00010 
00011 Signal::Signal(const Signal & o):
00012   signalStart(o.signalStart), signalLength(o.signalLength),
00013   propDelay(o.propDelay),
00014   senderMovement(o.senderMovement),
00015   power(0), bitrate(0),
00016   txBitrate(0),
00017   rcvPower(0)
00018 {
00019   if (o.power) {
00020     power = o.power->constClone();
00021   }
00022 
00023   if (o.bitrate) {
00024     bitrate = o.bitrate->clone();
00025   }
00026 
00027   if (o.txBitrate) {
00028     txBitrate = o.txBitrate->clone();
00029   }
00030 
00031   for(ConstMappingList::const_iterator it = o.attenuations.begin();
00032     it != o.attenuations.end(); it++){
00033     attenuations.push_back((*it)->constClone());
00034   }
00035 }
00036 
00037 const Signal& Signal::operator=(const Signal& o) {
00038   signalStart = o.signalStart;
00039   signalLength = o.signalLength;
00040   propDelay = o.propDelay;
00041   senderMovement = o.senderMovement;
00042 
00043   markRcvPowerOutdated();
00044 
00045   if(power){
00046     delete power;
00047     power = 0;
00048   }
00049 
00050   if(bitrate){
00051     delete bitrate;
00052     bitrate = 0;
00053   }
00054 
00055   if(txBitrate){
00056     delete txBitrate;
00057     txBitrate = 0;
00058   }
00059 
00060   if(o.power)
00061     power = o.power->constClone();
00062 
00063   if(o.bitrate)
00064     bitrate = o.bitrate->clone();
00065 
00066   if(o.txBitrate)
00067     txBitrate = o.txBitrate->clone();
00068 
00069   for(ConstMappingList::const_iterator it = attenuations.begin();
00070     it != attenuations.end(); it++){
00071     delete(*it);
00072   }
00073 
00074   attenuations.clear();
00075 
00076   for(ConstMappingList::const_iterator it = o.attenuations.begin();
00077     it != o.attenuations.end(); it++){
00078     attenuations.push_back((*it)->constClone());
00079   }
00080 
00081   return *this;
00082 }
00083 
00084 Signal::~Signal()
00085 {
00086   if(rcvPower){
00087     if(propDelay != 0){
00088       assert(rcvPower->getRefMapping() != power);
00089       delete rcvPower->getRefMapping();
00090     }
00091 
00092     delete rcvPower;
00093   }
00094 
00095   if(power)
00096     delete power;
00097 
00098   if(bitrate)
00099     delete bitrate;
00100 
00101   if(txBitrate)
00102     delete txBitrate;
00103 
00104   for(ConstMappingList::iterator it = attenuations.begin();
00105     it != attenuations.end(); it++) {
00106 
00107     delete *it;
00108   }
00109 }
00110 
00111 simtime_t Signal::getSignalStart() const {
00112   return signalStart + propDelay;
00113 }
00114 
00115 simtime_t Signal::getSignalLength() const{
00116   return signalLength;
00117 }
00118 
00119 simtime_t Signal::getPropagationDelay() const {
00120   return propDelay;
00121 }
00122 
00123 void Signal::setPropagationDelay(simtime_t delay) {
00124   assert(propDelay == 0);
00125   assert(!txBitrate);
00126 
00127   markRcvPowerOutdated();
00128 
00129   propDelay = delay;
00130 
00131   if(bitrate) {
00132     txBitrate = bitrate;
00133     bitrate = new DelayedMapping(txBitrate, propDelay);
00134   }
00135 }
00136 
00137 void Signal::setTransmissionPower(ConstMapping *power)
00138 {
00139   if(this->power){
00140     markRcvPowerOutdated();
00141     delete this->power;
00142   }
00143 
00144   this->power = power;
00145 }
00146 
00147 void Signal::setBitrate(Mapping *bitrate)
00148 {
00149   assert(!txBitrate);
00150 
00151   if(this->bitrate)
00152     delete this->bitrate;
00153 
00154   this->bitrate = bitrate;
00155 }
00156 
00157 void Signal::setMove(Move& move) {
00158   senderMovement = move;
00159 }
00160 
00161 Move Signal::getMove() const{
00162   return senderMovement;
00163 }