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 }