2015-11-18 19:59:03 +00:00
|
|
|
#include <boost/bimap.hpp>
|
|
|
|
#include "Phone.h"
|
|
|
|
|
|
|
|
using std::string;
|
2016-03-08 20:44:57 +00:00
|
|
|
using std::vector;
|
|
|
|
using std::tuple;
|
|
|
|
using std::make_tuple;
|
2015-11-18 19:59:03 +00:00
|
|
|
|
2016-03-08 20:44:57 +00:00
|
|
|
template <>
|
|
|
|
const string& getEnumTypeName<Phone>() {
|
|
|
|
static const string name = "Shape";
|
|
|
|
return name;
|
2015-11-18 19:59:03 +00:00
|
|
|
}
|
|
|
|
|
2016-03-08 20:44:57 +00:00
|
|
|
template <>
|
|
|
|
const vector<tuple<Phone, string>>& getEnumMembers<Phone>() {
|
|
|
|
static const vector<tuple<Phone, string>> values = {
|
|
|
|
make_tuple(Phone::None, "None"),
|
|
|
|
make_tuple(Phone::Unknown, "Unknown"),
|
|
|
|
make_tuple(Phone::AO, "AO"),
|
|
|
|
make_tuple(Phone::AA, "AA"),
|
|
|
|
make_tuple(Phone::IY, "IY"),
|
|
|
|
make_tuple(Phone::UW, "UW"),
|
|
|
|
make_tuple(Phone::EH, "EH"),
|
|
|
|
make_tuple(Phone::IH, "IH"),
|
|
|
|
make_tuple(Phone::UH, "UH"),
|
|
|
|
make_tuple(Phone::AH, "AH"),
|
|
|
|
make_tuple(Phone::AE, "AE"),
|
|
|
|
make_tuple(Phone::EY, "EY"),
|
|
|
|
make_tuple(Phone::AY, "AY"),
|
|
|
|
make_tuple(Phone::OW, "OW"),
|
|
|
|
make_tuple(Phone::AW, "AW"),
|
|
|
|
make_tuple(Phone::OY, "OY"),
|
|
|
|
make_tuple(Phone::ER, "ER"),
|
|
|
|
make_tuple(Phone::P, "P"),
|
|
|
|
make_tuple(Phone::B, "B"),
|
|
|
|
make_tuple(Phone::T, "T"),
|
|
|
|
make_tuple(Phone::D, "D"),
|
|
|
|
make_tuple(Phone::K, "K"),
|
|
|
|
make_tuple(Phone::G, "G"),
|
|
|
|
make_tuple(Phone::CH, "CH"),
|
|
|
|
make_tuple(Phone::JH, "JH"),
|
|
|
|
make_tuple(Phone::F, "F"),
|
|
|
|
make_tuple(Phone::V, "V"),
|
|
|
|
make_tuple(Phone::TH, "TH"),
|
|
|
|
make_tuple(Phone::DH, "DH"),
|
|
|
|
make_tuple(Phone::S, "S"),
|
|
|
|
make_tuple(Phone::Z, "Z"),
|
|
|
|
make_tuple(Phone::SH, "SH"),
|
|
|
|
make_tuple(Phone::ZH, "ZH"),
|
|
|
|
make_tuple(Phone::HH, "HH"),
|
|
|
|
make_tuple(Phone::M, "M"),
|
|
|
|
make_tuple(Phone::N, "N"),
|
|
|
|
make_tuple(Phone::NG, "NG"),
|
|
|
|
make_tuple(Phone::L, "L"),
|
|
|
|
make_tuple(Phone::R, "R"),
|
|
|
|
make_tuple(Phone::Y, "Y"),
|
|
|
|
make_tuple(Phone::W, "W")
|
|
|
|
};
|
|
|
|
return values;
|
|
|
|
}
|
2015-11-18 19:59:03 +00:00
|
|
|
|
2016-03-08 20:44:57 +00:00
|
|
|
template<>
|
|
|
|
Phone parseEnum(const string& s) {
|
2015-12-01 21:28:29 +00:00
|
|
|
if (s == "SIL") return Phone::None;
|
2016-03-08 20:44:57 +00:00
|
|
|
Phone result;
|
|
|
|
return tryParseEnum(s, result) ? result : Phone::Unknown;
|
2015-11-18 19:59:03 +00:00
|
|
|
}
|
|
|
|
|
2016-03-08 20:44:57 +00:00
|
|
|
std::ostream& operator<<(std::ostream& stream, Phone value) {
|
|
|
|
return stream << enumToString(value);
|
2015-11-18 19:59:03 +00:00
|
|
|
}
|
|
|
|
|
2016-03-08 20:44:57 +00:00
|
|
|
std::istream& operator>>(std::istream& stream, Phone& value) {
|
|
|
|
string name;
|
|
|
|
stream >> name;
|
|
|
|
value = parseEnum<Phone>(name);
|
|
|
|
return stream;
|
2015-11-20 21:20:19 +00:00
|
|
|
}
|