src/core/fp-value.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 18 Feb 2008 03:01:42 +0100
changeset 2428 9c8d27c408db
parent 2427 9245ec163111
child 2433 3a98e1db7f80
permissions -rw-r--r--
move checker creation function to .cc file.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2385
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#include "fp-value.h"
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#include "object.h"
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
#include <sstream>
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
namespace ns3 {
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
FpValue::FpValue (double value)
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
  : m_value (value)
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
{}
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
PValue
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
FpValue::Copy (void) const
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
{
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
  return PValue::Create<FpValue> (*this);
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
}
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
void 
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
FpValue::Set (double value)
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
{
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
  m_value = value;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
}
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
double 
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
FpValue::Get (void) const
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
{
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
  return m_value;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
}
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
std::string 
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2385
diff changeset
    27
FpValue::SerializeToString (Ptr<const AttributeChecker> checker) const
2385
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
{
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
  std::ostringstream oss;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
  oss << m_value;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
  return oss.str ();
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
}
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
bool 
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2385
diff changeset
    34
FpValue::DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker)
2385
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
{
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
  double v;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  std::istringstream iss;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  iss.str (value);
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
  iss >> v;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
  bool ok = !iss.bad () && !iss.fail ();
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
  if (ok)
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
    {
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
      m_value = v;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
    }
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
  return ok;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
}
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
FpValue::FpValue (PValue value)
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
{
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
  const FpValue *v = value.DynCast<const FpValue *> ();
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
  if (v == 0)
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
    {
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
      NS_FATAL_ERROR ("assigning non-Fp value to Fp value.");
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
    }
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
  m_value = v->m_value;
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
}
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
FpValue::operator PValue () const
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
{
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  return PValue::Create<FpValue> (*this);
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
}
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
2428
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    62
Ptr<AttributeChecker> MakeFpChecker (double min, double max)
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    63
{
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    64
  struct Checker : public AttributeChecker
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    65
  {
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    66
    Checker (double minValue, double maxValue)
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    67
      : m_minValue (minValue),
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    68
      m_maxValue (maxValue) {}
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    69
    virtual bool Check (PValue value) const {
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    70
      const FpValue *v = value.DynCast<const FpValue *> ();
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    71
      if (v == 0)
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    72
	{
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    73
	  return false;
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    74
	}
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    75
      return v->Get () >= m_minValue && v->Get () <= m_maxValue;
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    76
    }
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    77
    double m_minValue;
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    78
    double m_maxValue;
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    79
  } *checker = new Checker (min, max);
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    80
  return Ptr<AttributeChecker> (checker, false);
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    81
}
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    82
9c8d27c408db move checker creation function to .cc file.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
    83
2385
ae4d6740d5a0 add back FpValue support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
} // namespace ns3