11 #include <vxd/dataobjects/VxdID.h>
28 int getPart(istream& in)
33 if (next ==
'.') next = in.get();
35 if (next ==
'*' or in.eof()) {
41 if (next ==
'#')
return 0;
47 if (in.fail() && !in.eof()) {
48 throw runtime_error(
"Failed to parse Number");
56 VxdID::VxdID(
const std::string& sensor)
61 istringstream in(sensor);
64 m_id.parts.layer = getPart(in);
65 m_id.parts.ladder = getPart(in);
66 m_id.parts.sensor = getPart(in);
68 if (in.peek() ==
'#') {
70 m_id.parts.segment = getPart(in);
72 }
catch (runtime_error&) {
75 throw invalid_argument(
"Could not parse VxdID: '" + sensor +
"'");
83 getline(in, rest,
'\0');
84 throw invalid_argument(
"Trailing characters after VxdID " + (
string)*
this +
": '" + rest +
"'");
88 VxdID::operator string()
const
91 if (m_id.parts.layer) {
92 out << m_id.parts.layer;
96 if (m_id.parts.ladder || m_id.parts.sensor) {
98 if (m_id.parts.ladder) {
99 out << m_id.parts.ladder;
104 if (m_id.parts.sensor) {
105 out <<
"." << m_id.parts.sensor;
107 if (m_id.parts.segment) {
108 out <<
"#" << m_id.parts.segment;