src/common/data-rate.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 20 Feb 2008 21:45:42 +0100
changeset 2438 e2ac9f9aeeb9
parent 2422 6cbcb8fe4551
child 2451 8979f07befd5
permissions -rw-r--r--
value.h -> attribute.h
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     2
//
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     3
// Copyright (c) 2006 Georgia Tech Research Corporation
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     4
// All rights reserved.
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     5
//
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     6
// This program is free software; you can redistribute it and/or modify
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     7
// it under the terms of the GNU General Public License version 2 as
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     8
// published by the Free Software Foundation;
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     9
//
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    10
// This program is distributed in the hope that it will be useful,
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    13
// GNU General Public License for more details.
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    14
//
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    15
// You should have received a copy of the GNU General Public License
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    16
// along with this program; if not, write to the Free Software
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    17
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    18
//
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    19
// Author: Rajib Bhattacharjea<raj.b@gatech.edu>
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    20
//
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    21
373
960c8e8721de Move simple-p2p.cc to DataRate; fix small bug in DataRate and add include guards
Tom Henderson <tomh@tomh.org>
parents: 365
diff changeset
    22
#ifndef DATA_RATE_H
960c8e8721de Move simple-p2p.cc to DataRate; fix small bug in DataRate and add include guards
Tom Henderson <tomh@tomh.org>
parents: 365
diff changeset
    23
#define DATA_RATE_H
960c8e8721de Move simple-p2p.cc to DataRate; fix small bug in DataRate and add include guards
Tom Henderson <tomh@tomh.org>
parents: 365
diff changeset
    24
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    25
#include <string>
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    26
#include <iostream>
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    27
#include <stdint.h>
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    28
#include "ns3/nstime.h"
614
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
    29
#include "ns3/default-value.h"
2438
e2ac9f9aeeb9 value.h -> attribute.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2422
diff changeset
    30
#include "ns3/attribute.h"
2422
6cbcb8fe4551 macro-ify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2415
diff changeset
    31
#include "ns3/value-helper.h"
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    32
614
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
    33
