alpar@305: /* -*- mode: C++; indent-tabs-mode: nil; -*-
alpar@305:  *
alpar@305:  * This file is a part of LEMON, a generic C++ optimization library.
alpar@305:  *
alpar@440:  * Copyright (C) 2003-2009
alpar@305:  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@305:  * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@305:  *
alpar@305:  * Permission to use, modify and distribute this software is granted
alpar@305:  * provided that this copyright notice appears in all copies. For
alpar@305:  * precise terms see the accompanying LICENSE file.
alpar@305:  *
alpar@305:  * This software is provided "AS IS" with no warranty of any kind,
alpar@305:  * express or implied, and with no claim as to its suitability for any
alpar@305:  * purpose.
alpar@305:  *
alpar@305:  */
alpar@305: 
kpeter@306: namespace lemon {
alpar@305: /*!
alpar@305: 
alpar@305: \page migration Migration from the 0.x Series
alpar@305: 
alpar@305: This guide gives an in depth description on what has changed compared
kpeter@306: to the 0.x release series.
alpar@305: 
alpar@305: Many of these changes adjusted automatically by the
kpeter@343: lemon-0.x-to-1.x.sh tool. Those requiring manual
alpar@305: update are typeset boldface.
alpar@305: 
alpar@305: \section migration-graph Graph Related Name Changes
alpar@305: 
kpeter@306: - \ref concepts::Digraph "Directed graphs" are called \c Digraph and
kpeter@306:   they have Arcs (instead of Edges), while
kpeter@306:   \ref concepts::Graph "undirected graphs" are called \c Graph
kpeter@306:   (instead of \c UGraph) and they have Edges (instead of
kpeter@306:   UEdges). These changes reflected thoroughly everywhere in
alpar@305:   the library. Namely,
alpar@305:   - \c Graph -> \c Digraph
kpeter@306:     - \c %ListGraph -> \c ListDigraph, \c %SmartGraph -> \c SmartDigraph etc.
alpar@305:   - \c UGraph -> \c Graph
alpar@305:     - \c ListUGraph -> \c ListGraph, \c SmartUGraph -> \c SmartGraph etc.
kpeter@306:   - \c Edge -> \c Arc, \c UEdge -> \c Edge
kpeter@306:   - \c EdgeMap -> \c ArcMap, \c UEdgeMap -> \c EdgeMap
kpeter@306:   - \c EdgeIt -> \c ArcIt, \c UEdgeIt -> \c EdgeIt
kpeter@306:   - Class names and function names containing the words \c graph,
kpeter@306:     \c ugraph, \e edge or \e arc should also be updated.
alpar@305: - The two endpoints of an (\e undirected) \c Edge can be obtained by the
kpeter@306:   u() and v() member function of the graph
alpar@305:   (instead of source() and target()). This change
alpar@305:   must be done by hand.
alpar@305:   \n Of course, you can still use source() and target()
alpar@305:   for Arcs (directed edges).
alpar@305: 
kpeter@306: \warning
kpeter@343: The lemon-0.x-to-1.x.sh script replaces the words \c graph,
kpeter@343: \c ugraph, \c edge and \c uedge in your own identifiers and in
kpeter@343: strings, comments etc. as well as in all LEMON specific identifiers.
kpeter@343: So use the script carefully and make a backup copy of your source files
kpeter@343: before applying the script to them.
kpeter@306: 
kpeter@314: \section migration-lgf LGF tools
deba@308:  - The \ref lgf-format "LGF file format" has changed,
deba@308:    \@nodeset has changed to \@nodes,
deba@308:    \@edgeset and \@uedgeset to \@arcs or
deba@308:    \@edges, which become completely equivalents. The
deba@308:    \@nodes, \@edges and \@uedges sections are
deba@308:    removed from the format, the content of them should be
deba@308:    the part of \@attributes section. The data fields in
deba@308:    the sections must follow a strict format, they must be either character
deba@308:    sequences without whitespaces or quoted strings.
deba@308:  - The LemonReader and LemonWriter core interfaces
deba@308:    are no longer available.
deba@308:  - The implementation of the general section readers and writers has changed
deba@308:    they are simple functors now. Beside the old
deba@308:    stream based section handling, currently line oriented section
deba@308:    reading and writing are also supported. In the
deba@308:    section readers the lines must be counted manually. The sections
deba@308:    should be read and written with the SectionWriter and SectionReader
deba@308:    classes.
deba@308:  - Instead of the item readers and writers, item converters should be
deba@308:    used. The converters are functors, which map the type to
deba@308:    std::string or std::string to the type. The converters for standard
deba@308:    containers hasn't yet been implemented in the new LEMON. The converters
deba@308:    can return strings in any format, because if it is necessary, the LGF
deba@308:    writer and reader will quote and unquote the given value.
deba@308:  - The DigraphReader and DigraphWriter can used similarly to the
deba@308:    0.x series, however the read or write prefix of
deba@308:    the member functions are removed.
deba@308:  - The new LEMON supports the function like interface, the \c
deba@308:    digraphReader and \c digraphWriter functions are more convenient than
deba@308:    using the classes directly.
alpar@305: 
alpar@305: \section migration-search BFS, DFS and Dijkstra
kpeter@306: - Using the function interface of BFS, DFS and %Dijkstra both source and
kpeter@306:   target nodes can be given as parameters of the run() function
kpeter@306:   (instead of \c bfs(), \c dfs() or \c dijkstra() itself).
kpeter@306: - \ref named-templ-param "Named class template parameters" of \c Bfs,
kpeter@306:   \c Dfs, \c Dijkstra, \c BfsVisit, \c DfsVisit are renamed to start
kpeter@306:   with "Set" instead of "Def". Namely,
kpeter@306:   - \c DefPredMap -> \c SetPredMap
kpeter@306:   - \c DefDistMap -> \c SetDistMap
kpeter@306:   - \c DefReachedMap -> \c SetReachedMap
kpeter@306:   - \c DefProcessedMap -> \c SetProcessedMap
kpeter@306:   - \c DefHeap -> \c SetHeap
kpeter@306:   - \c DefStandardHeap -> \c SetStandardHeap
kpeter@306:   - \c DefOperationTraits -> \c SetOperationTraits
kpeter@306:   - \c DefProcessedMapToBeDefaultMap -> \c SetStandardProcessedMap
alpar@305: 
alpar@305: \section migration-error Exceptions and Debug tools
alpar@305: 
alpar@307: The class hierarchy of exceptions has largely been simplified. Now,
alpar@307: only the i/o related tools may throw exceptions. All other exceptions
alpar@307: have been replaced with either the \c LEMON_ASSERT or the \c LEMON_DEBUG
alpar@307: macros.
alpar@307: 
alpar@307: On the other hand, the parameter order of constructors of the
alpar@307: exceptions has been changed. See \ref IoError and \ref FormatError for
alpar@307: more details.
alpar@307: 
alpar@305: \section migration-other Others
kpeter@306: - The contents of graph_utils.h are moved to core.h
kpeter@306:   and maps.h. core.h is included by all graph types,
kpeter@306:   therefore it usually do not have to be included directly.
kpeter@306: - path_utils.h is merged to \c path.h.
alpar@307: - The semantic of the assignment operations and copy constructors of maps
alpar@307:   are still under discussion. So, you must copy them by hand (i.e. copy
alpar@307:   each entry one-by-one)
kpeter@306: - The parameters of the graph copying tools (i.e. \c GraphCopy,
kpeter@306:   \c DigraphCopy) have to be given in the from-to order.
kpeter@306: - \c copyDigraph() and \c copyGraph() are renamed to \c digraphCopy()
kpeter@306:   and \c graphCopy(), respectively.
alpar@307: - The interface of \ref DynArcLookUp has changed. It is now the same as
alpar@307:   of \ref ArcLookUp and \ref AllArcLookUp
kpeter@306: - Some map types should also been renamed. Namely,
kpeter@306:   - \c IntegerMap -> \c RangeMap
kpeter@306:   - \c StdMap -> \c SparseMap
kpeter@306:   - \c FunctorMap -> \c FunctorToMap
kpeter@306:   - \c MapFunctor -> \c MapToFunctor
kpeter@306:   - \c ForkWriteMap -> \c ForkMap
kpeter@306:   - \c StoreBoolMap -> \c LoggerBoolMap
kpeter@306: - \c dim2::BoundingBox -> \c dim2::Box
kpeter@306: 
alpar@305: */
kpeter@306: }