MPD  0.20.23
VisitFallback.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_VISIT_FALLBACK_HXX
21 #define MPD_TAG_VISIT_FALLBACK_HXX
22 
23 #include "Fallback.hxx"
24 #include "Tag.hxx"
25 
26 template<typename F>
27 bool
28 VisitTagType(const Tag &tag, TagType type, F &&f) noexcept
29 {
30  bool found = false;
31 
32  for (const auto &item : tag) {
33  if (item.type == type) {
34  found = true;
35  f(item.value);
36  }
37  }
38 
39  return found;
40 }
41 
42 template<typename F>
43 bool
44 VisitTagWithFallback(const Tag &tag, TagType type, F &&f) noexcept
45 {
46  return ApplyTagWithFallback(type,
47  [&](TagType type2) {
48  return VisitTagType(tag, type2, f);
49  });
50 }
51 
52 template<typename F>
53 void
54 VisitTagWithFallbackOrEmpty(const Tag &tag, TagType type, F &&f) noexcept
55 {
56  if (!VisitTagWithFallback(tag, type, f))
57  f("");
58 }
59 
60 #endif
The meta information about a song file.
Definition: Tag.hxx:34
bool ApplyTagWithFallback(TagType type, F &&f) noexcept
Definition: Fallback.hxx:48
TagType
Codes for the type of a tag item.
Definition: TagType.h:30
void VisitTagWithFallbackOrEmpty(const Tag &tag, TagType type, F &&f) noexcept
bool VisitTagWithFallback(const Tag &tag, TagType type, F &&f) noexcept
bool VisitTagType(const Tag &tag, TagType type, F &&f) noexcept