gravatar
deba@inf.elte.hu
deba@inf.elte.hu
Move to private copy constrcutors
0 2 0
default
2 files changed with 201 insertions and 148 deletions:
↑ Collapse diff ↑
Ignore white space 12 line context
... ...
@@ -383,12 +383,24 @@
383 383
	else if (is.eof()) is.clear();	
384 384
      }
385 385
    };
386 386
    
387 387
  }
388 388

	
389
  template <typename Digraph>
390
  class DigraphReader;
391

	
392
  template <typename Digraph>
393
  DigraphReader<Digraph> digraphReader(std::istream& is, Digraph& digraph);
394

	
395
  template <typename Digraph>
396
  DigraphReader<Digraph> digraphReader(const std::string& fn, Digraph& digraph);
397

	
398
  template <typename Digraph>
399
  DigraphReader<Digraph> digraphReader(const char *fn, Digraph& digraph);
400

	
389 401
  /// \ingroup lemon_io
390 402
  ///  
391 403
  /// \brief LGF reader for directed graphs
392 404
  ///
393 405
  /// This utility reads an \ref lgf-format "LGF" file.
394 406
  ///
... ...
@@ -506,37 +518,12 @@
506 518
    /// file.
507 519
    DigraphReader(const char* fn, Digraph& digraph) 
508 520
      : _is(new std::ifstream(fn)), local_is(true), _digraph(digraph),
509 521
    	_use_nodes(false), _use_arcs(false),
510 522
	_skip_nodes(false), _skip_arcs(false) {}
511 523

	
512
    /// \brief Copy constructor
513
    ///
514
    /// The copy constructor transfers all data from the other reader,
515
    /// therefore the copied reader will not be usable more. 
516
    DigraphReader(DigraphReader& other) 
517
      : _is(other._is), local_is(other.local_is), _digraph(other._digraph),
518
	_use_nodes(other._use_nodes), _use_arcs(other._use_arcs),
519
	_skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) {
520

	
521
      other._is = 0;
522
      other.local_is = false;
523
      
524
      _node_index.swap(other._node_index);
525
      _arc_index.swap(other._arc_index);
526

	
527
      _node_maps.swap(other._node_maps);
528
      _arc_maps.swap(other._arc_maps);
529
      _attributes.swap(other._attributes);
530

	
531
      _nodes_caption = other._nodes_caption;
532
      _arcs_caption = other._arcs_caption;
533
      _attributes_caption = other._attributes_caption;
534

	
535
    }
536

	
537 524
    /// \brief Destructor
538 525
    ~DigraphReader() {
539 526
      for (typename NodeMaps::iterator it = _node_maps.begin(); 
540 527
	   it != _node_maps.end(); ++it) {
541 528
	delete it->second;
542 529
      }
... ...
@@ -555,13 +542,41 @@
555 542
	delete _is;
556 543
      }
557 544

	
558 545
    }
559 546

	
560 547
  private:
561
    
548

	
549
    friend DigraphReader<Digraph> digraphReader<>(std::istream& is, 
550
						  Digraph& digraph);    
551
    friend DigraphReader<Digraph> digraphReader<>(const std::string& fn, 
552
						  Digraph& digraph);   
553
    friend DigraphReader<Digraph> digraphReader<>(const char *fn, 
554
						  Digraph& digraph);    
555

	
556
    DigraphReader(DigraphReader& other) 
557
      : _is(other._is), local_is(other.local_is), _digraph(other._digraph),
558
	_use_nodes(other._use_nodes), _use_arcs(other._use_arcs),
559
	_skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) {
560

	
561
      other._is = 0;
562
      other.local_is = false;
563
      
564
      _node_index.swap(other._node_index);
565
      _arc_index.swap(other._arc_index);
566

	
567
      _node_maps.swap(other._node_maps);
568
      _arc_maps.swap(other._arc_maps);
569
      _attributes.swap(other._attributes);
570

	
571
      _nodes_caption = other._nodes_caption;
572
      _arcs_caption = other._arcs_caption;
573
      _attributes_caption = other._attributes_caption;
574

	
575
    }
576

	
562 577
    DigraphReader& operator=(const DigraphReader&);
563 578

	
564 579
  public:
565 580

	
566 581
    /// \name Reading rules
567 582
    /// @{
... ...
@@ -1179,12 +1194,24 @@
1179 1194
  template <typename Digraph>
