• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef API_AUDIO_CODECS_AUDIO_CODEC_PAIR_ID_H_
12 #define API_AUDIO_CODECS_AUDIO_CODEC_PAIR_ID_H_
13 
14 #include <stdint.h>
15 
16 #include <utility>
17 
18 namespace webrtc {
19 
20 class AudioCodecPairId final {
21  public:
22   // Copyable, but not default constructible.
23   AudioCodecPairId() = delete;
24   AudioCodecPairId(const AudioCodecPairId&) = default;
25   AudioCodecPairId(AudioCodecPairId&&) = default;
26   AudioCodecPairId& operator=(const AudioCodecPairId&) = default;
27   AudioCodecPairId& operator=(AudioCodecPairId&&) = default;
28 
swap(AudioCodecPairId & a,AudioCodecPairId & b)29   friend void swap(AudioCodecPairId& a, AudioCodecPairId& b) {
30     using std::swap;
31     swap(a.id_, b.id_);
32   }
33 
34   // Creates a new ID, unequal to any previously created ID.
35   static AudioCodecPairId Create();
36 
37   // IDs can be tested for equality.
38   friend bool operator==(AudioCodecPairId a, AudioCodecPairId b) {
39     return a.id_ == b.id_;
40   }
41   friend bool operator!=(AudioCodecPairId a, AudioCodecPairId b) {
42     return a.id_ != b.id_;
43   }
44 
45   // Comparisons. The ordering of ID values is completely arbitrary, but
46   // stable, so it's useful e.g. if you want to use IDs as keys in an ordered
47   // map.
48   friend bool operator<(AudioCodecPairId a, AudioCodecPairId b) {
49     return a.id_ < b.id_;
50   }
51   friend bool operator<=(AudioCodecPairId a, AudioCodecPairId b) {
52     return a.id_ <= b.id_;
53   }
54   friend bool operator>=(AudioCodecPairId a, AudioCodecPairId b) {
55     return a.id_ >= b.id_;
56   }
57   friend bool operator>(AudioCodecPairId a, AudioCodecPairId b) {
58     return a.id_ > b.id_;
59   }
60 
61   // Returns a numeric representation of the ID. The numeric values are
62   // completely arbitrary, but stable, collision-free, and reasonably evenly
63   // distributed, so they are e.g. useful as hash values in unordered maps.
NumericRepresentation()64   uint64_t NumericRepresentation() const { return id_; }
65 
66  private:
AudioCodecPairId(uint64_t id)67   explicit AudioCodecPairId(uint64_t id) : id_(id) {}
68 
69   uint64_t id_;
70 };
71 
72 }  // namespace webrtc
73 
74 #endif  // API_AUDIO_CODECS_AUDIO_CODEC_PAIR_ID_H_
75