1 /* 2 * Copyright (C) 2017-2018 Team Kodi 3 * This file is part of Kodi - https://kodi.tv 4 * 5 * SPDX-License-Identifier: GPL-2.0-or-later 6 * See LICENSES/README.md for more information. 7 */ 8 9 #pragma once 10 11 #include <string> 12 13 namespace PVR 14 { 15 class CPVRChannelNumber 16 { 17 public: 18 CPVRChannelNumber() = default; 19 CPVRChannelNumber(unsigned int iChannelNumber,unsigned int iSubChannelNumber)20 constexpr CPVRChannelNumber(unsigned int iChannelNumber, unsigned int iSubChannelNumber) 21 : m_iChannelNumber(iChannelNumber), m_iSubChannelNumber(iSubChannelNumber) {} 22 23 constexpr bool operator ==(const CPVRChannelNumber& right) const 24 { 25 return (m_iChannelNumber == right.m_iChannelNumber && 26 m_iSubChannelNumber == right.m_iSubChannelNumber); 27 } 28 29 constexpr bool operator !=(const CPVRChannelNumber& right) const 30 { 31 return !(*this == right); 32 } 33 34 constexpr bool operator <(const CPVRChannelNumber& right) const 35 { 36 return m_iChannelNumber == right.m_iChannelNumber 37 ? m_iSubChannelNumber < right.m_iSubChannelNumber 38 : m_iChannelNumber < right.m_iChannelNumber; 39 } 40 41 /*! 42 * @brief Check whether this channel number is valid (main channel number > 0). 43 * @return True if valid, false otherwise.. 44 */ IsValid()45 constexpr bool IsValid() const { return m_iChannelNumber > 0; } 46 47 /*! 48 * @brief Set the primary channel number. 49 * @return The channel number. 50 */ GetChannelNumber()51 constexpr unsigned int GetChannelNumber() const 52 { 53 return m_iChannelNumber; 54 } 55 56 /*! 57 * @brief Set the sub channel number. 58 * @return The sub channel number (ATSC). 59 */ GetSubChannelNumber()60 constexpr unsigned int GetSubChannelNumber() const 61 { 62 return m_iSubChannelNumber; 63 } 64 65 /*! 66 * @brief The character used to separate channel and subchannel number. 67 */ 68 static const char SEPARATOR; // '.' 69 70 /*! 71 * @brief Get a string representation for the channel number. 72 * @return The formatted string in the form <channel>SEPARATOR<subchannel>. 73 */ 74 std::string FormattedChannelNumber() const; 75 76 /*! 77 * @brief Get a string representation for the channel number that can be used for SortItems. 78 * @return The sortable string in the form <channel> <subchannel>. 79 */ 80 std::string SortableChannelNumber() const; 81 82 private: 83 std::string ToString(char separator) const; 84 85 unsigned int m_iChannelNumber = 0; 86 unsigned int m_iSubChannelNumber = 0; 87 }; 88 } 89