1180 1195
  DigraphReader<Digraph> digraphReader(const char* fn, Digraph& digraph) {
1181 1196
    DigraphReader<Digraph> tmp(fn, digraph);
1182 1197
    return tmp;
1183 1198
  }
1184 1199

	
1200
  template <typename Graph>
1201
  class GraphReader;
1202

	
1203
  template <typename Graph>
1204
  GraphReader<Graph> graphReader(std::istream& is, Graph& graph);    
1205

	
1206
  template <typename Graph>
1207
  GraphReader<Graph> graphReader(const std::string& fn, Graph& graph);   
1208

	
1209
  template <typename Graph>
1210
  GraphReader<Graph> graphReader(const char *fn, Graph& graph);    
1211

	
1185 1212
  /// \ingroup lemon_io
1186 1213
  ///  
1187 1214
  /// \brief LGF reader for undirected graphs
1188 1215
  ///
1189 1216
  /// This utility reads an \ref lgf-format "LGF" file.
1190 1217
  template <typename _Graph>
... ...
@@ -1257,37 +1284,12 @@
1257 1284
    /// file.
1258 1285
    GraphReader(const char* fn, Graph& graph) 
1259 1286
      : _is(new std::ifstream(fn)), local_is(true), _graph(graph),
1260 1287
    	_use_nodes(false), _use_edges(false),
1261 1288
	_skip_nodes(false), _skip_edges(false) {}
1262 1289

	
1263
    /// \brief Copy constructor
1264
    ///
1265
    /// The copy constructor transfers all data from the other reader,
1266
    /// therefore the copied reader will not be usable more. 
1267
    GraphReader(GraphReader& other) 
1268
      : _is(other._is), local_is(other.local_is), _graph(other._graph),
1269
	_use_nodes(other._use_nodes), _use_edges(other._use_edges),
1270
	_skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) {
1271

	
1272
      other._is = 0;
1273
      other.local_is = false;
1274
      
1275
      _node_index.swap(other._node_index);
1276
      _edge_index.swap(other._edge_index);
1277

	
1278
      _node_maps.swap(other._node_maps);
1279
      _edge_maps.swap(other._edge_maps);
1280
      _attributes.swap(other._attributes);
1281

	
1282
      _nodes_caption = other._nodes_caption;
1283
      _edges_caption = other._edges_caption;
1284
      _attributes_caption = other._attributes_caption;
1285

	
1286
    }
1287

	
1288 1290
    /// \brief Destructor
1289 1291
    ~GraphReader() {
1290 1292
      for (typename NodeMaps::iterator it = _node_maps.begin(); 
1291 1293
	   it != _node_maps.end(); ++it) {
1292 1294
	delete it->second;
1293 1295
      }
... ...
@@ -1306,13 +1308,38 @@
1306 1308
	delete _is;
1307 1309
      }
1308 1310

	
1309 1311
    }
1310 1312

	
1311 1313
  private:
1312
    
1314
    friend GraphReader<Graph> graphReader<>(std::istream& is, Graph& graph);    
1315
    friend GraphReader<Graph> graphReader<>(const std::string& fn, 
1316
					    Graph& graph);   
1317
    friend GraphReader<Graph> graphReader<>(const char *fn, Graph& graph);    
1318

	
1319
    GraphReader(GraphReader& other) 
1320
      : _is(other._is), local_is(other.local_is), _graph(other._graph),
1321
	_use_nodes(other._use_nodes), _use_edges(other._use_edges),
1322
	_skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) {
1323

	
1324
      other._is = 0;
1325
      other.local_is = false;
1326
      
1327
      _node_index.swap(other._node_index);
1328
      _edge_index.swap(other._edge_index);
1329

	
1330
      _node_maps.swap(other._node_maps);
1331
      _edge_maps.swap(other._edge_maps);
1332
      _attributes.swap(other._attributes);
1333

	
1334
      _nodes_caption = other._nodes_caption;
1335
      _edges_caption = other._edges_caption;
1336
      _attributes_caption = other._attributes_caption;
1337

	
1338
    }
1339

	
1313 1340
    GraphReader& operator=(const GraphReader&);
1314 1341

	
1315 1342
  public:
1316 1343

	
1317 1344
    /// \name Reading rules
1318 1345
    /// @{
... ...
@@ -1974,12 +2001,18 @@
1974 2001
  template <typename Graph>
