src/core/model/command-line.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Tue, 09 Jul 2013 13:14:19 -0700
changeset 9917 b61b15f922a2
parent 9829 0828b3ad8057
child 10143 48f66512ec9b
permissions -rw-r--r--
CommandLine callback example, show user defaults, code cleanup
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2581
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     2
/*
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     3
 * Copyright (c) 2008 INRIA
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     4
 *
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     7
 * published by the Free Software Foundation;
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     8
 *
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    12
 * GNU General Public License for more details.
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    13
 *
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    14
 * You should have received a copy of the GNU General Public License
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    15
 * along with this program; if not, write to the Free Software
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    17
 *
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    18
 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
31d4960dc31b add missing copyright statements.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2575
diff changeset
    19
 */
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
    20
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    21
#include <algorithm>  // for transform
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    22
#include <cctype>     // for tolower
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    23
#include <cstdlib>    // for exit
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
    24
#include <iomanip>    // for setw
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
    25
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    26
#include "command-line.h"
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    27
#include "log.h"
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    28
#include "config.h"
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    29
#include "global-value.h"
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    30
#include "system-path.h"
2965
4b28e9740e3b get rid of Attribute class. Use AttributeValue subclasses directly.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2693
diff changeset
    31
#include "type-id.h"
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    32
#include "string.h"
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
    33
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    34
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    35
NS_LOG_COMPONENT_DEFINE ("CommandLine");
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    36
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    37
namespace ns3 {
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    38
5844
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    39
CommandLine::CommandLine ()
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
    40
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    41
  NS_LOG_FUNCTION (this);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
    42
}
5844
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    43
CommandLine::CommandLine (const CommandLine &cmd)
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    44
{
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    45
  Copy (cmd);
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    46
}
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    47
CommandLine &
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    48
CommandLine::operator = (const CommandLine &cmd)
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    49
{
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    50
  Clear ();
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    51
  Copy (cmd);
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    52
  return *this;
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    53
}
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    54
CommandLine::~CommandLine ()
1703
3f808ee49c2f Fix CommandLine::AddArgCommand memory leak.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1702
diff changeset
    55
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    56
  NS_LOG_FUNCTION (this);
5844
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    57
  Clear ();
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    58
}
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    59
void
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    60
CommandLine::Copy (const CommandLine &cmd)
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    61
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    62
  NS_LOG_FUNCTION (&cmd);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    63
5844
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    64
  for (Items::const_iterator i = cmd.m_items.begin (); 
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    65
       i != cmd.m_items.end (); ++i)
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    66
    {
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    67
      m_items.push_back (*i);
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    68
    }
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    69
  m_usage = cmd.m_usage;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    70
  m_name  = cmd.m_name;
5844
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    71
}
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    72
void
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    73
CommandLine::Clear (void)
0dd442f011c7 add copy constructors and assignment operators to avoid leaks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5255
diff changeset
    74
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    75
  NS_LOG_FUNCTION (this);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    76
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    77
  for (Items::const_iterator i = m_items.begin (); i != m_items.end (); ++i)
1703
3f808ee49c2f Fix CommandLine::AddArgCommand memory leak.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1702
diff changeset
    78
    {
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    79
      delete *i;
1703
3f808ee49c2f Fix CommandLine::AddArgCommand memory leak.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1702
diff changeset
    80
    }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    81
  m_items.clear ();
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    82
  m_usage = "";
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    83
  m_name  = "";
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    84
}
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    85
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    86
void
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    87
CommandLine::Usage (const std::string usage)
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    88
{
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    89
  m_usage = usage;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    90
}
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    91
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    92
std::string
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    93
CommandLine::GetName () const
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    94
{
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
    95
  return m_name;
1703
3f808ee49c2f Fix CommandLine::AddArgCommand memory leak.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1702
diff changeset
    96
}
3f808ee49c2f Fix CommandLine::AddArgCommand memory leak.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1702
diff changeset
    97
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
    98
CommandLine::Item::~Item ()
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
    99
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   100
  NS_LOG_FUNCTION (this);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   101
}
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   102
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   103
void
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   104
CommandLine::Parse (int iargc, char *argv[])
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   105
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   106
  NS_LOG_FUNCTION (this << iargc << argv);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   107
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   108
  m_name = SystemPath::Split (argv[0]).back ();
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   109
  
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   110
  int argc = iargc;
