MPD  0.20.23
Fallback.hxx
Go to the documentation of this file.
1 /*
2  * Copyright 2003-2018 The Music Player Daemon Project
3  * http://www.musicpd.org
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 #ifndef MPD_TAG_FALLBACK_HXX
21 #define MPD_TAG_FALLBACK_HXX
22 
23 #include <utility>
24 
25 template<typename F>
26 bool
27 ApplyTagFallback(TagType type, F &&f) noexcept
28 {
29  if (type == TAG_ALBUM_ARTIST_SORT) {
30  /* fall back to "AlbumArtist", "ArtistSort" and
31  "Artist" if no "AlbumArtistSort" was found */
32  if (f(TAG_ALBUM_ARTIST))
33  return true;
34 
35  return ApplyTagFallback(TAG_ARTIST_SORT, std::forward<F>(f));
36  }
37 
38  if (type == TAG_ALBUM_ARTIST || type == TAG_ARTIST_SORT)
39  /* fall back to "Artist" if no
40  "AlbumArtist"/"ArtistSort" was found */
41  return f(TAG_ARTIST);
42 
43  return false;
44 }
45 
46 template<typename F>
47 bool
48 ApplyTagWithFallback(TagType type, F &&f) noexcept
49 {
50  return f(type) || ApplyTagFallback(type, std::forward<F>(f));
51 }
52 
53 #endif
bool ApplyTagWithFallback(TagType type, F &&f) noexcept
Definition: Fallback.hxx:48
TagType
Codes for the type of a tag item.
Definition: TagType.h:30
bool ApplyTagFallback(TagType type, F &&f) noexcept
Definition: Fallback.hxx:27