#include "airline_ticket.h"
#include "test_runner.h"
#include <map>
#include <sstream>
#include <iostream>
bool operator<(const Date& lhs, const Date& rhs) {
return std::tie(lhs.year, lhs.month, lhs.day)
< std::tie(rhs.year, rhs.month, rhs.day);
}
bool operator<(const Time& lhs, const Time& rhs) {
return std::tie(lhs.hours, lhs.minutes)
< std::tie(rhs.hours, rhs.minutes);
}
bool operator==(const Date& lhs, const Date& rhs) {
return std::tie(lhs.year, lhs.month, lhs.day)
== std::tie(rhs.year, rhs.month, rhs.day);
}
bool operator==(const Time& lhs, const Time& rhs) {
return std::tie(lhs.hours, lhs.minutes)
== std::tie(rhs.hours, rhs.minutes);
}
std::ostream& operator<<(std::ostream& out, const Date& rhs) {
out << rhs.year << "-" << rhs.month << "-" << rhs.day;
return out;
}
std::ostream& operator<<(std::ostream& out, const Time& rhs) {
out << rhs.hours << ":" << rhs.minutes;
return out;
}
std::istream& operator>>(std::istream& is, Date& d) {
is >> d.year;
is.ignore(1);
is >> d.month;
is.ignore(1);
is >> d.day;
return is;
}
std::istream& operator>>(std::istream& is, Time& t) {
is >> t.hours;
is.ignore(1);
is >> t.minutes;
return is;
}
#define UPDATE_FIELD(ticket, field, values) \
{ \
auto it = values.find(#field); \
if (it != values.end()) { \
istringstream is(it->second); \
is >> ticket.field; \
} \
}