libmpd++
DASH MPD parsing and manipulation library
 
Loading...
Searching...
No Matches
SegmentAvailability.hh
Go to the documentation of this file.
1#ifndef _BBC_PARSE_DASH_MPD_SEGMENT_AVAILABILITY_HH_
2#define _BBC_PARSE_DASH_MPD_SEGMENT_AVAILABILITY_HH_
3/*****************************************************************************
4 * DASH MPD parsing library in C++: SegmentAvailability 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 <chrono>
14#include <iostream>
15#include <optional>
16
17#include "macros.hh"
18#include "URI.hh"
19
21
28public:
29 using time_type = std::chrono::system_clock::time_point;
30 using duration_type = std::chrono::microseconds;
31
35 SegmentAvailability(const time_type &availability_start, const duration_type &segment_length, const URI &segment_url,
36 const std::optional<time_type> &availability_end = std::nullopt);
37
39
42
43 int compare(const SegmentAvailability &to_compare) const;
44 bool operator<(const SegmentAvailability &to_compare) const { return compare(to_compare) > 0; };
45 bool operator<=(const SegmentAvailability &to_compare) const { return compare(to_compare) >= 0; };
46 bool operator==(const SegmentAvailability &to_compare) const { return compare(to_compare) == 0; };
47 bool operator!=(const SegmentAvailability &to_compare) const { return compare(to_compare) != 0; };
48 bool operator>(const SegmentAvailability &to_compare) const { return compare(to_compare) < 0; };
49 bool operator>=(const SegmentAvailability &to_compare) const { return compare(to_compare) <= 0; };
50
51 // Accessors
52 const time_type &availabilityStartTime() const { return m_availabilityStartTime; };
53 SegmentAvailability &availabilityStartTime(const time_type &val) { m_availabilityStartTime = val; return *this; };
54 SegmentAvailability &availabilityStartTime(time_type &&val) { m_availabilityStartTime = std::move(val); return *this; };
55
56 bool hasAvailabilityEndTime() const { return m_availabilityEndTime.has_value(); };
57 const std::optional<time_type> &availabilityEndTime() const { return m_availabilityEndTime; };
58 SegmentAvailability &availabilityEndTime(const std::nullopt_t&) { m_availabilityEndTime.reset(); return *this; };
59 SegmentAvailability &availabilityEndTime(const time_type &val) { m_availabilityEndTime = val; return *this; };
60 SegmentAvailability &availabilityEndTime(time_type &&val) { m_availabilityEndTime = std::move(val); return *this; };
61 SegmentAvailability &availabilityEndTime(const std::optional<time_type> &val) { m_availabilityEndTime = val; return *this; };
62 SegmentAvailability &availabilityEndTime(std::optional<time_type> &&val) { m_availabilityEndTime = std::move(val); return *this; };
63
64 const duration_type &segmentDuration() const { return m_segmentDuration; };
65 SegmentAvailability &segmentDuration(const duration_type &val) { m_segmentDuration = val; return *this; };
66 SegmentAvailability &segmentDuration(duration_type &&val) { m_segmentDuration = std::move(val); return *this; };
67
68 const URI &segmentURL() const { return m_segmentURL; };
69 SegmentAvailability &segmentURL(const URI &val) { m_segmentURL = val; return *this; };
70 SegmentAvailability &segmentURL(URI &&val) { m_segmentURL = std::move(val); return *this; };
71
72 // Convenience
73 bool isAvailable() const;
74
75 std::size_t hash() const noexcept;
76
77private:
78 // SegmentAvailability for query results
79 time_type m_availabilityStartTime;
80 std::optional<time_type> m_availabilityEndTime;
81 duration_type m_segmentDuration;
82 URI m_segmentURL;
83};
84
86
87namespace std {
94 template<>
95 struct hash<LIBMPDPP_NAMESPACE_CLASS(SegmentAvailability)> {
102 std::size_t operator()(const LIBMPDPP_NAMESPACE_CLASS(SegmentAvailability) &s) const noexcept {
103 return s.hash();
104 };
105 };
106}
107
117LIBMPDPP_PUBLIC_API std::ostream &operator<<(std::ostream &os, const LIBMPDPP_NAMESPACE_CLASS(SegmentAvailability) &s);
118
119/* vim:ts=8:sts=4:sw=4:expandtab:
120 */
121#endif /*_BBC_PARSE_DASH_MPD_SEGMENT_AVAILABILITY_HH_*/
std::ostream & operator<<(std::ostream &os, const com::bbc::libmpdpp ::Codecs::Encoding &enc)
bool operator>=(const SegmentAvailability &to_compare) const
Definition SegmentAvailability.hh:49
SegmentAvailability & availabilityEndTime(const std::nullopt_t &)
Definition SegmentAvailability.hh:58
SegmentAvailability & operator=(const SegmentAvailability &to_copy)
const std::optional< time_type > & availabilityEndTime() const
Definition SegmentAvailability.hh:57
SegmentAvailability & availabilityStartTime(time_type &&val)
Definition SegmentAvailability.hh:54
SegmentAvailability & segmentDuration(const duration_type &val)
Definition SegmentAvailability.hh:65
SegmentAvailability(const time_type &availability_start, const duration_type &segment_length, const URI &segment_url, const std::optional< time_type > &availability_end=std::nullopt)
int compare(const SegmentAvailability &to_compare) const
SegmentAvailability & operator=(SegmentAvailability &&to_move)
const duration_type & segmentDuration() const
Definition SegmentAvailability.hh:64
virtual ~SegmentAvailability()
Definition SegmentAvailability.hh:38
bool operator<=(const SegmentAvailability &to_compare) const
Definition SegmentAvailability.hh:45
SegmentAvailability & availabilityStartTime(const time_type &val)
Definition SegmentAvailability.hh:53
SegmentAvailability & availabilityEndTime(const std::optional< time_type > &val)
Definition SegmentAvailability.hh:61
bool hasAvailabilityEndTime() const
Definition SegmentAvailability.hh:56
SegmentAvailability & segmentURL(URI &&val)
Definition SegmentAvailability.hh:70
bool operator!=(const SegmentAvailability &to_compare) const
Definition SegmentAvailability.hh:47
SegmentAvailability & availabilityEndTime(time_type &&val)
Definition SegmentAvailability.hh:60
bool operator==(const SegmentAvailability &to_compare) const
Definition SegmentAvailability.hh:46
SegmentAvailability & availabilityEndTime(std::optional< time_type > &&val)
Definition SegmentAvailability.hh:62
SegmentAvailability(SegmentAvailability &&to_move)
std::chrono::microseconds duration_type
Definition SegmentAvailability.hh:30
SegmentAvailability(const SegmentAvailability &to_copy)
std::size_t hash() const noexcept
SegmentAvailability & availabilityEndTime(const time_type &val)
Definition SegmentAvailability.hh:59
std::chrono::system_clock::time_point time_type
Definition SegmentAvailability.hh:29
bool operator>(const SegmentAvailability &to_compare) const
Definition SegmentAvailability.hh:48
SegmentAvailability & segmentURL(const URI &val)
Definition SegmentAvailability.hh:69
const URI & segmentURL() const
Definition SegmentAvailability.hh:68
bool operator<(const SegmentAvailability &to_compare) const
Definition SegmentAvailability.hh:44
SegmentAvailability & segmentDuration(duration_type &&val)
Definition SegmentAvailability.hh:66
const time_type & availabilityStartTime() const
Definition SegmentAvailability.hh:52
Definition URI.hh:40
#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
std::size_t operator()(const com::bbc::libmpdpp ::SegmentAvailability &s) const noexcept
Definition SegmentAvailability.hh:102