samples/main-default-value.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Tue, 06 Nov 2007 15:11:22 +0100
changeset 2082 d041fc198aad
parent 1702 0fbe74581141
permissions -rw-r--r--
a real test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
441
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     2
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     3
#include <string>
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     4
#include "ns3/default-value.h"
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     5
#include "ns3/command-line.h"
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1224
diff changeset
     6
#include "ns3/log.h"
441
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     7
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     8
using namespace ns3;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     9
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    10
//
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    11
// This sample file demonstrates how to take some simple member
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    12
// variables and hook them into the default variable system
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    13
// Typically, you will establish a static variable to maintain the current
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    14
// value of the default parameter.  Then as other code require the values of 
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    15
// the defaults, they query them with GetValue() to get the present value.
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    16
static BooleanDefaultValue defaultTestBool1 ("testBool1", "helpBool", true);
959
bc215f926abd IntegerDefaultValue -> NumericDefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 441
diff changeset
    17
static NumericDefaultValue<int> defaultTestInt1 ("testInt1", "helpInt1", 33);
bc215f926abd IntegerDefaultValue -> NumericDefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 441
diff changeset
    18
static NumericDefaultValue<uint32_t> defaultTestInt2 ("testInt2", "helpInt2", 47);
441
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    19
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    20
// 
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    21
// This test class demonstrates the declaration of variables that
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    22
// may be overridden by the default-value system
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    23
//
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    24
// You will see in the core ns-3 modules that many member variables
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    25
// can be overridden in this manner 
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    26
//
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    27
class TestClass {
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    28
public:
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    29
  TestClass();
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    30
  virtual ~TestClass () {}
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    31
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    32
  bool m_testBool1;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    33
  int m_testInt1;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    34
  uint32_t m_testInt2;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    35
};
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    36
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    37
//
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    38
// In the constructor, you can assign default values in the initializer
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    39
// list such as below; note that the instance of the created TestClass
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    40
// will have the values as dictated by the current value of the default.
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    41
// This means that the behavior of this class can be changed on the fly with
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    42
// calls to bind.
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    43
//
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    44
TestClass::TestClass () : 
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    45
  m_testBool1(defaultTestBool1.GetValue()),
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    46
  m_testInt1(defaultTestInt1.GetValue()),
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    47
  m_testInt2(defaultTestInt2.GetValue())
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    48
{
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    49
}
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    50
using std::cout;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    51
int main (int argc, char* argv[])
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    52
{
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    53
  //The following allows the default values established so far to be hooked
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    54
  //into the command line argument processing unit.  Essentially, the command
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    55
  //line processor is aware of the DefaultValues that have been registered, and
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    56
  //will accept command line overrides of these.  The call automatically
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    57
  //provides a --help option in addition to allowing overrides of defaults.
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    58
  uint32_t loops = 0;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    59
  CommandLine::AddArgValue("loops","a test of the command line",loops);
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    60
  CommandLine::Parse(argc,argv);
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    61
  
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    62
  //utilize the loops variable to show that it can be read from the command line
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    63
  if(loops>0)
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    64
  {
1702
0fbe74581141 Bug 81 (CommandLine::AddArgValue not working correctly)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1504
diff changeset
    65
    std::cerr<<"You requested "<<loops<<" iterations of a loop";
441
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    66
    for(uint32_t i=0;i<loops;++i)
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    67
      cout<<"iteration "<<i;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    68
  }
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    69
  
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    70
  // Before objects are instantiated in your simulation script, you have
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    71
  // the opportunity to overwrite any default value in the system.  
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    72
  // The Bind () method allows you to specify the name (string) of the
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    73
  // global variable and value (string) to overwrite the default.
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    74
  // Here, the default value of 33 for testInt1 is overwritten with 57
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    75
  // 
1224
7cbc1d661b89 rename Bind to DefaultValue::Bind. fix bug 62
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 959
diff changeset
    76
  DefaultValue::Bind("testInt1", "57");
441
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    77
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    78
  TestClass* testclass = new TestClass ();
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1224
diff changeset
    79
  NS_LOG_UNCOND("TestBool1 default value (" << testclass->m_testBool1 << ")");
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1224
diff changeset
    80
  NS_LOG_UNCOND("TestInt1 default value (" << testclass->m_testInt1 << ")");
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1224
diff changeset
    81
  NS_LOG_UNCOND("TestInt2 default value (" << testclass->m_testInt2 << ")");
441
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    82
  delete testclass;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    83
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    84
  return 0;
d824620eac38 Added default value sample
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    85
}