1533
1e8249c58fda Fix infinite loop in CommandLine::Parse when trying to ignore a badly formed parameter.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 599
diff changeset
   111
  for (argc--, argv++; argc > 0; argc--, argv++)
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   112
    {
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   113
      // remove "--" or "-" heading.
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   114
      std::string param = *argv;
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   115
      std::string::size_type cur = param.find ("--");
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   116
      if (cur == 0)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   117
        {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   118
          param = param.substr (2, param.size () - 2);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   119
        }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   120
      else
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   121
        {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   122
          cur = param.find ("-");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   123
          if (cur == 0)
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   124
            {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   125
              param = param.substr (1, param.size () - 1);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   126
            }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   127
          else
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   128
            {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   129
              // invalid argument. ignore.
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   130
              continue;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   131
            }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   132
        }
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   133
      cur = param.find ("=");
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   134
      std::string name, value;
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   135
      if (cur == std::string::npos)
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   136
        {
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   137
          name = param;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   138
          value = "";
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   139
        }
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   140
      else
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   141
        {
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   142
          name = param.substr (0, cur);
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   143
          value = param.substr (cur + 1, param.size () - (cur+1));
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   144
        }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   145
      HandleArgument (name, value);
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   146
    }
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   147
}
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   148
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   149
void
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   150
CommandLine::PrintHelp (void) const
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   151
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   152
  NS_LOG_FUNCTION (this);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   153
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   154
  std::cout << m_name << " [Program Arguments] [General Arguments]"
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   155
            << std::endl;
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   156
  
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   157
  if (m_usage.length ())
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   158
    {
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   159
      std::cout << std::endl;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   160
      std::cout << m_usage << std::endl;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   161
    }
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   162
  
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   163
  if (!m_items.empty ())
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   164
    {
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   165
      size_t width = 0;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   166
      for (Items::const_iterator i = m_items.begin (); i != m_items.end (); ++i)
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   167
        {
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   168
          width = std::max (width, (*i)->m_name.size ());
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   169
        }
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   170
      width += 3;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   171
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   172
      std::cout << std::endl;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   173
      std::cout << "Program Arguments:" << std::endl;
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   174
      for (Items::const_iterator i = m_items.begin (); i != m_items.end (); ++i)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   175
        {
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   176
          std::cout << "    --"
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   177
                    << std::left << std::setw (width) << ( (*i)->m_name + ":")
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   178
                    << std::right
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   179
                    << (*i)->m_help;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   180
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   181
          if ( (*i)->HasDefault ())
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   182
            {
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   183
              std::cout << " [" << (*i)->GetDefault () << "]";
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   184
            }
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   185
          std::cout << std::endl;
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   186
        }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   187
    }
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   188
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   189
  std::cout << std::endl;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   190
  std::cout
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   191
    << "General Arguments:\n"
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   192
    << "    --PrintGlobals:              Print the list of globals.\n"
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   193
    << "    --PrintGroups:               Print the list of groups.\n"
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   194
    << "    --PrintGroup=[group]:        Print all TypeIds of group.\n"
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   195
    << "    --PrintTypeIds:              Print all TypeIds.\n"
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   196
    << "    --PrintAttributes=[typeid]:  Print all attributes of typeid.\n"
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   197
    << "    --PrintHelp:                 Print this help message.\n"
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   198
    << std::endl;
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   199
}
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   200
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   201
void
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   202
CommandLine::PrintGlobals (void) const
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   203
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   204
  NS_LOG_FUNCTION (this);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   205
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   206
  std::cout << "Global values:" << std::endl;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   207
  
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   208
  for (GlobalValue::Iterator i = GlobalValue::Begin ();
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   209
       i != GlobalValue::End ();
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   210
       ++i)
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   211
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   212
      std::cout << "    --" << (*i)->GetName () << "=[";
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   213
      Ptr<const AttributeChecker> checker = (*i)->GetChecker ();
2965
4b28e9740e3b get rid of Attribute class. Use AttributeValue subclasses directly.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2693
diff changeset
   214
      StringValue v;
4b28e9740e3b get rid of Attribute class. Use AttributeValue subclasses directly.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2693
diff changeset
   215
      (*i)->GetValue (v);
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   216
      std::cout << v.Get () << "]" << std::endl;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   217
      std::cout << "        " << (*i)->GetHelp () << std::endl;
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   218
    }
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   219
}
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   220
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   221
void
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   222
CommandLine::PrintAttributes (std::string type) const
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   223
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   224
  NS_LOG_FUNCTION (this);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   225
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   226
  TypeId tid;
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   227
  if (!TypeId::LookupByNameFailSafe (type, &tid))
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   228
    {
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   229
      NS_FATAL_ERROR ("Unknown type=" << type << " in --PrintAttributes");
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   230
    }
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   231
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   232
  std::cout << "Attributes for TypeId " << tid.GetName () << std::endl;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   233
  
