|
1 /** |
|
2 \page getting_started Getting Started |
|
3 |
|
4 At the beginning we hardly suggest that you open your favorite text editor |
|
5 and enter the code simultaneously as you read it. Compiling the demos is also |
|
6 a good exercise. |
|
7 |
|
8 As the first example we show you a lemon style "Hello World" program. Now we |
|
9 explain almost every line, but later we will skip the basics and focus on new |
|
10 things. |
|
11 |
|
12 \section hello_world Hello World in LEMON |
|
13 |
|
14 In this little program we give you a taste of the LEMON programming. |
|
15 |
|
16 Let's see the code fragment to fragment! |
|
17 |
|
18 \dontinclude hello_world.cc |
|
19 \skip include |
|
20 \until iostream |
|
21 |
|
22 We want to use a \c lemon::ListGraph so the include goes like this: |
|
23 \skip include |
|
24 \until list_graph |
|
25 |
|
26 The next few lines are not necessary but useful shortcuts, if you don't |
|
27 want to type \c lemon::ListGraph::Node every time. |
|
28 \skip using |
|
29 \until Edge |
|
30 |
|
31 For this demo we need to declare a ListGraph and a special NodeMap to store the |
|
32 characters associated to the graph's nodes. |
|
33 \skip main |
|
34 \until char_map |
|
35 |
|
36 Adding nodes to the graph is very easy. |
|
37 \skip new_node |
|
38 \until addNode |
|
39 |
|
40 When a new node or edge to the graph the assigned maps are automatically resized. |
|
41 So graphs can be build dynamically. The usage of a map is very natural. |
|
42 \skip char_map |
|
43 \until char_map |
|
44 |
|
45 Notice that no reference or additional assignment needed to work with nodes. |
|
46 They won't become illegal or won't lead to throwing any exceptions. |
|
47 You can declare and handle node like every other basic type such as \c int. |
|
48 \skip Store |
|
49 \until char_map |
|
50 |
|
51 As one expects adding an Edge is similar. You need to define the \b source node |
|
52 and the \b destination node. The nodes must belong to the graph of course. The |
|
53 Edge has the direction from the source to the destination. In some case you don't |
|
54 want the edges to be directed - then you use an undirected graph. For example |
|
55 lemon::ListUGraph. |
|
56 \skip addEdge |
|
57 \until addEdge |
|
58 |
|
59 In the next few lines we add some more nodes and edges and to the graph we need. |
|
60 Those lines are not very interesting so we skip them, but you find the whole |
|
61 working program in file hello_lemon.cc in the demo section. |
|
62 |
|
63 The next statement must be familiar. But what is that INVALID in the \c while |
|
64 test statement? In LEMON we usually use the INVALID to check if an object |
|
65 contains valid information. |
|
66 \skip current_node |
|
67 \until { |
|
68 |
|
69 We take the current node and write out the character assigned to it. Is's easy |
|
70 with the \c char_map. |
|
71 \skip std |
|
72 \until std |
|
73 |
|
74 And here comes the trick. OutEdgeIt iterates on outgoing edges of a given node. |
|
75 We pass the current node as argument to it, so the \c edge iterator will stand |
|
76 on the first outgoing edge of the current node, or will be INVALID if the node |
|
77 has no outgoing edges. |
|
78 \skip edge |
|
79 \until edge |
|
80 |
|
81 The graph we built before is linear, so we know that it ends, when no more outgoing |
|
82 edges found. Otherwise the current node must be the node the edge points to. |
|
83 Basic information about an edge can be requested from the graph. |
|
84 \skip if |
|
85 \until } |
|
86 |
|
87 Finish the code, just to be precise. |
|
88 \skip return |
|
89 \until } |
|
90 |
|
91 |
|
92 \section compile_hw Compiling Hello World |
|
93 To compile this program all you have to do is type in |
|
94 \code g++ -ohw hello_world.cc \endcode |
|
95 and press \c Enter! This is the case if you installed LEMON on your system. |
|
96 (For more information see the LEMON installation instructions.) |
|
97 |
|
98 This is because LEMON is template library and most of it's code has to be available |
|
99 as source code during compilation. |
|
100 |
|
101 Most programs using LEMON will compile as easy as this one unless you want to |
|
102 use some performance measuring tools LEMON can provide. Then you need to link |
|
103 an additional library against your program. |
|
104 */ |