getting_started.dox
author Alpar Juttner <alpar@cs.elte.hu>
Fri, 24 Oct 2008 13:26:15 +0100
changeset 7 934258c64b6b
parent 6 da96f28684f7
child 9 a48bf0d3a790
permissions -rw-r--r--
Rework installation part and move it to the appendix
     1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
     2  *
     3  * This file is a part of LEMON, a generic C++ optimization library.
     4  *
     5  * Copyright (C) 2003-2008
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
     8  *
     9  * Permission to use, modify and distribute this software is granted
    10  * provided that this copyright notice appears in all copies. For
    11  * precise terms see the accompanying LICENSE file.
    12  *
    13  * This software is provided "AS IS" with no warranty of any kind,
    14  * express or implied, and with no claim as to its suitability for any
    15  * purpose.
    16  *
    17  */
    18 
    19 /**
    20 \page getting_started Getting Started
    21 
    22 \section hello_lemon Compile Your First Code
    23 
    24 If you have installed LEMON on your system you can paste the following
    25 code segment into a file called <tt>hello_lemon.cc</tt> to have a first
    26 working program that uses LEMON.
    27 
    28 \dontinclude hello_lemon.cc
    29 \skip #include
    30 \until }
    31 
    32 First let us briefly explain how this example program works.
    33 (The used notions will be discussed in detail in the following chapter.)
    34 
    35 After some convenience typedefs we create a directed graph (\e digraph)
    36 and add some nodes and arcs to it.
    37 ListDigraph is one of the digraph classes implemented in LEMON.
    38 It is based on linked lists, therefore iterating through its nodes and
    39 arcs is fast.
    40 
    41 Then we iterate through all nodes of the digraph and print their unique
    42 IDs. We use a constructor of the node iterator to initialize it to the
    43 first node.
    44 The <tt>operator++</tt> is used to step to the next node. After the last
    45 node the iterator becomes invalid (i.e. it is set to \c INVALID).
    46 This is what we exploit in the stop condition.
    47 We iterate through all arcs of the digraph very similarly and print the
    48 IDs of their source (tail) and target (head) nodes using the \c source()
    49 and \c target() member functions.
    50 
    51 After that we create an arc map, which is actually a mapping that assigns
    52 an \c int value (length) to each arc, and we set this value for each arc.
    53 Finally we iterate through all arcs again and print their lengths.
    54 
    55 Now let's compile this simple example program.
    56 
    57 \subsection hello_lemon_system If LEMON is Installed System-Wide
    58 
    59 If your installation of LEMON into directory \c /usr/local was
    60 successful, then it is very easy to compile this program with the
    61 following command (the argument <tt>-lemon</tt> tells the compiler
    62 that we are using the installed LEMON):
    63 
    64 \verbatim
    65 g++ hello_lemon.cc -o hello_lemon -lemon
    66 \endverbatim
    67 
    68 As a result you will get the exacutable \c hello_lemon in the current
    69 directory, which you can run by the following command.
    70 
    71 \verbatim
    72 ./hello_lemon
    73 \endverbatim
    74 
    75 \subsection hello_lemon_user If LEMON is Installed User-Local
    76 
    77 Compiling the code is a bit more difficult if you installed LEMON
    78 user-local into a directory (e.g. <tt>~/lemon</tt>) or if you just
    79 skipped the step <tt>make install</tt>.
    80 You have to issue a command like this.
    81 
    82 \verbatim
    83 g++ -I ~/lemon hello_lemon.cc -o hello_lemon -lemon -L ~/lemon/lemon/.libs
    84 \endverbatim
    85 
    86 \subsubsection hello_lemon_pkg_config Use pkg-config
    87 
    88 \todo Write this sub-subsection (\ref hello_lemon_pkg_config).
    89 
    90 If everything has gone well, then our program prints out the followings.
    91 
    92 \verbatim
    93 Hello World!
    94 This is LEMON library here. We have a direceted graph.
    95 
    96 Nodes: 3 2 1 0
    97 Arcs: (2,3) (1,3) (1,2) (0,2) (0,1)
    98 
    99 There is a map on the arcs (length):
   100 
   101 length(2,3)=10
   102 length(1,3)=25
   103 length(1,2)=5
   104 length(0,2)=20
   105 length(0,1)=10
   106 \endverbatim
   107 
   108 You may note that iterating through the nodes and arcs is done in the
   109 reverse order compared to the creating order (the IDs are in decreasing
   110 order).
   111 This is due to implementation aspects, that may differ at other graph
   112 types, moreover it may be changed in the next releases.
   113 Thus you should not exploit this method in any way, you should not
   114 suppose anything about the iteration order.
   115 
   116 If you managed to compile and run this example code without any problems,
   117 you can go on reading this tutorial to get to know more features and tools
   118 of LEMON.
   119 Otherwise if you encountered problems that you did not manage to solve,
   120 do not hesitate to
   121 <a href="mailto:lemon-user@lemon.cs.elte.hu"><b>contact us</b></a>.
   122 
   123 */