#include "Gallery.h" #include <iostream> Gallery::Gallery(std::string name) : name(name) { } void Gallery::addArtwork(std::shared_ptr<Artwork> artwork) { artworks.push_back(artwork); } void Gallery::printArtworks() const { for (auto &artwork: artworks) std::cout << artwork->toString() << std::endl; } std::string Gallery::toString() const { std::string ret; for (auto &artwork: artworks) ret += artwork->toString() + "\n\n"; return ret; } int Gallery::getSize() const { return artworks.size(); }; void Gallery::sort(std::function<bool(std::shared_ptr<Artwork>, std::shared_ptr<Artwork>)> c) { for (int i = 0; i < artworks.size(); ++i) { for (int j = 0; j < artworks.size() - i - 1; ++j) { c(artworks[j], artworks[j + 1]); } } } std::shared_ptr<Artwork> Gallery::find(std::function<bool(std::shared_ptr<Artwork>)> c) { auto it = std::find_if(artworks.begin(), artworks.end(), c); return *it; } void Gallery::printArtworks(PrintIfPainting i) { std::for_each(artworks.begin(), artworks.end(), i); } void Gallery::filterOut(std::function<bool(std::shared_ptr<Artwork>)> c) { auto it = artworks.begin(); for (int i = 0; i < artworks.size(); ++i) { if (c(artworks[i])) { artworks.erase(it); } it++; } }