support DefaultValue

This commit is contained in:
Mathieu Lacage
2007-10-11 16:16:31 +02:00
parent 4f562dbbfb
commit 268e4d5ec9
2 changed files with 127 additions and 3 deletions

View File

@@ -1,16 +1,98 @@
#include "propagation-loss-model.h"
#include "ns3/default-value.h"
#include "ns3/random-variable-default-value.h"
#include <math.h>
namespace ns3 {
enum ModelType {
FRIIS,
RANDOM,
PATH_LOSS
};
static EnumDefaultValue<enum ModelType> g_modelType
("PropagationLossModelType",
"The type of propagation loss model.",
PATH_LOSS, "PathLoss",
FRIIS, "Friis",
RANDOM, "Random",
0, (void *)0);
static NumericDefaultValue<double> g_friisLambda
("FriisPropagationLambda",
"The wavelength to use by default for every FriisPropagationLossModel (default is 5.15 GHz at 300 000 km/s).",
300000000.0 / 5.150e9);
static NumericDefaultValue<double> g_friisSystemLoss
("FriisPropagationSystemLoss",
"The system loss to use by default for every FriisPropagationLossModel",
1.0);
static RandomVariableDefaultValue g_random
("RandomPropagation",
"The distribution (in dbm) to choose the propagation loss.",
"Constant:1.0");
static NumericDefaultValue<double> g_pathLossExponent
("PathLossPropagationExponent",
"The exponent of the Path Loss propagation model",
3.0);
static EnumDefaultValue<enum ModelType> g_pathLossReference
("PathLossPropagationReferenceType",
"The type of reference propagation model.",
FRIIS, "Friis",
RANDOM, "Random",
0, (void *)0);
const double FriisPropagationLossModel::PI = 3.1415;
PropagationLossModel::~PropagationLossModel ()
{}
Ptr<PropagationLossModel>
PropagationLossModel::CreateDefault (void)
{
switch (g_modelType.GetValue ()) {
case FRIIS:
return Create<FriisPropagationLossModel> ();
break;
case RANDOM:
return Create<RandomPropagationLossModel> ();
break;
case PATH_LOSS:
return Create<PathLossPropagationLossModel> ();
break;
default:
NS_ASSERT (false);
return 0;
break;
}
}
RandomPropagationLossModel::RandomPropagationLossModel ()
: m_variable (g_random.GetCopy ())
{}
RandomPropagationLossModel::RandomPropagationLossModel (const RandomVariable &variable)
: m_variable (variable.Copy ())
{}
RandomPropagationLossModel::~RandomPropagationLossModel ()
{
delete m_variable;
}
double
RandomPropagationLossModel::GetRxPower (double txPowerDbm,
double distance) const
{
return txPowerDbm - m_variable->GetValue ();
}
FriisPropagationLossModel::FriisPropagationLossModel ()
: m_lambda (),
m_systemLoss (1.0)
: m_lambda (g_friisLambda.GetValue ()),
m_systemLoss (g_friisSystemLoss.GetValue ())
{}
void
FriisPropagationLossModel::SetSystemLoss (double systemLoss)
@@ -83,6 +165,8 @@ FriisPropagationLossModel::GetRxPower (double txPowerDbm,
PathLossPropagationLossModel::PathLossPropagationLossModel ()
: m_exponent (g_pathLossExponent.GetValue ()),
m_reference (CreateDefaultReference ())
{}
void
@@ -90,12 +174,35 @@ PathLossPropagationLossModel::SetPathLossExponent (double n)
{
m_exponent = n;
}
void
PathLossPropagationLossModel::SetReferenceModel (Ptr<PropagationLossModel> model)
{
m_reference = model;
}
double
PathLossPropagationLossModel::GetPathLossExponent (void) const
{
return m_exponent;
}
Ptr<PropagationLossModel>
PathLossPropagationLossModel::CreateDefaultReference (void)
{
switch (g_pathLossReference.GetValue ()) {
case RANDOM:
return Create<RandomPropagationLossModel> ();
break;
case FRIIS:
return Create<FriisPropagationLossModel> ();
break;
case PATH_LOSS:
default:
NS_ASSERT (false);
return 0;
break;
}
}
double
PathLossPropagationLossModel::DbToW (double db) const
{

View File

@@ -5,12 +5,29 @@
namespace ns3 {
class RandomVariable;
class PropagationLossModel : public Object
{
public:
virtual ~PropagationLossModel ();
virtual double GetRxPower (double txPowerDbm,
double distance) const = 0;
static Ptr<PropagationLossModel> CreateDefault (void);
};
class RandomPropagationLossModel : public PropagationLossModel
{
public:
RandomPropagationLossModel ();
RandomPropagationLossModel (const RandomVariable &variable);
virtual ~RandomPropagationLossModel ();
virtual double GetRxPower (double txPowerDbm,
double distance) const;
private:
RandomVariable *m_variable;
};
class FriisPropagationLossModel : public PropagationLossModel
@@ -48,8 +65,8 @@ public:
double distance) const;
private:
double DbToW (double db) const;
static Ptr<PropagationLossModel> CreateDefaultReference (void);
double m_lambda;
double m_exponent;
Ptr<PropagationLossModel> m_reference;
};