Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef TAGLIB_TAGUNION_H
00027 #define TAGLIB_TAGUNION_H
00028
00029 #include "tag.h"
00030
00031 #ifndef DO_NOT_DOCUMENT
00032
00033 namespace TagLib {
00034
00039 class TagUnion : public Tag
00040 {
00041 public:
00042
00043 enum AccessType { Read, Write };
00044
00050 TagUnion(Tag *first = 0, Tag *second = 0, Tag *third = 0);
00051
00052 virtual ~TagUnion();
00053
00054 Tag *operator[](int index) const;
00055 Tag *tag(int index) const;
00056
00057 void set(int index, Tag *tag);
00058
00059 PropertyMap properties() const;
00060 void removeUnsupportedProperties(const StringList &unsupported);
00061
00062 virtual String title() const;
00063 virtual String artist() const;
00064 virtual String album() const;
00065 virtual String comment() const;
00066 virtual String genre() const;
00067 virtual unsigned int year() const;
00068 virtual unsigned int track() const;
00069
00070 virtual void setTitle(const String &s);
00071 virtual void setArtist(const String &s);
00072 virtual void setAlbum(const String &s);
00073 virtual void setComment(const String &s);
00074 virtual void setGenre(const String &s);
00075 virtual void setYear(unsigned int i);
00076 virtual void setTrack(unsigned int i);
00077 virtual bool isEmpty() const;
00078
00079 template <class T> T *access(int index, bool create)
00080 {
00081 if(!create || tag(index))
00082 return static_cast<T *>(tag(index));
00083
00084 set(index, new T);
00085 return static_cast<T *>(tag(index));
00086 }
00087
00088 private:
00089 TagUnion(const Tag &);
00090 TagUnion &operator=(const Tag &);
00091
00092 class TagUnionPrivate;
00093 TagUnionPrivate *d;
00094 };
00095 }
00096
00097 #endif
00098 #endif