1975 2002
  GraphReader<Graph> graphReader(const char* fn, Graph& graph) {
1976 2003
    GraphReader<Graph> tmp(fn, graph);
1977 2004
    return tmp;
1978 2005
  }
1979 2006

	
2007
  class SectionReader;
2008

	
2009
  SectionReader sectionReader(std::istream& is);
2010
  SectionReader sectionReader(const std::string& fn);
2011
  SectionReader sectionReader(const char* fn);
2012
  
1980 2013
  /// \brief Section reader class
1981 2014
  ///
1982 2015
  /// In the \e LGF file extra sections can be placed, which contain
1983 2016
  /// any data in arbitrary format. Such sections can be read with
1984 2017
  /// this class. A reading rule can be added with two different
1985 2018
  /// functions, with the \c sectionLines() function a functor can
... ...
@@ -2016,25 +2049,12 @@
2016 2049
    /// \brief Constructor
2017 2050
    ///
2018 2051
    /// Construct a section reader, which reads from the given file.
2019 2052
    SectionReader(const char* fn) 
2020 2053
      : _is(new std::ifstream(fn)), local_is(true) {}
2021 2054

	
2022
    /// \brief Copy constructor
2023
    ///
2024
    /// The copy constructor transfers all data from the other reader,
2025
    /// therefore the copied reader will not be usable more. 
2026
    SectionReader(SectionReader& other) 
2027
      : _is(other._is), local_is(other.local_is) {
2028

	
2029
      other._is = 0;
2030
      other.local_is = false;
2031
      
2032
      _sections.swap(other._sections);
2033
    }
2034

	
2035 2055
    /// \brief Destructor
2036 2056
    ~SectionReader() {
2037 2057
      for (Sections::iterator it = _sections.begin(); 
2038 2058
	   it != _sections.end(); ++it) {
2039 2059
	delete it->second;
2040 2060
      }
... ...
@@ -2043,12 +2063,25 @@
2043 2063
	delete _is;
2044 2064
      }
2045 2065

	
2046 2066
    }
2047 2067

	
2048 2068
  private:
2069

	
2070
    friend SectionReader sectionReader(std::istream& is);
2071
    friend SectionReader sectionReader(const std::string& fn);
2072
    friend SectionReader sectionReader(const char* fn);
2073

	
2074
    SectionReader(SectionReader& other) 
2075
      : _is(other._is), local_is(other.local_is) {
2076

	
2077
      other._is = 0;
2078
      other.local_is = false;
2079
      
2080
      _sections.swap(other._sections);
2081
    }
2049 2082
    
2050 2083
    SectionReader& operator=(const SectionReader&);
2051 2084

	
2052 2085
  public:
2053 2086

	
2054 2087
    /// \name Section readers
... ...
@@ -2292,40 +2325,25 @@
2292 2325
    /// \brief Constructor
2293 2326
    ///
2294 2327
    /// Construct an \e LGF contents reader, which reads from the given
2295 2328
    /// file.
2296 2329
    LgfContents(const char* fn)
2297 2330
      : _is(new std::ifstream(fn)), local_is(true) {}
2298

	
2299
    /// \brief Copy constructor
2300
    ///
2301
    /// The copy constructor transfers all data from the other reader,
2302
    /// therefore the copied reader will not be usable more. 
2303
    LgfContents(LgfContents& other)
2304
      : _is(other._is), local_is(other.local_is) {
2305
      
2306
      other._is = 0;
2307
      other.local_is = false;
2308
      
2309
      _node_sections.swap(other._node_sections);
2310
      _edge_sections.swap(other._edge_sections);
2311
      _attribute_sections.swap(other._attribute_sections);
2312
      _extra_sections.swap(other._extra_sections);
2313

	
2314
      _arc_sections.swap(other._arc_sections);
2315

	
2316
      _node_maps.swap(other._node_maps);
2317
      _edge_maps.swap(other._edge_maps);
2318
      _attributes.swap(other._attributes);
2319
    }
2320 2331
    
2321 2332
    /// \brief Destructor
2322 2333
    ~LgfContents() {
2323 2334
      if (local_is) delete _is;
2324 2335
    }
2325 2336

	
2337
  private:
2338
    
2339
    LgfContents(const LgfContents&);
2340
    LgfContents& operator=(const LgfContents&);
2341

	
2342
  public:
2343

	
2326 2344

	
2327 2345
    /// \name Node sections
2328 2346
    /// @{
2329 2347

	
2330 2348
    /// \brief Gives back the number of node sections in the file.
