Changeset 1115:444f69240539 in lemon-0.x for src/work/deba/graph_reader.h
- Timestamp:
- 02/01/05 16:56:37 (19 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1514
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/work/deba/graph_reader.h
r1037 r1115 38 38 class IOException { 39 39 public: 40 virtual ~IOException() {} 40 41 virtual string what() const = 0; 41 42 }; … … 56 57 typedef _Exception Exception; 57 58 StreamException(int _line, Exception _exception) 58 : line_num(_line), Exception(_exception) {}59 : Exception(_exception), line_num(_line) {} 59 60 virtual int line() const { 60 61 return line_num; 61 62 } 63 64 virtual ~StreamException() {} 65 62 66 virtual std::string what() const { 63 67 ostringstream os; … … 71 75 72 76 // Readers and ReaderTraits 73 77 /// \brief Standard ReaderTraits for the GraphReader class. 78 /// 79 /// 80 74 81 struct DefaultReaderTraits { 75 82 … … 97 104 value.clear(); 98 105 is >> ws; 99 if (!is.get(c) || c != '\"') throw DataFormatException("Quoted string format"); 106 if (!is.get(c) || c != '\"') 107 throw DataFormatException("Quoted string format"); 100 108 while (is.get(c) && c != '\"') { 101 109 if (escaped && c == '\\') { … … 193 201 typedef typename ReaderTraits::DefaultReader DefaultReader; 194 202 195 GraphReader(std::istream& _is, Graph& _graph, const DefaultReader& _reader = DefaultReader()) 203 GraphReader(std::istream& _is, Graph& _graph, 204 const DefaultReader& _reader = DefaultReader()) 196 205 : is(_is), graph(_graph), nodeSkipper(_reader), edgeSkipper(_reader) {} 197 206 … … 199 208 ~GraphReader() { 200 209 201 for (typename NodeMapReaders::iterator it = node_map_readers.begin(); it != node_map_readers.end(); ++it) { 210 for (typename NodeMapReaders::iterator it = node_map_readers.begin(); 211 it != node_map_readers.end(); ++it) { 202 212 delete it->second; 203 213 } 204 214 205 for (typename EdgeMapReaders::iterator it = edge_map_readers.begin(); it != edge_map_readers.end(); ++it) { 215 for (typename EdgeMapReaders::iterator it = edge_map_readers.begin(); 216 it != edge_map_readers.end(); ++it) { 206 217 delete it->second; 207 218 } … … 212 223 213 224 template <typename Map> 214 GraphReader& readNodeMap(std::string name, Map& map) { 215 return readNodeMap<typename ReaderTraits::template Reader<typename Map::Value>, Map>(name, map); 225 GraphReader& addNodeMap(std::string name, Map& map) { 226 return addNodeMap<typename ReaderTraits::template 227 Reader<typename Map::Value>, Map>(name, map); 216 228 } 217 229 218 230 template <typename Reader, typename Map> 219 GraphReader& readNodeMap(std::string name, Map& map, const Reader& reader = Reader()) { 231 GraphReader& addNodeMap(std::string name, Map& map, 232 const Reader& reader = Reader()) { 220 233 if (node_map_readers.find(name) != node_map_readers.end()) { 221 234 throw Exception() << "Multiple read rule for node map: " << name; 222 235 } 223 node_map_readers.insert(make_pair(name, new MapReader<Node, Map, Reader>(map, reader))); 236 node_map_readers.insert( 237 make_pair(name, new MapReader<Node, Map, Reader>(map, reader))); 224 238 return *this; 225 239 } 226 240 227 241 template <typename Reader> 228 GraphReader& skipNodeMap(std::string name, const Reader& reader = Reader()) { 242 GraphReader& skipNodeMap(std::string name, 243 const Reader& reader = Reader()) { 229 244 if (node_map_readers.find(name) != node_map_readers.end()) { 230 245 throw Exception() << "Multiple read rule for node map: " << name; 231 246 } 232 node_map_readers.insert(make_pair(name, new SkipReader<Node, Reader>(reader))); 247 node_map_readers.insert( 248 make_pair(name, new SkipReader<Node, Reader>(reader))); 233 249 return *this; 234 250 } … … 237 253 238 254 template <typename Map> 239 GraphReader& readEdgeMap(std::string name, Map& map) { 240 return readEdgeMap<typename ReaderTraits::template Reader<typename Map::Value>, Map>(name, map); 255 GraphReader& addEdgeMap(std::string name, Map& map) { 256 return addEdgeMap<typename ReaderTraits::template 257 Reader<typename Map::Value>, Map>(name, map); 241 258 } 242 259 243 260 244 261 template <typename Reader, typename Map> 245 GraphReader& readEdgeMap(std::string name, Map& map, const Reader& reader = Reader()) { 262 GraphReader& addEdgeMap(std::string name, Map& map, 263 const Reader& reader = Reader()) { 246 264 if (edge_map_readers.find(name) != edge_map_readers.end()) { 247 265 throw Exception() << "Multiple read rule for edge map: " << name; 248 266 } 249 edge_map_readers.insert(make_pair(name, new MapReader<Edge, Map, Reader>(map, reader))); 267 edge_map_readers.insert( 268 make_pair(name, new MapReader<Edge, Map, Reader>(map, reader))); 250 269 return *this; 251 270 } 252 271 253 272 template <typename Reader> 254 GraphReader& skipEdgeMap(std::string name, const Reader& reader = Reader()) { 273 GraphReader& skipEdgeMap(std::string name, 274 const Reader& reader = Reader()) { 255 275 if (edge_map_readers.find(name) != edge_map_readers.end()) { 256 276 throw Exception() << "Multiple read rule for edge map: " << name; 257 277 } 258 edge_map_readers.insert(make_pair(name, new SkipReader<Edge, Reader>(reader))); 278 edge_map_readers.insert( 279 make_pair(name, new SkipReader<Edge, Reader>(reader))); 259 280 return *this; 260 281 } 261 282 262 283 // Node rules 263 GraphReader& readNode(std::string name, Node& node) {284 GraphReader& addNode(std::string name, Node& node) { 264 285 if (node_readers.find(name) != node_readers.end()) { 265 286 throw Exception() << "Multiple read rule for node"; 266 287 } 267 288 node_readers.insert(make_pair(name, &node)); 289 return *this; 268 290 } 269 291 270 292 // Edge rules 271 293 272 GraphReader& readEdge(std::string name, Edge& edge) {294 GraphReader& addEdge(std::string name, Edge& edge) { 273 295 if (edge_readers.find(name) != edge_readers.end()) { 274 296 throw Exception() << "Multiple read rule for edge"; 275 297 } 276 298 edge_readers.insert(make_pair(name, &edge)); 299 return *this; 277 300 } 278 301 … … 307 330 template <typename Item> class InverterBase; 308 331 309 std::string readNodeSet(int& line_num, auto_ptr<InverterBase<Node> > & nodeInverter) { 332 std::string readNodeSet(int& line_num, 333 auto_ptr<InverterBase<Node> > & nodeInverter) { 310 334 std::vector<ReaderBase<Node>* > index; 311 335 { … … 335 359 std::istringstream ls(line); 336 360 nodeInverter->read(ls, node); 337 for (int i = 1; i < index.size(); ++i) {361 for (int i = 1; i < (int)index.size(); ++i) { 338 362 index[i]->read(ls, node); 339 363 } … … 343 367 344 368 std::string readEdgeSet(int& line_num, 345 auto_ptr<InverterBase<Edge> > & edgeInverter, auto_ptr<InverterBase<Node> > & nodeInverter) { 369 auto_ptr<InverterBase<Edge> > & edgeInverter, 370 auto_ptr<InverterBase<Node> > & nodeInverter) { 346 371 std::vector<ReaderBase<Edge>*> index; 347 372 { … … 373 398 Edge edge = graph.addEdge(source, target); 374 399 edgeInverter->read(ls, edge); 375 for (int i = 1; i < index.size(); ++i) {400 for (int i = 1; i < (int)index.size(); ++i) { 376 401 index[i]->read(ls, edge); 377 402 } … … 380 405 } 381 406 382 std::string readNodes(int& line_num, auto_ptr<InverterBase<Node> >& nodeInverter) { 407 std::string readNodes(int& line_num, 408 auto_ptr<InverterBase<Node> >& nodeInverter) { 383 409 std::string line; 384 410 while (line = readNotEmptyLine(is, line_num), line[0] != '@') { … … 394 420 } 395 421 396 std::string readEdges(int& line_num, auto_ptr<InverterBase<Edge> >& edgeInverter) { 422 std::string readEdges(int& line_num, 423 auto_ptr<InverterBase<Edge> >& edgeInverter) { 397 424 std::string line; 398 425 while (line = readNotEmptyLine(is, line_num), line[0] != '@') { … … 412 439 while (++line_num, getline(is, line)) { 413 440 int vi = line.find_first_not_of(" \t"); 414 if (vi != string::npos && line[vi] != '#') {441 if (vi != (int)string::npos && line[vi] != '#') { 415 442 return line.substr(vi); 416 443 } … … 446 473 : map(_map), reader(_reader) {} 447 474 475 virtual ~MapReaderInverter() {} 476 448 477 virtual void read(std::istream& is, const Item& item) { 449 478 Value value; … … 483 512 : reader(_reader) {} 484 513 514 virtual ~SkipReaderInverter() {} 515 485 516 virtual void read(std::istream& is, const Item& item) { 486 517 Value value; … … 514 545 public: 515 546 typedef _Item Item; 547 548 // virtual ~ReaderBase() {} 516 549 517 550 virtual void read(std::istream& is, const Item& item) = 0; … … 533 566 : map(_map), reader(_reader) {} 534 567 568 virtual ~MapReader() {} 535 569 536 570 virtual void read(std::istream& is, const Item& item) { … … 556 590 SkipReader(const Reader& _reader) : reader(_reader) {} 557 591 592 virtual ~SkipReader() {} 593 558 594 virtual void read(std::istream& is, const Item& item) { 559 595 Value value;
Note: See TracChangeset
for help on using the changeset viewer.