Add flags to TagValue, replacing dedicated field for read-only flag
This commit is contained in:
parent
aa23750307
commit
9368b7a245
11
tagvalue.cpp
11
tagvalue.cpp
|
@ -101,7 +101,7 @@ TagValue::TagValue(const TagValue &other)
|
|||
, m_type(other.m_type)
|
||||
, m_encoding(other.m_encoding)
|
||||
, m_descEncoding(other.m_descEncoding)
|
||||
, m_labeledAsReadonly(other.m_labeledAsReadonly)
|
||||
, m_flags(TagValueFlags::None)
|
||||
{
|
||||
if (!other.isEmpty()) {
|
||||
m_ptr = make_unique<char[]>(m_size);
|
||||
|
@ -122,7 +122,7 @@ TagValue &TagValue::operator=(const TagValue &other)
|
|||
m_desc = other.m_desc;
|
||||
m_mimeType = other.m_mimeType;
|
||||
m_language = other.m_language;
|
||||
m_labeledAsReadonly = other.m_labeledAsReadonly;
|
||||
m_flags = other.m_flags;
|
||||
m_encoding = other.m_encoding;
|
||||
m_descEncoding = other.m_descEncoding;
|
||||
if (other.isEmpty()) {
|
||||
|
@ -183,7 +183,7 @@ bool TagValue::compareTo(const TagValue &other, TagValueComparisionFlags options
|
|||
// check whether meta-data is equal (except description)
|
||||
if (!(options & TagValueComparisionFlags::IgnoreMetaData)) {
|
||||
// check meta-data which always uses UTF-8 (everything but description)
|
||||
if (m_mimeType != other.m_mimeType || m_language != other.m_language || m_labeledAsReadonly != other.m_labeledAsReadonly) {
|
||||
if (m_mimeType != other.m_mimeType || m_language != other.m_language || m_flags != other.m_flags) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -299,8 +299,7 @@ bool TagValue::compareTo(const TagValue &other, TagValueComparisionFlags options
|
|||
|
||||
/*!
|
||||
* \brief Wipes assigned meta data.
|
||||
* - Clears description, mime type and language.
|
||||
* - Resets the read-only flag to false.
|
||||
* - Clears description, mime type, language and flags.
|
||||
* - Resets the encoding to TagTextEncoding::Latin1.
|
||||
* - Resets the data type to TagDataType::Undefined.
|
||||
*/
|
||||
|
@ -309,7 +308,7 @@ void TagValue::clearMetadata()
|
|||
m_desc.clear();
|
||||
m_mimeType.clear();
|
||||
m_language.clear();
|
||||
m_labeledAsReadonly = false;
|
||||
m_flags = TagValueFlags::None;
|
||||
m_encoding = TagTextEncoding::Latin1;
|
||||
m_descEncoding = TagTextEncoding::Latin1;
|
||||
m_type = TagDataType::Undefined;
|
||||
|
|
54
tagvalue.h
54
tagvalue.h
|
@ -9,6 +9,7 @@
|
|||
#include <c++utilities/misc/flagenumclass.h>
|
||||
#include <c++utilities/misc/traits.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <iosfwd>
|
||||
#include <memory>
|
||||
|
@ -30,6 +31,23 @@ enum class TagTextEncoding : unsigned int {
|
|||
Unspecified /**< unspecified encoding */
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief Specifies additional flags about the tag value.
|
||||
* \remarks It depends on the tag format whether these flags can be present. When setting a flag
|
||||
* which is not supported by the tag format, the tag implementation for that tag format
|
||||
* is supposed to ignore these flags.
|
||||
*/
|
||||
enum class TagValueFlags : std::uint64_t {
|
||||
None, /**< no flags present */
|
||||
ReadOnly, /**< the tag value is labeled as read-only */
|
||||
};
|
||||
|
||||
} // namespace TagParser
|
||||
|
||||
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(TagParser, TagParser::TagValueFlags)
|
||||
|
||||
namespace TagParser {
|
||||
|
||||
/*!
|
||||
* \brief Returns the size of one character for the specified \a encoding in bytes.
|
||||
* \remarks For variable-width encoding the minimum size is returned.
|
||||
|
@ -126,6 +144,8 @@ public:
|
|||
void setMimeType(const std::string &mimeType);
|
||||
const std::string &language() const;
|
||||
void setLanguage(const std::string &language);
|
||||
TagValueFlags flags() const;
|
||||
void setFlags(TagValueFlags flags);
|
||||
bool isLabeledAsReadonly() const;
|
||||
void setReadonly(bool readOnly);
|
||||
TagTextEncoding dataEncoding() const;
|
||||
|
@ -169,7 +189,7 @@ private:
|
|||
TagDataType m_type;
|
||||
TagTextEncoding m_encoding;
|
||||
TagTextEncoding m_descEncoding;
|
||||
bool m_labeledAsReadonly;
|
||||
TagValueFlags m_flags;
|
||||
};
|
||||
|
||||
/*!
|
||||
|
@ -180,7 +200,7 @@ inline TagValue::TagValue()
|
|||
, m_type(TagDataType::Undefined)
|
||||
, m_encoding(TagTextEncoding::Latin1)
|
||||
, m_descEncoding(TagTextEncoding::Latin1)
|
||||
, m_labeledAsReadonly(false)
|
||||
, m_flags(TagValueFlags::None)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -203,7 +223,7 @@ inline TagValue::~TagValue()
|
|||
*/
|
||||
inline TagValue::TagValue(const char *text, std::size_t textSize, TagTextEncoding textEncoding, TagTextEncoding convertTo)
|
||||
: m_descEncoding(TagTextEncoding::Latin1)
|
||||
, m_labeledAsReadonly(false)
|
||||
, m_flags(TagValueFlags::None)
|
||||
{
|
||||
assignText(text, textSize, textEncoding, convertTo);
|
||||
}
|
||||
|
@ -233,7 +253,7 @@ inline TagValue::TagValue(const char *text, TagTextEncoding textEncoding, TagTex
|
|||
*/
|
||||
inline TagValue::TagValue(const std::string &text, TagTextEncoding textEncoding, TagTextEncoding convertTo)
|
||||
: m_descEncoding(TagTextEncoding::Latin1)
|
||||
, m_labeledAsReadonly(false)
|
||||
, m_flags(TagValueFlags::None)
|
||||
{
|
||||
assignText(text, textEncoding, convertTo);
|
||||
}
|
||||
|
@ -261,7 +281,7 @@ inline TagValue::TagValue(const char *data, std::size_t length, TagDataType type
|
|||
, m_type(type)
|
||||
, m_encoding(encoding)
|
||||
, m_descEncoding(TagTextEncoding::Latin1)
|
||||
, m_labeledAsReadonly(false)
|
||||
, m_flags(TagValueFlags::None)
|
||||
{
|
||||
if (length) {
|
||||
if (type == TagDataType::Text) {
|
||||
|
@ -289,7 +309,7 @@ inline TagValue::TagValue(std::unique_ptr<char[]> &&data, std::size_t length, Ta
|
|||
, m_type(type)
|
||||
, m_encoding(encoding)
|
||||
, m_descEncoding(TagTextEncoding::Latin1)
|
||||
, m_labeledAsReadonly(false)
|
||||
, m_flags(TagValueFlags::None)
|
||||
{
|
||||
if (length) {
|
||||
m_ptr = move(data);
|
||||
|
@ -586,6 +606,24 @@ inline void TagValue::setLanguage(const std::string &language)
|
|||
m_language = language;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Returns the flags.
|
||||
* \sa TagValueFlags
|
||||
*/
|
||||
inline TagValueFlags TagValue::flags() const
|
||||
{
|
||||
return m_flags;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Sets the flags.
|
||||
* \sa TagValueFlags
|
||||
*/
|
||||
inline void TagValue::setFlags(TagValueFlags flags)
|
||||
{
|
||||
m_flags = flags;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Returns an indication whether the value is labeled as read-only.
|
||||
* \remarks The usage of this meta information depends on the tag implementation.
|
||||
|
@ -596,7 +634,7 @@ inline void TagValue::setLanguage(const std::string &language)
|
|||
*/
|
||||
inline bool TagValue::isLabeledAsReadonly() const
|
||||
{
|
||||
return m_labeledAsReadonly;
|
||||
return m_flags & TagValueFlags::ReadOnly;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -609,7 +647,7 @@ inline bool TagValue::isLabeledAsReadonly() const
|
|||
*/
|
||||
inline void TagValue::setReadonly(bool readOnly)
|
||||
{
|
||||
m_labeledAsReadonly = readOnly;
|
||||
readOnly ? (m_flags += TagValueFlags::ReadOnly) : (m_flags -= TagValueFlags::ReadOnly);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
Loading…
Reference in New Issue