25 std::string
const& path)
27 boost::char_separator<char> sep(
"\t ");
28 boost::tokenizer<boost::char_separator<char>> tokens(line, sep);
29 auto tok_it(tokens.begin());
32 if (*tok_it !=
"PROPERTY")
34 ERR(
"Expected PROPERTY keyword but '{:s}' found.", tok_it->c_str());
35 throw std::runtime_error(
36 "In parseGocadPropertyMetaData() expected PROPERTY keyword not "
46 while (tok_it != tokens.end())
53 auto checkPropertyID =
54 [](boost::tokenizer<boost::char_separator<char>>::iterator
const&
60 throw std::runtime_error(
61 "parseGocadPropertyMetaData(): id mismatch.");
65 while (std::getline(in, line))
71 if (line.back() ==
'\r')
77 tok_it = tokens.begin();
79 if (*tok_it ==
"PROP_FILE")
81 checkPropertyID(++tok_it, prop);
83 std::string tmp(*tok_it);
85 while (tok_it != tokens.end())
91 if (tmp.front() ==
' ')
93 tmp.erase(tmp.begin());
99 if (*tok_it ==
"PROPERTY_CLASS")
101 checkPropertyID(++tok_it, prop);
106 if (*tok_it ==
"PROPERTY_SUBCLASS")
108 checkPropertyID(++tok_it, prop);
110 if (*tok_it !=
"QUANTITY" && *tok_it !=
"ENUM")
112 ERR(
"Expected keywords QUANTITY or ENUM, but found '{:s}'.",
114 throw std::runtime_error(
115 "parseGocadPropertyMetaData(): Expected keywords QUANTITY "
116 "or ENUM, but found '" +
119 if (*tok_it ==
"QUANTITY")
126 if (*tok_it ==
"PROP_UNIT" || *tok_it ==
"PROP_ORIGINAL_UNIT")
128 checkPropertyID(++tok_it, prop);
133 if (*tok_it ==
"PROP_NO_DATA_VALUE")
135 checkPropertyID(++tok_it, prop);