src/mobility/position-allocator.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 13 Mar 2008 12:56:49 -0700
changeset 2602 d9262bff6df2
parent 2580 68d9f5888995
child 2621 b0e140bbeeee
permissions -rw-r--r--
add back support for introspected doxygen.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1460
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     2
/*
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     3
 * Copyright (c) 2007 INRIA
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     4
 *
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     7
 * published by the Free Software Foundation;
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     8
 *
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    12
 * GNU General Public License for more details.
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    13
 *
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    14
 * You should have received a copy of the GNU General Public License
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    15
 * along with this program; if not, write to the Free Software
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    17
 *
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    19
 */
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    20
#include "position-allocator.h"
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "ns3/random-variable.h"
2456
8f40bc572412 fp-value -> double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2454
diff changeset
    22
#include "ns3/double.h"
2580
68d9f5888995 attribute should be Uinteger, not Integer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2578
diff changeset
    23
#include "ns3/uinteger.h"
2457
87f009efcb3f enum-value -> enum
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2456
diff changeset
    24
#include "ns3/enum.h"
1507
11a370eecc52 allow discrete levels
Craig Dowell <craigdo@ee.washington.edu>
parents: 1460
diff changeset
    25
#include "ns3/log.h"
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include <cmath>
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    28
NS_LOG_COMPONENT_DEFINE ("PositionAllocator");
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
namespace ns3 {
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    32
NS_OBJECT_ENSURE_REGISTERED (PositionAllocator);
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
    33
2250
18f432098389 InterfaceId -> TypeId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2249
diff changeset
    34
TypeId 
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    35
PositionAllocator::GetTypeId (void)
2232
9abd038ee588 replace static const Interface iid; with static InterfaceId iid (void);
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
    36
{
2602
d9262bff6df2 add back support for introspected doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2580
diff changeset
    37
  static TypeId tid = TypeId ("ns3::PositionAllocator")
2238
05affd9d0dc1 get rid of MakeInterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
    38
    .SetParent<Object> ();
2252
80595448707a iid -> tid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2251
diff changeset
    39
  return tid;
2232
9abd038ee588 replace static const Interface iid; with static InterfaceId iid (void);
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
    40
}
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    42
PositionAllocator::PositionAllocator ()
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
{
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
}
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    46
PositionAllocator::~PositionAllocator ()
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
{}
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
2518
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    49
NS_OBJECT_ENSURE_REGISTERED (ListPositionAllocator);
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    50
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    51
TypeId 
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    52
ListPositionAllocator::GetTypeId (void)
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    53
{
2602
d9262bff6df2 add back support for introspected doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2580
diff changeset
    54
  static TypeId tid = TypeId ("ns3::ListPositionAllocator")
2518
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    55
    .SetParent<PositionAllocator> ()
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    56
    .AddConstructor<ListPositionAllocator> ()
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    57
    ;
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    58
  return tid;
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    59
}
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    60
ListPositionAllocator::ListPositionAllocator ()
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    61
{}
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    62
void 
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    63
ListPositionAllocator::Add (Vector v)
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    64
{
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    65
  m_positions.push_back (v);
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    66
  m_current = m_positions.begin ();
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    67
}
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    68
Vector 
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    69
ListPositionAllocator::GetNext (void) const
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    70
{
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    71
  Vector v = *m_current;
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    72
  m_current++;
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    73
  return v;
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    74
}
54022e0d243b add ListPositionAllocator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2503
diff changeset
    75
2578
685b62ddfbd8 forgot to ensure registration of GridPositionAllocator.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2518
diff changeset
    76
NS_OBJECT_ENSURE_REGISTERED (GridPositionAllocator);
685b62ddfbd8 forgot to ensure registration of GridPositionAllocator.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2518
diff changeset
    77
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    78
TypeId 
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    79
GridPositionAllocator::GetTypeId (void)
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    80
{
2602
d9262bff6df2 add back support for introspected doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2580
diff changeset
    81
  static TypeId tid = TypeId ("ns3::GridPositionAllocator")
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    82
    .SetParent<PositionAllocator> ()
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    83
    .SetGroupName ("Mobility")
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    84
    .AddConstructor<GridPositionAllocator> ()
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
    85
    .AddAttribute ("GridWidth", "The number of objects layed out on a line.",
2580
68d9f5888995 attribute should be Uinteger, not Integer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2578
diff changeset
    86
                   Uinteger (10),
68d9f5888995 attribute should be Uinteger, not Integer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2578
diff changeset
    87
                   MakeUintegerAccessor (&GridPositionAllocator::m_n),
68d9f5888995 attribute should be Uinteger, not Integer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2578
diff changeset
    88
                   MakeUintegerChecker<uint32_t> ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
    89
    .AddAttribute ("MinX", "The x coordinate where the grid starts.",
2444
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
    90
                   Double (1.0),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
    91
                   MakeDoubleAccessor (&GridPositionAllocator::m_xMin),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
    92
                   MakeDoubleChecker<double> ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
    93
    .AddAttribute ("MinY", "The y coordinate where the grid starts.",
2444
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
    94
                   Double (0.0),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
    95
                   MakeDoubleAccessor (&GridPositionAllocator::m_yMin),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
    96
                   MakeDoubleChecker<double> ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
    97
    .AddAttribute ("DeltaX", "The x space between objects.",
2444
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
    98
                   Double (1.0),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
    99
                   MakeDoubleAccessor (&GridPositionAllocator::m_deltaX),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   100
                   MakeDoubleChecker<double> ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
   101
    .AddAttribute ("DeltaY", "The y space between objects.",
2444
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   102
                   Double (1.0),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   103
                   MakeDoubleAccessor (&GridPositionAllocator::m_deltaY),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   104
                   MakeDoubleChecker<double> ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
   105
    .AddAttribute ("LayoutType", "The type of layout.",
2440
baffd08c6898 EnumValue -> Value
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2439
diff changeset
   106
                   Enum (ROW_FIRST),
2435
3128175f5866 ParamSpec -> Accessor
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
   107
                   MakeEnumAccessor (&GridPositionAllocator::m_layoutType),
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   108
                   MakeEnumChecker (ROW_FIRST, "RowFirst",
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   109
                                    COLUMN_FIRST, "ColumnFirst"))
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   110
    ;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   111
  return tid;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   112
}
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   113
GridPositionAllocator::GridPositionAllocator ()
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   114
  : m_current (0)
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   115
{}
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   116
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   117
Vector 
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   118
GridPositionAllocator::GetNext (void) const
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   119
{
2499
806f6efe1c33 fix optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2458
diff changeset
   120
  double x = 0.0, y = 0.0;
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   121
  switch (m_layoutType) {
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   122
  case ROW_FIRST:
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   123
    x = m_xMin + m_deltaX * (m_current % m_n);
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   124
    y = m_yMin + m_deltaY * (m_current / m_n);
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   125
    break;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   126
  case COLUMN_FIRST:
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   127
    x = m_xMin + m_deltaX * (m_current / m_n);
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   128
    y = m_yMin + m_deltaY * (m_current % m_n);
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   129
    break;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   130
  }
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   131
  m_current++;
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   132
  return Vector (x, y, 0.0);
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   133
}
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   134
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   135
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   136
NS_OBJECT_ENSURE_REGISTERED (RandomRectanglePositionAllocator);
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   137
2250
18f432098389 InterfaceId -> TypeId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2249
diff changeset
   138
TypeId
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   139
RandomRectanglePositionAllocator::GetTypeId (void)
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   140
{
2602
d9262bff6df2 add back support for introspected doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2580
diff changeset
   141
  static TypeId tid = TypeId ("ns3::RandomRectanglePositionAllocator")
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   142
    .SetParent<PositionAllocator> ()
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   143
    .SetGroupName ("Mobility")
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   144
    .AddConstructor<RandomRectanglePositionAllocator> ()
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
   145
    .AddAttribute ("X",
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   146
                   "A random variable which represents the x coordinate of a position in a random rectangle.",
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
   147
                   UniformVariable (0.0, 1.0),
2435
3128175f5866 ParamSpec -> Accessor
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
   148
                   MakeRandomVariableAccessor (&RandomRectanglePositionAllocator::m_x),
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   149
                   MakeRandomVariableChecker ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
   150
    .AddAttribute ("Y",
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   151
                   "A random variable which represents the y coordinate of a position in a random rectangle.",
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
   152
                   UniformVariable (0.0, 1.0),
2435
3128175f5866 ParamSpec -> Accessor
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
   153
                   MakeRandomVariableAccessor (&RandomRectanglePositionAllocator::m_y),
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   154
                   MakeRandomVariableChecker ());
2252
80595448707a iid -> tid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2251
diff changeset
   155
  return tid;
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   156
}
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   157
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   158
RandomRectanglePositionAllocator::RandomRectanglePositionAllocator ()
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
{}
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   160
RandomRectanglePositionAllocator::~RandomRectanglePositionAllocator ()
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2373
diff changeset
   161
{}
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1507
diff changeset
   162
Vector
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   163
RandomRectanglePositionAllocator::GetNext (void) const
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
{
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2373
diff changeset
   165
  double x = m_x.GetValue ();
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2373
diff changeset
   166
  double y = m_y.GetValue ();
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1507
diff changeset
   167
  return Vector (x, y, 0.0);
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
}
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   170
NS_OBJECT_ENSURE_REGISTERED (RandomDiscPositionAllocator);
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   171
2250
18f432098389 InterfaceId -> TypeId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2249
diff changeset
   172
TypeId
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   173
RandomDiscPositionAllocator::GetTypeId (void)
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   174
{
2602
d9262bff6df2 add back support for introspected doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2580
diff changeset
   175
  static TypeId tid = TypeId ("ns3::RandomDiscPositionAllocator")
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   176
    .SetParent<PositionAllocator> ()
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   177
    .SetGroupName ("Mobility")
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   178
    .AddConstructor<RandomDiscPositionAllocator> ()
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
   179
    .AddAttribute ("Theta",
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   180
                   "A random variable which represents the angle (gradients) of a position in a random disc.",
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
   181
                   UniformVariable (0.0, 6.2830),
2435
3128175f5866 ParamSpec -> Accessor
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
   182
                   MakeRandomVariableAccessor (&RandomDiscPositionAllocator::m_theta),
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   183
                   MakeRandomVariableChecker ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
   184
    .AddAttribute ("Rho",
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   185
                   "A random variable which represents the radius of a position in a random disc.",
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2399
diff changeset
   186
                   UniformVariable (0.0, 200.0),
2435
3128175f5866 ParamSpec -> Accessor
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2427
diff changeset
   187
                   MakeRandomVariableAccessor (&RandomDiscPositionAllocator::m_rho),
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   188
                   MakeRandomVariableChecker ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
   189
    .AddAttribute ("X",
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   190
                   "The x coordinate of the center of the random position disc.",
2444
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   191
                   Double (0.0),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   192
                   MakeDoubleAccessor (&RandomDiscPositionAllocator::m_x),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   193
                   MakeDoubleChecker<double> ())
2458
e8f7c4960576 AddParameter -> AddAttribute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2457
diff changeset
   194
    .AddAttribute ("Y",
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   195
                   "The y coordinate of the center of the random position disc.",
2444
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   196
                   Double (0.0),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   197
                   MakeDoubleAccessor (&RandomDiscPositionAllocator::m_y),
74fb004db27c fpValue -> Double
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2440
diff changeset
   198
                   MakeDoubleChecker<double> ())
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   199
    ;
2252
80595448707a iid -> tid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2251
diff changeset
   200
  return tid;
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   201
}   
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   202
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   203
RandomDiscPositionAllocator::RandomDiscPositionAllocator ()
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
{}
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   205
RandomDiscPositionAllocator::~RandomDiscPositionAllocator ()
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2373
diff changeset
   206
{}
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1507
diff changeset
   207
Vector
2399
fd9d94d518d2 convert Mobility subsystem to Value framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   208
RandomDiscPositionAllocator::GetNext (void) const
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
{
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2373
diff changeset
   210
  double theta = m_theta.GetValue ();
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2373
diff changeset
   211
  double rho = m_rho.GetValue ();
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
  double x = m_x + std::cos (theta) * rho;
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
  double y = m_y + std::sin (theta) * rho;
1507
11a370eecc52 allow discrete levels
Craig Dowell <craigdo@ee.washington.edu>
parents: 1460
diff changeset
   214
  NS_LOG_DEBUG ("Disc position x=" << x << ", y=" << y);
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1507
diff changeset
   215
  return Vector (x, y, 0.0);
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
}
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
} // namespace ns3