Move TagList's code to get tag order into its own function.
Also uses a lambda instead of binding.
--- a/src/in_xsf_framework/TagList.cpp
+++ b/src/in_xsf_framework/TagList.cpp
@@ -12,6 +12,11 @@
using namespace std::placeholders;
eq_str TagList::eqstr;
+
+auto TagList::GetTagOrder(const std::string &name) const -> TagsList::const_iterator
+{
+ return std::find_if(this->tagsOrder.begin(), this->tagsOrder.end(), [&](const std::string &tag) { return TagList::eqstr(tag, name); });
+}
auto TagList::GetKeys() const -> const TagsList &
{
@@ -28,7 +33,7 @@
bool TagList::Exists(const std::string &name) const
{
- return std::find_if(this->tagsOrder.begin(), this->tagsOrder.end(), std::bind(TagList::eqstr, _1, name)) != this->tagsOrder.end();
+ return this->GetTagOrder(name) != this->tagsOrder.end();
}
std::string TagList::operator[](const std::string &name) const
@@ -41,8 +46,8 @@
std::string &TagList::operator[](const std::string &name)
{
- auto tag = std::find_if(this->tagsOrder.begin(), this->tagsOrder.end(), std::bind(TagList::eqstr, _1, name));
- if (tag == this->tagsOrder.end())
+ auto tagOrder = this->GetTagOrder(name);
+ if (tagOrder == this->tagsOrder.end())
{
this->tagsOrder.push_back(name);
this->tags[name] = "";
@@ -52,7 +57,7 @@
void TagList::Remove(const std::string &name)
{
- auto tagOrder = std::find_if(this->tagsOrder.begin(), this->tagsOrder.end(), std::bind(TagList::eqstr, _1, name));
+ auto tagOrder = this->GetTagOrder(name);
if (tagOrder != this->tagsOrder.end())
this->tagsOrder.erase(tagOrder);
if (this->tags.count(name))
--- a/src/in_xsf_framework/TagList.h
+++ b/src/in_xsf_framework/TagList.h
@@ -23,6 +23,8 @@
Tags tags;
TagsList tagsOrder;
+
+ TagsList::const_iterator GetTagOrder(const std::string &name) const;
public:
TagList() : tags(), tagsOrder() { }
const TagsList &GetKeys() const;