Changeset 1133:9fd485470fee in lemon-0.x for src/work/deba/graph_reader.h
- Timestamp:
- 02/07/05 11:48:14 (19 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1532
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/work/deba/graph_reader.h
r1115 r1133 74 74 75 75 76 // Readers and ReaderTraits77 76 /// \brief Standard ReaderTraits for the GraphReader class. 78 77 /// 79 /// 80 78 /// Standard ReaderTraits for the GraphReader class. 79 /// It defines standard reading method for all type of value. 81 80 struct DefaultReaderTraits { 82 81 82 /// \brief Template class for reading an value. 83 /// 84 /// Template class for reading an value. 83 85 template <typename _Value> 84 86 struct Reader { 87 /// The value type. 85 88 typedef _Value Value; 89 /// \brief Reads a value from the given stream. 90 /// 91 /// Reads a value from the given stream. 86 92 void read(std::istream& is, Value& value) { 87 93 if (!(is >> value)) … … 90 96 }; 91 97 98 /// The reader class for the not needed maps. 92 99 typedef Reader<std::string> DefaultReader; 93 100 94 101 }; 95 102 103 /// \brief Reader class for quoted strings. 104 /// 105 /// Reader class for quoted strings. It can process the escape 106 /// sequences in the string. 96 107 class QuotedStringReader { 97 108 public: 98 109 typedef std::string Value; 99 110 111 /// \brief Constructor for the reader. 112 /// 113 /// Constructor for the reader. If the given parameter is true 114 /// the reader processes the escape sequences. 100 115 QuotedStringReader(bool _escaped = true) : escaped(_escaped) {} 101 116 117 /// \brief Reads a quoted string from the given stream. 118 /// 119 /// Reads a quoted string from the given stream. 102 120 void read(std::istream& is, std::string& value) { 103 121 char c; … … 146 164 { 147 165 int code; 148 if (!is.get(c) || !isHex(c)) throw DataFormatException("Escape format exception"); 166 if (!is.get(c) || !isHex(c)) 167 throw DataFormatException("Escape format exception"); 149 168 else if (code = valueHex(c), !is.get(c) || !isHex(c)) is.putback(c); 150 169 else code = code * 16 + valueHex(c); … … 154 173 { 155 174 int code; 156 if (!isOct(c)) throw DataFormatException("Escape format exception"); 157 else if (code = valueOct(c), !is.get(c) || !isOct(c)) is.putback(c); 158 else if (code = code * 8 + valueOct(c), !is.get(c) || !isOct(c)) is.putback(c); 175 if (!isOct(c)) 176 throw DataFormatException("Escape format exception"); 177 else if (code = valueOct(c), !is.get(c) || !isOct(c)) 178 is.putback(c); 179 else if (code = code * 8 + valueOct(c), !is.get(c) || !isOct(c)) 180 is.putback(c); 159 181 else code = code * 8 + valueOct(c); 160 182 return code; … … 172 194 173 195 static bool isHex(char c) { 174 return ('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); 196 return ('0' <= c && c <= '9') || 197 ('a' <= c && c <= 'z') || 198 ('A' <= c && c <= 'Z'); 175 199 } 176 200 … … 184 208 }; 185 209 186 187 188 189 190 // Graph reader 191 210 /// \brief The graph reader class. 211 /// 212 /// The reader class for the graph input. 213 /// \see graph-io-page 192 214 template <typename _Graph, typename _ReaderTraits = DefaultReaderTraits> 193 215 class GraphReader { … … 201 223 typedef typename ReaderTraits::DefaultReader DefaultReader; 202 224 225 /// \brief Construct a new GraphReader. 226 /// 227 /// Construct a new GraphReader. It reads from the given map, 228 /// it constructs the given map and it use the given reader as the 229 /// default skipper. 203 230 GraphReader(std::istream& _is, Graph& _graph, 204 231 const DefaultReader& _reader = DefaultReader()) 205 232 : is(_is), graph(_graph), nodeSkipper(_reader), edgeSkipper(_reader) {} 206 233 207 234 /// \brief Destruct the graph reader. 235 /// 236 /// Destruct the graph reader. 208 237 ~GraphReader() { 209 238 … … 220 249 } 221 250 222 // Node map rules 223 251 /// \brief Add a new node map reader command for the reader. 252 /// 253 /// Add a new node map reader command for the reader. 224 254 template <typename Map> 225 255 GraphReader& addNodeMap(std::string name, Map& map) { … … 228 258 } 229 259 260 /// \brief Add a new node map reader command for the reader. 261 /// 262 /// Add a new node map reader command for the reader. 230 263 template <typename Reader, typename Map> 231 264 GraphReader& addNodeMap(std::string name, Map& map, … … 239 272 } 240 273 274 /// \brief Add a new node map skipper command for the reader. 275 /// 276 /// Add a new node map skipper command for the reader. 241 277 template <typename Reader> 242 278 GraphReader& skipNodeMap(std::string name, … … 250 286 } 251 287 252 // Edge map rules 253 288 /// \brief Add a new edge map reader command for the reader. 289 /// 290 /// Add a new edge map reader command for the reader. 254 291 template <typename Map> 255 292 GraphReader& addEdgeMap(std::string name, Map& map) { … … 259 296 260 297 298 /// \brief Add a new edge map reader command for the reader. 299 /// 300 /// Add a new edge map reader command for the reader. 261 301 template <typename Reader, typename Map> 262 302 GraphReader& addEdgeMap(std::string name, Map& map, … … 270 310 } 271 311 312 /// \brief Add a new edge map skipper command for the reader. 313 /// 314 /// Add a new edge map skipper command for the reader. 272 315 template <typename Reader> 273 316 GraphReader& skipEdgeMap(std::string name, … … 281 324 } 282 325 283 // Node rules 326 /// \brief Add a new labeled node reader for the reader. 327 /// 328 /// Add a new labeled node reader for the reader. 284 329 GraphReader& addNode(std::string name, Node& node) { 285 330 if (node_readers.find(name) != node_readers.end()) { … … 290 335 } 291 336 292 // Edge rules 293 337 /// \brief Add a new labeled edge reader for the reader. 338 /// 339 /// Add a new labeled edge reader for the reader. 294 340 GraphReader& addEdge(std::string name, Edge& edge) { 295 341 if (edge_readers.find(name) != edge_readers.end()) { … … 300 346 } 301 347 302 void read() { 348 /// \brief Executes the reader commands. 349 /// 350 /// Executes the reader commands. 351 void run() { 303 352 int line_num = 0; 304 353 std::auto_ptr<InverterBase<Node> > nodeInverter;
Note: See TracChangeset
for help on using the changeset viewer.