alpar@305
|
1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*-
|
alpar@305
|
2 |
*
|
alpar@305
|
3 |
* This file is a part of LEMON, a generic C++ optimization library.
|
alpar@305
|
4 |
*
|
alpar@440
|
5 |
* Copyright (C) 2003-2009
|
alpar@305
|
6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
|
alpar@305
|
7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES).
|
alpar@305
|
8 |
*
|
alpar@305
|
9 |
* Permission to use, modify and distribute this software is granted
|
alpar@305
|
10 |
* provided that this copyright notice appears in all copies. For
|
alpar@305
|
11 |
* precise terms see the accompanying LICENSE file.
|
alpar@305
|
12 |
*
|
alpar@305
|
13 |
* This software is provided "AS IS" with no warranty of any kind,
|
alpar@305
|
14 |
* express or implied, and with no claim as to its suitability for any
|
alpar@305
|
15 |
* purpose.
|
alpar@305
|
16 |
*
|
alpar@305
|
17 |
*/
|
alpar@305
|
18 |
|
kpeter@306
|
19 |
namespace lemon {
|
alpar@305
|
20 |
/*!
|
alpar@305
|
21 |
|
alpar@305
|
22 |
\page migration Migration from the 0.x Series
|
alpar@305
|
23 |
|
alpar@305
|
24 |
This guide gives an in depth description on what has changed compared
|
kpeter@306
|
25 |
to the 0.x release series.
|
alpar@305
|
26 |
|
alpar@305
|
27 |
Many of these changes adjusted automatically by the
|
kpeter@343
|
28 |
<tt>lemon-0.x-to-1.x.sh</tt> tool. Those requiring manual
|
alpar@305
|
29 |
update are typeset <b>boldface</b>.
|
alpar@305
|
30 |
|
alpar@305
|
31 |
\section migration-graph Graph Related Name Changes
|
alpar@305
|
32 |
|
kpeter@306
|
33 |
- \ref concepts::Digraph "Directed graphs" are called \c Digraph and
|
kpeter@306
|
34 |
they have <tt>Arc</tt>s (instead of <tt>Edge</tt>s), while
|
kpeter@306
|
35 |
\ref concepts::Graph "undirected graphs" are called \c Graph
|
kpeter@306
|
36 |
(instead of \c UGraph) and they have <tt>Edge</tt>s (instead of
|
kpeter@306
|
37 |
<tt>UEdge</tt>s). These changes reflected thoroughly everywhere in
|
alpar@305
|
38 |
the library. Namely,
|
alpar@305
|
39 |
- \c Graph -> \c Digraph
|
kpeter@306
|
40 |
- \c %ListGraph -> \c ListDigraph, \c %SmartGraph -> \c SmartDigraph etc.
|
alpar@305
|
41 |
- \c UGraph -> \c Graph
|
alpar@305
|
42 |
- \c ListUGraph -> \c ListGraph, \c SmartUGraph -> \c SmartGraph etc.
|
kpeter@306
|
43 |
- \c Edge -> \c Arc, \c UEdge -> \c Edge
|
kpeter@306
|
44 |
- \c EdgeMap -> \c ArcMap, \c UEdgeMap -> \c EdgeMap
|
kpeter@306
|
45 |
- \c EdgeIt -> \c ArcIt, \c UEdgeIt -> \c EdgeIt
|
kpeter@306
|
46 |
- Class names and function names containing the words \c graph,
|
kpeter@306
|
47 |
\c ugraph, \e edge or \e arc should also be updated.
|
alpar@305
|
48 |
- <b>The two endpoints of an (\e undirected) \c Edge can be obtained by the
|
kpeter@306
|
49 |
<tt>u()</tt> and <tt>v()</tt> member function of the graph
|
alpar@305
|
50 |
(instead of <tt>source()</tt> and <tt>target()</tt>). This change
|
alpar@305
|
51 |
must be done by hand.</b>
|
alpar@305
|
52 |
\n Of course, you can still use <tt>source()</tt> and <tt>target()</tt>
|
alpar@305
|
53 |
for <tt>Arc</tt>s (directed edges).
|
alpar@305
|
54 |
|
kpeter@306
|
55 |
\warning
|
kpeter@343
|
56 |
<b>The <tt>lemon-0.x-to-1.x.sh</tt> script replaces the words \c graph,
|
kpeter@343
|
57 |
\c ugraph, \c edge and \c uedge in your own identifiers and in
|
kpeter@343
|
58 |
strings, comments etc. as well as in all LEMON specific identifiers.
|
kpeter@343
|
59 |
So use the script carefully and make a backup copy of your source files
|
kpeter@343
|
60 |
before applying the script to them.</b>
|
kpeter@306
|
61 |
|
kpeter@314
|
62 |
\section migration-lgf LGF tools
|
deba@308
|
63 |
- The \ref lgf-format "LGF file format" has changed,
|
deba@308
|
64 |
<tt>\@nodeset</tt> has changed to <tt>\@nodes</tt>,
|
deba@308
|
65 |
<tt>\@edgeset</tt> and <tt>\@uedgeset</tt> to <tt>\@arcs</tt> or
|
deba@308
|
66 |
<tt>\@edges</tt>, which become completely equivalents. The
|
deba@308
|
67 |
<tt>\@nodes</tt>, <tt>\@edges</tt> and <tt>\@uedges</tt> sections are
|
deba@308
|
68 |
removed from the format, the content of them should be
|
deba@308
|
69 |
the part of <tt>\@attributes</tt> section. The data fields in
|
deba@308
|
70 |
the sections must follow a strict format, they must be either character
|
deba@308
|
71 |
sequences without whitespaces or quoted strings.
|
deba@308
|
72 |
- The <tt>LemonReader</tt> and <tt>LemonWriter</tt> core interfaces
|
deba@308
|
73 |
are no longer available.
|
deba@308
|
74 |
- The implementation of the general section readers and writers has changed
|
deba@308
|
75 |
they are simple functors now. Beside the old
|
deba@308
|
76 |
stream based section handling, currently line oriented section
|
deba@308
|
77 |
reading and writing are also supported. In the
|
deba@308
|
78 |
section readers the lines must be counted manually. The sections
|
deba@308
|
79 |
should be read and written with the SectionWriter and SectionReader
|
deba@308
|
80 |
classes.
|
deba@308
|
81 |
- Instead of the item readers and writers, item converters should be
|
deba@308
|
82 |
used. The converters are functors, which map the type to
|
deba@308
|
83 |
std::string or std::string to the type. The converters for standard
|
deba@308
|
84 |
containers hasn't yet been implemented in the new LEMON. The converters
|
deba@308
|
85 |
can return strings in any format, because if it is necessary, the LGF
|
deba@308
|
86 |
writer and reader will quote and unquote the given value.
|
deba@308
|
87 |
- The DigraphReader and DigraphWriter can used similarly to the
|
deba@308
|
88 |
0.x series, however the <tt>read</tt> or <tt>write</tt> prefix of
|
deba@308
|
89 |
the member functions are removed.
|
deba@308
|
90 |
- The new LEMON supports the function like interface, the \c
|
deba@308
|
91 |
digraphReader and \c digraphWriter functions are more convenient than
|
deba@308
|
92 |
using the classes directly.
|
alpar@305
|
93 |
|
alpar@305
|
94 |
\section migration-search BFS, DFS and Dijkstra
|
kpeter@306
|
95 |
- <b>Using the function interface of BFS, DFS and %Dijkstra both source and
|
kpeter@306
|
96 |
target nodes can be given as parameters of the <tt>run()</tt> function
|
kpeter@306
|
97 |
(instead of \c bfs(), \c dfs() or \c dijkstra() itself).</b>
|
kpeter@306
|
98 |
- \ref named-templ-param "Named class template parameters" of \c Bfs,
|
kpeter@306
|
99 |
\c Dfs, \c Dijkstra, \c BfsVisit, \c DfsVisit are renamed to start
|
kpeter@306
|
100 |
with "Set" instead of "Def". Namely,
|
kpeter@306
|
101 |
- \c DefPredMap -> \c SetPredMap
|
kpeter@306
|
102 |
- \c DefDistMap -> \c SetDistMap
|
kpeter@306
|
103 |
- \c DefReachedMap -> \c SetReachedMap
|
kpeter@306
|
104 |
- \c DefProcessedMap -> \c SetProcessedMap
|
kpeter@306
|
105 |
- \c DefHeap -> \c SetHeap
|
kpeter@306
|
106 |
- \c DefStandardHeap -> \c SetStandardHeap
|
kpeter@306
|
107 |
- \c DefOperationTraits -> \c SetOperationTraits
|
kpeter@306
|
108 |
- \c DefProcessedMapToBeDefaultMap -> \c SetStandardProcessedMap
|
alpar@305
|
109 |
|
alpar@305
|
110 |
\section migration-error Exceptions and Debug tools
|
alpar@305
|
111 |
|
alpar@307
|
112 |
<b>The class hierarchy of exceptions has largely been simplified. Now,
|
alpar@307
|
113 |
only the i/o related tools may throw exceptions. All other exceptions
|
alpar@307
|
114 |
have been replaced with either the \c LEMON_ASSERT or the \c LEMON_DEBUG
|
alpar@307
|
115 |
macros.</b>
|
alpar@307
|
116 |
|
alpar@307
|
117 |
<b>On the other hand, the parameter order of constructors of the
|
alpar@307
|
118 |
exceptions has been changed. See \ref IoError and \ref FormatError for
|
alpar@307
|
119 |
more details.</b>
|
alpar@307
|
120 |
|
alpar@305
|
121 |
\section migration-other Others
|
kpeter@306
|
122 |
- <b>The contents of <tt>graph_utils.h</tt> are moved to <tt>core.h</tt>
|
kpeter@306
|
123 |
and <tt>maps.h</tt>. <tt>core.h</tt> is included by all graph types,
|
kpeter@306
|
124 |
therefore it usually do not have to be included directly.</b>
|
kpeter@306
|
125 |
- <b><tt>path_utils.h</tt> is merged to \c path.h.</b>
|
alpar@307
|
126 |
- <b>The semantic of the assignment operations and copy constructors of maps
|
alpar@307
|
127 |
are still under discussion. So, you must copy them by hand (i.e. copy
|
alpar@307
|
128 |
each entry one-by-one)</b>
|
kpeter@306
|
129 |
- <b>The parameters of the graph copying tools (i.e. \c GraphCopy,
|
kpeter@306
|
130 |
\c DigraphCopy) have to be given in the from-to order.</b>
|
kpeter@306
|
131 |
- \c copyDigraph() and \c copyGraph() are renamed to \c digraphCopy()
|
kpeter@306
|
132 |
and \c graphCopy(), respectively.
|
alpar@307
|
133 |
- <b>The interface of \ref DynArcLookUp has changed. It is now the same as
|
alpar@307
|
134 |
of \ref ArcLookUp and \ref AllArcLookUp</b>
|
kpeter@306
|
135 |
- Some map types should also been renamed. Namely,
|
kpeter@306
|
136 |
- \c IntegerMap -> \c RangeMap
|
kpeter@306
|
137 |
- \c StdMap -> \c SparseMap
|
kpeter@306
|
138 |
- \c FunctorMap -> \c FunctorToMap
|
kpeter@306
|
139 |
- \c MapFunctor -> \c MapToFunctor
|
kpeter@306
|
140 |
- \c ForkWriteMap -> \c ForkMap
|
kpeter@306
|
141 |
- \c StoreBoolMap -> \c LoggerBoolMap
|
kpeter@306
|
142 |
- \c dim2::BoundingBox -> \c dim2::Box
|
kpeter@306
|
143 |
|
alpar@305
|
144 |
*/
|
kpeter@306
|
145 |
}
|