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@305: * Copyright (C) 2003-2008 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: <tt>lemon-0.x-to-1.x.sh</tt> tool. Those requiring manual alpar@305: update are typeset <b>boldface</b>. 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 <tt>Arc</tt>s (instead of <tt>Edge</tt>s), while kpeter@306: \ref concepts::Graph "undirected graphs" are called \c Graph kpeter@306: (instead of \c UGraph) and they have <tt>Edge</tt>s (instead of kpeter@306: <tt>UEdge</tt>s). 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: - <b>The two endpoints of an (\e undirected) \c Edge can be obtained by the kpeter@306: <tt>u()</tt> and <tt>v()</tt> member function of the graph alpar@305: (instead of <tt>source()</tt> and <tt>target()</tt>). This change alpar@305: must be done by hand.</b> alpar@305: \n Of course, you can still use <tt>source()</tt> and <tt>target()</tt> alpar@305: for <tt>Arc</tt>s (directed edges). alpar@305: kpeter@306: \warning kpeter@343: <b>The <tt>lemon-0.x-to-1.x.sh</tt> 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.</b> kpeter@306: kpeter@314: \section migration-lgf LGF tools deba@308: - The \ref lgf-format "LGF file format" has changed, deba@308: <tt>\@nodeset</tt> has changed to <tt>\@nodes</tt>, deba@308: <tt>\@edgeset</tt> and <tt>\@uedgeset</tt> to <tt>\@arcs</tt> or deba@308: <tt>\@edges</tt>, which become completely equivalents. The deba@308: <tt>\@nodes</tt>, <tt>\@edges</tt> and <tt>\@uedges</tt> sections are deba@308: removed from the format, the content of them should be deba@308: the part of <tt>\@attributes</tt> 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 <tt>LemonReader</tt> and <tt>LemonWriter</tt> 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 <tt>read</tt> or <tt>write</tt> 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: - <b>Using the function interface of BFS, DFS and %Dijkstra both source and kpeter@306: target nodes can be given as parameters of the <tt>run()</tt> function kpeter@306: (instead of \c bfs(), \c dfs() or \c dijkstra() itself).</b> 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: <b>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.</b> alpar@307: alpar@307: <b>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.</b> alpar@307: alpar@305: \section migration-other Others kpeter@306: - <b>The contents of <tt>graph_utils.h</tt> are moved to <tt>core.h</tt> kpeter@306: and <tt>maps.h</tt>. <tt>core.h</tt> is included by all graph types, kpeter@306: therefore it usually do not have to be included directly.</b> kpeter@306: - <b><tt>path_utils.h</tt> is merged to \c path.h.</b> alpar@307: - <b>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)</b> kpeter@306: - <b>The parameters of the graph copying tools (i.e. \c GraphCopy, kpeter@306: \c DigraphCopy) have to be given in the from-to order.</b> kpeter@306: - \c copyDigraph() and \c copyGraph() are renamed to \c digraphCopy() kpeter@306: and \c graphCopy(), respectively. alpar@307: - <b>The interface of \ref DynArcLookUp has changed. It is now the same as alpar@307: of \ref ArcLookUp and \ref AllArcLookUp</b> 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: }