15 \li edgeset |
17 \li edgeset |
16 \li nodes |
18 \li nodes |
17 \li edges |
19 \li edges |
18 \li attributes |
20 \li attributes |
19 |
21 |
20 The nodeset section starts with the following line: |
22 Some of these sections can be omitted, but you will basicly need the nodeset |
|
23 section (unless your graph has no nodes at all) and the edgeset section |
|
24 (unless your graph has no edges at all). |
|
25 |
|
26 The nodeset section describes the nodes of your graph: it identifies the nodes |
|
27 and gives the maps defined on them, if any. It starts with the |
|
28 following line: |
21 |
29 |
22 <tt>\@nodeset</tt> |
30 <tt>\@nodeset</tt> |
23 |
31 |
24 The next line contains the names of the nodemaps, separated by whitespaces. Each |
32 The next line contains the names of the nodemaps, separated by whitespaces. Each |
25 following line describes a node in the graph: it contains the values of the |
33 following line describes a node in the graph: it contains the values of the |
26 maps in the right order. The map named "id" should contain unique values |
34 maps in the right order. The map named "id" should contain unique values |
27 because it is regarded as an ID-map. For example: |
35 because it is regarded as an ID-map. These ids need not be numbers but they |
|
36 must identify the nodes uniquely for later reference. For example: |
28 |
37 |
29 \code |
38 \code |
30 @nodeset |
39 @nodeset |
31 id x-coord y-coord color |
40 id x-coord y-coord color |
32 3 1.0 4.0 blue |
41 3 1.0 4.0 blue |
37 The edgeset section is very similar to the nodeset section, it has |
46 The edgeset section is very similar to the nodeset section, it has |
38 the same coloumn oriented structure. It starts with the line |
47 the same coloumn oriented structure. It starts with the line |
39 |
48 |
40 <tt>\@edgeset</tt> |
49 <tt>\@edgeset</tt> |
41 |
50 |
42 The next line contains the whitespace separated list of names of the maps. |
51 The next line contains the whitespace separated list of names of the edge |
43 Each of the next lines describes one edge. The first two elements in the line |
52 maps. Each of the next lines describes one edge. The first two elements in |
44 are the IDs of the source and target (or tail and head) node of the edge as they occur in the ID node |
53 the line are the IDs of the source and target (or tail and head) nodes of the |
45 map. You can also have an optional ID map on the edges for later reference. |
54 edge as they occur in the ID node map of the nodeset section. You can also |
|
55 have an optional ID map on the edges for later reference (which has to be |
|
56 unique in this case). |
46 |
57 |
47 \code |
58 \code |
48 @edgeset |
59 @edgeset |
49 id weight label |
60 id weight label |
50 3 5 a 4.3 a-edge |
61 3 5 a 4.3 a-edge |
51 5 12 c 2.6 c-edge |
62 5 12 c 2.6 c-edge |
52 3 12 g 3.4 g-edge |
63 3 12 g 3.4 g-edge |
53 \endcode |
64 \endcode |
54 |
65 |
55 The next section contains <em>labeled nodes</em> (i.e. nodes having a special |
66 The \e nodes section contains <em>labeled (distinguished) nodes</em> |
|
67 (i.e. nodes having a special |
56 label on them). The section starts with |
68 label on them). The section starts with |
57 |
69 |
58 <tt> \@nodes </tt> |
70 <tt> \@nodes </tt> |
59 |
71 |
60 Each of the next lines contains a label for a node in the graph |
72 Each of the next lines contains a label for a node in the graph |
61 and then the ID described in the nodeset section. |
73 and then the ID as described in the \e nodeset section. |
62 |
74 |
63 \code |
75 \code |
64 @nodes |
76 @nodes |
65 source 3 |
77 source 3 |
66 target 12 |
78 target 12 |
67 \endcode |
79 \endcode |
68 |
80 |
69 The last section describes the <em>labeled edges</em> |
81 The last section describes the <em>labeled (distinguished) edges</em> |
70 (i.e. edges having a special label on them). It starts with \c \@edges |
82 (i.e. edges having a special label on them). It starts with \c \@edges |
71 and then each line contains the name of the edge and the ID. |
83 and then each line contains the name of the edge and the ID. |
72 |
84 |
73 \code |
85 \code |
74 @nodes |
86 @edges |
75 observed c |
87 observed c |
76 \endcode |
88 \endcode |
77 |
89 |
78 |
90 |
79 The file may contain empty lines and comment lines. The comment lines |
91 The file may contain empty lines and comment lines. The comment lines |
80 start with an \c # character. |
92 start with an \c # character. |
81 |
93 |
82 The attributes section can handle some information about the graph. It |
94 The attributes section can handle some information about the graph. It |
83 contains in each line an key and the mapped value to key. The key should |
95 contains key-value pairs in each line (a key and the mapped value to key). The |
84 be a string without whitespace, the value can be from various type. |
96 key should be a string without whitespaces, the value can be of various types. |
85 |
97 |
86 \code |
98 \code |
87 @attributes |
99 @attributes |
88 title "Four colored plan graph" |
100 title "Four colored plan graph" |
89 author "Balazs DEZSO" |
101 author "Balazs DEZSO" |
90 copyright "Lemon Library" |
102 copyright "Lemon Library" |
91 version 12 |
103 version 12 |
92 \endcode |
104 \endcode |
93 |
105 |
94 \code |
|
95 @end |
|
96 \endcode |
|
97 ======= |
|
98 The file ends with the |
|
99 |
|
100 <tt> \@end </tt> |
106 <tt> \@end </tt> |
101 |
107 |
102 line. |
108 line. |
103 |
109 |
104 |
110 |
105 \section use Using graph input-output |
111 \section use Using graph input-output |
106 The graph input and output is based on reading and writing commands. The user |
112 |
107 adds reading and writing commands to the reader or writer class, then he |
113 The easiest way of using graph input and output is using the versions of the |
108 calls the \c run() method that executes all the given commands. |
114 public \ref readGraph() and \ref writeGraph() functions; if you don't need |
|
115 very sophisticated behaviour then you might be satisfied with |
|
116 those. Otherwise go on reading this page. |
|
117 |
|
118 The graph input and output is based on <em> reading and writing |
|
119 commands</em>. The user gives reading and writing commands to the reader or |
|
120 writer class, then he calls the \c run() method that executes all the given |
|
121 commands. |
109 |
122 |
110 \subsection write Writing a graph |
123 \subsection write Writing a graph |
111 |
124 |
112 The \c GraphWriter class provides the graph output. To write a graph |
125 The \c GraphWriter class provides the graph output. To write a graph |
113 you should first give writing commands to the writer. You can declare |
126 you should first give writing commands to the writer. You can declare |
114 write command as \c NodeMap or \c EdgeMap writing and labeled Node and |
127 writing command as \c NodeMap or \c EdgeMap writing and labeled Node and |
115 Edge writing. |
128 Edge writing. |
116 |
129 |
117 \code |
130 \code |
118 GraphWriter<ListGraph> writer(std::cout, graph); |
131 GraphWriter<ListGraph> writer(std::cout, graph); |
119 \endcode |
132 \endcode |
120 |
133 |
121 The \c writeNodeMap() function declares a \c NodeMap writing command in the |
134 The \c writeNodeMap() function declares a \c NodeMap writing command in the |
122 \c GraphWriter. You should give a name of the map and the map |
135 \c GraphWriter. You should give a name to the map and the map |
123 object as parameters. The NodeMap writing command with name "id" should write a |
136 object as parameters. The NodeMap writing command with name "id" should write a |
124 unique map because it is regarded as ID map. |
137 unique map because it will be regarded as an ID map. |
125 |
138 |
126 \see IdMap, DescriptorMap |
139 \see IdMap, DescriptorMap |
127 |
140 |
128 \code |
141 \code |
129 IdMap<ListGraph, Node> nodeIdMap; |
142 IdMap<ListGraph, Node> nodeIdMap; |
237 |
250 |
238 \code |
251 \code |
239 reader.run(); |
252 reader.run(); |
240 \endcode |
253 \endcode |
241 |
254 |
|
255 \anchor rwbackground |
242 \section types Background of Reading and Writing |
256 \section types Background of Reading and Writing |
|
257 |
|
258 |
243 To read a map (on the nodes or edges) |
259 To read a map (on the nodes or edges) |
244 the \c GraphReader should know how to read a Value from the given map. |
260 the \c GraphReader should know how to read a Value from the given map. |
245 By the default implementation the input operator reads a value from |
261 By the default implementation the input operator reads a value from |
246 the stream and the type of the readed value is the value type of the given map. |
262 the stream and the type of the readed value is the value type of the given map. |
247 When the reader should skip a value in the stream, because you do not |
263 When the reader should skip a value in the stream, because you do not |
248 want to store it in a map, the reader skips a character sequence without |
264 want to store it in a map, the reader skips a character sequence without |
249 whitespace. |
265 whitespaces. |
250 |
266 |
251 If you want to change the functionality of the reader, you can use |
267 If you want to change the functionality of the reader, you can use |
252 template parameters to specialize it. When you give a reading |
268 template parameters to specialize it. When you give a reading |
253 command for a map you can give a Reader type as template parameter. |
269 command for a map you can give a Reader type as template parameter. |
254 With this template parameter you can control how the Reader reads |
270 With this template parameter you can control how the Reader reads |
282 \endcode |
298 \endcode |
283 |
299 |
284 The global functionality of the reader class can be changed by giving a |
300 The global functionality of the reader class can be changed by giving a |
285 special template parameter to the GraphReader class. By default, the |
301 special template parameter to the GraphReader class. By default, the |
286 template parameter is \c DefaultReaderTraits. A reader traits class |
302 template parameter is \c DefaultReaderTraits. A reader traits class |
287 should provide an inner template class Reader for each type, and an |
303 should provide an inner template class Reader for each type, and a |
288 DefaultReader for skipping a value. |
304 DefaultReader for skipping a value. |
289 |
305 |
290 The specialization of writing should be very similar to that of reading. |
306 The specialization of writing is very similar to that of reading. |
291 |
307 |
292 \section undir Undir graphs |
308 \section undir Undirected graphs |
293 |
309 |
294 In the undir graph format there is an \c undiredgeset section instead of |
310 In a file describing an undirected graph (undir graph, for short) you find an |
295 the \c edgeset section. The first line of the section describes the |
311 \c undiredgeset section instead of the \c edgeset section. The first line of |
296 undirected egdes' names and all next lines describes one undirected edge |
312 the section describes the names of the maps on the undirected egdes and all |
297 with the the incident nodes and the values of the map. |
313 next lines describe one undirected edge with the the incident nodes and the |
298 |
314 values of the map. |
299 The format handles the directed edge maps as a syntactical sugar, if there |
315 |
300 is two map which names are the same with a \c '+' and a \c '-' prefix |
316 The format handles directed edge maps as a syntactical sugar???, if there |
301 then it can be read as an directed map. |
317 are two maps with names being the same with a \c '+' and a \c '-' prefix |
|
318 then this will be read as a directed map. |
302 |
319 |
303 \code |
320 \code |
304 @undiredgeset |
321 @undiredgeset |
305 id capacity +flow -flow |
322 id capacity +flow -flow |
306 32 2 1 4.3 2.0 0.0 |
323 32 2 1 4.3 2.0 0.0 |
307 21 21 5 2.6 0.0 2.6 |
324 21 21 5 2.6 0.0 2.6 |
308 21 12 8 3.4 0.0 0.0 |
325 21 12 8 3.4 0.0 0.0 |
309 \endcode |
326 \endcode |
310 |
327 |
311 The \c edges section changed to \c undiredges section. This section |
328 The \c edges section is changed to \c undiredges section. This section |
312 describes labeled edges and undirected edges. The directed edge label |
329 describes labeled edges and undirected edges. The directed edge label |
313 should start with a \c '+' and a \c '-' prefix what decide the direction |
330 should start with a \c '+' or a \c '-' prefix to decide the direction |
314 of the edge. |
331 of the edge. |
315 |
332 |
316 \code |
333 \code |
317 @undiredges |
334 @undiredges |
318 undiredge 1 |
335 undiredge 1 |
335 reader.readEdge("edge", edge); |
352 reader.readEdge("edge", edge); |
336 \endcode |
353 \endcode |
337 |
354 |
338 \section advanced Advanced features |
355 \section advanced Advanced features |
339 |
356 |
340 The graph reader and writer classes gives an easy way to read and write |
357 The graph reader and writer classes give an easy way to read and write |
341 graphs. But sometimes we want more advanced features. This way we can |
358 graphs. But sometimes we want more advanced features. In this case we can |
342 use the more general lemon reader and writer interface. |
359 use the more general <tt>lemon reader and writer</tt> interface. |
343 |
360 |
344 The lemon format is an section oriented file format. It contains one or |
361 The LEMON file format is a section oriented file format. It contains one or |
345 more section, each starts with a line with \c \@ first character. |
362 more sections, each starting with a line identifying its type |
|
363 (the word starting with the \c \@ character). |
346 The content of the section this way cannot contain line with \c \@ first |
364 The content of the section this way cannot contain line with \c \@ first |
347 character. The file may contains comment lines with \c # first character. |
365 character. The file may contains comment lines with \c # first character. |
348 |
366 |
349 The \c LemonReader and \c LemonWriter gives a framework to read and |
367 The \c LemonReader and \c LemonWriter gives a framework to read and |
350 write sections. There are various section reader and section writer |
368 write sections. There are various section reader and section writer |
351 classes which can be attached to a \c LemonReader or a \c LemonWriter. |
369 classes which can be attached to a \c LemonReader or a \c LemonWriter. |
352 |
370 |
353 There are default section readers and writers for reading and writing |
371 There are default section readers and writers for reading and writing |
354 item sets, and labeled items in the graph. These reads and writes |
372 item sets, and labeled items in the graph. These read and write |
355 the format described above. Other type of data can be handled with own |
373 the format described above. Other type of data can be handled with own |
356 section reader and writer classes which are inherited from the |
374 section reader and writer classes which are inherited from the |
357 \c LemonReader::SectionReader or the \c LemonWriter::SectionWriter classes. |
375 \c LemonReader::SectionReader or the \c LemonWriter::SectionWriter classes. |
358 |
376 |
359 The next example defines a special section reader which reads the |
377 The next example defines a special section reader which reads the |
390 }; |
408 }; |
391 \endcode |
409 \endcode |
392 |
410 |
393 The other advanced stuff of the generalized file format is that |
411 The other advanced stuff of the generalized file format is that |
394 multiple edgesets can be stored to the same nodeset. It can be used |
412 multiple edgesets can be stored to the same nodeset. It can be used |
395 by example as a network traffic matrix. |
413 for example as a network traffic matrix. |
396 |
414 |
397 In example there is a network with symmetric links and there are assymetric |
415 In our example there is a network with symmetric links and there are assymetric |
398 traffic request on the network. This construction can be stored in an |
416 traffic request on the network. This construction can be stored in an |
399 undirected graph and in an directed NewEdgeSetAdaptor class. The example |
417 undirected graph and in a directed NewEdgeSetAdaptor class. The example |
400 shows the input with the LemonReader class: |
418 shows the input with the LemonReader class: |
401 |
419 |
402 \code |
420 \code |
403 UndirListGraph network; |
421 UndirListGraph network; |
404 UndirListGraph::UndirEdgeSet<double> capacity; |
422 UndirListGraph::UndirEdgeSet<double> capacity; |