2331 2349
    ///
Ignore white space 6 line context
... ...
@@ -301,12 +301,27 @@
301 301
	os << str;
302 302
      }
303 303
      return os;
304 304
    }
305 305

	
306 306
  }
307

	
308
  template <typename Digraph>
309
  class DigraphWriter;
310

	
311
  template <typename Digraph>
312
  DigraphWriter<Digraph> digraphWriter(std::ostream& os, 
313
				       const Digraph& digraph);
314

	
315
  template <typename Digraph>
316
  DigraphWriter<Digraph> digraphWriter(const std::string& fn, 
317
				       const Digraph& digraph);
318

	
319
  template <typename Digraph>
320
  DigraphWriter<Digraph> digraphWriter(const char *fn, 
321
				       const Digraph& digraph);
307 322
  
308 323
  /// \ingroup lemon_io
309 324
  ///  
310 325
  /// \brief LGF writer for directed graphs
311 326
  ///
312 327
  /// This utility writes an \ref lgf-format "LGF" file.
... ...
@@ -359,13 +374,13 @@
359 374
  private:
360 375

	
361 376

	
362 377
    std::ostream* _os;
363 378
    bool local_os;
364 379

	
365
    Digraph& _digraph;
380
    const Digraph& _digraph;
366 381

	
367 382
    std::string _nodes_caption;
368 383
    std::string _arcs_caption;
369 384
    std::string _attributes_caption;
370 385
    
371 386
    typedef std::map<Node, std::string> NodeIndex;
... ...
@@ -391,55 +406,32 @@
391 406
  public:
392 407

	
393 408
    /// \brief Constructor
394 409
    ///
395 410
    /// Construct a directed graph writer, which writes to the given
396 411
    /// output stream.
397
    DigraphWriter(std::ostream& is, Digraph& digraph) 
412
    DigraphWriter(std::ostream& is, const Digraph& digraph) 
398 413
      : _os(&is), local_os(false), _digraph(digraph),
399 414
	_skip_nodes(false), _skip_arcs(false) {}
400 415

	
401 416
    /// \brief Constructor
402 417
    ///
403 418
    /// Construct a directed graph writer, which writes to the given
404 419
    /// output file.
405
    DigraphWriter(const std::string& fn, Digraph& digraph) 
420
    DigraphWriter(const std::string& fn, const Digraph& digraph) 
406 421
      : _os(new std::ofstream(fn.c_str())), local_os(true), _digraph(digraph),
407 422
	_skip_nodes(false), _skip_arcs(false) {}
408 423

	
409 424
    /// \brief Constructor
410 425
    ///
411 426
    /// Construct a directed graph writer, which writes to the given
412 427
    /// output file.
413
    DigraphWriter(const char* fn, Digraph& digraph) 
428
    DigraphWriter(const char* fn, const Digraph& digraph) 
414 429
      : _os(new std::ofstream(fn)), local_os(true), _digraph(digraph),
415 430
	_skip_nodes(false), _skip_arcs(false) {}
416 431

	
417
    /// \brief Copy constructor
418
    ///
419
    /// The copy constructor transfers all data from the other writer,
420
    /// therefore the copied writer will not be usable more. 
421
    DigraphWriter(DigraphWriter& other) 
422
      : _os(other._os), local_os(other.local_os), _digraph(other._digraph),
423
	_skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) {
424

	
425
      other._os = 0;
426
      other.local_os = false;
427

	
428
      _node_index.swap(other._node_index);
429
      _arc_index.swap(other._arc_index);
430

	
431
      _node_maps.swap(other._node_maps);
432
      _arc_maps.swap(other._arc_maps);
433
      _attributes.swap(other._attributes);
434

	
435
      _nodes_caption = other._nodes_caption;
436
      _arcs_caption = other._arcs_caption;
437
      _attributes_caption = other._attributes_caption;
438
    }
439

	
440 432
    /// \brief Destructor
441 433
    ~DigraphWriter() {
442 434
      for (typename NodeMaps::iterator it = _node_maps.begin(); 
443 435
	   it != _node_maps.end(); ++it) {
444 436
	delete it->second;
445 437
      }
... ...
@@ -457,12 +449,38 @@
457 449
      if (local_os) {
458 450
	delete _os;
459 451
      }
460 452
    }
461 453

	
462 454
  private:
455

	
456
    friend DigraphWriter<Digraph> digraphWriter<>(std::ostream& os, 
457
						  const Digraph& digraph);
