... | ... |
@@ -878,15 +878,21 @@ |
878 | 878 |
|
879 | 879 |
void readNodes() { |
880 | 880 |
|
881 | 881 |
std::vector<int> map_index(_node_maps.size()); |
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; |
889 | 895 |
|
890 | 896 |
std::string map; |
891 | 897 |
int index = 0; |
892 | 898 |
while (_reader_bits::readToken(line, map)) { |
... | ... |
@@ -909,20 +915,21 @@ |
909 | 915 |
} |
910 | 916 |
map_index[i] = jt->second; |
911 | 917 |
} |
912 | 918 |
|
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 |
|
|
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); |
925 | 932 |
|
926 | 933 |
std::vector<std::string> tokens(map_num); |
927 | 934 |
for (int i = 0; i < map_num; ++i) { |
928 | 935 |
if (!_reader_bits::readToken(line, tokens[i])) { |
... | ... |
@@ -934,14 +941,17 @@ |
934 | 941 |
if (line >> std::ws >> c) |
935 | 942 |
throw DataFormatError("Extra character on the end of line"); |
936 | 943 |
|
937 | 944 |
Node n; |
938 | 945 |
if (!_use_nodes) { |
939 | 946 |
n = _digraph.addNode(); |
940 |
|
|
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]); |
944 | 954 |
if (it == _node_index.end()) { |
945 | 955 |
std::ostringstream msg; |
946 | 956 |
msg << "Node with label not found: " << tokens[label_index]; |
947 | 957 |
throw DataFormatError(msg.str().c_str()); |
... | ... |
@@ -961,14 +971,20 @@ |
961 | 971 |
|
962 | 972 |
void readArcs() { |
963 | 973 |
|
964 | 974 |
std::vector<int> map_index(_arc_maps.size()); |
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 |
{ |
971 | 987 |
std::map<std::string, int> maps; |
972 | 988 |
|
973 | 989 |
std::string map; |
974 | 990 |
int index = 0; |
... | ... |
@@ -992,31 +1008,32 @@ |
992 | 1008 |
} |
993 | 1009 |
map_index[i] = jt->second; |
994 | 1010 |
} |
995 | 1011 |
|
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 |
|
|
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); |
1008 | 1025 |
|
1009 | 1026 |
std::string source_token; |
1010 | 1027 |
std::string target_token; |
1011 | 1028 |
|
1012 | 1029 |
if (!_reader_bits::readToken(line, source_token)) |
1013 | 1030 |
throw DataFormatError("Source not found"); |
1014 | 1031 |
|
1015 | 1032 |
if (!_reader_bits::readToken(line, target_token)) |
1016 |
throw DataFormatError(" |
|
1033 |
throw DataFormatError("Target not found"); |
|
1017 | 1034 |
|
1018 | 1035 |
std::vector<std::string> tokens(map_num); |
1019 | 1036 |
for (int i = 0; i < map_num; ++i) { |
1020 | 1037 |
if (!_reader_bits::readToken(line, tokens[i])) { |
1021 | 1038 |
std::ostringstream msg; |
1022 | 1039 |
msg << "Column not found (" << i + 1 << ")"; |
... | ... |
@@ -1045,14 +1062,17 @@ |
1045 | 1062 |
msg << "Item not found: " << target_token; |
1046 | 1063 |
throw DataFormatError(msg.str().c_str()); |
1047 | 1064 |
} |
1048 | 1065 |
Node target = it->second; |
1049 | 1066 |
|
1050 | 1067 |
a = _digraph.addArc(source, target); |
1051 |
|
|
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]); |
1055 | 1075 |
if (it == _arc_index.end()) { |
1056 | 1076 |
std::ostringstream msg; |
1057 | 1077 |
msg << "Arc with label not found: " << tokens[label_index]; |
1058 | 1078 |
throw DataFormatError(msg.str().c_str()); |
... | ... |
@@ -1720,14 +1740,20 @@ |
1720 | 1740 |
|
1721 | 1741 |
void readNodes() { |
1722 | 1742 |
|
1723 | 1743 |
std::vector<int> map_index(_node_maps.size()); |
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 |
{ |
1730 | 1756 |
std::map<std::string, int> maps; |
1731 | 1757 |
|
1732 | 1758 |
std::string map; |
1733 | 1759 |
int index = 0; |
... | ... |
@@ -1751,20 +1777,21 @@ |
1751 | 1777 |
} |
1752 | 1778 |
map_index[i] = jt->second; |
1753 | 1779 |
} |
1754 | 1780 |
|
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 |
|
|
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); |
1767 | 1794 |
|
1768 | 1795 |
std::vector<std::string> tokens(map_num); |
1769 | 1796 |
for (int i = 0; i < map_num; ++i) { |
1770 | 1797 |
if (!_reader_bits::readToken(line, tokens[i])) { |
... | ... |
@@ -1776,14 +1803,17 @@ |
1776 | 1803 |
if (line >> std::ws >> c) |
1777 | 1804 |
throw DataFormatError("Extra character on the end of line"); |
1778 | 1805 |
|
1779 | 1806 |
Node n; |
1780 | 1807 |
if (!_use_nodes) { |
1781 | 1808 |
n = _graph.addNode(); |
1782 |
|
|
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]); |
1786 | 1816 |
if (it == _node_index.end()) { |
1787 | 1817 |
std::ostringstream msg; |
1788 | 1818 |
msg << "Node with label not found: " << tokens[label_index]; |
1789 | 1819 |
throw DataFormatError(msg.str().c_str()); |
... | ... |
@@ -1803,14 +1833,20 @@ |
1803 | 1833 |
|
1804 | 1834 |
void readEdges() { |
1805 | 1835 |
|
1806 | 1836 |
std::vector<int> map_index(_edge_maps.size()); |
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 |
{ |
1813 | 1849 |
std::map<std::string, int> maps; |
1814 | 1850 |
|
1815 | 1851 |
std::string map; |
1816 | 1852 |
int index = 0; |
... | ... |
@@ -1834,31 +1870,32 @@ |
1834 | 1870 |
} |
1835 | 1871 |
map_index[i] = jt->second; |
1836 | 1872 |
} |
1837 | 1873 |
|
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 |
|
|
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); |
1850 | 1887 |
|
1851 | 1888 |
std::string source_token; |
1852 | 1889 |
std::string target_token; |
1853 | 1890 |
|
1854 | 1891 |
if (!_reader_bits::readToken(line, source_token)) |
1855 |
throw DataFormatError(" |
|
1892 |
throw DataFormatError("Node u not found"); |
|
1856 | 1893 |
|
1857 | 1894 |
if (!_reader_bits::readToken(line, target_token)) |
1858 |
throw DataFormatError(" |
|
1895 |
throw DataFormatError("Node v not found"); |
|
1859 | 1896 |
|
1860 | 1897 |
std::vector<std::string> tokens(map_num); |
1861 | 1898 |
for (int i = 0; i < map_num; ++i) { |
1862 | 1899 |
if (!_reader_bits::readToken(line, tokens[i])) { |
1863 | 1900 |
std::ostringstream msg; |
1864 | 1901 |
msg << "Column not found (" << i + 1 << ")"; |
... | ... |
@@ -1887,14 +1924,17 @@ |
1887 | 1924 |
msg << "Item not found: " << target_token; |
1888 | 1925 |
throw DataFormatError(msg.str().c_str()); |
1889 | 1926 |
} |
1890 | 1927 |
Node target = it->second; |
1891 | 1928 |
|
1892 | 1929 |
e = _graph.addEdge(source, target); |
1893 |
|
|
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]); |
1897 | 1937 |
if (it == _edge_index.end()) { |
1898 | 1938 |
std::ostringstream msg; |
1899 | 1939 |
msg << "Edge with label not found: " << tokens[label_index]; |
1900 | 1940 |
throw DataFormatError(msg.str().c_str()); |
... | ... |
@@ -2322,14 +2362,18 @@ |
2322 | 2362 |
readLine(); |
2323 | 2363 |
} |
2324 | 2364 |
line.putback(c); |
2325 | 2365 |
} |
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)) { |
2332 | 2376 |
maps.push_back(map); |
2333 | 2377 |
} |
2334 | 2378 |
} |
2335 | 2379 |
|
0 comments (0 inline)