67 lines
1.4 KiB
C++
67 lines
1.4 KiB
C++
#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++;
|
|
}
|
|
}
|
|
|