458
    friend DigraphWriter<Digraph> digraphWriter<>(const std::string& fn, 
459
						  const Digraph& digraph);   
460
    friend DigraphWriter<Digraph> digraphWriter<>(const char *fn, 
461
						  const Digraph& digraph);
462

	
463
    DigraphWriter(DigraphWriter& other) 
464
      : _os(other._os), local_os(other.local_os), _digraph(other._digraph),
465
	_skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) {
466

	
467
      other._os = 0;
468
      other.local_os = false;
469

	
470
      _node_index.swap(other._node_index);
471
      _arc_index.swap(other._arc_index);
472

	
473
      _node_maps.swap(other._node_maps);
474
      _arc_maps.swap(other._arc_maps);
475
      _attributes.swap(other._attributes);
476

	
477
      _nodes_caption = other._nodes_caption;
478
      _arcs_caption = other._arcs_caption;
479
      _attributes_caption = other._attributes_caption;
480
    }
463 481
    
464 482
    DigraphWriter& operator=(const DigraphWriter&);
465 483

	
466 484
  public:
467 485

	
468 486
    /// \name Writing rules
... ...
@@ -841,32 +859,46 @@
841 859

	
842 860
    /// @}
843 861
  };
844 862

	
845 863
  /// \relates DigraphWriter
846 864
  template <typename Digraph>
847
  DigraphWriter<Digraph> digraphWriter(std::ostream& os, Digraph& digraph) {
865
  DigraphWriter<Digraph> digraphWriter(std::ostream& os, 
866
				       const Digraph& digraph) {
848 867
    DigraphWriter<Digraph> tmp(os, digraph);
849 868
    return tmp;
850 869
  }
851 870

	
852 871
  /// \relates DigraphWriter
853 872
  template <typename Digraph>
854 873
  DigraphWriter<Digraph> digraphWriter(const std::string& fn, 
855
				       Digraph& digraph) {
874
				       const Digraph& digraph) {
856 875
    DigraphWriter<Digraph> tmp(fn, digraph);
857 876
    return tmp;
858 877
  }
859 878

	
860 879
  /// \relates DigraphWriter
861 880
  template <typename Digraph>
862
  DigraphWriter<Digraph> digraphWriter(const char* fn, Digraph& digraph) {
881
  DigraphWriter<Digraph> digraphWriter(const char* fn, 
882
				       const Digraph& digraph) {
863 883
    DigraphWriter<Digraph> tmp(fn, digraph);
864 884
    return tmp;
865 885
  }
866 886

	
887
  template <typename Graph>
888
  class GraphWriter;
889

	
890
  template <typename Graph>
891
  GraphWriter<Graph> graphWriter(std::ostream& os, const Graph& graph);    
892

	
893
  template <typename Graph>
894
  GraphWriter<Graph> graphWriter(const std::string& fn, const Graph& graph);   
895

	
896
  template <typename Graph>
897
  GraphWriter<Graph> graphWriter(const char *fn, const Graph& graph);    
898

	
867 899
  /// \ingroup lemon_io
868 900
  ///  
869 901
  /// \brief LGF writer for directed graphs
870 902
  ///
871 903
  /// This utility writes an \ref lgf-format "LGF" file.
872 904
  template <typename _Graph>
... ...
@@ -911,55 +943,32 @@
911 943
  public:
912 944

	
913 945
    /// \brief Constructor
914 946
    ///
915 947
    /// Construct a directed graph writer, which writes to the given
916 948
    /// output stream.
917
    GraphWriter(std::ostream& is, Graph& graph) 
949
    GraphWriter(std::ostream& is, const Graph& graph) 
918 950
      : _os(&is), local_os(false), _graph(graph),
919 951
	_skip_nodes(false), _skip_edges(false) {}
920 952

	
921 953
    /// \brief Constructor
922 954
    ///
923 955
    /// Construct a directed graph writer, which writes to the given
924 956
    /// output file.
925
    GraphWriter(const std::string& fn, Graph& graph) 
957
    GraphWriter(const std::string& fn, const Graph& graph) 
926 958
      : _os(new std::ofstream(fn.c_str())), local_os(true), _graph(graph),
927 959
	_skip_nodes(false), _skip_edges(false) {}
928 960

	
929 961
    /// \brief Constructor
930 962
    ///
931 963
    /// Construct a directed graph writer, which writes to the given
932 964
    /// output file.
933
    GraphWriter(const char* fn, Graph& graph) 
965
    GraphWriter(const char* fn, const Graph& graph) 
934 966
      : _os(new std::ofstream(fn)), local_os(true), _graph(graph),
935 967
	_skip_nodes(false), _skip_edges(false) {}
936 968

	
937
    /// \brief Copy constructor
938
    ///
939
    /// The copy constructor transfers all data from the other writer,
940
    /// therefore the copied writer will not be usable more. 
941
    GraphWriter(GraphWriter& other) 
942
      : _os(other._os), local_os(other.local_os), _graph(other._graph),
943
	_skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) {
944

	
945
      other._os = 0;
946
      other.local_os = false;
947

	
948
      _node_index.swap(other._node_index);
949
      _edge_index.swap(other._edge_index);
950

	
951
      _node_maps.swap(other._node_maps);
952
      _edge_maps.swap(other._edge_maps);
953
      _attributes.swap(other._attributes);
954

	
955
      _nodes_caption = other._nodes_caption;
956
      _edges_caption = other._edges_caption;
957
      _attributes_caption = other._attributes_caption;
958
    }
959

	
960 969
    /// \brief Destructor
961 970
    ~GraphWriter() {
962 971
      for (typename NodeMaps::iterator it = _node_maps.begin(); 
963 972
	   it != _node_maps.end(); ++it) {
964 973
	delete it->second;
965 974
      }
... ...
@@ -975,15 +984,41 @@
975 984
      }
976 985

	
977 986
      if (local_os) {
978 987
	delete _os;
979 988
      }
980 989
    }
