Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
2f3f075e
Commit
2f3f075e
authored
Feb 07, 2017
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tag/Mask: wrap in class
parent
17097d96
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
110 additions
and
38 deletions
+110
-38
DatabaseCommands.cxx
src/command/DatabaseCommands.cxx
+4
-3
DatabasePrint.cxx
src/db/DatabasePrint.cxx
+2
-1
DatabasePrint.hxx
src/db/DatabasePrint.hxx
+2
-3
Interface.hxx
src/db/Interface.hxx
+2
-2
UniqueTags.cxx
src/db/UniqueTags.cxx
+3
-2
UniqueTags.hxx
src/db/UniqueTags.hxx
+2
-2
ProxyDatabasePlugin.cxx
src/db/plugins/ProxyDatabasePlugin.cxx
+3
-2
SimpleDatabasePlugin.cxx
src/db/plugins/simple/SimpleDatabasePlugin.cxx
+2
-1
SimpleDatabasePlugin.hxx
src/db/plugins/simple/SimpleDatabasePlugin.hxx
+1
-1
UpnpDatabasePlugin.cxx
src/db/plugins/upnp/UpnpDatabasePlugin.cxx
+3
-2
Config.cxx
src/tag/Config.cxx
+2
-2
Mask.hxx
src/tag/Mask.hxx
+66
-1
Set.cxx
src/tag/Set.cxx
+7
-6
Set.hxx
src/tag/Set.hxx
+5
-4
Settings.cxx
src/tag/Settings.cxx
+1
-1
Settings.hxx
src/tag/Settings.hxx
+5
-5
No files found.
src/command/DatabaseCommands.cxx
View file @
2f3f075e
...
...
@@ -29,6 +29,7 @@
#include "client/Client.hxx"
#include "client/Response.hxx"
#include "tag/ParseName.hxx"
#include "tag/Mask.hxx"
#include "util/ConstBuffer.hxx"
#include "util/StringAPI.hxx"
#include "SongFilter.hxx"
...
...
@@ -191,7 +192,7 @@ handle_list(Client &client, Request args, Response &r)
}
std
::
unique_ptr
<
SongFilter
>
filter
;
tag_mask_t
group_mask
=
0
;
TagMask
group_mask
=
TagMask
::
None
()
;
if
(
args
.
size
==
1
)
{
/* for compatibility with < 0.12.0 */
...
...
@@ -216,7 +217,7 @@ handle_list(Client &client, Request args, Response &r)
return
CommandResult
::
ERROR
;
}
group_mask
|=
tag_mask_t
(
1
)
<<
unsigned
(
gt
)
;
group_mask
|=
gt
;
args
.
pop_back
();
args
.
pop_back
();
...
...
@@ -231,7 +232,7 @@ handle_list(Client &client, Request args, Response &r)
}
if
(
tagType
<
TAG_NUM_OF_ITEM_TYPES
&&
group_mask
&
(
tag_mask_t
(
1
)
<<
tagType
))
{
group_mask
.
Test
(
TagType
(
tagType
)
))
{
r
.
Error
(
ACK_ERROR_ARG
,
"Conflicting group"
);
return
CommandResult
::
ERROR
;
}
...
...
src/db/DatabasePrint.cxx
View file @
2f3f075e
...
...
@@ -27,6 +27,7 @@
#include "client/Response.hxx"
#include "Partition.hxx"
#include "tag/Tag.hxx"
#include "tag/Mask.hxx"
#include "LightSong.hxx"
#include "LightDirectory.hxx"
#include "PlaylistInfo.hxx"
...
...
@@ -202,7 +203,7 @@ PrintUniqueTag(Response &r, TagType tag_type,
void
PrintUniqueTags
(
Response
&
r
,
Partition
&
partition
,
unsigned
type
,
tag_mask_t
group_mask
,
unsigned
type
,
TagMask
group_mask
,
const
SongFilter
*
filter
)
{
const
Database
&
db
=
partition
.
GetDatabaseOrThrow
();
...
...
src/db/DatabasePrint.hxx
View file @
2f3f075e
...
...
@@ -20,8 +20,7 @@
#ifndef MPD_DB_PRINT_H
#define MPD_DB_PRINT_H
#include "tag/Mask.hxx"
class
TagMask
;
class
SongFilter
;
struct
DatabaseSelection
;
struct
Partition
;
...
...
@@ -44,7 +43,7 @@ db_selection_print(Response &r, Partition &partition,
void
PrintUniqueTags
(
Response
&
r
,
Partition
&
partition
,
unsigned
type
,
tag_mask_t
group_mask
,
unsigned
type
,
TagMask
group_mask
,
const
SongFilter
*
filter
);
#endif
src/db/Interface.hxx
View file @
2f3f075e
...
...
@@ -22,7 +22,6 @@
#include "Visitor.hxx"
#include "tag/Type.h"
#include "tag/Mask.hxx"
#include "Compiler.h"
#include <time.h>
...
...
@@ -31,6 +30,7 @@ struct DatabasePlugin;
struct
DatabaseStats
;
struct
DatabaseSelection
;
struct
LightSong
;
class
TagMask
;
class
Database
{
const
DatabasePlugin
&
plugin
;
...
...
@@ -103,7 +103,7 @@ public:
* Visit all unique tag values.
*/
virtual
void
VisitUniqueTags
(
const
DatabaseSelection
&
selection
,
TagType
tag_type
,
tag_mask_t
group_mask
,
TagType
tag_type
,
TagMask
group_mask
,
VisitTag
visit_tag
)
const
=
0
;
gcc_pure
...
...
src/db/UniqueTags.cxx
View file @
2f3f075e
...
...
@@ -21,13 +21,14 @@
#include "Interface.hxx"
#include "LightSong.hxx"
#include "tag/Set.hxx"
#include "tag/Mask.hxx"
#include <functional>
#include <assert.h>
static
void
CollectTags
(
TagSet
&
set
,
TagType
tag_type
,
tag_mask_t
group_mask
,
CollectTags
(
TagSet
&
set
,
TagType
tag_type
,
TagMask
group_mask
,
const
LightSong
&
song
)
{
assert
(
song
.
tag
!=
nullptr
);
...
...
@@ -38,7 +39,7 @@ CollectTags(TagSet &set, TagType tag_type, tag_mask_t group_mask,
void
VisitUniqueTags
(
const
Database
&
db
,
const
DatabaseSelection
&
selection
,
TagType
tag_type
,
tag_mask_t
group_mask
,
TagType
tag_type
,
TagMask
group_mask
,
VisitTag
visit_tag
)
{
TagSet
set
;
...
...
src/db/UniqueTags.hxx
View file @
2f3f075e
...
...
@@ -22,14 +22,14 @@
#include "Visitor.hxx"
#include "tag/Type.h"
#include "tag/Mask.hxx"
class
TagMask
;
class
Database
;
struct
DatabaseSelection
;
void
VisitUniqueTags
(
const
Database
&
db
,
const
DatabaseSelection
&
selection
,
TagType
tag_type
,
tag_mask_t
group_mask
,
TagType
tag_type
,
TagMask
group_mask
,
VisitTag
visit_tag
);
#endif
src/db/plugins/ProxyDatabasePlugin.cxx
View file @
2f3f075e
...
...
@@ -33,6 +33,7 @@
#include "config/Block.hxx"
#include "tag/Builder.hxx"
#include "tag/Tag.hxx"
#include "tag/Mask.hxx"
#include "util/ScopeExit.hxx"
#include "util/RuntimeError.hxx"
#include "protocol/Ack.hxx"
...
...
@@ -120,7 +121,7 @@ public:
VisitPlaylist
visit_playlist
)
const
override
;
void
VisitUniqueTags
(
const
DatabaseSelection
&
selection
,
TagType
tag_type
,
tag_mask_t
group_mask
,
TagType
tag_type
,
TagMask
group_mask
,
VisitTag
visit_tag
)
const
override
;
DatabaseStats
GetStats
(
const
DatabaseSelection
&
selection
)
const
override
;
...
...
@@ -756,7 +757,7 @@ ProxyDatabase::Visit(const DatabaseSelection &selection,
void
ProxyDatabase
::
VisitUniqueTags
(
const
DatabaseSelection
&
selection
,
TagType
tag_type
,
gcc_unused
tag_mask_t
group_mask
,
gcc_unused
TagMask
group_mask
,
VisitTag
visit_tag
)
const
{
// TODO: eliminate the const_cast
...
...
src/db/plugins/simple/SimpleDatabasePlugin.cxx
View file @
2f3f075e
...
...
@@ -31,6 +31,7 @@
#include "DatabaseSave.hxx"
#include "db/DatabaseLock.hxx"
#include "db/DatabaseError.hxx"
#include "tag/Mask.hxx"
#include "fs/io/TextFile.hxx"
#include "fs/io/BufferedOutputStream.hxx"
#include "fs/io/FileOutputStream.hxx"
...
...
@@ -301,7 +302,7 @@ SimpleDatabase::Visit(const DatabaseSelection &selection,
void
SimpleDatabase
::
VisitUniqueTags
(
const
DatabaseSelection
&
selection
,
TagType
tag_type
,
tag_mask_t
group_mask
,
TagType
tag_type
,
TagMask
group_mask
,
VisitTag
visit_tag
)
const
{
::
VisitUniqueTags
(
*
this
,
selection
,
tag_type
,
group_mask
,
visit_tag
);
...
...
src/db/plugins/simple/SimpleDatabasePlugin.hxx
View file @
2f3f075e
...
...
@@ -120,7 +120,7 @@ public:
VisitPlaylist
visit_playlist
)
const
override
;
void
VisitUniqueTags
(
const
DatabaseSelection
&
selection
,
TagType
tag_type
,
tag_mask_t
group_mask
,
TagType
tag_type
,
TagMask
group_mask
,
VisitTag
visit_tag
)
const
override
;
DatabaseStats
GetStats
(
const
DatabaseSelection
&
selection
)
const
override
;
...
...
src/db/plugins/upnp/UpnpDatabasePlugin.cxx
View file @
2f3f075e
...
...
@@ -35,6 +35,7 @@
#include "config/Block.hxx"
#include "tag/Builder.hxx"
#include "tag/Table.hxx"
#include "tag/Mask.hxx"
#include "fs/Traits.hxx"
#include "Log.hxx"
#include "SongFilter.hxx"
...
...
@@ -88,7 +89,7 @@ public:
VisitPlaylist
visit_playlist
)
const
override
;
void
VisitUniqueTags
(
const
DatabaseSelection
&
selection
,
TagType
tag_type
,
tag_mask_t
group_mask
,
TagType
tag_type
,
TagMask
group_mask
,
VisitTag
visit_tag
)
const
override
;
DatabaseStats
GetStats
(
const
DatabaseSelection
&
selection
)
const
override
;
...
...
@@ -605,7 +606,7 @@ UpnpDatabase::Visit(const DatabaseSelection &selection,
void
UpnpDatabase
::
VisitUniqueTags
(
const
DatabaseSelection
&
selection
,
TagType
tag
,
gcc_unused
tag_mask_t
group_mask
,
TagType
tag
,
gcc_unused
TagMask
group_mask
,
VisitTag
visit_tag
)
const
{
// TODO: use group_mask
...
...
src/tag/Config.cxx
View file @
2f3f075e
...
...
@@ -37,7 +37,7 @@ TagLoadConfig()
if
(
value
==
nullptr
)
return
;
global_tag_mask
=
0
;
global_tag_mask
=
TagMask
::
None
()
;
if
(
StringEqualsCaseASCII
(
value
,
"none"
))
return
;
...
...
@@ -60,7 +60,7 @@ TagLoadConfig()
FormatFatalError
(
"error parsing metadata item
\"
%s
\"
"
,
c
);
global_tag_mask
|=
t
ag_mask_t
(
1
)
<<
unsigned
(
type
)
;
global_tag_mask
|=
t
ype
;
s
++
;
c
=
s
;
...
...
src/tag/Mask.hxx
View file @
2f3f075e
...
...
@@ -20,8 +20,73 @@
#ifndef MPD_TAG_MASK_HXX
#define MPD_TAG_MASK_HXX
#include "Type.h"
#include <stdint.h>
typedef
uint_least32_t
tag_mask_t
;
class
TagMask
{
typedef
uint_least32_t
mask_t
;
mask_t
value
;
explicit
constexpr
TagMask
(
uint_least32_t
_value
)
:
value
(
_value
)
{}
public
:
TagMask
()
=
default
;
constexpr
TagMask
(
TagType
tag
)
:
value
(
mask_t
(
1
)
<<
mask_t
(
tag
))
{}
static
constexpr
TagMask
None
()
{
return
TagMask
(
mask_t
(
0
));
}
static
constexpr
TagMask
All
()
{
return
~
None
();
}
constexpr
TagMask
operator
~
()
const
{
return
TagMask
(
~
value
);
}
constexpr
TagMask
operator
&
(
TagMask
other
)
const
{
return
TagMask
(
value
&
other
.
value
);
}
constexpr
TagMask
operator
|
(
TagMask
other
)
const
{
return
TagMask
(
value
|
other
.
value
);
}
constexpr
TagMask
operator
^
(
TagMask
other
)
const
{
return
TagMask
(
value
^
other
.
value
);
}
TagMask
&
operator
&=
(
TagMask
other
)
{
value
|=
other
.
value
;
return
*
this
;
}
TagMask
&
operator
|=
(
TagMask
other
)
{
value
|=
other
.
value
;
return
*
this
;
}
TagMask
&
operator
^=
(
TagMask
other
)
{
value
|=
other
.
value
;
return
*
this
;
}
constexpr
bool
TestAny
()
const
{
return
value
!=
0
;
}
constexpr
bool
Test
(
TagType
tag
)
const
{
return
(
*
this
&
tag
).
TestAny
();
}
void
Set
(
TagType
tag
)
{
*
this
|=
tag
;
}
};
#endif
src/tag/Set.cxx
View file @
2f3f075e
...
...
@@ -19,6 +19,7 @@
#include "Set.hxx"
#include "Builder.hxx"
#include "Mask.hxx"
#include "Settings.hxx"
#include <assert.h>
...
...
@@ -58,16 +59,16 @@ CopyTagItem(TagBuilder &dest, const Tag &src, TagType type)
* Copy all tag items of the types in the mask.
*/
static
void
CopyTagMask
(
TagBuilder
&
dest
,
const
Tag
&
src
,
tag_mask_t
mask
)
CopyTagMask
(
TagBuilder
&
dest
,
const
Tag
&
src
,
TagMask
mask
)
{
for
(
unsigned
i
=
0
;
i
<
TAG_NUM_OF_ITEM_TYPES
;
++
i
)
if
(
(
mask
&
(
tag_mask_t
(
1
)
<<
i
))
!=
0
)
if
(
mask
.
Test
(
TagType
(
i
))
)
CopyTagItem
(
dest
,
src
,
TagType
(
i
));
}
void
TagSet
::
InsertUnique
(
const
Tag
&
src
,
TagType
type
,
const
char
*
value
,
tag_mask_t
group_mask
)
TagMask
group_mask
)
{
TagBuilder
builder
;
if
(
value
==
nullptr
)
...
...
@@ -85,7 +86,7 @@ TagSet::InsertUnique(const Tag &src, TagType type, const char *value,
bool
TagSet
::
CheckUnique
(
TagType
dest_type
,
const
Tag
&
tag
,
TagType
src_type
,
tag_mask_t
group_mask
)
TagMask
group_mask
)
{
bool
found
=
false
;
...
...
@@ -101,12 +102,12 @@ TagSet::CheckUnique(TagType dest_type,
void
TagSet
::
InsertUnique
(
const
Tag
&
tag
,
TagType
type
,
tag_mask_t
group_mask
)
TagType
type
,
TagMask
group_mask
)
{
static_assert
(
sizeof
(
group_mask
)
*
8
>=
TAG_NUM_OF_ITEM_TYPES
,
"Mask is too small"
);
assert
(
(
group_mask
&
(
tag_mask_t
(
1
)
<<
unsigned
(
type
)))
==
0
);
assert
(
!
group_mask
.
Test
(
type
)
);
if
(
!
CheckUnique
(
type
,
tag
,
type
,
group_mask
)
&&
(
type
!=
TAG_ALBUM_ARTIST
||
...
...
src/tag/Set.hxx
View file @
2f3f075e
...
...
@@ -22,12 +22,13 @@
#include "Compiler.h"
#include "Tag.hxx"
#include "Mask.hxx"
#include <set>
#include <string.h>
class
TagMask
;
/**
* Helper class for #TagSet which compares two #Tag objects.
*/
...
...
@@ -59,15 +60,15 @@ struct TagLess {
class
TagSet
:
public
std
::
set
<
Tag
,
TagLess
>
{
public
:
void
InsertUnique
(
const
Tag
&
tag
,
TagType
type
,
tag_mask_t
group_mask
);
TagType
type
,
TagMask
group_mask
);
private
:
void
InsertUnique
(
const
Tag
&
src
,
TagType
type
,
const
char
*
value
,
tag_mask_t
group_mask
);
TagMask
group_mask
);
bool
CheckUnique
(
TagType
dest_type
,
const
Tag
&
tag
,
TagType
src_type
,
tag_mask_t
group_mask
);
TagMask
group_mask
);
};
#endif
src/tag/Settings.cxx
View file @
2f3f075e
...
...
@@ -19,4 +19,4 @@
#include "Settings.hxx"
tag_mask_t
global_tag_mask
=
(
tag_mask_t
)
-
1
&
~
(
1
<<
TAG_COMMENT
);
TagMask
global_tag_mask
=
TagMask
::
All
()
&
~
TagMask
(
TAG_COMMENT
);
src/tag/Settings.hxx
View file @
2f3f075e
...
...
@@ -24,20 +24,20 @@
#include "Type.h"
#include "Compiler.h"
extern
tag_mask_t
global_tag_mask
;
extern
TagMask
global_tag_mask
;
gcc_const
static
inline
bool
IsTagEnabled
(
unsigned
tag
)
IsTagEnabled
(
TagType
tag
)
{
return
global_tag_mask
&
(
1u
<<
tag
);
return
global_tag_mask
.
Test
(
tag
);
}
gcc_const
static
inline
bool
IsTagEnabled
(
TagType
tag
)
IsTagEnabled
(
unsigned
tag
)
{
return
IsTagEnabled
(
unsigned
(
tag
));
return
IsTagEnabled
(
TagType
(
tag
));
}
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment