COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/lgf_reader.h

    r236 r291  
    4949        std::istringstream is(str);
    5050        Value value;
    51         is >> value;
     51        if (!(is >> value)) {
     52          throw FormatError("Cannot read token");
     53        }
    5254
    5355        char c;
    5456        if (is >> std::ws >> c) {
    55           throw DataFormatError("Remaining characters in token");
     57          throw FormatError("Remaining characters in token");
    5658        }
    5759        return value;
     
    167169          std::ostringstream msg;
    168170          msg << "Item not found: " << str;
    169           throw DataFormatError(msg.str().c_str());
     171          throw FormatError(msg.str());
    170172        }
    171173        return it->second;
     
    185187      typename Graph::Arc operator()(const std::string& str) {
    186188        if (str.empty() || (str[0] != '+' && str[0] != '-')) {
    187           throw DataFormatError("Item must start with '+' or '-'");
     189          throw FormatError("Item must start with '+' or '-'");
    188190        }
    189191        typename std::map<std::string, typename Graph::Edge>
    190192          ::const_iterator it = _map.find(str.substr(1));
    191193        if (it == _map.end()) {
    192           throw DataFormatError("Item not found");
     194          throw FormatError("Item not found");
    193195        }
    194196        return _graph.direct(it->second, str[0] == '+');
     
    236238      char c;
    237239      if (!is.get(c))
    238         throw DataFormatError("Escape format error");
     240        throw FormatError("Escape format error");
    239241
    240242      switch (c) {
     
    265267          int code;
    266268          if (!is.get(c) || !isHex(c))
    267             throw DataFormatError("Escape format error");
     269            throw FormatError("Escape format error");
    268270          else if (code = valueHex(c), !is.get(c) || !isHex(c)) is.putback(c);
    269271          else code = code * 16 + valueHex(c);
     
    274276          int code;
    275277          if (!isOct(c))
    276             throw DataFormatError("Escape format error");
     278            throw FormatError("Escape format error");
    277279          else if (code = valueOct(c), !is.get(c) || !isOct(c))
    278280            is.putback(c);
     
    301303        }
    302304        if (!is)
    303           throw DataFormatError("Quoted format error");
     305          throw FormatError("Quoted format error");
    304306      } else {
    305307        is.putback(c);
     
    461463    std::istream* _is;
    462464    bool local_is;
     465    std::string _filename;
    463466
    464467    Digraph& _digraph;
     
    510513    /// file.
    511514    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),
    513517        _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("Cannot open file", fn);
     520    }
    515521
    516522    /// \brief Constructor
     
    519525    /// file.
    520526    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),
    522529        _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("Cannot open file", fn);
     532    }
    524533
    525534    /// \brief Destructor
     
    846855        if (readSuccess() && line) line.putback(c);
    847856        if (!_node_maps.empty())
    848           throw DataFormatError("Cannot find map names");
     857          throw FormatError("Cannot find map names");
    849858        return;
    850859      }
     
    860869            std::ostringstream msg;
    861870            msg << "Multiple occurence of node map: " << map;
    862             throw DataFormatError(msg.str().c_str());
     871            throw FormatError(msg.str());
    863872          }
    864873          maps.insert(std::make_pair(map, index));
     
    871880          if (jt == maps.end()) {
    872881            std::ostringstream msg;
    873             msg << "Map not found in file: " << _node_maps[i].first;
    874             throw DataFormatError(msg.str().c_str());
     882            msg << "Map not found: " << _node_maps[i].first;
     883            throw FormatError(msg.str());
    875884          }
    876885          map_index[i] = jt->second;
     
    896905            std::ostringstream msg;
    897906            msg << "Column not found (" << i + 1 << ")";
    898             throw DataFormatError(msg.str().c_str());
     907            throw FormatError(msg.str());
    899908          }
    900909        }
    901910        if (line >> std::ws >> c)
    902           throw DataFormatError("Extra character on the end of line");
     911          throw FormatError("Extra character at the end of line");
    903912
    904913        Node n;
     
    909918        } else {
    910919          if (label_index == -1)
    911             throw DataFormatError("Label map not found in file");
     920            throw FormatError("Label map not found");
    912921          typename std::map<std::string, Node>::iterator it =
    913922            _node_index.find(tokens[label_index]);
     
    915924            std::ostringstream msg;
    916925            msg << "Node with label not found: " << tokens[label_index];
    917             throw DataFormatError(msg.str().c_str());
     926            throw FormatError(msg.str());
    918927          }
    919928          n = it->second;
     
    939948        if (readSuccess() && line) line.putback(c);
    940949        if (!_arc_maps.empty())
    941           throw DataFormatError("Cannot find map names");
     950          throw FormatError("Cannot find map names");
    942951        return;
    943952      }
     
    953962            std::ostringstream msg;
    954963            msg << "Multiple occurence of arc map: " << map;
    955             throw DataFormatError(msg.str().c_str());
     964            throw FormatError(msg.str());
    956965          }
    957966          maps.insert(std::make_pair(map, index));
     
    964973          if (jt == maps.end()) {
    965974            std::ostringstream msg;
    966             msg << "Map not found in file: " << _arc_maps[i].first;
    967             throw DataFormatError(msg.str().c_str());
     975            msg << "Map not found: " << _arc_maps[i].first;
     976            throw FormatError(msg.str());
    968977          }
    969978          map_index[i] = jt->second;
     
    988997
    989998        if (!_reader_bits::readToken(line, source_token))
    990           throw DataFormatError("Source not found");
     999          throw FormatError("Source not found");
    9911000
    9921001        if (!_reader_bits::readToken(line, target_token))
    993           throw DataFormatError("Target not found");
     1002          throw FormatError("Target not found");
    9941003
    9951004        std::vector<std::string> tokens(map_num);
     
    9981007            std::ostringstream msg;
    9991008            msg << "Column not found (" << i + 1 << ")";
    1000             throw DataFormatError(msg.str().c_str());
     1009            throw FormatError(msg.str());
    10011010          }
    10021011        }
    10031012        if (line >> std::ws >> c)
    1004           throw DataFormatError("Extra character on the end of line");
     1013          throw FormatError("Extra character at the end of line");
    10051014
    10061015        Arc a;
     
    10131022            std::ostringstream msg;
    10141023            msg << "Item not found: " << source_token;
    1015             throw DataFormatError(msg.str().c_str());
     1024            throw FormatError(msg.str());
    10161025          }
    10171026          Node source = it->second;
     
    10211030            std::ostringstream msg;
    10221031            msg << "Item not found: " << target_token;
    1023             throw DataFormatError(msg.str().c_str());
     1032            throw FormatError(msg.str());
    10241033          }
    10251034          Node target = it->second;
     
    10301039        } else {
    10311040          if (label_index == -1)
    1032             throw DataFormatError("Label map not found in file");
     1041            throw FormatError("Label map not found");
    10331042          typename std::map<std::string, Arc>::iterator it =
    10341043            _arc_index.find(tokens[label_index]);
     
    10361045            std::ostringstream msg;
    10371046            msg << "Arc with label not found: " << tokens[label_index];
    1038             throw DataFormatError(msg.str().c_str());
     1047            throw FormatError(msg.str());
    10391048          }
    10401049          a = it->second;
     
    10611070        std::string attr, token;
    10621071        if (!_reader_bits::readToken(line, attr))
    1063           throw DataFormatError("Attribute name not found");
     1072          throw FormatError("Attribute name not found");
    10641073        if (!_reader_bits::readToken(line, token))
    1065           throw DataFormatError("Attribute value not found");
     1074          throw FormatError("Attribute value not found");
    10661075        if (line >> c)
    1067           throw DataFormatError("Extra character on the end of line");
     1076          throw FormatError("Extra character at the end of line");
    10681077
    10691078        {
     
    10711080          if (it != read_attr.end()) {
    10721081            std::ostringstream msg;
    1073             msg << "Multiple occurence of attribute " << attr;
    1074             throw DataFormatError(msg.str().c_str());
     1082            msg << "Multiple occurence of attribute: " << attr;
     1083            throw FormatError(msg.str());
    10751084          }
    10761085          read_attr.insert(attr);
     
    10931102        if (read_attr.find(it->first) == read_attr.end()) {
    10941103          std::ostringstream msg;
    1095           msg << "Attribute not found in file: " << it->first;
    1096           throw DataFormatError(msg.str().c_str());
     1104          msg << "Attribute not found: " << it->first;
     1105          throw FormatError(msg.str());
    10971106        }
    10981107      }
     
    11091118    void run() {
    11101119      LEMON_ASSERT(_is != 0, "This reader assigned to an other reader");
    1111       if (!*_is) {
    1112         throw DataFormatError("Cannot find file");
    1113       }
    11141120
    11151121      bool nodes_done = _skip_nodes;
     
    11301136
    11311137          if (line >> c)
    1132             throw DataFormatError("Extra character on the end of line");
     1138            throw FormatError("Extra character at the end of line");
    11331139
    11341140          if (section == "nodes" && !nodes_done) {
     
    11521158            skipSection();
    11531159          }
    1154         } catch (DataFormatError& error) {
     1160        } catch (FormatError& error) {
    11551161          error.line(line_num);
     1162          error.file(_filename);
    11561163          throw;
    11571164        }
     
    11591166
    11601167      if (!nodes_done) {
    1161         throw DataFormatError("Section @nodes not found");
     1168        throw FormatError("Section @nodes not found");
    11621169      }
    11631170
    11641171      if (!arcs_done) {
    1165         throw DataFormatError("Section @arcs not found");
     1172        throw FormatError("Section @arcs not found");
    11661173      }
    11671174
    11681175      if (!attributes_done && !_attributes.empty()) {
    1169         throw DataFormatError("Section @attributes not found");
     1176        throw FormatError("Section @attributes not found");
    11701177      }
    11711178
     
    12451252    std::istream* _is;
    12461253    bool local_is;
     1254    std::string _filename;
    12471255
    12481256    Graph& _graph;
     
    12941302    /// file.
    12951303    GraphReader(const std::string& fn, Graph& graph)
    1296       : _is(new std::ifstream(fn.c_str())), local_is(true), _graph(graph),
     1304      : _is(new std::ifstream(fn.c_str())), local_is(true),
     1305        _filename(fn), _graph(graph),
    12971306        _use_nodes(false), _use_edges(false),
    1298         _skip_nodes(false), _skip_edges(false) {}
     1307        _skip_nodes(false), _skip_edges(false) {
     1308      if (!(*_is)) throw IoError("Cannot open file", fn);
     1309    }
    12991310
    13001311    /// \brief Constructor
     
    13031314    /// file.
    13041315    GraphReader(const char* fn, Graph& graph)
    1305       : _is(new std::ifstream(fn)), local_is(true), _graph(graph),
     1316      : _is(new std::ifstream(fn)), local_is(true),
     1317        _filename(fn), _graph(graph),
    13061318        _use_nodes(false), _use_edges(false),
    1307         _skip_nodes(false), _skip_edges(false) {}
     1319        _skip_nodes(false), _skip_edges(false) {
     1320      if (!(*_is)) throw IoError("Cannot open file", fn);
     1321    }
    13081322
    13091323    /// \brief Destructor
     
    16741688        if (readSuccess() && line) line.putback(c);
    16751689        if (!_node_maps.empty())
    1676           throw DataFormatError("Cannot find map names");
     1690          throw FormatError("Cannot find map names");
    16771691        return;
    16781692      }
     
    16881702            std::ostringstream msg;
    16891703            msg << "Multiple occurence of node map: " << map;
    1690             throw DataFormatError(msg.str().c_str());
     1704            throw FormatError(msg.str());
    16911705          }
    16921706          maps.insert(std::make_pair(map, index));
     
    16991713          if (jt == maps.end()) {
    17001714            std::ostringstream msg;
    1701             msg << "Map not found in file: " << _node_maps[i].first;
    1702             throw DataFormatError(msg.str().c_str());
     1715            msg << "Map not found: " << _node_maps[i].first;
     1716            throw FormatError(msg.str());
    17031717          }
    17041718          map_index[i] = jt->second;
     
    17241738            std::ostringstream msg;
    17251739            msg << "Column not found (" << i + 1 << ")";
    1726             throw DataFormatError(msg.str().c_str());
     1740            throw FormatError(msg.str());
    17271741          }
    17281742        }
    17291743        if (line >> std::ws >> c)
    1730           throw DataFormatError("Extra character on the end of line");
     1744          throw FormatError("Extra character at the end of line");
    17311745
    17321746        Node n;
     
    17371751        } else {
    17381752          if (label_index == -1)
    1739             throw DataFormatError("Label map not found in file");
     1753            throw FormatError("Label map not found");
    17401754          typename std::map<std::string, Node>::iterator it =
    17411755            _node_index.find(tokens[label_index]);
     
    17431757            std::ostringstream msg;
    17441758            msg << "Node with label not found: " << tokens[label_index];
    1745             throw DataFormatError(msg.str().c_str());
     1759            throw FormatError(msg.str());
    17461760          }
    17471761          n = it->second;
     
    17671781        if (readSuccess() && line) line.putback(c);
    17681782        if (!_edge_maps.empty())
    1769           throw DataFormatError("Cannot find map names");
     1783          throw FormatError("Cannot find map names");
    17701784        return;
    17711785      }
     
    17811795            std::ostringstream msg;
    17821796            msg << "Multiple occurence of edge map: " << map;
    1783             throw DataFormatError(msg.str().c_str());
     1797            throw FormatError(msg.str());
    17841798          }
    17851799          maps.insert(std::make_pair(map, index));
     
    17921806          if (jt == maps.end()) {
    17931807            std::ostringstream msg;
    1794             msg << "Map not found in file: " << _edge_maps[i].first;
    1795             throw DataFormatError(msg.str().c_str());
     1808            msg << "Map not found: " << _edge_maps[i].first;
     1809            throw FormatError(msg.str());
    17961810          }
    17971811          map_index[i] = jt->second;
     
    18161830
    18171831        if (!_reader_bits::readToken(line, source_token))
    1818           throw DataFormatError("Node u not found");
     1832          throw FormatError("Node u not found");
    18191833
    18201834        if (!_reader_bits::readToken(line, target_token))
    1821           throw DataFormatError("Node v not found");
     1835          throw FormatError("Node v not found");
    18221836
    18231837        std::vector<std::string> tokens(map_num);
     
    18261840            std::ostringstream msg;
    18271841            msg << "Column not found (" << i + 1 << ")";
    1828             throw DataFormatError(msg.str().c_str());
     1842            throw FormatError(msg.str());
    18291843          }
    18301844        }
    18311845        if (line >> std::ws >> c)
    1832           throw DataFormatError("Extra character on the end of line");
     1846          throw FormatError("Extra character at the end of line");
    18331847
    18341848        Edge e;
     
    18411855            std::ostringstream msg;
    18421856            msg << "Item not found: " << source_token;
    1843             throw DataFormatError(msg.str().c_str());
     1857            throw FormatError(msg.str());
    18441858          }
    18451859          Node source = it->second;
     
    18491863            std::ostringstream msg;
    18501864            msg << "Item not found: " << target_token;
    1851             throw DataFormatError(msg.str().c_str());
     1865            throw FormatError(msg.str());
    18521866          }
    18531867          Node target = it->second;
     
    18581872        } else {
    18591873          if (label_index == -1)
    1860             throw DataFormatError("Label map not found in file");
     1874            throw FormatError("Label map not found");
    18611875          typename std::map<std::string, Edge>::iterator it =
    18621876            _edge_index.find(tokens[label_index]);
     
    18641878            std::ostringstream msg;
    18651879            msg << "Edge with label not found: " << tokens[label_index];
    1866             throw DataFormatError(msg.str().c_str());
     1880            throw FormatError(msg.str());
    18671881          }
    18681882          e = it->second;
     
    18891903        std::string attr, token;
    18901904        if (!_reader_bits::readToken(line, attr))
    1891           throw DataFormatError("Attribute name not found");
     1905          throw FormatError("Attribute name not found");
    18921906        if (!_reader_bits::readToken(line, token))
    1893           throw DataFormatError("Attribute value not found");
     1907          throw FormatError("Attribute value not found");
    18941908        if (line >> c)
    1895           throw DataFormatError("Extra character on the end of line");
     1909          throw FormatError("Extra character at the end of line");
    18961910
    18971911        {
     
    18991913          if (it != read_attr.end()) {
    19001914            std::ostringstream msg;
    1901             msg << "Multiple occurence of attribute " << attr;
    1902             throw DataFormatError(msg.str().c_str());
     1915            msg << "Multiple occurence of attribute: " << attr;
     1916            throw FormatError(msg.str());
    19031917          }
    19041918          read_attr.insert(attr);
     
    19211935        if (read_attr.find(it->first) == read_attr.end()) {
    19221936          std::ostringstream msg;
    1923           msg << "Attribute not found in file: " << it->first;
    1924           throw DataFormatError(msg.str().c_str());
     1937          msg << "Attribute not found: " << it->first;
     1938          throw FormatError(msg.str());
    19251939        }
    19261940      }
     
    19561970
    19571971          if (line >> c)
    1958             throw DataFormatError("Extra character on the end of line");
     1972            throw FormatError("Extra character at the end of line");
    19591973
    19601974          if (section == "nodes" && !nodes_done) {
     
    19781992            skipSection();
    19791993          }
    1980         } catch (DataFormatError& error) {
     1994        } catch (FormatError& error) {
    19811995          error.line(line_num);
     1996          error.file(_filename);
    19821997          throw;
    19831998        }
     
    19852000
    19862001      if (!nodes_done) {
    1987         throw DataFormatError("Section @nodes not found");
     2002        throw FormatError("Section @nodes not found");
    19882003      }
    19892004
    19902005      if (!edges_done) {
    1991         throw DataFormatError("Section @edges not found");
     2006        throw FormatError("Section @edges not found");
    19922007      }
    19932008
    19942009      if (!attributes_done && !_attributes.empty()) {
    1995         throw DataFormatError("Section @attributes not found");
     2010        throw FormatError("Section @attributes not found");
    19962011      }
    19972012
     
    20552070    std::istream* _is;
    20562071    bool local_is;
     2072    std::string _filename;
    20572073
    20582074    typedef std::map<std::string, _reader_bits::Section*> Sections;
     
    20752091    /// Construct a section reader, which reads from the given file.
    20762092    SectionReader(const std::string& fn)
    2077       : _is(new std::ifstream(fn.c_str())), local_is(true) {}
     2093      : _is(new std::ifstream(fn.c_str())), local_is(true),
     2094        _filename(fn) {
     2095      if (!(*_is)) throw IoError("Cannot open file", fn);
     2096    }
    20782097
    20792098    /// \brief Constructor
     
    20812100    /// Construct a section reader, which reads from the given file.
    20822101    SectionReader(const char* fn)
    2083       : _is(new std::ifstream(fn)), local_is(true) {}
     2102      : _is(new std::ifstream(fn)), local_is(true),
     2103        _filename(fn) {
     2104      if (!(*_is)) throw IoError("Cannot open file", fn);
     2105    }
    20842106
    20852107    /// \brief Destructor
     
    22372259
    22382260          if (line >> c)
    2239             throw DataFormatError("Extra character on the end of line");
     2261            throw FormatError("Extra character at the end of line");
    22402262
    22412263          if (extra_sections.find(section) != extra_sections.end()) {
    22422264            std::ostringstream msg;
    2243             msg << "Multiple occurence of section " << section;
    2244             throw DataFormatError(msg.str().c_str());
     2265            msg << "Multiple occurence of section: " << section;
     2266            throw FormatError(msg.str());
    22452267          }
    22462268          Sections::iterator it = _sections.find(section);
     
    22512273          readLine();
    22522274          skipSection();
    2253         } catch (DataFormatError& error) {
     2275        } catch (FormatError& error) {
    22542276          error.line(line_num);
     2277          error.file(_filename);
    22552278          throw;
    22562279        }
     
    22612284          std::ostringstream os;
    22622285          os << "Cannot find section: " << it->first;
    2263           throw DataFormatError(os.str().c_str());
     2286          throw FormatError(os.str());
    22642287        }
    22652288      }
     
    23612384    /// file.
    23622385    LgfContents(const std::string& fn)
    2363       : _is(new std::ifstream(fn.c_str())), local_is(true) {}
     2386      : _is(new std::ifstream(fn.c_str())), local_is(true) {
     2387      if (!(*_is)) throw IoError("Cannot open file", fn);
     2388    }
    23642389
    23652390    /// \brief Constructor
     
    23682393    /// file.
    23692394    LgfContents(const char* fn)
    2370       : _is(new std::ifstream(fn)), local_is(true) {}
     2395      : _is(new std::ifstream(fn)), local_is(true) {
     2396      if (!(*_is)) throw IoError("Cannot open file", fn);
     2397    }
    23712398
    23722399    /// \brief Destructor
Note: See TracChangeset for help on using the changeset viewer.