Changeset 290:f6899946c1ac in lemon-1.2 for lemon/lgf_reader.h
- Timestamp:
- 09/30/08 20:53:18 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/lgf_reader.h
r236 r290 49 49 std::istringstream is(str); 50 50 Value value; 51 is >> value; 51 if (!(is >> value)) { 52 throw FormatError("Cannot read token"); 53 } 52 54 53 55 char c; 54 56 if (is >> std::ws >> c) { 55 throw DataFormatError("Remaining characters in token");57 throw FormatError("Remaining characters in token"); 56 58 } 57 59 return value; … … 167 169 std::ostringstream msg; 168 170 msg << "Item not found: " << str; 169 throw DataFormatError(msg.str().c_str());171 throw FormatError(msg.str()); 170 172 } 171 173 return it->second; … … 185 187 typename Graph::Arc operator()(const std::string& str) { 186 188 if (str.empty() || (str[0] != '+' && str[0] != '-')) { 187 throw DataFormatError("Item must start with '+' or '-'");189 throw FormatError("Item must start with '+' or '-'"); 188 190 } 189 191 typename std::map<std::string, typename Graph::Edge> 190 192 ::const_iterator it = _map.find(str.substr(1)); 191 193 if (it == _map.end()) { 192 throw DataFormatError("Item not found");194 throw FormatError("Item not found"); 193 195 } 194 196 return _graph.direct(it->second, str[0] == '+'); … … 236 238 char c; 237 239 if (!is.get(c)) 238 throw DataFormatError("Escape format error");240 throw FormatError("Escape format error"); 239 241 240 242 switch (c) { … … 265 267 int code; 266 268 if (!is.get(c) || !isHex(c)) 267 throw DataFormatError("Escape format error");269 throw FormatError("Escape format error"); 268 270 else if (code = valueHex(c), !is.get(c) || !isHex(c)) is.putback(c); 269 271 else code = code * 16 + valueHex(c); … … 274 276 int code; 275 277 if (!isOct(c)) 276 throw DataFormatError("Escape format error");278 throw FormatError("Escape format error"); 277 279 else if (code = valueOct(c), !is.get(c) || !isOct(c)) 278 280 is.putback(c); … … 301 303 } 302 304 if (!is) 303 throw DataFormatError("Quoted format error");305 throw FormatError("Quoted format error"); 304 306 } else { 305 307 is.putback(c); … … 461 463 std::istream* _is; 462 464 bool local_is; 465 std::string _filename; 463 466 464 467 Digraph& _digraph; … … 510 513 /// file. 511 514 DigraphReader(const std::string& fn, Digraph& digraph) 512 : _is(new std::ifstream(fn.c_str())), local_is(true), _digraph(digraph), 515 : _is(new std::ifstream(fn.c_str())), local_is(true), 516 _filename(fn), _digraph(digraph), 513 517 _use_nodes(false), _use_arcs(false), 514 _skip_nodes(false), _skip_arcs(false) {} 518 _skip_nodes(false), _skip_arcs(false) { 519 if (!(*_is)) throw IoError(fn, "Cannot open file"); 520 } 515 521 516 522 /// \brief Constructor … … 519 525 /// file. 520 526 DigraphReader(const char* fn, Digraph& digraph) 521 : _is(new std::ifstream(fn)), local_is(true), _digraph(digraph), 527 : _is(new std::ifstream(fn)), local_is(true), 528 _filename(fn), _digraph(digraph), 522 529 _use_nodes(false), _use_arcs(false), 523 _skip_nodes(false), _skip_arcs(false) {} 530 _skip_nodes(false), _skip_arcs(false) { 531 if (!(*_is)) throw IoError(fn, "Cannot open file"); 532 } 524 533 525 534 /// \brief Destructor … … 846 855 if (readSuccess() && line) line.putback(c); 847 856 if (!_node_maps.empty()) 848 throw DataFormatError("Cannot find map names");857 throw FormatError("Cannot find map names"); 849 858 return; 850 859 } … … 860 869 std::ostringstream msg; 861 870 msg << "Multiple occurence of node map: " << map; 862 throw DataFormatError(msg.str().c_str());871 throw FormatError(msg.str()); 863 872 } 864 873 maps.insert(std::make_pair(map, index)); … … 872 881 std::ostringstream msg; 873 882 msg << "Map not found in file: " << _node_maps[i].first; 874 throw DataFormatError(msg.str().c_str());883 throw FormatError(msg.str()); 875 884 } 876 885 map_index[i] = jt->second; … … 896 905 std::ostringstream msg; 897 906 msg << "Column not found (" << i + 1 << ")"; 898 throw DataFormatError(msg.str().c_str());907 throw FormatError(msg.str()); 899 908 } 900 909 } 901 910 if (line >> std::ws >> c) 902 throw DataFormatError("Extra character on the end of line");911 throw FormatError("Extra character on the end of line"); 903 912 904 913 Node n; … … 909 918 } else { 910 919 if (label_index == -1) 911 throw DataFormatError("Label map not found in file");920 throw FormatError("Label map not found in file"); 912 921 typename std::map<std::string, Node>::iterator it = 913 922 _node_index.find(tokens[label_index]); … … 915 924 std::ostringstream msg; 916 925 msg << "Node with label not found: " << tokens[label_index]; 917 throw DataFormatError(msg.str().c_str());926 throw FormatError(msg.str()); 918 927 } 919 928 n = it->second; … … 939 948 if (readSuccess() && line) line.putback(c); 940 949 if (!_arc_maps.empty()) 941 throw DataFormatError("Cannot find map names");950 throw FormatError("Cannot find map names"); 942 951 return; 943 952 } … … 953 962 std::ostringstream msg; 954 963 msg << "Multiple occurence of arc map: " << map; 955 throw DataFormatError(msg.str().c_str());964 throw FormatError(msg.str()); 956 965 } 957 966 maps.insert(std::make_pair(map, index)); … … 965 974 std::ostringstream msg; 966 975 msg << "Map not found in file: " << _arc_maps[i].first; 967 throw DataFormatError(msg.str().c_str());976 throw FormatError(msg.str()); 968 977 } 969 978 map_index[i] = jt->second; … … 988 997 989 998 if (!_reader_bits::readToken(line, source_token)) 990 throw DataFormatError("Source not found");999 throw FormatError("Source not found"); 991 1000 992 1001 if (!_reader_bits::readToken(line, target_token)) 993 throw DataFormatError("Target not found");1002 throw FormatError("Target not found"); 994 1003 995 1004 std::vector<std::string> tokens(map_num); … … 998 1007 std::ostringstream msg; 999 1008 msg << "Column not found (" << i + 1 << ")"; 1000 throw DataFormatError(msg.str().c_str());1009 throw FormatError(msg.str()); 1001 1010 } 1002 1011 } 1003 1012 if (line >> std::ws >> c) 1004 throw DataFormatError("Extra character on the end of line");1013 throw FormatError("Extra character on the end of line"); 1005 1014 1006 1015 Arc a; … … 1013 1022 std::ostringstream msg; 1014 1023 msg << "Item not found: " << source_token; 1015 throw DataFormatError(msg.str().c_str());1024 throw FormatError(msg.str()); 1016 1025 } 1017 1026 Node source = it->second; … … 1021 1030 std::ostringstream msg; 1022 1031 msg << "Item not found: " << target_token; 1023 throw DataFormatError(msg.str().c_str());1032 throw FormatError(msg.str()); 1024 1033 } 1025 1034 Node target = it->second; … … 1030 1039 } else { 1031 1040 if (label_index == -1) 1032 throw DataFormatError("Label map not found in file");1041 throw FormatError("Label map not found in file"); 1033 1042 typename std::map<std::string, Arc>::iterator it = 1034 1043 _arc_index.find(tokens[label_index]); … … 1036 1045 std::ostringstream msg; 1037 1046 msg << "Arc with label not found: " << tokens[label_index]; 1038 throw DataFormatError(msg.str().c_str());1047 throw FormatError(msg.str()); 1039 1048 } 1040 1049 a = it->second; … … 1061 1070 std::string attr, token; 1062 1071 if (!_reader_bits::readToken(line, attr)) 1063 throw DataFormatError("Attribute name not found");1072 throw FormatError("Attribute name not found"); 1064 1073 if (!_reader_bits::readToken(line, token)) 1065 throw DataFormatError("Attribute value not found");1074 throw FormatError("Attribute value not found"); 1066 1075 if (line >> c) 1067 throw DataFormatError("Extra character on the end of line");1076 throw FormatError("Extra character on the end of line"); 1068 1077 1069 1078 { … … 1072 1081 std::ostringstream msg; 1073 1082 msg << "Multiple occurence of attribute " << attr; 1074 throw DataFormatError(msg.str().c_str());1083 throw FormatError(msg.str()); 1075 1084 } 1076 1085 read_attr.insert(attr); … … 1094 1103 std::ostringstream msg; 1095 1104 msg << "Attribute not found in file: " << it->first; 1096 throw DataFormatError(msg.str().c_str());1105 throw FormatError(msg.str()); 1097 1106 } 1098 1107 } … … 1110 1119 LEMON_ASSERT(_is != 0, "This reader assigned to an other reader"); 1111 1120 if (!*_is) { 1112 throw DataFormatError("Cannot find file");1121 throw FormatError("Cannot find file"); 1113 1122 } 1114 1123 … … 1130 1139 1131 1140 if (line >> c) 1132 throw DataFormatError("Extra character on the end of line");1141 throw FormatError("Extra character on the end of line"); 1133 1142 1134 1143 if (section == "nodes" && !nodes_done) { … … 1152 1161 skipSection(); 1153 1162 } 1154 } catch ( DataFormatError& error) {1163 } catch (FormatError& error) { 1155 1164 error.line(line_num); 1165 error.file(_filename); 1156 1166 throw; 1157 1167 } … … 1159 1169 1160 1170 if (!nodes_done) { 1161 throw DataFormatError("Section @nodes not found");1171 throw FormatError("Section @nodes not found"); 1162 1172 } 1163 1173 1164 1174 if (!arcs_done) { 1165 throw DataFormatError("Section @arcs not found");1175 throw FormatError("Section @arcs not found"); 1166 1176 } 1167 1177 1168 1178 if (!attributes_done && !_attributes.empty()) { 1169 throw DataFormatError("Section @attributes not found");1179 throw FormatError("Section @attributes not found"); 1170 1180 } 1171 1181 … … 1245 1255 std::istream* _is; 1246 1256 bool local_is; 1257 std::string _filename; 1247 1258 1248 1259 Graph& _graph; … … 1294 1305 /// file. 1295 1306 GraphReader(const std::string& fn, Graph& graph) 1296 : _is(new std::ifstream(fn.c_str())), local_is(true), _graph(graph), 1307 : _is(new std::ifstream(fn.c_str())), local_is(true), 1308 _filename(fn), _graph(graph), 1297 1309 _use_nodes(false), _use_edges(false), 1298 _skip_nodes(false), _skip_edges(false) {} 1310 _skip_nodes(false), _skip_edges(false) { 1311 if (!(*_is)) throw IoError(fn, "Cannot open file"); 1312 } 1299 1313 1300 1314 /// \brief Constructor … … 1303 1317 /// file. 1304 1318 GraphReader(const char* fn, Graph& graph) 1305 : _is(new std::ifstream(fn)), local_is(true), _graph(graph), 1319 : _is(new std::ifstream(fn)), local_is(true), 1320 _filename(fn), _graph(graph), 1306 1321 _use_nodes(false), _use_edges(false), 1307 _skip_nodes(false), _skip_edges(false) {} 1322 _skip_nodes(false), _skip_edges(false) { 1323 if (!(*_is)) throw IoError(fn, "Cannot open file"); 1324 } 1308 1325 1309 1326 /// \brief Destructor … … 1674 1691 if (readSuccess() && line) line.putback(c); 1675 1692 if (!_node_maps.empty()) 1676 throw DataFormatError("Cannot find map names");1693 throw FormatError("Cannot find map names"); 1677 1694 return; 1678 1695 } … … 1688 1705 std::ostringstream msg; 1689 1706 msg << "Multiple occurence of node map: " << map; 1690 throw DataFormatError(msg.str().c_str());1707 throw FormatError(msg.str()); 1691 1708 } 1692 1709 maps.insert(std::make_pair(map, index)); … … 1700 1717 std::ostringstream msg; 1701 1718 msg << "Map not found in file: " << _node_maps[i].first; 1702 throw DataFormatError(msg.str().c_str());1719 throw FormatError(msg.str()); 1703 1720 } 1704 1721 map_index[i] = jt->second; … … 1724 1741 std::ostringstream msg; 1725 1742 msg << "Column not found (" << i + 1 << ")"; 1726 throw DataFormatError(msg.str().c_str());1743 throw FormatError(msg.str()); 1727 1744 } 1728 1745 } 1729 1746 if (line >> std::ws >> c) 1730 throw DataFormatError("Extra character on the end of line");1747 throw FormatError("Extra character on the end of line"); 1731 1748 1732 1749 Node n; … … 1737 1754 } else { 1738 1755 if (label_index == -1) 1739 throw DataFormatError("Label map not found in file");1756 throw FormatError("Label map not found in file"); 1740 1757 typename std::map<std::string, Node>::iterator it = 1741 1758 _node_index.find(tokens[label_index]); … … 1743 1760 std::ostringstream msg; 1744 1761 msg << "Node with label not found: " << tokens[label_index]; 1745 throw DataFormatError(msg.str().c_str());1762 throw FormatError(msg.str()); 1746 1763 } 1747 1764 n = it->second; … … 1767 1784 if (readSuccess() && line) line.putback(c); 1768 1785 if (!_edge_maps.empty()) 1769 throw DataFormatError("Cannot find map names");1786 throw FormatError("Cannot find map names"); 1770 1787 return; 1771 1788 } … … 1781 1798 std::ostringstream msg; 1782 1799 msg << "Multiple occurence of edge map: " << map; 1783 throw DataFormatError(msg.str().c_str());1800 throw FormatError(msg.str()); 1784 1801 } 1785 1802 maps.insert(std::make_pair(map, index)); … … 1793 1810 std::ostringstream msg; 1794 1811 msg << "Map not found in file: " << _edge_maps[i].first; 1795 throw DataFormatError(msg.str().c_str());1812 throw FormatError(msg.str()); 1796 1813 } 1797 1814 map_index[i] = jt->second; … … 1816 1833 1817 1834 if (!_reader_bits::readToken(line, source_token)) 1818 throw DataFormatError("Node u not found");1835 throw FormatError("Node u not found"); 1819 1836 1820 1837 if (!_reader_bits::readToken(line, target_token)) 1821 throw DataFormatError("Node v not found");1838 throw FormatError("Node v not found"); 1822 1839 1823 1840 std::vector<std::string> tokens(map_num); … … 1826 1843 std::ostringstream msg; 1827 1844 msg << "Column not found (" << i + 1 << ")"; 1828 throw DataFormatError(msg.str().c_str());1845 throw FormatError(msg.str()); 1829 1846 } 1830 1847 } 1831 1848 if (line >> std::ws >> c) 1832 throw DataFormatError("Extra character on the end of line");1849 throw FormatError("Extra character on the end of line"); 1833 1850 1834 1851 Edge e; … … 1841 1858 std::ostringstream msg; 1842 1859 msg << "Item not found: " << source_token; 1843 throw DataFormatError(msg.str().c_str());1860 throw FormatError(msg.str()); 1844 1861 } 1845 1862 Node source = it->second; … … 1849 1866 std::ostringstream msg; 1850 1867 msg << "Item not found: " << target_token; 1851 throw DataFormatError(msg.str().c_str());1868 throw FormatError(msg.str()); 1852 1869 } 1853 1870 Node target = it->second; … … 1858 1875 } else { 1859 1876 if (label_index == -1) 1860 throw DataFormatError("Label map not found in file");1877 throw FormatError("Label map not found in file"); 1861 1878 typename std::map<std::string, Edge>::iterator it = 1862 1879 _edge_index.find(tokens[label_index]); … … 1864 1881 std::ostringstream msg; 1865 1882 msg << "Edge with label not found: " << tokens[label_index]; 1866 throw DataFormatError(msg.str().c_str());1883 throw FormatError(msg.str()); 1867 1884 } 1868 1885 e = it->second; … … 1889 1906 std::string attr, token; 1890 1907 if (!_reader_bits::readToken(line, attr)) 1891 throw DataFormatError("Attribute name not found");1908 throw FormatError("Attribute name not found"); 1892 1909 if (!_reader_bits::readToken(line, token)) 1893 throw DataFormatError("Attribute value not found");1910 throw FormatError("Attribute value not found"); 1894 1911 if (line >> c) 1895 throw DataFormatError("Extra character on the end of line");1912 throw FormatError("Extra character on the end of line"); 1896 1913 1897 1914 { … … 1900 1917 std::ostringstream msg; 1901 1918 msg << "Multiple occurence of attribute " << attr; 1902 throw DataFormatError(msg.str().c_str());1919 throw FormatError(msg.str()); 1903 1920 } 1904 1921 read_attr.insert(attr); … … 1922 1939 std::ostringstream msg; 1923 1940 msg << "Attribute not found in file: " << it->first; 1924 throw DataFormatError(msg.str().c_str());1941 throw FormatError(msg.str()); 1925 1942 } 1926 1943 } … … 1956 1973 1957 1974 if (line >> c) 1958 throw DataFormatError("Extra character on the end of line");1975 throw FormatError("Extra character on the end of line"); 1959 1976 1960 1977 if (section == "nodes" && !nodes_done) { … … 1978 1995 skipSection(); 1979 1996 } 1980 } catch ( DataFormatError& error) {1997 } catch (FormatError& error) { 1981 1998 error.line(line_num); 1999 error.file(_filename); 1982 2000 throw; 1983 2001 } … … 1985 2003 1986 2004 if (!nodes_done) { 1987 throw DataFormatError("Section @nodes not found");2005 throw FormatError("Section @nodes not found"); 1988 2006 } 1989 2007 1990 2008 if (!edges_done) { 1991 throw DataFormatError("Section @edges not found");2009 throw FormatError("Section @edges not found"); 1992 2010 } 1993 2011 1994 2012 if (!attributes_done && !_attributes.empty()) { 1995 throw DataFormatError("Section @attributes not found");2013 throw FormatError("Section @attributes not found"); 1996 2014 } 1997 2015 … … 2055 2073 std::istream* _is; 2056 2074 bool local_is; 2075 std::string _filename; 2057 2076 2058 2077 typedef std::map<std::string, _reader_bits::Section*> Sections; … … 2075 2094 /// Construct a section reader, which reads from the given file. 2076 2095 SectionReader(const std::string& fn) 2077 : _is(new std::ifstream(fn.c_str())), local_is(true) {} 2096 : _is(new std::ifstream(fn.c_str())), local_is(true), 2097 _filename(fn) { 2098 if (!(*_is)) throw IoError(fn, "Cannot open file"); 2099 } 2078 2100 2079 2101 /// \brief Constructor … … 2081 2103 /// Construct a section reader, which reads from the given file. 2082 2104 SectionReader(const char* fn) 2083 : _is(new std::ifstream(fn)), local_is(true) {} 2105 : _is(new std::ifstream(fn)), local_is(true), 2106 _filename(fn) { 2107 if (!(*_is)) throw IoError(fn, "Cannot open file"); 2108 } 2084 2109 2085 2110 /// \brief Destructor … … 2237 2262 2238 2263 if (line >> c) 2239 throw DataFormatError("Extra character on the end of line");2264 throw FormatError("Extra character on the end of line"); 2240 2265 2241 2266 if (extra_sections.find(section) != extra_sections.end()) { 2242 2267 std::ostringstream msg; 2243 2268 msg << "Multiple occurence of section " << section; 2244 throw DataFormatError(msg.str().c_str());2269 throw FormatError(msg.str()); 2245 2270 } 2246 2271 Sections::iterator it = _sections.find(section); … … 2251 2276 readLine(); 2252 2277 skipSection(); 2253 } catch ( DataFormatError& error) {2278 } catch (FormatError& error) { 2254 2279 error.line(line_num); 2280 error.file(_filename); 2255 2281 throw; 2256 2282 } … … 2261 2287 std::ostringstream os; 2262 2288 os << "Cannot find section: " << it->first; 2263 throw DataFormatError(os.str().c_str());2289 throw FormatError(os.str()); 2264 2290 } 2265 2291 } … … 2361 2387 /// file. 2362 2388 LgfContents(const std::string& fn) 2363 : _is(new std::ifstream(fn.c_str())), local_is(true) {} 2389 : _is(new std::ifstream(fn.c_str())), local_is(true) { 2390 if (!(*_is)) throw IoError(fn, "Cannot open file"); 2391 } 2364 2392 2365 2393 /// \brief Constructor … … 2368 2396 /// file. 2369 2397 LgfContents(const char* fn) 2370 : _is(new std::ifstream(fn)), local_is(true) {} 2398 : _is(new std::ifstream(fn)), local_is(true) { 2399 if (!(*_is)) throw IoError(fn, "Cannot open file"); 2400 } 2371 2401 2372 2402 /// \brief Destructor
Note: See TracChangeset
for help on using the changeset viewer.