| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // QuicBandwidth represents a bandwidth, stored in bits per second resolution. |
| |
| #ifndef NET_QUIC_QUIC_BANDWIDTH_H_ |
| #define NET_QUIC_QUIC_BANDWIDTH_H_ |
| |
| #include "base/basictypes.h" |
| #include "net/quic/quic_time.h" |
| |
| namespace net { |
| |
| typedef uint64 QuicByteCount; |
| |
| class NET_EXPORT_PRIVATE QuicBandwidth { |
| public: |
| // Creates a new QuicBandwidth with an internal value of 0. |
| static QuicBandwidth Zero(); |
| |
| // Create a new QuicBandwidth holding the bits per second. |
| static QuicBandwidth FromBitsPerSecond(int64 bits_per_second); |
| |
| // Create a new QuicBandwidth holding the kilo bits per second. |
| static QuicBandwidth FromKBitsPerSecond(int64 k_bits_per_second); |
| |
| // Create a new QuicBandwidth holding the bytes per second. |
| static QuicBandwidth FromBytesPerSecond(int64 bytes_per_second); |
| |
| // Create a new QuicBandwidth holding the kilo bytes per second. |
| static QuicBandwidth FromKBytesPerSecond(int64 k_bytes_per_second); |
| |
| // Create a new QuicBandwidth based on the bytes per the elapsed delta. |
| static QuicBandwidth FromBytesAndTimeDelta(QuicByteCount bytes, |
| QuicTime::Delta delta); |
| |
| int64 ToBitsPerSecond() const; |
| |
| int64 ToKBitsPerSecond() const; |
| |
| int64 ToBytesPerSecond() const; |
| |
| int64 ToKBytesPerSecond() const; |
| |
| QuicByteCount ToBytesPerPeriod(QuicTime::Delta time_period) const; |
| |
| int64 ToKBytesPerPeriod(QuicTime::Delta time_period) const; |
| |
| bool IsZero() const; |
| |
| QuicBandwidth Add(const QuicBandwidth& delta) const; |
| |
| QuicBandwidth Subtract(const QuicBandwidth& delta) const; |
| |
| QuicBandwidth Scale(float scale_factor) const; |
| |
| QuicTime::Delta TransferTime(QuicByteCount bytes) const; |
| |
| private: |
| explicit QuicBandwidth(int64 bits_per_second); |
| int64 bits_per_second_; |
| }; |
| |
| // Non-member relational operators for QuicBandwidth. |
| inline bool operator==(QuicBandwidth lhs, QuicBandwidth rhs) { |
| return lhs.ToBitsPerSecond() == rhs.ToBitsPerSecond(); |
| } |
| inline bool operator!=(QuicBandwidth lhs, QuicBandwidth rhs) { |
| return !(lhs == rhs); |
| } |
| inline bool operator<(QuicBandwidth lhs, QuicBandwidth rhs) { |
| return lhs.ToBitsPerSecond() < rhs.ToBitsPerSecond(); |
| } |
| inline bool operator>(QuicBandwidth lhs, QuicBandwidth rhs) { |
| return rhs < lhs; |
| } |
| inline bool operator<=(QuicBandwidth lhs, QuicBandwidth rhs) { |
| return !(rhs < lhs); |
| } |
| inline bool operator>=(QuicBandwidth lhs, QuicBandwidth rhs) { |
| return !(lhs < rhs); |
| } |
| |
| } // namespace net |
| #endif // NET_QUIC_QUIC_BANDWIDTH_H_ |