quic_bandwidth.h revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4// 5// QuicBandwidth represents a bandwidth, stored in bits per second resolution. 6 7#ifndef NET_QUIC_QUIC_BANDWIDTH_H_ 8#define NET_QUIC_QUIC_BANDWIDTH_H_ 9 10#include "base/basictypes.h" 11#include "net/quic/quic_time.h" 12 13namespace net { 14 15typedef uint64 QuicByteCount; 16 17class NET_EXPORT_PRIVATE QuicBandwidth { 18 19 public: 20 // Creates a new QuicBandwidth with an internal value of 0. 21 static QuicBandwidth Zero(); 22 23 // Create a new QuicBandwidth holding the bits per second. 24 static QuicBandwidth FromBitsPerSecond(int64 bits_per_second); 25 26 // Create a new QuicBandwidth holding the kilo bits per second. 27 static QuicBandwidth FromKBitsPerSecond(int64 k_bits_per_second); 28 29 // Create a new QuicBandwidth holding the bytes per second. 30 static QuicBandwidth FromBytesPerSecond(int64 bytes_per_second); 31 32 // Create a new QuicBandwidth holding the kilo bytes per second. 33 static QuicBandwidth FromKBytesPerSecond(int64 k_bytes_per_second); 34 35 // Create a new QuicBandwidth based on the bytes per the elapsed delta. 36 static QuicBandwidth FromBytesAndTimeDelta(QuicByteCount bytes, 37 QuicTime::Delta delta); 38 39 int64 ToBitsPerSecond() const; 40 41 int64 ToKBitsPerSecond() const; 42 43 int64 ToBytesPerSecond() const; 44 45 int64 ToKBytesPerSecond() const; 46 47 QuicByteCount ToBytesPerPeriod(QuicTime::Delta time_period) const; 48 49 int64 ToKBytesPerPeriod(QuicTime::Delta time_period) const; 50 51 bool IsZero() const; 52 53 QuicBandwidth Add(const QuicBandwidth& delta) const; 54 55 QuicBandwidth Subtract(const QuicBandwidth& delta) const; 56 57 QuicBandwidth Scale(float scale_factor) const; 58 59 QuicTime::Delta TransferTime(QuicByteCount bytes) const; 60 61 private: 62 explicit QuicBandwidth(int64 bits_per_second); 63 int64 bits_per_second_; 64}; 65 66// Non-member relational operators for QuicBandwidth. 67inline bool operator==(QuicBandwidth lhs, QuicBandwidth rhs) { 68 return lhs.ToBitsPerSecond() == rhs.ToBitsPerSecond(); 69} 70inline bool operator!=(QuicBandwidth lhs, QuicBandwidth rhs) { 71 return !(lhs == rhs); 72} 73inline bool operator<(QuicBandwidth lhs, QuicBandwidth rhs) { 74 return lhs.ToBitsPerSecond() < rhs.ToBitsPerSecond(); 75} 76inline bool operator>(QuicBandwidth lhs, QuicBandwidth rhs) { 77 return rhs < lhs; 78} 79inline bool operator<=(QuicBandwidth lhs, QuicBandwidth rhs) { 80 return !(rhs < lhs); 81} 82inline bool operator>=(QuicBandwidth lhs, QuicBandwidth rhs) { 83 return !(lhs < rhs); 84} 85 86} // namespace net 87#endif // NET_QUIC_QUIC_BANDWIDTH_H_ 88