libmpd++
DASH MPD parsing and manipulation library
 
Loading...
Searching...
No Matches
Codecs.hh
Go to the documentation of this file.
1#ifndef _BBC_PARSE_DASH_MPD_CODECS_HH_
2#define _BBC_PARSE_DASH_MPD_CODECS_HH_
3/*****************************************************************************
4 * DASH MPD parsing library in C++: Codecs class
5 *****************************************************************************
6 * Copyright: (C) 2025 British Broadcasting Corporation
7 * Author(s): David Waring <david.waring2@bbc.co.uk>
8 * License: LGPLv3
9 *
10 * For full license terms please see the LICENSE file distributed with this
11 * library or refer to: https://www.gnu.org/licenses/lgpl-3.0.txt.
12 */
13#include <iostream>
14#include <list>
15#include <optional>
16#include <string>
17
18#include "macros.hh"
19
21
30public:
36 class Encoding {
37 public:
38
43 Encoding() :m_charset(), m_language() {};
44
51 Encoding(const Encoding &other) :m_charset(other.m_charset), m_language(other.m_language) {};
52
59 Encoding(Encoding &other) :m_charset(std::move(other.m_charset)), m_language(std::move(other.m_language)) {};
60
67 Encoding(const std::string &encoding);
68
71 virtual ~Encoding() {};
72
80 Encoding &operator=(const Encoding &other) { m_charset = other.m_charset; m_language = other.m_language; return *this; };
81
90 m_charset = std::move(other.m_charset); m_language = std::move(other.m_language); return *this;
91 };
92
101 bool operator==(const Encoding &other) const { return m_charset == other.m_charset && m_language == other.m_language; };
102
110 bool operator!=(const Encoding &other) const { return m_charset != other.m_charset || m_language != other.m_language; };
111
119 operator std::string() const { return m_charset + "'" + m_language + "'"; };
120
121 private:
122 std::string m_charset;
123 std::string m_language;
124 };
125
131
136 Codecs(const std::string &attr_value);
137
144 Codecs(const Codecs &to_copy);
145
152 Codecs(Codecs &&to_move);
153
156 virtual ~Codecs() {};
157
165 Codecs &operator=(const Codecs &to_copy);
166
175
183 bool operator==(const Codecs &to_compare) const;
184
192 operator std::string() const;
193
198 bool hasEncoding() const { return m_encoding.has_value(); };
199
204 const std::optional<Encoding> &encoding() const { return m_encoding; };
205
212 Codecs &encoding(const std::nullopt_t &) { m_encoding.reset(); return *this; };
213
220 Codecs &encoding(const Encoding &enc) { m_encoding = enc; return *this; };
221 Codecs &encoding(Encoding &&enc) { m_encoding = std::move(enc); return *this; };
222 Codecs &encoding(const std::optional<Encoding> &enc) { m_encoding = enc; return *this; };
223 Codecs &encoding(std::optional<Encoding> &&enc) { m_encoding = std::move(enc); return *this; };
225
230 const std::list<std::string> &codecs() const { return m_codecs; };
231
237 std::list<std::string>::const_iterator cbegin() const { return m_codecs.cbegin(); };
238 std::list<std::string>::const_iterator begin() const { return m_codecs.cbegin(); };
239 std::list<std::string>::iterator begin() { return m_codecs.begin(); };
240 std::list<std::string>::const_iterator codecsBegin() const { return m_codecs.cbegin(); };
241 std::list<std::string>::iterator codecsBegin() { return m_codecs.begin(); };
243
249 std::list<std::string>::const_iterator cend() const { return m_codecs.cend(); };
250 std::list<std::string>::const_iterator end() const { return m_codecs.cend(); };
251 std::list<std::string>::iterator end() { return m_codecs.end(); };
252 std::list<std::string>::const_iterator codecsEnd() const { return m_codecs.cend(); };
253 std::list<std::string>::iterator codecsEnd() { return m_codecs.end(); };
255
262 const std::string &codec(std::list<std::string>::size_type idx) const;
263
270 Codecs &codecsAdd(const std::string &codec) { m_codecs.push_back(codec); return *this; };
271 Codecs &codecsAdd(std::string &&codec) { m_codecs.push_back(std::move(codec)); return *this; };
273
281 Codecs &codecsRemove(const std::string &codec);
282
289 Codecs &codecsRemove(const std::list<std::string>::const_iterator &it);
290 Codecs &codecsRemove(const std::list<std::string>::iterator &it);
292
293private:
294 // CodecsType from ISO 23009-1:2022 Clause 5.3.7.3
295 std::optional<Encoding> m_encoding;
296 std::list<std::string> m_codecs;
297};
298
300
310LIBMPDPP_PUBLIC_API std::ostream &operator<<(std::ostream &os, const LIBMPDPP_NAMESPACE_CLASS(Codecs::Encoding) &enc);
311
321LIBMPDPP_PUBLIC_API std::ostream &operator<<(std::ostream &os, const LIBMPDPP_NAMESPACE_CLASS(Codecs) &codecs);
322
323/* vim:ts=8:sts=4:sw=4:expandtab:
324 */
325#endif /*_BBC_PARSE_DASH_MPD_CODECS_HH_*/
std::ostream & operator<<(std::ostream &os, const com::bbc::libmpdpp ::Codecs::Encoding &enc)
virtual ~Encoding()
Definition Codecs.hh:71
Encoding(const Encoding &other)
Definition Codecs.hh:51
bool operator==(const Encoding &other) const
Definition Codecs.hh:101
Encoding()
Definition Codecs.hh:43
Encoding(const std::string &encoding)
bool operator!=(const Encoding &other) const
Definition Codecs.hh:110
Encoding & operator=(const Encoding &other)
Definition Codecs.hh:80
Encoding(Encoding &other)
Definition Codecs.hh:59
Encoding & operator=(Encoding &&other)
Definition Codecs.hh:89
std::list< std::string >::iterator codecsEnd()
Definition Codecs.hh:253
std::list< std::string >::iterator end()
Definition Codecs.hh:251
Codecs & codecsRemove(const std::string &codec)
std::list< std::string >::const_iterator codecsBegin() const
Definition Codecs.hh:240
Codecs & encoding(Encoding &&enc)
Definition Codecs.hh:221
Codecs & codecsRemove(const std::list< std::string >::iterator &it)
Codecs & codecsAdd(const std::string &codec)
Definition Codecs.hh:270
Codecs(const std::string &attr_value)
std::list< std::string >::const_iterator cend() const
Definition Codecs.hh:249
Codecs & encoding(const std::nullopt_t &)
Definition Codecs.hh:212
Codecs(const Codecs &to_copy)
std::list< std::string >::const_iterator codecsEnd() const
Definition Codecs.hh:252
std::list< std::string >::const_iterator cbegin() const
Definition Codecs.hh:237
std::list< std::string >::const_iterator end() const
Definition Codecs.hh:250
Codecs & encoding(std::optional< Encoding > &&enc)
Definition Codecs.hh:223
virtual ~Codecs()
Definition Codecs.hh:156
const std::string & codec(std::list< std::string >::size_type idx) const
Codecs & operator=(const Codecs &to_copy)
Codecs(Codecs &&to_move)
std::list< std::string >::iterator codecsBegin()
Definition Codecs.hh:241
const std::list< std::string > & codecs() const
Definition Codecs.hh:230
bool hasEncoding() const
Definition Codecs.hh:198
Codecs & operator=(Codecs &&to_move)
Codecs & codecsRemove(const std::list< std::string >::const_iterator &it)
Codecs & encoding(const Encoding &enc)
Definition Codecs.hh:220
std::list< std::string >::const_iterator begin() const
Definition Codecs.hh:238
bool operator==(const Codecs &to_compare) const
Codecs & codecsAdd(std::string &&codec)
Definition Codecs.hh:271
Codecs & encoding(const std::optional< Encoding > &enc)
Definition Codecs.hh:222
std::list< std::string >::iterator begin()
Definition Codecs.hh:239
const std::optional< Encoding > & encoding() const
Definition Codecs.hh:204
#define LIBMPDPP_NAMESPACE_CLASS(A)
Definition macros.hh:61
#define LIBMPDPP_NAMESPACE_END
Definition macros.hh:54
#define LIBMPDPP_PUBLIC_API
Used to mark something as part of the public API.
Definition macros.hh:21
#define LIBMPDPP_NAMESPACE_BEGIN
Definition macros.hh:50
Definition SegmentAvailability.hh:87