Tag Parser  9.3.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
vorbiscommentfield.h
Go to the documentation of this file.
1 #ifndef TAG_PARSER_VORBISCOMMENTFIELD_H
2 #define TAG_PARSER_VORBISCOMMENTFIELD_H
3 
4 #include "../generictagfield.h"
5 
6 namespace CppUtilities {
7 class BinaryReader;
8 class BinaryWriter;
9 } // namespace CppUtilities
10 
11 namespace TagParser {
12 
16 enum class VorbisCommentFlags : std::uint8_t {
17  None = 0x0,
18  NoSignature = 0x1,
19  NoFramingByte = 0x2,
20  NoCovers = 0x4
21 };
22 
24 {
25  return static_cast<std::uint8_t>(lhs) & static_cast<std::uint8_t>(rhs);
26 }
27 
29 {
30  return static_cast<VorbisCommentFlags>(static_cast<std::uint8_t>(lhs) | static_cast<std::uint8_t>(rhs));
31 }
32 
33 class VorbisCommentField;
34 class Diagnostics;
35 
40 public:
41  using IdentifierType = std::string;
42  using TypeInfoType = std::uint32_t;
43 };
44 
45 class OggIterator;
46 
47 class TAG_PARSER_EXPORT VorbisCommentField : public TagField<VorbisCommentField> {
48  friend class TagField<VorbisCommentField>;
49 
50 public:
52  VorbisCommentField(const IdentifierType &id, const TagValue &value);
53 
54  void parse(OggIterator &iterator, Diagnostics &diag);
55  void parse(OggIterator &iterator, std::uint64_t &maxSize, Diagnostics &diag);
56  void parse(std::istream &stream, std::uint64_t &maxSize, Diagnostics &diag);
57  bool make(CppUtilities::BinaryWriter &writer, VorbisCommentFlags flags, Diagnostics &diag);
58  bool isAdditionalTypeInfoUsed() const;
59  bool supportsNestedFields() const;
60 
61  static typename std::string fieldIdFromString(const char *idString, std::size_t idStringSize = std::string::npos);
62  static std::string fieldIdToString(const std::string &id);
63 
64 private:
65  void reset();
66  template <class StreamType> void internalParse(StreamType &stream, std::uint64_t &maxSize, Diagnostics &diag);
67 };
68 
73 {
74  return false;
75 }
76 
81 {
82  return false;
83 }
84 
89 inline std::string VorbisCommentField::fieldIdFromString(const char *idString, std::size_t idStringSize)
90 {
91  return idStringSize != std::string::npos ? std::string(idString, idStringSize) : std::string(idString);
92 }
93 
98 inline std::string VorbisCommentField::fieldIdToString(const std::string &id)
99 {
100  return id;
101 }
102 
106 inline void VorbisCommentField::reset()
107 {
108 }
109 
110 } // namespace TagParser
111 
112 #endif // TAG_PARSER_VORBISCOMMENTFIELD_H
TagParser::SubFormats::None
@ None
Definition: mediaformat.h:110
TagParser::VorbisCommentFlags
VorbisCommentFlags
The VorbisCommentFlags enum specifies flags which controls parsing and making of Vorbis comments.
Definition: vorbiscommentfield.h:16
TagParser::TagFieldTraits
Defines traits for the specified ImplementationType.
Definition: generictagfield.h:16
TagParser::OggIterator
The OggIterator class helps iterating through all segments of an OGG bitstream.
Definition: oggiterator.h:11
TagParser::Diagnostics
The Diagnostics class is a container for DiagMessage.
Definition: diagnostics.h:156
TagParser
Contains all classes and functions of the TagInfo library.
Definition: aaccodebook.h:10
TagParser::VorbisCommentField::fieldIdToString
static std::string fieldIdToString(const std::string &id)
Returns the string representation for the specified id.
Definition: vorbiscommentfield.h:98
TagParser::TagField< VorbisCommentField >::id
const IdentifierType & id() const
Returns the id of the current TagField.
Definition: generictagfield.h:115
TagParser::TagFieldTraits< VorbisCommentField >::IdentifierType
std::string IdentifierType
Definition: vorbiscommentfield.h:41
TagParser::VorbisCommentField::isAdditionalTypeInfoUsed
bool isAdditionalTypeInfoUsed() const
Returns whether the additional type info is used.
Definition: vorbiscommentfield.h:72
TagParser::VorbisCommentField::supportsNestedFields
bool supportsNestedFields() const
Returns whether nested fields are supported.
Definition: vorbiscommentfield.h:80
TagParser::TagField
The TagField class is used by FieldMapBasedTag to store the fields.
Definition: generictagfield.h:30
TagParser::VorbisCommentField::fieldIdFromString
static std::string fieldIdFromString(const char *idString, std::size_t idStringSize=std::string::npos)
Converts the specified ID string representation to an actual ID.
Definition: vorbiscommentfield.h:89
TagParser::operator|
constexpr XingHeaderFlags operator|(XingHeaderFlags lhs, XingHeaderFlags rhs)
Definition: mpegaudioframe.h:145
CppUtilities
Definition: abstractcontainer.h:15
TagParser::TagValue
The TagValue class wraps values of different types.
Definition: tagvalue.h:75
TagParser::VorbisCommentFlags::None
@ None
TagParser::VorbisCommentField
The VorbisCommentField class is used by VorbisComment to store the fields.
Definition: vorbiscommentfield.h:47
TAG_PARSER_EXPORT
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
TagParser::operator&
constexpr XingHeaderFlags operator&(XingHeaderFlags lhs, XingHeaderFlags rhs)
Definition: mpegaudioframe.h:150
TagParser::TagFieldTraits< VorbisCommentField >::TypeInfoType
std::uint32_t TypeInfoType
Definition: vorbiscommentfield.h:42