2693
56e28e34e109 TypeId::GetAttributeListN -> TypeId::GetAttributeN
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2629
diff changeset
   234
  for (uint32_t i = 0; i < tid.GetAttributeN (); ++i)
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   235
    {
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   236
      std::cout << "    --" << tid.GetAttributeFullName (i) << "=[";
7393
8c3dfe0be54d use new API. kill old one.
Mathieu Lacage <mathieu.lacage@gmail.com>
parents: 7169
diff changeset
   237
      struct TypeId::AttributeInformation info = tid.GetAttribute (i);
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   238
      std::cout << info.initialValue->SerializeToString (info.checker) << "]"
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   239
                << std::endl;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   240
      std::cout << "        " << info.help << std::endl;
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   241
    }
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   242
}
1702
0fbe74581141 Bug 81 (CommandLine::AddArgValue not working correctly)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1533
diff changeset
   243
0fbe74581141 Bug 81 (CommandLine::AddArgValue not working correctly)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1533
diff changeset
   244
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   245
void
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   246
CommandLine::PrintGroup (std::string group) const
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   247
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   248
  NS_LOG_FUNCTION (this);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   249
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   250
  std::cout << "TypeIds in group " << group << ":" << std::endl;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   251
  
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   252
  for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   253
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   254
      TypeId tid = TypeId::GetRegistered (i);
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   255
      if (tid.GetGroupName () == group)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   256
        {
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   257
          std::cout << "    " <<tid.GetName () << std::endl;
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   258
        }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   259
    }
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   260
}
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   261
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   262
void
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   263
CommandLine::PrintTypeIds (void) const
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   264
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   265
  NS_LOG_FUNCTION (this);
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   266
  std::cout << "Registered TypeIds:" << std::endl;
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   267
  for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   268
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   269
      TypeId tid = TypeId::GetRegistered (i);
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   270
      std::cout << "    " << tid.GetName () << std::endl;
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   271
    }
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   272
}
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   273
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   274
void
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   275
CommandLine::PrintGroups (void) const
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   276
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   277
  NS_LOG_FUNCTION (this);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   278
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   279
  std::list<std::string> groups;
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   280
  for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   281
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   282
      TypeId tid = TypeId::GetRegistered (i);
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   283
      std::string group = tid.GetGroupName ();
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   284
      if (group == "")
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   285
        {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   286
          continue;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   287
        }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   288
      bool found = false;
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   289
      for (std::list<std::string>::const_iterator j = groups.begin ();
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   290
           j != groups.end ();
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   291
           ++j)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   292
        {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   293
          if (*j == group)
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   294
            {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   295
              found = true;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   296
              break;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   297
            }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   298
        }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   299
      if (!found)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   300
        {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   301
          groups.push_back (group);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7003
diff changeset
   302
        }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   303
    }
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   304
  
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   305
  std::cout << "Registered TypeId groups:" << std::endl;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   306
  
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   307
  for (std::list<std::string>::const_iterator k = groups.begin ();
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   308
       k != groups.end ();
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   309
       ++k)
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   310
    {
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   311
      std::cout << "    " << *k << std::endl;
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   312
    }
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   313
}
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   314
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   315
void
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   316
CommandLine::HandleArgument (std::string name, std::string value) const
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   317
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   318
  NS_LOG_FUNCTION (this << name << value);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   319
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   320
  NS_LOG_DEBUG ("Handle arg name=" << name << " value=" << value);
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   321
  if (name == "PrintHelp" || name == "help")
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   322
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   323
      // method below never returns.
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   324
      PrintHelp ();
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
   325
      std::exit (0);
4490
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   326
    } 
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   327
  else if (name == "PrintGroups")
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   328
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   329
      // method below never returns.
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   330
      PrintGroups ();
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
   331
      std::exit (0);
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   332
    }
4490
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   333
  else if (name == "PrintTypeIds")
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   334
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   335
      // method below never returns.
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   336
      PrintTypeIds ();
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
   337
      std::exit (0);
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   338
    }
4490
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   339
  else if (name == "PrintGlobals")
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   340
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   341
      // method below never returns.
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   342
      PrintGlobals ();
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
   343
      std::exit (0);
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   344
    }
