From be325774b31dee6717c787a59800643fb8d34640 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Tue, 5 Apr 2016 14:56:46 +0300 Subject: [PATCH] spectrum: Make it possible to chain propagation loss models For example, this change makes it possible to chain fading model with frequency-dependent pathloss model. --- src/spectrum/model/multi-model-spectrum-channel.cc | 11 +++++++++-- src/spectrum/model/single-model-spectrum-channel.cc | 10 ++++++++-- src/spectrum/model/spectrum-channel.h | 6 +++--- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/spectrum/model/multi-model-spectrum-channel.cc b/src/spectrum/model/multi-model-spectrum-channel.cc index 1461a8e5f..6f40d96e5 100644 --- a/src/spectrum/model/multi-model-spectrum-channel.cc +++ b/src/spectrum/model/multi-model-spectrum-channel.cc @@ -438,14 +438,21 @@ void MultiModelSpectrumChannel::AddPropagationLossModel (Ptr loss) { NS_LOG_FUNCTION (this << loss); - NS_ASSERT (m_propagationLoss == 0); + if (m_propagationLoss) + { + loss->SetNext (m_propagationLoss); + } m_propagationLoss = loss; } void MultiModelSpectrumChannel::AddSpectrumPropagationLossModel (Ptr loss) { - NS_ASSERT (m_spectrumPropagationLoss == 0); + NS_LOG_FUNCTION (this << loss); + if (m_spectrumPropagationLoss) + { + loss->SetNext (m_spectrumPropagationLoss); + } m_spectrumPropagationLoss = loss; } diff --git a/src/spectrum/model/single-model-spectrum-channel.cc b/src/spectrum/model/single-model-spectrum-channel.cc index 8a4e104da..fcceb1462 100644 --- a/src/spectrum/model/single-model-spectrum-channel.cc +++ b/src/spectrum/model/single-model-spectrum-channel.cc @@ -239,7 +239,10 @@ void SingleModelSpectrumChannel::AddPropagationLossModel (Ptr loss) { NS_LOG_FUNCTION (this << loss); - NS_ASSERT (m_propagationLoss == 0); + if (m_propagationLoss) + { + loss->SetNext (m_propagationLoss); + } m_propagationLoss = loss; } @@ -248,7 +251,10 @@ void SingleModelSpectrumChannel::AddSpectrumPropagationLossModel (Ptr loss) { NS_LOG_FUNCTION (this << loss); - NS_ASSERT (m_spectrumPropagationLoss == 0); + if (m_spectrumPropagationLoss) + { + loss->SetNext (m_spectrumPropagationLoss); + } m_spectrumPropagationLoss = loss; } diff --git a/src/spectrum/model/spectrum-channel.h b/src/spectrum/model/spectrum-channel.h index 1de4fbb06..09b95d562 100644 --- a/src/spectrum/model/spectrum-channel.h +++ b/src/spectrum/model/spectrum-channel.h @@ -55,7 +55,7 @@ public: static TypeId GetTypeId (void); /** - * Set the single-frequency propagation loss model to be used + * Add the single-frequency propagation loss model to be used * \warning only models that do not depend on the TX power should be used. * * \param loss a pointer to the propagation loss model to be used. @@ -63,13 +63,13 @@ public: virtual void AddPropagationLossModel (Ptr loss) = 0; /** - * Set the frequency-dependent propagation loss model to be used + * Add the frequency-dependent propagation loss model to be used * \param loss a pointer to the propagation loss model to be used. */ virtual void AddSpectrumPropagationLossModel (Ptr loss) = 0; /** - * Set the propagation delay model to be used + * Set the propagation delay model to be used * \param delay Ptr to the propagation delay model to be used. */ virtual void SetPropagationDelayModel (Ptr delay) = 0;