990
    
991
  private:
981 992

	
982
  private:
983
    
993
    friend GraphWriter<Graph> graphWriter<>(std::ostream& os, 
994
					    const Graph& graph);    
995
    friend GraphWriter<Graph> graphWriter<>(const std::string& fn, 
996
					    const Graph& graph);   
997
    friend GraphWriter<Graph> graphWriter<>(const char *fn, 
998
					    const Graph& graph);    
999

	
1000
    GraphWriter(GraphWriter& other) 
1001
      : _os(other._os), local_os(other.local_os), _graph(other._graph),
1002
	_skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) {
1003

	
1004
      other._os = 0;
1005
      other.local_os = false;
1006

	
1007
      _node_index.swap(other._node_index);
1008
      _edge_index.swap(other._edge_index);
1009

	
1010
      _node_maps.swap(other._node_maps);
1011
      _edge_maps.swap(other._edge_maps);
1012
      _attributes.swap(other._attributes);
1013

	
1014
      _nodes_caption = other._nodes_caption;
1015
      _edges_caption = other._edges_caption;
1016
      _attributes_caption = other._attributes_caption;
1017
    }
1018

	
984 1019
    GraphWriter& operator=(const GraphWriter&);
985 1020

	
986 1021
  public:
987 1022

	
988 1023
    /// \name Writing rules
989 1024
    /// @{
... ...
@@ -1407,27 +1442,27 @@
1407 1442

	
1408 1443
    /// @}
1409 1444
  };
1410 1445

	
1411 1446
  /// \relates GraphWriter
1412 1447
  template <typename Graph>
1413
  GraphWriter<Graph> graphWriter(std::ostream& os, Graph& graph) {
1448
  GraphWriter<Graph> graphWriter(std::ostream& os, const Graph& graph) {
1414 1449
    GraphWriter<Graph> tmp(os, graph);
1415 1450
    return tmp;
1416 1451
  }
1417 1452

	
1418 1453
  /// \relates GraphWriter
1419 1454
  template <typename Graph>
1420
  GraphWriter<Graph> graphWriter(const std::string& fn, Graph& graph) {
1455
  GraphWriter<Graph> graphWriter(const std::string& fn, const Graph& graph) {
1421 1456
    GraphWriter<Graph> tmp(fn, graph);
1422 1457
    return tmp;
1423 1458
  }
1424 1459

	
1425 1460
  /// \relates GraphWriter
1426 1461
  template <typename Graph>
1427
  GraphWriter<Graph> graphWriter(const char* fn, Graph& graph) {
1462
  GraphWriter<Graph> graphWriter(const char* fn, const Graph& graph) {
1428 1463
    GraphWriter<Graph> tmp(fn, graph);
1429 1464
    return tmp;
1430 1465
  }
1431 1466
}
1432 1467

	
1433 1468
#endif
0 comments (0 inline)