COIN-OR::LEMON - Graph Library

Changeset 186:9159de5e9657 in lemon-1.2 for lemon/lgf_reader.h


Ignore:
Timestamp:
07/02/08 10:37:14 (16 years ago)
Author:
Balazs Dezso <deba@…>
Branch:
default
Phase:
public
Message:

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
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/lgf_reader.h

    r182 r186  
    882882      int map_num, label_index;
    883883
    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
    887893      {
    888894        std::map<std::string, int> maps;
     
    913919        {
    914920          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          }
    918926        }
    919927        map_num = maps.size();
    920928      }
    921929
    922       char c;
    923930      while (readLine() && line >> c && c != '@') {
    924931        line.putback(c);
     
    938945        if (!_use_nodes) {
    939946          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));
    941949        } else {
     950          if (label_index == -1)
     951            throw DataFormatError("Label map not found in file");
    942952          typename std::map<std::string, Node>::iterator it =
    943953            _node_index.find(tokens[label_index]);
     
    965975      int map_num, label_index;
    966976
    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);
    969985     
    970986      {
     
    9961012        {
    9971013          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          }
    10011019        }
    10021020        map_num = maps.size();
    10031021      }
    10041022
    1005       char c;
    10061023      while (readLine() && line >> c && c != '@') {
    10071024        line.putback(c);
     
    10141031
    10151032        if (!_reader_bits::readToken(line, target_token))
    1016           throw DataFormatError("Source not found");
     1033          throw DataFormatError("Target not found");
    10171034       
    10181035        std::vector<std::string> tokens(map_num);
     
    10491066
    10501067          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));
    10521070        } else {
     1071          if (label_index == -1)
     1072            throw DataFormatError("Label map not found in file");
    10531073          typename std::map<std::string, Arc>::iterator it =
    10541074            _arc_index.find(tokens[label_index]);
     
    17241744      int map_num, label_index;
    17251745
    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);
    17281754     
    17291755      {
     
    17551781        {
    17561782          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          }
    17601788        }
    17611789        map_num = maps.size();
    17621790      }
    17631791
    1764       char c;
    17651792      while (readLine() && line >> c && c != '@') {
    17661793        line.putback(c);
     
    17801807        if (!_use_nodes) {
    17811808          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));
    17831811        } else {
     1812          if (label_index == -1)
     1813            throw DataFormatError("Label map not found in file");
    17841814          typename std::map<std::string, Node>::iterator it =
    17851815            _node_index.find(tokens[label_index]);
     
    18071837      int map_num, label_index;
    18081838
    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);
    18111847     
    18121848      {
     
    18381874        {
    18391875          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          }
    18431881        }
    18441882        map_num = maps.size();
    18451883      }
    18461884
    1847       char c;
    18481885      while (readLine() && line >> c && c != '@') {
    18491886        line.putback(c);
     
    18531890
    18541891        if (!_reader_bits::readToken(line, source_token))
    1855           throw DataFormatError("Source not found");
     1892          throw DataFormatError("Node u not found");
    18561893
    18571894        if (!_reader_bits::readToken(line, target_token))
    1858           throw DataFormatError("Source not found");
     1895          throw DataFormatError("Node v not found");
    18591896       
    18601897        std::vector<std::string> tokens(map_num);
     
    18911928
    18921929          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));
    18941932        } else {
     1933          if (label_index == -1)
     1934            throw DataFormatError("Label map not found in file");
    18951935          typename std::map<std::string, Edge>::iterator it =
    18961936            _edge_index.find(tokens[label_index]);
     
    23262366
    23272367    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);
    23302374      std::string map;
    23312375      while (_reader_bits::readToken(line, map)) {
Note: See TracChangeset for help on using the changeset viewer.