# HG changeset patch
# User Balazs Dezso <deba@inf.elte.hu>
# Date 1212229881 -7200
# Node ID c82fd9568d756001cc5aabe28571b247e7e190bb
# Parent 33247f6fff166e4f31556176cd5c3b18627e6332
Bug fixes and improvements in LGF IO
diff -r 33247f6fff16 -r c82fd9568d75 lemon/lgf_reader.h
|
a
|
b
|
|
| 467 | 467 | : _is(other._is), local_is(other.local_is), _digraph(other._digraph), |
| 468 | 468 | _use_nodes(other._use_nodes), _use_arcs(other._use_arcs) { |
| 469 | 469 | |
| 470 | | other.is = 0; |
| | 470 | other._is = 0; |
| 471 | 471 | other.local_is = false; |
| 472 | 472 | |
| 473 | 473 | _node_index.swap(other._node_index); |
| … |
… |
|
| 1078 | 1078 | /// |
| 1079 | 1079 | /// This function starts the batch processing |
| 1080 | 1080 | void run() { |
| 1081 | | |
| 1082 | 1081 | LEMON_ASSERT(_is != 0, "This reader assigned to an other reader"); |
| | 1082 | if (!*_is) { |
| | 1083 | throw DataFormatError("Cannot find file"); |
| | 1084 | } |
| 1083 | 1085 | |
| 1084 | 1086 | bool nodes_done = false; |
| 1085 | 1087 | bool arcs_done = false; |
| … |
… |
|
| 1160 | 1162 | /// \relates DigraphReader |
| 1161 | 1163 | template <typename Digraph> |
| 1162 | 1164 | DigraphReader<Digraph> digraphReader(std::istream& is, Digraph& digraph) { |
| 1163 | | return DigraphReader<Digraph>(is, digraph); |
| | 1165 | DigraphReader<Digraph> tmp(is, digraph); |
| | 1166 | return tmp; |
| 1164 | 1167 | } |
| 1165 | 1168 | |
| 1166 | 1169 | /// \relates DigraphReader |
| 1167 | 1170 | template <typename Digraph> |
| 1168 | 1171 | DigraphReader<Digraph> digraphReader(const std::string& fn, |
| 1169 | 1172 | Digraph& digraph) { |
| 1170 | | return DigraphReader<Digraph>(fn, digraph); |
| | 1173 | DigraphReader<Digraph> tmp(fn, digraph); |
| | 1174 | return tmp; |
| 1171 | 1175 | } |
| 1172 | 1176 | |
| 1173 | 1177 | /// \relates DigraphReader |
| 1174 | 1178 | template <typename Digraph> |
| 1175 | 1179 | DigraphReader<Digraph> digraphReader(const char* fn, Digraph& digraph) { |
| 1176 | | return DigraphReader<Digraph>(fn, digraph); |
| | 1180 | DigraphReader<Digraph> tmp(fn, digraph); |
| | 1181 | return tmp; |
| 1177 | 1182 | } |
| 1178 | 1183 | } |
| 1179 | 1184 | |
diff -r 33247f6fff16 -r c82fd9568d75 lemon/lgf_writer.h
|
a
|
b
|
|
| 195 | 195 | return; |
| 196 | 196 | default: |
| 197 | 197 | if (c < 0x20) { |
| | 198 | std::ios::fmtflags flags = os.flags(); |
| 198 | 199 | os << '\\' << std::oct << static_cast<int>(c); |
| | 200 | os.flags(flags); |
| 199 | 201 | } else { |
| 200 | 202 | os << c; |
| 201 | 203 | } |
| … |
… |
|
| 243 | 245 | /// writer, and eventually the writing is executed with the \c run() |
| 244 | 246 | /// member function. A map writing rule can be added to the writer |
| 245 | 247 | /// with the \c nodeMap() or \c arcMap() members. An optional |
| 246 | | /// converter parameter can also be added as a standard functor converting from |
| 247 | | /// the value type of the map to std::string. If it is set, it will |
| 248 | | /// determine how the map's value type is written to the output |
| 249 | | /// stream. If the functor is not set, then a default conversion |
| 250 | | /// will be used. The \c attribute(), \c node() and \c arc() functions |
| 251 | | /// are used to add attribute writing rules. |
| | 248 | /// converter parameter can also be added as a standard functor |
| | 249 | /// converting from the value type of the map to std::string. If it |
| | 250 | /// is set, it will determine how the map's value type is written to |
| | 251 | /// the output stream. If the functor is not set, then a default |
| | 252 | /// conversion will be used. The \c attribute(), \c node() and \c |
| | 253 | /// arc() functions are used to add attribute writing rules. |
| 252 | 254 | /// |
| 253 | 255 | ///\code |
| 254 | 256 | /// DigraphWriter<Digraph>(std::cout, digraph). |
| … |
… |
|
| 269 | 271 | /// attributes() functions. |
| 270 | 272 | /// |
| 271 | 273 | /// The \c skipNodes() and \c skipArcs() functions forbid the |
| 272 | | /// writing of the sections. If two arc sections should be written to the |
| 273 | | /// output, it can be done in two passes, the first pass writes the |
| 274 | | /// node section and the first arc section, then the second pass |
| 275 | | /// skips the node section and writes just the arc section to the |
| 276 | | /// stream. The output stream can be retrieved with the \c ostream() |
| 277 | | /// function, hence the second pass can append its output to the output of the |
| 278 | | /// first pass. |
| | 274 | /// writing of the sections. If two arc sections should be written |
| | 275 | /// to the output, it can be done in two passes, the first pass |
| | 276 | /// writes the node section and the first arc section, then the |
| | 277 | /// second pass skips the node section and writes just the arc |
| | 278 | /// section to the stream. The output stream can be retrieved with |
| | 279 | /// the \c ostream() function, hence the second pass can append its |
| | 280 | /// output to the output of the first pass. |
| 279 | 281 | template <typename _Digraph> |
| 280 | 282 | class DigraphWriter { |
| 281 | 283 | public: |
| … |
… |
|
| 349 | 351 | : _os(other._os), local_os(other.local_os), _digraph(other._digraph), |
| 350 | 352 | _skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) { |
| 351 | 353 | |
| 352 | | other.is = 0; |
| | 354 | other._os = 0; |
| 353 | 355 | other.local_os = false; |
| 354 | 356 | |
| 355 | 357 | _node_index.swap(other._node_index); |
| … |
… |
|
| 717 | 719 | |
| 718 | 720 | /// \relates DigraphWriter |
| 719 | 721 | template <typename Digraph> |
| 720 | | DigraphWriter<Digraph> digraphWriter(std::istream& is, Digraph& digraph) { |
| 721 | | return DigraphWriter<Digraph>(is, digraph); |
| | 722 | DigraphWriter<Digraph> digraphWriter(std::ostream& os, Digraph& digraph) { |
| | 723 | DigraphWriter<Digraph> tmp(os, digraph); |
| | 724 | return tmp; |
| 722 | 725 | } |
| 723 | 726 | |
| 724 | 727 | /// \relates DigraphWriter |
| 725 | 728 | template <typename Digraph> |
| 726 | 729 | DigraphWriter<Digraph> digraphWriter(const std::string& fn, |
| 727 | 730 | Digraph& digraph) { |
| 728 | | return DigraphWriter<Digraph>(fn, digraph); |
| | 731 | DigraphWriter<Digraph> tmp(fn, digraph); |
| | 732 | return tmp; |
| 729 | 733 | } |
| 730 | 734 | |
| 731 | 735 | /// \relates DigraphWriter |
| 732 | 736 | template <typename Digraph> |
| 733 | 737 | DigraphWriter<Digraph> digraphWriter(const char* fn, Digraph& digraph) { |
| 734 | | return DigraphWriter<Digraph>(fn, digraph); |
| | 738 | DigraphWriter<Digraph> tmp(fn, digraph); |
| | 739 | return tmp; |
| 735 | 740 | } |
| 736 | 741 | } |
| 737 | 742 | |