From 1bf5ac4f09c83c9d69e187a6005b2efc63a97089 Mon Sep 17 00:00:00 2001 From: Timo Bingmann Date: Wed, 10 Dec 2008 13:28:51 +0100 Subject: [PATCH] patch for bug433-- data rates --- src/common/data-rate.cc | 78 +++++++++++++++++++++++++++++++++-------- src/common/data-rate.h | 19 ++++++++++ 2 files changed, 83 insertions(+), 14 deletions(-) diff --git a/src/common/data-rate.cc b/src/common/data-rate.cc index 61d6f6550..95e845f05 100644 --- a/src/common/data-rate.cc +++ b/src/common/data-rate.cc @@ -36,64 +36,104 @@ DoParse (const std::string s, uint64_t *v) std::string trailer = s.substr(n, std::string::npos); if (trailer == "bps") { - // Bit/s + // bit/s *v = (uint64_t)r; } else if (trailer == "b/s") { - // Bit/s + // bit/s *v = (uint64_t)r; } else if (trailer == "Bps") { - // Byte/s + // byte/s *v = (uint64_t)(r * 8); } else if (trailer == "B/s") { - // Byte/s + // byte/s *v = (uint64_t)(r * 8); } else if (trailer == "kbps") { - // KiloBit/s + // kilobits/s *v = (uint64_t)(r * 1000); } else if (trailer == "kb/s") { - // KiloBit/s + // kilobits/s + *v = (uint64_t)(r * 1000); + } + else if (trailer == "Kbps") + { + // kilobits/s + *v = (uint64_t)(r * 1000); + } + else if (trailer == "Kb/s") + { + // kilobits/s *v = (uint64_t)(r * 1000); } else if (trailer == "kBps") { - // KiloBit/s - *v = (uint64_t)(r * 1000); + // kiloByte/s + *v = (uint64_t)(r * 8000); } else if (trailer == "kB/s") { - // KiloBit/s - *v = (uint64_t)(r * 1000); + // KiloByte/s + *v = (uint64_t)(r * 8000); + } + else if (trailer == "KBps") + { + // kiloByte/s + *v = (uint64_t)(r * 8000); + } + else if (trailer == "KB/s") + { + // KiloByte/s + *v = (uint64_t)(r * 8000); + } + else if (trailer == "Kib/s") + { + // kibibit/s + *v = (uint64_t)(r * 1024); + } + else if (trailer == "KiB/s") + { + // kibibyte/s + *v = (uint64_t)(r * 8192); } else if (trailer == "Mbps") { - // MegaBit/s + // MegaBits/s *v = (uint64_t)(r * 1000000); } else if (trailer == "Mb/s") { - // MegaBit/s + // MegaBits/s *v = (uint64_t)(r * 1000000); } else if (trailer == "MBps") { - // MegaByte/s + // MegaBytes/s *v = (uint64_t)(r * 8000000); } else if (trailer == "MB/s") { - // MegaByte/s + // MegaBytes/s *v = (uint64_t)(r * 8000000); } + else if (trailer == "Mib/s") + { + // MebiBits/s + *v = (uint64_t)(r * 1048576); + } + else if (trailer == "MiB/s") + { + // MebiByte/s + *v = (uint64_t)(r * 1048576 * 8); + } else if (trailer == "Gbps") { // GigaBit/s @@ -114,6 +154,16 @@ DoParse (const std::string s, uint64_t *v) // GigaByte/s *v = (uint64_t)(r * 8*1000000000); } + else if (trailer == "Gib/s") + { + // GibiBits/s + *v = (uint64_t)(r * 1048576 * 1024); + } + else if (trailer == "GiB/s") + { + // GibiByte/s + *v = (uint64_t)(r * 1048576 * 1024 * 8); + } else { return false; diff --git a/src/common/data-rate.h b/src/common/data-rate.h index 3c59147df..f71c12a21 100644 --- a/src/common/data-rate.h +++ b/src/common/data-rate.h @@ -48,6 +48,25 @@ namespace ns3 { * \endcode * This class also supports the regular comparison operators <, >, <=, >=, ==, * and != + * + * Conventions used: + * "b" stands for bits, "B" for bytes (8 bits) \n + * "k" stands for 1000, "K" also stands for 1000, "Ki" stands for 1024 \n + * "M" stand for 1000000, "Mib" stands for 1024 kibibits, or 1048576 bits \n + * "G" stand for 10^9, "Gib" stands for 1024 mebibits \n + * whitespace is allowed but not required between the numeric value and units + * + * Supported unit strings: + * bps, b/s, Bps, B/s \n + * kbps, kb/s, Kbps, Kb/s, kBps, kB/s, KBps, KB/s, Kib/s, KiB/s \n + * Mbps, Mb/s, MBps, MB/s, Mib/s, MiB/s \n + * Gbps, Gb/s, GBps, GB/s, Gib/s, GiB/s \n + * + * Examples: + * "56kbps" = 56,000 bits/s \n + * "128 kb/s" = 128,000 bits/s \n + * "8Kib/s" = 1 KiB/s = 8192 bits/s \n + * "1kB/s" = 8000 bits/s */ class DataRate {