/* */ #include "TagContainer.h" #include "TaggedItem.h" #include "Util.h" #include namespace aria2 { TagContainer::TagContainer() {} TagContainer::TagContainer(const TaggedItems& items): _taggedItems(items) {} TagContainer::~TagContainer() {} class SingleTagSearch { private: std::string _tag; TaggedItems _result; public: SingleTagSearch(const std::string& tag):_tag(tag) {} void operator()(const TaggedItemHandle& item) { if(item->hasTag(_tag)) { _result.push_back(item); } } const TaggedItems& getResult() const { return _result; } }; TaggedItems TagContainer::search(const std::string& tag) const { return std::for_each(_taggedItems.begin(), _taggedItems.end(), SingleTagSearch(tag)).getResult(); } class NameMatchForward { private: std::string _name; TaggedItems _result; public: NameMatchForward(const std::string& name):_name(name) {} void operator()(const TaggedItemHandle& item) { if(Util::startsWith(item->getName(), _name)) { _result.push_back(item); } } const TaggedItems& getResult() const { return _result; } }; TaggedItems TagContainer::nameMatchForward(const std::string& name) const { return std::for_each(_taggedItems.begin(), _taggedItems.end(), NameMatchForward(name)).getResult(); } TaggedItemHandle TagContainer::nameMatch(const std::string& name) const { TaggedItems::const_iterator itr = std::find(_taggedItems.begin(), _taggedItems.end(), TaggedItemHandle(new TaggedItem(name))); if(itr == _taggedItems.end()) { return SharedHandle(); } else { return *itr; } } const TaggedItems& TagContainer::getAllItems() const { return _taggedItems; } void TagContainer::addItem(const TaggedItemHandle& item) { _taggedItems.push_back(item); } } // namespace aria2