src/node/mobility-model.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 04 Jul 2007 10:15:18 +0200
changeset 1580 0d2cf8839aee
parent 1579 src/node/position.h@a4187ed1e45e
child 1581 95a193d3ac1d
permissions -rw-r--r--
position.h -> mobility-model.h
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1542
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2006,2007 INRIA
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#ifndef POSITION_H
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#define POSITION_H
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "ns3/object.h"
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
namespace ns3 {
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
/**
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
 * \brief keep track of the current position of an object
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
 *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
 * All space coordinates in this class and its subclasses are
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
 * understood to be meters or meters/s. i.e., they are all
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
 * metric international units.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
 */
1579
a4187ed1e45e Position -> MobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1556
diff changeset
    35
class MobilityModel : public Object
1542
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
{
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
public:
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  static const InterfaceId iid;
1579
a4187ed1e45e Position -> MobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1556
diff changeset
    39
  MobilityModel ();
a4187ed1e45e Position -> MobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1556
diff changeset
    40
  virtual ~MobilityModel () = 0;
1542
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  /**
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
   * \param x reference to floating-point variable for x coordinate.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
   * \param y reference to floating-point variable for y coordinate.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
   * \param z reference to floating-point variable for z coordinate.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
   *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
   * Store in the x, y, and z variables the current coordinates
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
   * managed by this position object.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
   * Unit is meters
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
   */
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
  void Get (double &x, double &y, double &z) const;
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
  /**
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
   * \returns the current x coordinate
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
   *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
   * Unit is meters
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
   */
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
  double GetX (void) const;
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  /**
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
   * \returns the current y coordinate
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
   *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
   * Unit is meters
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
   */
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
  double GetY (void) const;
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  /**
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
   * \returns the current z coordinate
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
   *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
   * Unit is meters
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
   */
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
  double GetZ (void) const;
1544
55080c1f8a22 add Position::DoSet et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1542
diff changeset
    70
1554
76e781c120bb rework the notification mechanism to allow its optional use with every position model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1545
diff changeset
    71
  void Add (double dx, double dy, double dz);
76e781c120bb rework the notification mechanism to allow its optional use with every position model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1545
diff changeset
    72
1544
55080c1f8a22 add Position::DoSet et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1542
diff changeset
    73
  void Set (double x, double y, double z);
55080c1f8a22 add Position::DoSet et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1542
diff changeset
    74
  void SetXY (double x, double y);
55080c1f8a22 add Position::DoSet et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1542
diff changeset
    75
  void SetX (double x);
55080c1f8a22 add Position::DoSet et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1542
diff changeset
    76
  void SetY (double y);
55080c1f8a22 add Position::DoSet et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1542
diff changeset
    77
  void SetZ (double z);
1542
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
  /**
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
   * \param position a reference to another position object instance
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
   * \returns the distance between the two objects.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
   *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
   * Unit is meters
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
   */
1579
a4187ed1e45e Position -> MobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1556
diff changeset
    84
  double GetDistanceFrom (const MobilityModel &position) const;
1554
76e781c120bb rework the notification mechanism to allow its optional use with every position model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1545
diff changeset
    85
protected:
76e781c120bb rework the notification mechanism to allow its optional use with every position model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1545
diff changeset
    86
  /**
76e781c120bb rework the notification mechanism to allow its optional use with every position model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1545
diff changeset
    87
   * Must be invoked by subclasses when the course of the
76e781c120bb rework the notification mechanism to allow its optional use with every position model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1545
diff changeset
    88
   * position changes to notify course change listeners.
76e781c120bb rework the notification mechanism to allow its optional use with every position model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1545
diff changeset
    89
   */
76e781c120bb rework the notification mechanism to allow its optional use with every position model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1545
diff changeset
    90
  void NotifyCourseChange (void) const;
1542
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
private:
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
  /**
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
   * \param x reference to floating-point variable for x coordinate.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
   * \param y reference to floating-point variable for y coordinate.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
   * \param z reference to floating-point variable for z coordinate.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
   *
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
   * Store in the x, y, and z variables the current coordinates
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
   * managed by this position object. Concrete subclasses of this 
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
   * base class must implement this method.
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
   * Unit is meters
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
   */
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
  virtual void DoGet (double &x, double &y, double &z) const = 0;
1545
c9c758a80f58 DoSet should not be const
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1544
diff changeset
   103
  virtual void DoSet (double x, double y, double z) = 0;
1542
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
};
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
}; // namespace ns3
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
7d62f83de7d3 position models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
#endif /* POSITION_H */