[2195] | 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 | */ |
---|