11#ifndef __AUDACITY_IDENTIFIER__
12#define __AUDACITY_IDENTIFIER__
42 { value.swap(
str ); }
48 value.clear(),
swap(
id );
59 Identifier(std::initializer_list<Identifier> components, wxChar separator);
61 bool empty()
const {
return value.empty(); }
62 size_t size()
const {
return value.size(); }
63 size_t length()
const {
return value.length(); }
66 const wxString &
GET()
const {
return value; }
68 std::vector< Identifier > split( wxChar separator )
const;
76{
return x.
GET() == y.
GET(); }
82{
return x.
GET() < y.
GET(); }
97 {
return hash<wxString>{}(
id.GET() ); }
103 {
if (
id) { *
id =
str;
return true; }
else return false; }
111template<
typename Tag,
bool CaseSensitive = true >
131 template<
typename Tag2,
bool b >
134 template<
typename Tag2,
bool b >
137 template<
typename Tag2,
bool b >
140 template<
typename Tag2,
bool b >
148 template<
typename String,
typename =
typename String::TagType>
150 {
return String{ this->
GET() }; }
156template<
typename Tag1,
typename Tag2,
bool b1,
bool b2 >
160 static_assert( std::is_same_v< Tag1, Tag2 > && b1 == b2,
161 "TaggedIdentifiers with different tags or sensitivity are not comparable" );
164 return x.
GET(). Cmp ( y.
GET() ) == 0;
166 return x.
GET(). CmpNoCase ( y.
GET() ) == 0;
169template<
typename Tag1,
typename Tag2,
bool b1,
bool b2 >
174template<
typename Tag1,
typename Tag2,
bool b1,
bool b2 >
178 static_assert( std::is_same_v< Tag1, Tag2 > && b1 == b2,
179 "TaggedIdentifiers with different tags or sensitivity are not comparable" );
182 return x.
GET(). Cmp ( y.
GET() ) < 0;
184 return x.
GET(). CmpNoCase ( y.
GET() ) < 0;
187template<
typename Tag1,
typename Tag2,
bool b1,
bool b2 >
192template<
typename Tag1,
typename Tag2,
bool b1,
bool b2 >
197template<
typename Tag1,
typename Tag2,
bool b1,
bool b2 >
205 : hash< Identifier > {};
235struct ManualPageIDTag;
std::vector< PluginPath > PluginPaths
bool operator<(const Identifier &x, const Identifier &y)
wxString FileExtension
File extension, not including any leading dot.
bool operator>=(const Identifier &x, const Identifier &y)
wxString wxToString(const Identifier &str)
This lets you pass Identifier into wxFileConfig::Write.
std::vector< CommandID > CommandIDs
bool operator==(const Identifier &x, const Identifier &y)
Comparisons of Identifiers are case-sensitive.
bool operator!=(const Identifier &x, const Identifier &y)
wxString PluginPath
type alias for identifying a Plugin supplied by a module, each module defining its own interpretation...
std::vector< RegistryPath > RegistryPaths
bool operator<=(const Identifier &x, const Identifier &y)
bool wxFromString(const wxString &str, Identifier *id)
This lets you pass Identifier into wxFileConfig::Read.
bool operator>(const Identifier &x, const Identifier &y)
An explicitly nonlocalized string, not meant for the user to see.
Identifier(const Identifier &)=default
void swap(Identifier &id)
Identifier(Identifier &&id)
const wxString & GET() const
Explicit conversion to wxString, meant to be ugly-looking and demanding of a comment why it's correct...
Identifier(const char *str)
Allow implicit conversion to this class, but not from.
Identifier(const wxString &str)
Allow implicit conversion to this class, but not from.
Identifier(const wxChar *str)
Allow implicit conversion to this class, but not from.
Identifier(wxString &&str)
Template generates different TaggedIdentifier classes that don't interconvert implicitly.
TaggedIdentifier(TaggedIdentifier< Tag2, b > &&)=delete
Move prohibited for other Tag classes or case sensitivity.
TaggedIdentifier(const TaggedIdentifier< Tag2, b > &)=delete
Copy prohibited for other Tag classes or case sensitivity.
TaggedIdentifier(const Identifier &str)
String CONVERT() const
Explicit conversion to another kind of TaggedIdentifier.
TaggedIdentifier & operator=(const TaggedIdentifier &)=default
Copy allowed only for the same Tag class and case sensitivity.
TaggedIdentifier()=default
TaggedIdentifier(const TaggedIdentifier &)=default
Copy allowed only for the same Tag class and case sensitivity.
TaggedIdentifier(TaggedIdentifier &&)=default
Move allowed only for the same Tag class and case sensitivity.
Extend wxArrayString with move operations and construction and insertion fromstd::initializer_list.
wxArrayStringEx()=default
void swap(std::unique_ptr< Alg_seq > &a, std::unique_ptr< Alg_seq > &b)