4490
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   345
  else if (name == "PrintGroup")
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   346
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   347
      // method below never returns.
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   348
      PrintGroup (value);
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
   349
      std::exit (0);
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   350
    }
4490
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   351
  else if (name == "PrintAttributes")
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   352
    {
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   353
      // method below never returns.
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   354
      PrintAttributes (value);
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
   355
      std::exit (0);
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   356
    }
4490
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   357
  else
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   358
    {
4490
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   359
      for (Items::const_iterator i = m_items.begin (); i != m_items.end (); ++i)
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   360
        {
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   361
          if ((*i)->m_name == name)
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   362
            {
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   363
              if (!(*i)->Parse (value))
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   364
                {
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   365
                  std::cerr << "Invalid argument value: "
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   366
                            << name << "=" << value << std::endl;
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
   367
                  std::exit (1);
4490
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   368
                }
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   369
              else
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   370
                {
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   371
                  return;
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   372
                }
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   373
            }
6aa43c812fec bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3929
diff changeset
   374
        }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   375
    }
2965
4b28e9740e3b get rid of Attribute class. Use AttributeValue subclasses directly.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2693
diff changeset
   376
  if (!Config::SetGlobalFailSafe (name, StringValue (value))
4b28e9740e3b get rid of Attribute class. Use AttributeValue subclasses directly.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2693
diff changeset
   377
      && !Config::SetDefaultFailSafe (name, StringValue (value)))
2629
085df3e28a28 Fix parsing of GlobalValues as command line options.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2612
diff changeset
   378
    {
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   379
      std::cerr << "Invalid command-line arguments: --"
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   380
                << name << "=" << value << std::endl;
2629
085df3e28a28 Fix parsing of GlobalValues as command line options.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2612
diff changeset
   381
      PrintHelp ();
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7393
diff changeset
   382
      std::exit (1);
2629
085df3e28a28 Fix parsing of GlobalValues as command line options.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2612
diff changeset
   383
    }
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   384
}
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2195
diff changeset
   385
3929
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   386
bool
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   387
CommandLine::CallbackItem::Parse (std::string value)
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   388
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   389
  NS_LOG_FUNCTION (this);
3929
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   390
  NS_LOG_DEBUG ("CommandLine::CallbackItem::Parse \"" << value << "\"");
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   391
  return m_callback (value);
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   392
}
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   393
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   394
void
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   395
CommandLine::AddValue (const std::string &name,
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   396
                       const std::string &help,
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   397
                       Callback<bool, std::string> callback)
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   398
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   399
  NS_LOG_FUNCTION (this << &name << &help << &callback);
3929
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   400
  CallbackItem *item = new CallbackItem ();
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   401
  item->m_name = name;
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   402
  item->m_help = help;
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   403
  item->m_callback = callback;
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   404
  m_items.push_back (item);
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   405
}
909b0a724ed3 Bug 289: CommandLine::AddValue is not wrapped
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2972
diff changeset
   406
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   407
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   408
bool
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   409
CommandLine::Item::HasDefault () const
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   410
{
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   411
  return false;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   412
}
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   413
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   414
std::string
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   415
CommandLine::Item::GetDefault () const
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   416
{
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   417
  return "";
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   418
}
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   419
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   420
template <>
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   421
bool
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   422
CommandLineHelper::UserItemParse<bool> (const std::string value, bool & val)
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   423
{
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   424
  std::string src = value;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   425
  std::transform(src.begin(), src.end(), src.begin(), ::tolower);
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   426
  
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   427
  if ( (src.length () == 0) || (src == "true") || (src == "t"))
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   428
    {
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   429
      val = true;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   430
      return true;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   431
    }
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   432
  else if ( (src == "false") || (src == "f"))
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   433
    {
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   434
      val = false;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   435
      return true;
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   436
    }
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   437
  else
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   438
    {
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   439
      std::istringstream iss;
9917
b61b15f922a2 CommandLine callback example, show user defaults, code cleanup
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9829
diff changeset
   440
      iss.str (src);
9829
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   441
      iss >> val;
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   442
      return !iss.bad () && !iss.fail ();
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   443
    }
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   444
}
0828b3ad8057 CommandLine: add Usage message, simplify bool args
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9193
diff changeset
   445
5246
0974f3a8f379 Remove and replace CommandLine BVT (bug 675)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4490
diff changeset
   446
} // namespace ns3