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 }