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 | */ |
---|