gravatar
deba@inf.elte.hu
deba@inf.elte.hu
Improvments in map name handling - The label map is not necessary - If the item set is empty and no map is read, then the map name line can be ommited
0 1 0
default
1 file changed with 78 insertions and 34 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -881,9 +881,15 @@
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
	
... ...
@@ -912,14 +918,15 @@
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
	  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);
925 932

	
... ...
@@ -937,8 +944,11 @@
937 944
	Node n;
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]);
944 954
	  if (it == _node_index.end()) {
... ...
@@ -964,8 +974,14 @@
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;
... ...
@@ -995,14 +1011,15 @@
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
	  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);
1008 1025

	
... ...
@@ -1013,7 +1030,7 @@
1013 1030
	  throw DataFormatError("Source not found");
1014 1031

	
1015 1032
	if (!_reader_bits::readToken(line, target_token))
1016
	  throw DataFormatError("Source not found");
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) {
... ...
@@ -1048,8 +1065,11 @@
1048 1065
          Node target = it->second;                            
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]);
1055 1075
	  if (it == _arc_index.end()) {
... ...
@@ -1723,8 +1743,14 @@
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;
... ...
@@ -1754,14 +1780,15 @@
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
	  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);
1767 1794

	
... ...
@@ -1779,8 +1806,11 @@
1779 1806
	Node n;
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]);
1786 1816
	  if (it == _node_index.end()) {
... ...
@@ -1806,8 +1836,14 @@
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;
... ...
@@ -1837,14 +1873,15 @@
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
	  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);
1850 1887

	
... ...
@@ -1852,10 +1889,10 @@
1852 1889
	std::string target_token;
1853 1890

	
1854 1891
	if (!_reader_bits::readToken(line, source_token))
1855
	  throw DataFormatError("Source not found");
1892
	  throw DataFormatError("Node u not found");
1856 1893

	
1857 1894
	if (!_reader_bits::readToken(line, target_token))
1858
	  throw DataFormatError("Source not found");
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) {
... ...
@@ -1890,8 +1927,11 @@
1890 1927
          Node target = it->second;                            
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]);
1897 1937
	  if (it == _edge_index.end()) {
... ...
@@ -2325,8 +2365,12 @@
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);
0 comments (0 inline)