Implement PayloadUnion as variant instead of pair of optionals
Bug: None
Change-Id: I2e54f5a0561804bc59c4d4c8e35ccdaa9536b8e4
Reviewed-on: https://webrtc-review.googlesource.com/85366
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23745}
diff --git a/DEPS b/DEPS
index 18eeb92..fe28211 100644
--- a/DEPS
+++ b/DEPS
@@ -745,4 +745,5 @@
# Abseil whitelist.
"+absl/types/optional.h",
+ "+absl/types/variant.h",
]
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index f19b328..40f7946 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -98,6 +98,7 @@
"../../rtc_base:rtc_base_approved",
"../../system_wrappers",
"//third_party/abseil-cpp/absl/types:optional",
+ "//third_party/abseil-cpp/absl/types:variant",
]
}
diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.cc b/modules/rtp_rtcp/include/rtp_rtcp_defines.cc
index d9b082b..ad9bd45 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp_defines.cc
+++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.cc
@@ -33,10 +33,8 @@
// and thus assume trivial destructibility.
static_assert(std::is_trivially_destructible<StreamId>::value, "");
-PayloadUnion::PayloadUnion(const AudioPayload& payload)
- : audio_payload_(payload) {}
-PayloadUnion::PayloadUnion(const VideoPayload& payload)
- : video_payload_(payload) {}
+PayloadUnion::PayloadUnion(const AudioPayload& payload) : payload_(payload) {}
+PayloadUnion::PayloadUnion(const VideoPayload& payload) : payload_(payload) {}
PayloadUnion::PayloadUnion(const PayloadUnion&) = default;
PayloadUnion::PayloadUnion(PayloadUnion&&) = default;
PayloadUnion::~PayloadUnion() = default;
diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
index d3515f6..36686a1 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
@@ -15,6 +15,7 @@
#include <list>
#include <vector>
+#include "absl/types/variant.h"
#include "api/audio_codecs/audio_format.h"
#include "api/rtp_headers.h"
#include "common_types.h" // NOLINT(build/include)
@@ -71,28 +72,23 @@
PayloadUnion& operator=(const PayloadUnion&);
PayloadUnion& operator=(PayloadUnion&&);
- bool is_audio() const { return audio_payload_.has_value(); }
- bool is_video() const { return video_payload_.has_value(); }
+ bool is_audio() const {
+ return absl::holds_alternative<AudioPayload>(payload_);
+ }
+ bool is_video() const {
+ return absl::holds_alternative<VideoPayload>(payload_);
+ }
const AudioPayload& audio_payload() const {
- RTC_DCHECK(audio_payload_);
- return *audio_payload_;
+ return absl::get<AudioPayload>(payload_);
}
const VideoPayload& video_payload() const {
- RTC_DCHECK(video_payload_);
- return *video_payload_;
+ return absl::get<VideoPayload>(payload_);
}
- AudioPayload& audio_payload() {
- RTC_DCHECK(audio_payload_);
- return *audio_payload_;
- }
- VideoPayload& video_payload() {
- RTC_DCHECK(video_payload_);
- return *video_payload_;
- }
+ AudioPayload& audio_payload() { return absl::get<AudioPayload>(payload_); }
+ VideoPayload& video_payload() { return absl::get<VideoPayload>(payload_); }
private:
- absl::optional<AudioPayload> audio_payload_;
- absl::optional<VideoPayload> video_payload_;
+ absl::variant<AudioPayload, VideoPayload> payload_;
};
enum RTPAliveType { kRtpDead = 0, kRtpNoRtp = 1, kRtpAlive = 2 };