libmpd++
DASH MPD parsing and manipulation library
 
Loading...
Searching...
No Matches
ContentPopularityRate.hh
Go to the documentation of this file.
1#ifndef _BBC_PARSE_DASH_MPD_CONTENT_POPULARITY_RATE_HH_
2#define _BBC_PARSE_DASH_MPD_CONTENT_POPULARITY_RATE_HH_
3/*****************************************************************************
4 * DASH MPD parsing library in C++: ContentPopularityRate 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 <list>
14#include <optional>
15
16#include "macros.hh"
17
20// Forward declarations for types only used by pointer or reference
21namespace xmlpp {
22 class Element;
23 class Node;
24}
27
29
39public:
40
47 public:
53 PR() = delete;
54
64 PR(const std::optional<unsigned int> &popularity_rate = std::nullopt,
65 const std::optional<unsigned long> &start = std::nullopt,
66 int r = 0)
67 :m_popularityRate(popularity_rate)
68 ,m_start(start)
69 ,m_r(r)
70 {
71 if (popularity_rate < 1 || popularity_rate > 100)
72 throw std::out_of_range("popularityRate attribute of PR element must be between 1 and 100 inclusive.");
73 };
74
81 PR(const PR &other)
82 :m_popularityRate(other.m_popularityRate)
83 ,m_start(other.m_start)
84 ,m_r(other.m_r)
85 {};
86
93 PR(PR &&other)
94 :m_popularityRate(std::move(other.m_popularityRate))
95 ,m_start(std::move(other.m_start))
96 ,m_r(other.m_r)
97 {};
98
101 virtual ~PR() {};
102
111 PR &operator=(const PR &other) {
112 m_popularityRate = other.m_popularityRate;
113 m_start = other.m_start;
114 m_r = other.m_r;
115 return *this;
116 };
117 PR &operator=(PR &&other) {
118 m_popularityRate = std::move(other.m_popularityRate);
119 m_start = std::move(other.m_start);
120 m_r = other.m_r;
121 return *this;
122 };
123
124
132 bool operator==(const PR &other) {
133 if (m_r != other.m_r) return false;
134 if (m_popularityRate != other.m_popularityRate) return false;
135 if (m_start != other.m_start) return false;
136 return true;
137 }
138
146 bool operator!=(const PR &other) { return !(*this == other); };
147
148 // @popularityRate
149
154 bool hasPopularityRate() const { return m_popularityRate.has_value(); };
155
160 const std::optional<unsigned int> &popularityRate() const { return m_popularityRate; };
161
166 PR &popularityRate(const std::nullopt_t&) { m_popularityRate.reset(); return *this; };
167
174 PR &popularityRate(unsigned int val) { m_popularityRate = val; return *this; };
175 PR &popularityRate(const std::optional<unsigned int> &val) { m_popularityRate = val; return *this; };
176 PR &popularityRate(std::optional<unsigned int> &&val) { m_popularityRate = std::move(val); return *this; };
178
179 // @start
180
185 bool hasStart() const { return m_start.has_value(); };
186
191 const std::optional<unsigned long> &start() const { return m_start; };
192
197 PR &start(const std::nullopt_t&) { m_start.reset(); return *this; };
198
205 PR &start(unsigned long val) { m_start = val; return *this; };
206 PR &start(const std::optional<unsigned long> &val) { m_start = val; return *this; };
207 PR &start(std::optional<unsigned long> &&val) { m_start = std::move(val); return *this; };
209
210 // @r
211
216 int r() const { return m_r; };
217
225 PR &r(int val) { m_r = val; return *this; };
226
228 protected:
229 friend class ContentPopularityRate;
230 PR(xmlpp::Node &node);
231 void setXMLElement(xmlpp::Element &elem) const;
233
234 private:
235 std::optional<unsigned int> m_popularityRate;
236 std::optional<unsigned long> m_start;
237 int m_r; // default is 0
238 };
239
245
254
263
268
278
288
297 bool operator==(const ContentPopularityRate &to_compare) const;
298
299 // PR children
300
305 const std::list<PR> &prs() const { return m_prs; };
306
312 std::list<PR>::const_iterator cbegin() const { return m_prs.cbegin(); };
313 std::list<PR>::const_iterator begin() const { return m_prs.cbegin(); };
314 std::list<PR>::iterator begin() { return m_prs.begin(); };
315 std::list<PR>::const_iterator prsBegin() const { return m_prs.cbegin(); };
316 std::list<PR>::iterator prsBegin() { return m_prs.begin(); };
318
324 std::list<PR>::const_iterator cend() const { return m_prs.cend(); };
325 std::list<PR>::const_iterator end() const { return m_prs.cend(); };
326 std::list<PR>::iterator end() { return m_prs.end(); };
327 std::list<PR>::const_iterator prsEnd() const { return m_prs.cend(); };
328 std::list<PR>::iterator prsEnd() { return m_prs.end(); };
330
339 ContentPopularityRate &prs(const std::list<PR> &prs_list) { m_prs = prs_list; return *this; };
340 ContentPopularityRate &prs(std::list<PR> &&prs_list) { m_prs = std::move(prs_list); return *this; };
342
349 ContentPopularityRate &prsAdd(const PR &pr) { m_prs.push_back(pr); return *this; };
350 ContentPopularityRate &prsAdd(PR &&pr) { m_prs.push_back(std::move(pr)); return *this; };
352
359
366 ContentPopularityRate &prsRemove(const std::list<PR>::iterator &it);
367 ContentPopularityRate &prsRemove(const std::list<PR>::const_iterator &it);
369
371protected:
372 friend class RepresentationBase;
373
381 ContentPopularityRate(xmlpp::Node &node);
382
390 void setXMLElement(xmlpp::Element &element) const;
392
393private:
394 // ContentPopularityRate child elements (ISO 23009-1:2022 Clause 5.14.3)
395 std::list<PR> m_prs;
396};
397
399
400/* vim:ts=8:sts=4:sw=4:expandtab:
401 */
402#endif /*_BBC_PARSE_DASH_MPD_CONTENT_POPULARITY_RATE_HH_*/
403
Definition ContentPopularityRate.hh:46
const std::optional< unsigned long > & start() const
Definition ContentPopularityRate.hh:191
PR & popularityRate(unsigned int val)
Definition ContentPopularityRate.hh:174
bool hasPopularityRate() const
Definition ContentPopularityRate.hh:154
PR & r(int val)
Definition ContentPopularityRate.hh:225
bool operator!=(const PR &other)
Definition ContentPopularityRate.hh:146
PR & start(std::optional< unsigned long > &&val)
Definition ContentPopularityRate.hh:207
PR(const std::optional< unsigned int > &popularity_rate=std::nullopt, const std::optional< unsigned long > &start=std::nullopt, int r=0)
Definition ContentPopularityRate.hh:64
PR & start(const std::nullopt_t &)
Definition ContentPopularityRate.hh:197
PR & popularityRate(const std::optional< unsigned int > &val)
Definition ContentPopularityRate.hh:175
bool hasStart() const
Definition ContentPopularityRate.hh:185
PR & start(unsigned long val)
Definition ContentPopularityRate.hh:205
PR & operator=(const PR &other)
Definition ContentPopularityRate.hh:111
bool operator==(const PR &other)
Definition ContentPopularityRate.hh:132
PR & start(const std::optional< unsigned long > &val)
Definition ContentPopularityRate.hh:206
PR & popularityRate(std::optional< unsigned int > &&val)
Definition ContentPopularityRate.hh:176
PR(const PR &other)
Definition ContentPopularityRate.hh:81
PR(PR &&other)
Definition ContentPopularityRate.hh:93
PR & popularityRate(const std::nullopt_t &)
Definition ContentPopularityRate.hh:166
int r() const
Definition ContentPopularityRate.hh:216
PR & operator=(PR &&other)
Definition ContentPopularityRate.hh:117
virtual ~PR()
Definition ContentPopularityRate.hh:101
const std::optional< unsigned int > & popularityRate() const
Definition ContentPopularityRate.hh:160
std::list< PR >::iterator prsEnd()
Definition ContentPopularityRate.hh:328
virtual ~ContentPopularityRate()
Definition ContentPopularityRate.hh:267
ContentPopularityRate & prsRemove(const std::list< PR >::iterator &it)
std::list< PR >::const_iterator prsBegin() const
Definition ContentPopularityRate.hh:315
std::list< PR >::const_iterator prsEnd() const
Definition ContentPopularityRate.hh:327
std::list< PR >::iterator begin()
Definition ContentPopularityRate.hh:314
ContentPopularityRate & operator=(ContentPopularityRate &&to_move)
std::list< PR >::iterator prsBegin()
Definition ContentPopularityRate.hh:316
ContentPopularityRate & prsAdd(PR &&pr)
Definition ContentPopularityRate.hh:350
ContentPopularityRate & prsAdd(const PR &pr)
Definition ContentPopularityRate.hh:349
std::list< PR >::const_iterator cbegin() const
Definition ContentPopularityRate.hh:312
std::list< PR >::const_iterator cend() const
Definition ContentPopularityRate.hh:324
std::list< PR >::const_iterator end() const
Definition ContentPopularityRate.hh:325
ContentPopularityRate(const ContentPopularityRate &to_copy)
std::list< PR >::const_iterator begin() const
Definition ContentPopularityRate.hh:313
ContentPopularityRate & prsRemove(const PR &pr)
ContentPopularityRate & prs(std::list< PR > &&prs_list)
Definition ContentPopularityRate.hh:340
ContentPopularityRate(ContentPopularityRate &&to_move)
std::list< PR >::iterator end()
Definition ContentPopularityRate.hh:326
ContentPopularityRate & operator=(const ContentPopularityRate &to_copy)
ContentPopularityRate & prsRemove(const std::list< PR >::const_iterator &it)
ContentPopularityRate & prs(const std::list< PR > &prs_list)
Definition ContentPopularityRate.hh:339
const std::list< PR > & prs() const
Definition ContentPopularityRate.hh:305
bool operator==(const ContentPopularityRate &to_compare) const
Definition RepresentationBase.hh:54
#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