Changeset 186:9159de5e9657 in lemon-main
- Timestamp:
- 07/02/08 10:37:14 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/lgf_reader.h
r182 r186 882 882 int map_num, label_index; 883 883 884 if (!readLine()) 885 throw DataFormatError("Cannot find map captions"); 886 884 char c; 885 if (!readLine() || !(line >> c) || c == '@') { 886 if (readSuccess() && line) line.putback(c); 887 if (!_node_maps.empty()) 888 throw DataFormatError("Cannot find map names"); 889 return; 890 } 891 line.putback(c); 892 887 893 { 888 894 std::map<std::string, int> maps; … … 913 919 { 914 920 std::map<std::string, int>::iterator jt = maps.find("label"); 915 if (jt == maps.end()) 916 throw DataFormatError("Label map not found in file"); 917 label_index = jt->second; 921 if (jt != maps.end()) { 922 label_index = jt->second; 923 } else { 924 label_index = -1; 925 } 918 926 } 919 927 map_num = maps.size(); 920 928 } 921 929 922 char c;923 930 while (readLine() && line >> c && c != '@') { 924 931 line.putback(c); … … 938 945 if (!_use_nodes) { 939 946 n = _digraph.addNode(); 940 _node_index.insert(std::make_pair(tokens[label_index], n)); 947 if (label_index != -1) 948 _node_index.insert(std::make_pair(tokens[label_index], n)); 941 949 } else { 950 if (label_index == -1) 951 throw DataFormatError("Label map not found in file"); 942 952 typename std::map<std::string, Node>::iterator it = 943 953 _node_index.find(tokens[label_index]); … … 965 975 int map_num, label_index; 966 976 967 if (!readLine()) 968 throw DataFormatError("Cannot find map captions"); 977 char c; 978 if (!readLine() || !(line >> c) || c == '@') { 979 if (readSuccess() && line) line.putback(c); 980 if (!_arc_maps.empty()) 981 throw DataFormatError("Cannot find map names"); 982 return; 983 } 984 line.putback(c); 969 985 970 986 { … … 996 1012 { 997 1013 std::map<std::string, int>::iterator jt = maps.find("label"); 998 if (jt == maps.end()) 999 throw DataFormatError("Label map not found in file"); 1000 label_index = jt->second; 1014 if (jt != maps.end()) { 1015 label_index = jt->second; 1016 } else { 1017 label_index = -1; 1018 } 1001 1019 } 1002 1020 map_num = maps.size(); 1003 1021 } 1004 1022 1005 char c;1006 1023 while (readLine() && line >> c && c != '@') { 1007 1024 line.putback(c); … … 1014 1031 1015 1032 if (!_reader_bits::readToken(line, target_token)) 1016 throw DataFormatError(" Sourcenot found");1033 throw DataFormatError("Target not found"); 1017 1034 1018 1035 std::vector<std::string> tokens(map_num); … … 1049 1066 1050 1067 a = _digraph.addArc(source, target); 1051 _arc_index.insert(std::make_pair(tokens[label_index], a)); 1068 if (label_index != -1) 1069 _arc_index.insert(std::make_pair(tokens[label_index], a)); 1052 1070 } else { 1071 if (label_index == -1) 1072 throw DataFormatError("Label map not found in file"); 1053 1073 typename std::map<std::string, Arc>::iterator it = 1054 1074 _arc_index.find(tokens[label_index]); … … 1724 1744 int map_num, label_index; 1725 1745 1726 if (!readLine()) 1727 throw DataFormatError("Cannot find map captions"); 1746 char c; 1747 if (!readLine() || !(line >> c) || c == '@') { 1748 if (readSuccess() && line) line.putback(c); 1749 if (!_node_maps.empty()) 1750 throw DataFormatError("Cannot find map names"); 1751 return; 1752 } 1753 line.putback(c); 1728 1754 1729 1755 { … … 1755 1781 { 1756 1782 std::map<std::string, int>::iterator jt = maps.find("label"); 1757 if (jt == maps.end()) 1758 throw DataFormatError("Label map not found in file"); 1759 label_index = jt->second; 1783 if (jt != maps.end()) { 1784 label_index = jt->second; 1785 } else { 1786 label_index = -1; 1787 } 1760 1788 } 1761 1789 map_num = maps.size(); 1762 1790 } 1763 1791 1764 char c;1765 1792 while (readLine() && line >> c && c != '@') { 1766 1793 line.putback(c); … … 1780 1807 if (!_use_nodes) { 1781 1808 n = _graph.addNode(); 1782 _node_index.insert(std::make_pair(tokens[label_index], n)); 1809 if (label_index != -1) 1810 _node_index.insert(std::make_pair(tokens[label_index], n)); 1783 1811 } else { 1812 if (label_index == -1) 1813 throw DataFormatError("Label map not found in file"); 1784 1814 typename std::map<std::string, Node>::iterator it = 1785 1815 _node_index.find(tokens[label_index]); … … 1807 1837 int map_num, label_index; 1808 1838 1809 if (!readLine()) 1810 throw DataFormatError("Cannot find map captions"); 1839 char c; 1840 if (!readLine() || !(line >> c) || c == '@') { 1841 if (readSuccess() && line) line.putback(c); 1842 if (!_edge_maps.empty()) 1843 throw DataFormatError("Cannot find map names"); 1844 return; 1845 } 1846 line.putback(c); 1811 1847 1812 1848 { … … 1838 1874 { 1839 1875 std::map<std::string, int>::iterator jt = maps.find("label"); 1840 if (jt == maps.end()) 1841 throw DataFormatError("Label map not found in file"); 1842 label_index = jt->second; 1876 if (jt != maps.end()) { 1877 label_index = jt->second; 1878 } else { 1879 label_index = -1; 1880 } 1843 1881 } 1844 1882 map_num = maps.size(); 1845 1883 } 1846 1884 1847 char c;1848 1885 while (readLine() && line >> c && c != '@') { 1849 1886 line.putback(c); … … 1853 1890 1854 1891 if (!_reader_bits::readToken(line, source_token)) 1855 throw DataFormatError(" Sourcenot found");1892 throw DataFormatError("Node u not found"); 1856 1893 1857 1894 if (!_reader_bits::readToken(line, target_token)) 1858 throw DataFormatError(" Sourcenot found");1895 throw DataFormatError("Node v not found"); 1859 1896 1860 1897 std::vector<std::string> tokens(map_num); … … 1891 1928 1892 1929 e = _graph.addEdge(source, target); 1893 _edge_index.insert(std::make_pair(tokens[label_index], e)); 1930 if (label_index != -1) 1931 _edge_index.insert(std::make_pair(tokens[label_index], e)); 1894 1932 } else { 1933 if (label_index == -1) 1934 throw DataFormatError("Label map not found in file"); 1895 1935 typename std::map<std::string, Edge>::iterator it = 1896 1936 _edge_index.find(tokens[label_index]); … … 2326 2366 2327 2367 void readMaps(std::vector<std::string>& maps) { 2328 if (!readLine()) 2329 throw DataFormatError("Cannot find map captions"); 2368 char c; 2369 if (!readLine() || !(line >> c) || c == '@') { 2370 if (readSuccess() && line) line.putback(c); 2371 return; 2372 } 2373 line.putback(c); 2330 2374 std::string map; 2331 2375 while (_reader_bits::readToken(line, map)) {
Note: See TracChangeset
for help on using the changeset viewer.