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 8466 2006-09-05 08:59:44Z 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 &artistRelations(); 00074 ArtistIncludes &releaseRelations(); 00076 ArtistIncludes &trackRelations(); 00078 ArtistIncludes &urlRelations(); 00079 IncludeList createIncludeTags() const; 00080 private: 00081 IncludeList includes; 00082 }; 00083 00094 class MB_API ReleaseIncludes : public IIncludes 00095 { 00096 public: 00098 ReleaseIncludes &artist(); 00100 ReleaseIncludes &counts(); 00102 ReleaseIncludes &releaseEvents(); 00104 ReleaseIncludes &discs(); 00106 ReleaseIncludes &tracks(); 00108 ReleaseIncludes &artistRelations(); 00110 ReleaseIncludes &releaseRelations(); 00112 ReleaseIncludes &trackRelations(); 00114 ReleaseIncludes &urlRelations(); 00115 IncludeList createIncludeTags() const; 00116 private: 00117 IncludeList includes; 00118 }; 00119 00130 class MB_API TrackIncludes : public IIncludes 00131 { 00132 public: 00134 TrackIncludes &artist(); 00136 TrackIncludes &releases(); 00138 TrackIncludes &puids(); 00140 TrackIncludes &artistRelations(); 00142 TrackIncludes &releaseRelations(); 00144 TrackIncludes &trackRelations(); 00146 TrackIncludes &urlRelations(); 00147 IncludeList createIncludeTags() const; 00148 private: 00149 IncludeList includes; 00150 }; 00151 00152 } 00153 00154 #endif