tagunion.h
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 virtual String title() const;
00060 virtual String artist() const;
00061 virtual String album() const;
00062 virtual String comment() const;
00063 virtual String genre() const;
00064 virtual uint year() const;
00065 virtual uint track() const;
00066
00067 virtual void setTitle(const String &s);
00068 virtual void setArtist(const String &s);
00069 virtual void setAlbum(const String &s);
00070 virtual void setComment(const String &s);
00071 virtual void setGenre(const String &s);
00072 virtual void setYear(uint i);
00073 virtual void setTrack(uint i);
00074 virtual bool isEmpty() const;
00075
00076 template <class T> T *access(int index, bool create)
00077 {
00078 if(!create || tag(index))
00079 return static_cast<T *>(tag(index));
00080
00081 set(index, new T);
00082 return static_cast<T *>(tag(index));
00083 }
00084
00085 private:
00086 TagUnion(const Tag &);
00087 TagUnion &operator=(const Tag &);
00088
00089 class TagUnionPrivate;
00090 TagUnionPrivate *d;
00091 };
00092 }
00093
00094 #endif
00095 #endif