1919 ***************************************************************************/
2020
2121#include " matroskasimpletag.h"
22+ #include < variant>
2223#include " matroskatag.h"
2324#include " tstring.h"
2425#include " tbytevector.h"
@@ -28,101 +29,100 @@ using namespace TagLib;
2829class Matroska ::SimpleTag::SimpleTagPrivate
2930{
3031public:
31- SimpleTagPrivate () = default ;
32- TargetTypeValue targetTypeValue = None;
33- String name;
34- String language;
35- bool defaultLanguageFlag = true ;
32+ explicit SimpleTagPrivate (const String &name, const String& value,
33+ TargetTypeValue targetTypeValue, const String &language, bool defaultLanguage) :
34+ value(value), name(name), language(language),
35+ targetTypeValue(targetTypeValue), defaultLanguageFlag(defaultLanguage) {}
36+ explicit SimpleTagPrivate (const String &name, const ByteVector& value,
37+ TargetTypeValue targetTypeValue, const String &language, bool defaultLanguage) :
38+ value(value), name(name), language(language),
39+ targetTypeValue(targetTypeValue), defaultLanguageFlag(defaultLanguage) {}
40+ const std::variant<String, ByteVector> value;
41+ const String name;
42+ const String language;
43+ const TargetTypeValue targetTypeValue;
44+ const bool defaultLanguageFlag;
3645};
3746
38- class Matroska ::SimpleTagString::SimpleTagStringPrivate
39- {
40- public:
41- SimpleTagStringPrivate () = default ;
42- String value;
43- };
44-
45- class Matroska ::SimpleTagBinary::SimpleTagBinaryPrivate
46- {
47- public:
48- SimpleTagBinaryPrivate () = default ;
49- ByteVector value;
50- };
47+ // //////////////////////////////////////////////////////////////////////////////
48+ // public members
49+ // //////////////////////////////////////////////////////////////////////////////
5150
52- Matroska::SimpleTag::SimpleTag () :
53- d(std::make_unique<SimpleTagPrivate>())
51+ Matroska::SimpleTag::SimpleTag (const String &name, const String &value,
52+ TargetTypeValue targetTypeValue, const String &language, bool defaultLanguage) :
53+ d(std::make_unique<SimpleTagPrivate>(name, value, targetTypeValue,
54+ language, defaultLanguage))
5455{
5556}
56- Matroska::SimpleTag::~SimpleTag () = default ;
5757
58- Matroska::SimpleTag::TargetTypeValue Matroska::SimpleTag::targetTypeValue () const
58+ Matroska::SimpleTag::SimpleTag (const String &name, const ByteVector &value,
59+ TargetTypeValue targetTypeValue, const String &language, bool defaultLanguage) :
60+ d(std::make_unique<SimpleTagPrivate>(name, value, targetTypeValue,
61+ language, defaultLanguage))
5962{
60- return d->targetTypeValue ;
6163}
6264
63- void Matroska::SimpleTag::setTargetTypeValue (TargetTypeValue targetTypeValue)
65+ Matroska::SimpleTag::SimpleTag (const SimpleTag &other) :
66+ d(std::make_unique<SimpleTagPrivate>(*other.d))
6467{
65- d->targetTypeValue = targetTypeValue;
6668}
6769
68- const String &Matroska::SimpleTag::name () const
69- {
70- return d->name ;
71- }
70+ Matroska::SimpleTag::SimpleTag (SimpleTag&& other) noexcept = default;
7271
73- const String &Matroska::SimpleTag::language () const
74- {
75- return d->language ;
76- }
72+ Matroska::SimpleTag::~SimpleTag () = default ;
7773
78- void Matroska::SimpleTag::setLanguage (const String &language)
79- {
80- d->language = language;
81- }
74+ Matroska::SimpleTag &Matroska::SimpleTag::operator =(SimpleTag &&other) = default ;
8275
83- bool Matroska::SimpleTag::defaultLanguageFlag () const
76+ Matroska::SimpleTag & Matroska::SimpleTag::operator =( const SimpleTag &other)
8477{
85- return d->defaultLanguageFlag ;
78+ SimpleTag (other).swap (*this );
79+ return *this ;
8680}
8781
88- void Matroska::SimpleTag::setDefaultLanguageFlag ( bool flag)
82+ void Matroska::SimpleTag::swap (SimpleTag &other) noexcept
8983{
90- d->defaultLanguageFlag = flag;
84+ using std::swap;
85+
86+ swap (d, other.d );
9187}
9288
93- void Matroska::SimpleTag::setName ( const String &name)
89+ Matroska::SimpleTag::TargetTypeValue Matroska::SimpleTag::targetTypeValue () const
9490{
95- d->name = name ;
91+ return d->targetTypeValue ;
9692}
9793
98- Matroska::SimpleTagString::SimpleTagString () :
99- dd(std::make_unique<SimpleTagStringPrivate>())
94+ const String &Matroska::SimpleTag::name () const
10095{
96+ return d->name ;
10197}
102- Matroska::SimpleTagString::~SimpleTagString () = default ;
10398
104- const String &Matroska::SimpleTagString::value () const
99+ const String &Matroska::SimpleTag::language () const
105100{
106- return dd-> value ;
101+ return d-> language ;
107102}
108103
109- void Matroska::SimpleTagString::setValue ( const String &value)
104+ bool Matroska::SimpleTag::defaultLanguageFlag () const
110105{
111- dd-> value = value ;
106+ return d-> defaultLanguageFlag ;
112107}
113108
114- Matroska::SimpleTagBinary::SimpleTagBinary () :
115- dd(std::make_unique<SimpleTagBinaryPrivate>())
109+ Matroska::SimpleTag::ValueType Matroska::SimpleTag::type () const
116110{
111+ return std::holds_alternative<ByteVector>(d->value ) ? BinaryType : StringType;
117112}
118- Matroska::SimpleTagBinary::~SimpleTagBinary () = default ;
119113
120- const ByteVector & Matroska::SimpleTagBinary::value () const
114+ String Matroska::SimpleTag::toString () const
121115{
122- return dd->value ;
116+ if (std::holds_alternative<String>(d->value )) {
117+ return std::get<String>(d->value );
118+ }
119+ return {};
123120}
124121
125- void Matroska::SimpleTagBinary::setValue ( const ByteVector &value)
122+ ByteVector Matroska::SimpleTag::toByteVector () const
126123{
127- dd->value = value;
124+ if (std::holds_alternative<ByteVector>(d->value )) {
125+ return std::get<ByteVector>(d->value );
126+ }
127+ return {};
128128}
0 commit comments