namespace ns3 {
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    34
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    35
/**
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    36
 * \brief Class for representing data rates
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    37
 *
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    38
 * Allows for natural and familiar use of data rates.  Allows construction
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    39
 * from strings, natural multiplication e.g.:
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    40
 * \code
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    41
 * DataRate x("56kbps");
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    42
 * double nBits = x*ns3::Seconds(19.2);
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    43
 * uint32_t nBytes = 20;
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    44
 * double txtime = x.CalclulateTxTime(nBytes);
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    45
 * \endcode
670
ff520b9cb8ec Added comparison operators for DataRate
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 624
diff changeset
    46
 * This class also supports the regular comparison operators <, >, <=, >=, ==,
ff520b9cb8ec Added comparison operators for DataRate
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 624
diff changeset
    47
 * and !=
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    48
 */
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    49
class DataRate
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    50
{
2415
bbdf1d469f8f replace ambiguous constructor with separate construction function.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2412
diff changeset
    51
public:
bbdf1d469f8f replace ambiguous constructor with separate construction function.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2412
diff changeset
    52
  DataRate ();
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    53
  /**
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    54
   * \brief Integer constructor
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    55
   *
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    56
   * Construct a data rate from an integer.  This class only supports positive
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    57
   * integer data rates in units of bits/s, meaning 1bit/s is the smallest 
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    58
   * non-trivial bitrate availiable.
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    59
   */
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    60
  DataRate (uint64_t bps);
2415
bbdf1d469f8f replace ambiguous constructor with separate construction function.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2412
diff changeset
    61
    
1825
1544b7c8aa18 minor fix for bug95; also const operators for DataRate
Tom Henderson <tomh@tomh.org>
parents: 670
diff changeset
    62
  bool operator <  (const DataRate& rhs) const;
1544b7c8aa18 minor fix for bug95; also const operators for DataRate
Tom Henderson <tomh@tomh.org>
parents: 670
diff changeset
    63
  bool operator <= (const DataRate& rhs) const;
1544b7c8aa18 minor fix for bug95; also const operators for DataRate
Tom Henderson <tomh@tomh.org>
parents: 670
diff changeset
    64
  bool operator >  (const DataRate& rhs) const;
1544b7c8aa18 minor fix for bug95; also const operators for DataRate
Tom Henderson <tomh@tomh.org>
parents: 670
diff changeset
    65
  bool operator >= (const DataRate& rhs) const;
1544b7c8aa18 minor fix for bug95; also const operators for DataRate
Tom Henderson <tomh@tomh.org>
parents: 670
diff changeset
    66
  bool operator == (const DataRate& rhs) const;
1544b7c8aa18 minor fix for bug95; also const operators for DataRate
Tom Henderson <tomh@tomh.org>
parents: 670
diff changeset
    67
  bool operator != (const DataRate& rhs) const;
670
ff520b9cb8ec Added comparison operators for DataRate
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 624
diff changeset
    68
  
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    69
  /**
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    70
   * \brief Calculate transmission time
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    71
   *
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    72
   * Calculates the transmission time at this data rate
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    73
   * \param bytes The number of bytes (not bits) for which to calculate
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    74
   * \return The tranmission time in seconds for the number of bytes specified
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    75
   */
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    76
  double CalculateTxTime(uint32_t bytes) const;
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    77
  
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    78
  /**
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    79
   * Get the underlying bitrate
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    80
   * \return The underlying bitrate in bits per second
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    81
   */
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    82
  uint64_t GetBitRate() const;
2422
6cbcb8fe4551 macro-ify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2415
diff changeset
    83
6cbcb8fe4551 macro-ify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2415
diff changeset
    84
  VALUE_HELPER_HEADER_1 (DataRate);
2412
d493ee1f9e9b add Value support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1826
diff changeset
    85
private:
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    86
  uint64_t m_bps;
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    87
  static uint64_t Parse(const std::string);
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    88
};
2412
d493ee1f9e9b add Value support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1826
diff changeset
    89
2415
bbdf1d469f8f replace ambiguous constructor with separate construction function.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2412
diff changeset
    90
DataRate MakeDataRate (std::string rate);
bbdf1d469f8f replace ambiguous constructor with separate construction function.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2412
diff changeset
    91
2412
d493ee1f9e9b add Value support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1826
diff changeset
    92
std::ostream &operator << (std::ostream &os, const DataRate &rate);
d493ee1f9e9b add Value support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1826
diff changeset
    93
std::istream &operator >> (std::istream &is, DataRate &rate);
d493ee1f9e9b add Value support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1826
diff changeset
    94
2422
6cbcb8fe4551 macro-ify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2415
diff changeset
    95
VALUE_HELPER_HEADER_2 (DataRate);
2412
d493ee1f9e9b add Value support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1826
diff changeset
    96
365
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    97
/**
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    98
 * \param lhs
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    99
 * \param rhs
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   100
 * \return Bits transmitted in rhs seconds at lhs b/s
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   101
 */
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   102
double operator*(const DataRate& lhs, const TimeUnit<1>& rhs);
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   103
double operator*(const TimeUnit<1>& lhs, const DataRate& rhs);
2a5cd7125778 Added in DataRate to common module
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   104
614
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   105
class DataRateDefaultValue : public DefaultValueBase
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   106
{
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   107
public:
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   108
  DataRateDefaultValue (std::string name,
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   109
                        std::string help,
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   110
                        DataRate defaultValue);
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   111
  void SetValue (DataRate rate);
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   112
  DataRate GetValue ();
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   113
private:
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   114
  virtual bool DoParseValue (const std::string &value);
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   115
  virtual std::string DoGetType (void) const;
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   116
  virtual std::string DoGetDefaultValue (void) const;
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   117
  DataRate m_defaultValue;
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   118
  DataRate m_value;
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   119
};
fb21d7015386 add DefaultValue support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 373
diff changeset
   120
2412
d493ee1f9e9b add Value support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1826
diff changeset
   121
} //namespace ns3
d493ee1f9e9b add Value support to DataRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1826
diff changeset
   122
373
960c8e8721de Move simple-p2p.cc to DataRate; fix small bug in DataRate and add include guards
Tom Henderson <tomh@tomh.org>
parents: 365
diff changeset
   123
#endif /* DATA_RATE_H */