diff options
author | Jordan Bayles <jophba@chromium.org> | 2020-11-19 15:23:59 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-11-24 00:29:47 +0000 |
commit | b5ac6d34a14cc938258a938ebe3604a93776f7fa (patch) | |
tree | d1639452d029c93f6c6a233a0d3b7509190b199d /cast | |
parent | a63f1abf172a55dde56701209770e1deb3fc52b1 (diff) | |
download | openscreen-b5ac6d34a14cc938258a938ebe3604a93776f7fa.tar.gz |
Add new enum name table
Add a new using statement and simple helper methods for storing enum
names as strings.
Doing this instead of porting Chrome's EnumTable class.
Bug: crbug.com/openscreen/111
Change-Id: Ib92be8d1837782fd28398e96e3e3a50674d4a07f
Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/2545125
Reviewed-by: Ryan Keane <rwkeane@google.com>
Commit-Queue: Jordan Bayles <jophba@chromium.org>
Diffstat (limited to 'cast')
-rw-r--r-- | cast/streaming/message_fields.cc | 48 |
1 files changed, 15 insertions, 33 deletions
diff --git a/cast/streaming/message_fields.cc b/cast/streaming/message_fields.cc index d5528519..966fb5bb 100644 --- a/cast/streaming/message_fields.cc +++ b/cast/streaming/message_fields.cc @@ -7,64 +7,46 @@ #include <array> #include <utility> +#include "util/enum_name_table.h" #include "util/osp_logging.h" namespace openscreen { namespace cast { namespace { -constexpr std::array<std::pair<const char*, AudioCodec>, 2> kAudioCodecNames{ +constexpr EnumNameTable<AudioCodec, 2> kAudioCodecNames{ {{"aac", AudioCodec::kAac}, {"opus", AudioCodec::kOpus}}}; -constexpr std::array<std::pair<const char*, VideoCodec>, 4> kVideoCodecNames{ +constexpr EnumNameTable<VideoCodec, 4> kVideoCodecNames{ {{"h264", VideoCodec::kH264}, {"vp8", VideoCodec::kVp8}, {"hevc", VideoCodec::kHevc}, {"vp9", VideoCodec::kVp9}}}; -constexpr char kUnknownCodecError[] = "Codec not accounted for in name array."; - -template <typename T, size_t size> -const char* GetCodecName( - const std::array<std::pair<const char*, T>, size>& codecs, - T codec) { - for (auto pair : codecs) { - if (pair.second == codec) { - return pair.first; - } - } - OSP_NOTREACHED() << kUnknownCodecError; - return {}; -} - -template <typename T, size_t size> -T GetCodec(const std::array<std::pair<const char*, T>, size>& codecs, - absl::string_view name) { - for (auto pair : codecs) { - if (pair.first == name) { - return pair.second; - } - } - OSP_NOTREACHED() << kUnknownCodecError; - return {}; -} - } // namespace const char* CodecToString(AudioCodec codec) { - return GetCodecName(kAudioCodecNames, codec); + ErrorOr<const char*> name = GetEnumName(kAudioCodecNames, codec); + OSP_DCHECK(name.is_value()); + return name.value(); } AudioCodec StringToAudioCodec(absl::string_view name) { - return GetCodec(kAudioCodecNames, name); + ErrorOr<AudioCodec> enum_ = GetEnum(kAudioCodecNames, name); + OSP_DCHECK(enum_.is_value()); + return enum_.value(); } const char* CodecToString(VideoCodec codec) { - return GetCodecName(kVideoCodecNames, codec); + ErrorOr<const char*> name = GetEnumName(kVideoCodecNames, codec); + OSP_DCHECK(name.is_value()); + return name.value(); } VideoCodec StringToVideoCodec(absl::string_view name) { - return GetCodec(kVideoCodecNames, name); + ErrorOr<VideoCodec> enum_ = GetEnum(kVideoCodecNames, name); + OSP_DCHECK(enum_.is_value()); + return enum_.value(); } } // namespace cast |