struct Collection {
FilmData* newFilm(std::string, std::string);
Show* newShow(std::string, std::string);
void addItem(FilmData* fd) { filmdata_.push_back(fd); }
void removeItem(std::string);
void removeMedium(std::string, std::string);
void removeItem(FilmData*);
std::vector<std::pair<std::string, std::string> > findRoles(const std::string) const;
std::vector<std::pair<FilmData&, Show> >::iterator findShow(std::string);
std::vector<std::string> findGenres(const std::string&) const;
std::vector<std::string> findTitles(const std::string&) const;
std::vector<FilmData*>::iterator findItem(std::string);
std::vector<FilmData*> filmdata_;
std::vector<Show*> shows_;
};
FilmData* Collection::newFilm(std::string title, std::string medium) {
std::cout << "Filmdata for ''" << title << "'' unknown. Please insert data followed by a dot" << std::endl;
std::string user_input;
// Get all the movie data
std::cin.clear();
std::cin.sync();
FilmData* new_film = new FilmData;
new_film->addMedium(medium);
new_film->title_ = title;
while(getline(std::cin, user_input) && !user_input.empty()) {
user_input >> *new_film;
}
// Get all the actors
std::cout << "Please insert cast; role = actor" << std::endl;
std::cin.clear();
std::cin.sync();
while(getline(std::cin, user_input) && user_input != "." && !user_input.empty()) {
user_input >> *new_film;
}
std::cout << "Added " << new_film->title_ << "(" << new_film->year_ << ")" << std::endl;
return new_film;
}
void Collection::removeItem(std::string title) {
// Try to find the item, if found - entry will be defined. If not, it will be the null pointer.
std::vector<FilmData*>::iterator it = findItem(title);
if(it != filmdata_.end()) {
std::cout << "Are you sure you want to remove " << title << " and " << (*it)->media_.size() << " media? (y/n)" << std::endl;
std::string user_input;
std::cin >> user_input;
if(user_input == "y")
{
for(std::set<Medium*>::iterator it2 = (*it)->media_.begin(); it2 != (*it)->media_.end(); it2++)
(*it)->removeMedium(**it2);
filmdata_.erase(it);
delete *it;
}
}
else std::cout << "Could not find entry for " << title << std::endl;
}