libmusicbrainz3
3.0.2
|
00001 /* 00002 * MusicBrainz -- The Internet music metadatabase 00003 * 00004 * Copyright (C) 2006 Lukas Lalinsky 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00019 * 00020 * $Id: includes.h 9187 2007-06-20 19:11:15Z luks $ 00021 */ 00022 00023 #ifndef __MUSICBRAINZ3_INCLUDES_H__ 00024 #define __MUSICBRAINZ3_INCLUDES_H__ 00025 00026 #include <string> 00027 #include <vector> 00028 #include <musicbrainz3/musicbrainz.h> 00029 00030 namespace MusicBrainz 00031 { 00032 00036 class MB_API IIncludes 00037 { 00038 public: 00039 typedef std::vector<std::string> IncludeList; 00040 00041 virtual ~IIncludes() {}; 00042 00049 virtual IncludeList createIncludeTags() const = 0; 00050 }; 00051 00062 class MB_API ArtistIncludes : public IIncludes 00063 { 00064 public: 00066 ArtistIncludes &aliases(); 00068 ArtistIncludes &releases(const std::string &type); 00070 ArtistIncludes &vaReleases(const std::string &type); 00072 ArtistIncludes &releaseEvents(); 00074 ArtistIncludes &artistRelations(); 00076 ArtistIncludes &releaseRelations(); 00078 ArtistIncludes &trackRelations(); 00080 ArtistIncludes &urlRelations(); 00081 IncludeList createIncludeTags() const; 00082 private: 00083 IncludeList includes; 00084 }; 00085 00096 class MB_API ReleaseIncludes : public IIncludes 00097 { 00098 public: 00100 ReleaseIncludes &artist(); 00102 ReleaseIncludes &counts(); 00104 ReleaseIncludes &releaseEvents(); 00106 ReleaseIncludes &discs(); 00108 ReleaseIncludes &tracks(); 00110 ReleaseIncludes &artistRelations(); 00112 ReleaseIncludes &releaseRelations(); 00114 ReleaseIncludes &trackRelations(); 00116 ReleaseIncludes &urlRelations(); 00117 IncludeList createIncludeTags() const; 00118 private: 00119 IncludeList includes; 00120 }; 00121 00132 class MB_API TrackIncludes : public IIncludes 00133 { 00134 public: 00136 TrackIncludes &artist(); 00138 TrackIncludes &releases(); 00140 TrackIncludes &puids(); 00142 TrackIncludes &artistRelations(); 00144 TrackIncludes &releaseRelations(); 00146 TrackIncludes &trackRelations(); 00148 TrackIncludes &urlRelations(); 00149 IncludeList createIncludeTags() const; 00150 private: 00151 IncludeList includes; 00152 }; 00153 00154 } 00155 00156 #endif