src/helper/mobility-helper.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 09 Apr 2008 09:08:54 -0700
changeset 2897 cb427d45a011
parent 2834 1aab57845b07
child 2965 4b28e9740e3b
child 2995 b72805b3ca69
permissions -rw-r--r--
avoid compilation warning about undefined MobilityModel class.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2833
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     2
/*
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     3
 * Copyright (c) 2008 INRIA
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     4
 *
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     7
 * published by the Free Software Foundation;
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     8
 *
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    12
 * GNU General Public License for more details.
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    13
 *
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    15
 * along with this program; if not, write to the Free Software
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    17
 *
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
f3474fd850b2 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2701
diff changeset
    19
 */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#ifndef MOBILITY_HELPER_H
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#define MOBILITY_HELPER_H
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include <vector>
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "ns3/object-factory.h"
2438
e2ac9f9aeeb9 value.h -> attribute.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2433
diff changeset
    25
#include "ns3/attribute.h"
2700
c54fbae72e8f change signature of MobilityHelper::Layout and MobilityHelper::LayoutAll.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2603
diff changeset
    26
#include "ns3/position-allocator.h"
c54fbae72e8f change signature of MobilityHelper::Layout and MobilityHelper::LayoutAll.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2603
diff changeset
    27
#include "node-container.h"
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
namespace ns3 {
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
class PositionAllocator;
2401
281ea8b13525 add hierarchical support to MobilityHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
    32
class MobilityModel;
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
2700
c54fbae72e8f change signature of MobilityHelper::Layout and MobilityHelper::LayoutAll.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2603
diff changeset
    34
/**
c54fbae72e8f change signature of MobilityHelper::Layout and MobilityHelper::LayoutAll.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2603
diff changeset
    35
 * \brief assign positions and mobility models to nodes.
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    36
 *
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    37
 * MobilityHelper::Layout is the most important method here.
2700
c54fbae72e8f change signature of MobilityHelper::Layout and MobilityHelper::LayoutAll.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2603
diff changeset
    38
 */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
class MobilityHelper
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
{
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
public:
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  MobilityHelper ();
2897
cb427d45a011 avoid compilation warning about undefined MobilityModel class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2834
diff changeset
    43
  ~MobilityHelper ();
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    45
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    46
   * After this method is called, every call to MobilityHelper::Layout
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    47
   * will also attach to the new ns3::MobilityModel an ns3::MobilityModelNotifier
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    48
   * which can be used to listen to CourseChange events.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    49
   */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
  void EnableNotifier (void);
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    51
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    52
   * After this method is called, no ns3::MobilityModelNotifier object will
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    53
   * be associated to any new ns3::MobilityModel created by MobilityHelper::Layout.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    54
   * This will make it impossible to listen to "CourseChange" events from these
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    55
   * new ns3::MobilityModel instances.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    56
   */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
  void DisableNotifier (void);
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    59
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    60
   * \param allocator allocate initial node positions
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    61
   *
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    62
   * Set the position allocator which will be used to allocate
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    63
   * the initial position of every node in MobilityModel::Layout.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    64
   */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
  void SetPositionAllocator (Ptr<PositionAllocator> allocator);
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    67
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    68
   * \param type the type of mobility model to use.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    69
   * \param n1 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    70
   * \param v1 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    71
   * \param n2 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    72
   * \param v2 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    73
   * \param n3 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    74
   * \param v3 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    75
   * \param n4 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    76
   * \param v4 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    77
   * \param n5 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    78
   * \param v5 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    79
   * \param n6 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    80
   * \param v6 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    81
   * \param n7 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    82
   * \param v7 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    83
   * \param n8 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    84
   * \param v8 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    85
   * \param n9 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    86
   * \param v9 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    87
   */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
  void SetPositionAllocator (std::string type,
2433
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    89
			     std::string n1 = "", Attribute v1 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    90
			     std::string n2 = "", Attribute v2 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    91
			     std::string n3 = "", Attribute v3 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    92
			     std::string n4 = "", Attribute v4 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    93
			     std::string n5 = "", Attribute v5 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    94
			     std::string n6 = "", Attribute v6 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    95
			     std::string n7 = "", Attribute v7 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    96
			     std::string n8 = "", Attribute v8 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
    97
			     std::string n9 = "", Attribute v9 = Attribute ());
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
    99
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   100
   * \param type the type of mobility model to use.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   101
   * \param n1 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   102
   * \param v1 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   103
   * \param n2 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   104
   * \param v2 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   105
   * \param n3 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   106
   * \param v3 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   107
   * \param n4 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   108
   * \param v4 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   109
   * \param n5 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   110
   * \param v5 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   111
   * \param n6 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   112
   * \param v6 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   113
   * \param n7 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   114
   * \param v7 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   115
   * \param n8 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   116
   * \param v8 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   117
   * \param n9 the name of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   118
   * \param v9 the value of the attribute to set in the mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   119
   *
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   120
   * Calls to MobilityHelper::Layout will create an instance of a matching 
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   121
   * mobility model for each node.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   122
   */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
  void SetMobilityModel (std::string type,
2433
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   124
			 std::string n1 = "", Attribute v1 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   125
			 std::string n2 = "", Attribute v2 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   126
			 std::string n3 = "", Attribute v3 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   127
			 std::string n4 = "", Attribute v4 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   128
			 std::string n5 = "", Attribute v5 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   129
			 std::string n6 = "", Attribute v6 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   130
			 std::string n7 = "", Attribute v7 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   131
			 std::string n8 = "", Attribute v8 = Attribute (),
3a98e1db7f80 PValue -> Attribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2401
diff changeset
   132
			 std::string n9 = "", Attribute v9 = Attribute ());
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   134
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   135
   * \param reference item to push.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   136
   *
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   137
   * Push an item on the top of the stack of "reference mobility models".
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   138
   * The input item should be a node instance to which a mobility model
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   139
   * has already been aggregated (usually by a call to Layout).
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   140
   *
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   141
   * If this this stack is not empty when MobilityHelper::Layout
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   142
   * is called, the model from the top of the stack is used
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   143
   * to create a ns3::HierarchicalMobilityModel to make the
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   144
   * newly-created models define their positions relative to that
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   145
   * of the parent mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   146
   *
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   147
   * This method is typically used to create hierarchical mobility
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   148
   * patterns and positions by starting with the large-scale mobility
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   149
   * features, and, then, defining the smaller-scale movements relative
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   150
   * to a few reference points in the large-scale model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   151
   */
2401
281ea8b13525 add hierarchical support to MobilityHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
   152
  void PushReferenceMobilityModel (Ptr<Object> reference);
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   153
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   154
   * Remove the top item from the top of the stack of
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   155
   * "reference mobility models".
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   156
   */
2401
281ea8b13525 add hierarchical support to MobilityHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
   157
  void PopReferenceMobilityModel (void);
281ea8b13525 add hierarchical support to MobilityHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
   158
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   159
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   160
   * \returns a string which contains the TypeId of the currently-selected
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   161
   *          mobility model.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   162
   */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
  std::string GetMobilityModelType (void) const;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   165
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   166
   * \param container the set of nodes to layout.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   167
   *
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   168
   * For each input node, this method creates an instance of a ns3::MobilityModel
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   169
   * subclass (the type of which was set with MobilityHelper::SetMobilityModel), 
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   170
   * aggregates it to the mode, and sets an initial position based on the current 
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   171
   * position allocator (set through MobilityHelper::SetPositionAllocator). 
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   172
   * Optionally, this method will also create and aggregate a
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   173
   * ns3::MobilityModelNotifier to generate 'CourseChange' events based on the 
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   174
   * boolean flag set by MobilityHelper::EnableNotifier and MobilityHelper::DisableNotifier.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   175
   */
2700
c54fbae72e8f change signature of MobilityHelper::Layout and MobilityHelper::LayoutAll.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2603
diff changeset
   176
  void Layout (NodeContainer container);
2701
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   177
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   178
  /**
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   179
   * Perform the work of MobilityHelper::Layout on _all_ nodes which
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   180
   * exist in the simulation.
11e0e961ac86 doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2700
diff changeset
   181
   */
2700
c54fbae72e8f change signature of MobilityHelper::Layout and MobilityHelper::LayoutAll.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2603
diff changeset
   182
  void LayoutAll (void);
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
private:
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
2401
281ea8b13525 add hierarchical support to MobilityHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
   185
  std::vector<Ptr<MobilityModel> > m_mobilityStack;
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
  bool m_notifierEnabled;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
  ObjectFactory m_mobility;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
  Ptr<PositionAllocator> m_position;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
};
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
} // namespace ns3
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
#endif /* MOBILITY_HELPER_H */