OGDF » Developer's Guide » Porting Guide » Baobab
The search(element)
method returned a position index. It now returns a ListIterator
or ListConstIterator
.
use case | old code | new code |
---|---|---|
check if element is a member of the list | list.search(element) != -1 | list.search(element).valid() |
find the iterator for an element | list.get(list.search(element)) | list.search(element) |
find the position index of an element | list.search(element) | list.pos(list.search(element)) |
Some methods for reading and writing graphs have been moved to GraphIO
(as static methods, where the ClusterGraph
is the first parameter):
old method | new method |
---|---|
readClusterGML | GraphIO::readGML |
writeGML | GraphIO::writeGML |
readClusterGraphOGML | GraphIO::readOGML |
Some attribute access methods have been renamed for consistency. The following table shows the changes.
old name | new name | remark |
---|---|---|
clusterBackColor | fillBgColor | colors are now represented by Color (instead of String ) |
clusterColor | strokeColor | colors are now represented by Color (instead of String ) |
clusterFillColor | fillColor | colors are now represented by Color (instead of String ) |
clusterFillPattern | fillPattern | attribute type has been changed from GraphAttributes::BrushPattern to FillPattern ; use setFillPattern to change the attribute value |
clusterHeight | height | |
clusterLabel | label | |
clusterLineStyle | strokeType | attribute type has been changed from GraphAttributes::EdgeStyle to StrokeType ; use setStrokeType to change the attribute value |
clusterLineWidth | strokeWidth | attribute type has been changed from double to float |
clusterWidth | width | |
clusterXPos | x | |
clusterYPos | y | |
setClusterFillPattern | setFillPattern | attribute type has been changed from GraphAttributes::BrushPattern to FillPattern |
setClusterLineStyle | setStrokeType | attribute type has been changed from GraphAttributes::EdgeStyle to StrokeType |
Access to cluster attributes by cluster index has been removed. Use index by cluster instead.
The method clusterID(node v)
has been removed. Use cga.clusterOf(v)->index()
instead (if cga
is an instance of ClusterGraphAttributes
).
Some methods for reading and writing graphs have been moved to GraphIO
(as static methods, where ClusterGraphAttributes
is the first parameter):
old method | new method |
---|---|
readClusterGML | GraphIO::readGML |
writeGML | GraphIO::writeGML |
readClusterGraphOGML | GraphIO::readOGML |
writeOGML | GraphIO::writeOGML |
DisjointSets manages disjoint sets of integers (set IDs) from zero to the maximum number of sets. The mapping (for example from nodes to set IDs) is the responsibility of the user. The first template parameter (the type of the set elements) is now gone because it was not necessary.
The code
simply becomes
Some methods for reading and writing graphs have been moved to GraphIO
(as static methods, where the Graph
is the first parameter):
old method | new method |
---|---|
readGML | GraphIO::readGML |
writeGML | GraphIO::writeGML |
readLEDAGraph | GraphIO::readLEDA |
Some types have been renamed and moved to graphics.h
:
old name | new name |
---|---|
GraphAttributes::BrushPattern | FillPattern |
GraphAttributes::EdgeArrow | EdgeArrow |
GraphAttributes::EdgeStyle | StrokeType |
The scope of some attribute bit specifiers (for the constructor of GraphAttributes
) has grown such that some other could be removed: GraphAttributes::nodeStyle
now implies GraphAttributes::nodeColor
which has hence been removed. In the same way, use GraphAttributes::edgeStyle
instead of GraphAttributes::edgeColor
. GraphAttributes::nodeLevel
has just been removed.
Some attribute access methods have been renamed for consistency. The following table shows the changes.
old name | new name | remark |
---|---|---|
arrowEdge | arrowType | attribute type has been changed from GraphAttributes::EdgeArrow to EdgeArrow |
colorEdge | strokeColor | colors are now represented by Color (instead of String ) |
colorNode | fillColor | colors are now represented by Color (instead of String ) |
edgeWidth | strokeWidth | attribute type has been changed from double to float |
labelEdge | label | |
labelNode | label | |
lineWidthNode | strokeWidth | attribute type has been changed from double to float |
nodeLine | strokeColor | colors are now represented by Color (instead of String ) |
nodePattern | fillPattern | attribute type has been changed from GraphAttributes::BrushPattern to FillPattern ; use setFillPattern to change the attribute value |
shapeNode | shape | attribute type has been changed from int to Shape |
styleEdge | strokeType | attribute type has been changed from GraphAttributes::EdgeStyle to StrokeType ; use setStrokeType to change the attribute value |
styleNode | strokeType | attribute type has been changed from GraphAttributes::EdgeStyle to StrokeType ; use setStrokeType to change the attribute value |
The setter method directed
has been renamed to setDirected
.
Some types and attributes have been removed as they are not used anymore:
GraphAttributes::ImageAlignment
, GraphAttributes::ImageStyle
imageAlignmentNode
, imageDrawLineNode
, imageHeightNode
, imageStyleNode
, imageUriNode
, imageWidthNode
Some methods for reading and writing graphs have been moved to GraphIO (as static methods, where GraphAttributes
is the first parameter):
old method | new method |
---|---|
readGML | GraphIO::readGML |
writeGML | GraphIO::writeGML |
readRudy | GraphIO::readRudy |
writeRudy | GraphIO::writeRudy |
writeSVG | GraphIO::drawSVG |
Use delNode()
and delEdge()
(as you would do in a Graph
) instead of delCopy()
.
This class has been removed. The SteinLib file reader (SteinLibParser::readSteinLibInstance
) is now in GraphIO
(GraphIO::readSTP
).
This class has been removed; use std::string
instead.
Users of the sprintf
methods should replace code like
by code like
For more sophisticated formatting, use a stringstream.
Different modules, use now SubgraphPlanarizer
Has been renamed to LayerByLayerSweep
.
Some methods that are common in some classes are changed/renamed/moved.
These methods are usually moved to GraphIO
.
Use delEdge()
or delNode()
instead.
If the graph is read-only, use constGraph()
.
This file has been completely removed. All its functions are now static methods in the class GraphIO
, though with a different name. The following table explains the name changes.
old name | new name |
---|---|
loadRomeGraph | GraphIO::readRome |
loadChacoGraph | GraphIO::readChaco |
loadSimpleGraph | GraphIO::readPMDissGraph |
loadYGraph | GraphIO::readYGraph |
loadChallengeGraph | GraphIO::readChallengeGraph |
saveChallengeGraph | GraphIO::writeChallengeGraph |
loadEdgeListSubgraph | GraphIO::readEdgeListSubgraph |
saveEdgeListSubgraph | GraphIO::writeEdgeListSubgraph |
loadBenchHypergraph | GraphIO::writeChaco |
loadPlaHypergraph | GraphIO::readPLA |
loadBenchHypergraph | GraphIO::readBENCH |
For loadYGraph
, note that the input file is now specified by istream
or a filename string, instead of a C-style FILE
handle.
This file has been completely removed. The SteinLib file reader (SteinLibParser::readSteinLibInstance
) is now in GraphIO
(GraphIO::readSTP
).
Colors are now represented by the class Color
, and no longer by strings of the form "#RRGGBB"
. For porting these string representations, Color
offers you several options:
Color
from its string representation by passing the string in the constructor: Color color("ff0000");
Color color; ... color.fromString("ff0000");
Color color(0xff,0x00,0x00);
Color::Name
enumeration: Color color(Color::Red);
The most readable form is the latter one, so it might be useful to adopt this version where possible; the Color::Name
enumeration is quite extensive and corresponds to the SVG color keywords.
GraphIO handles reading from and writing to several graph formats, saving to SVG vector graphics format, and so on.
Simple usage example:
Some code uses LP solvers or SAT solvers. To keep the third-party dependencies of OGDF small and ease the use of that solvers, such solvers are now included or integrated into OGDF.
Abacus 3.2 is now integrated into OGDF, in its own namespace named abacus
.
All classes like ABA_FOOBAR
have been renamed such that the ABA_
prefix is removed and the suffix is camel-cased, like FooBar
. Examples are Master
, VarType
, Variable
, Sub
, CSense
, FSVarStat
.
There are exceptions and some classes have also been removed. See the following list:
old name | use instead |
---|---|
ABA_BUFFER | ArrayBuffer |
ABA_CPUTIMER | StopwatchCPU |
ABA_STRING | string |
Because Abacus' own timers are replaced by OGDF timers, the file abacus/timer.h
has been removed. Instead include ogdf/basic/Stopwatch.h
and use the StopwatchWallClock
or StopwatchCPU
classes. Note that they must not be initialized with Abacus objects.
Abacus is not fully const correct. For the OGDF integration, missing const
declarations have been inserted. However, when using old Abacus code (written against the original Abacus) this may lead to non-compiling code when you inherit from Abacus classes with virtual methods that were non-const and are now const.
For example, virtual Constraint
methods like print
and coeff
are all declared const now. If you define non-const print
and coeff
in your own constraints, the const print
and coeff
version are still undefined. C++ compilers like g++
may hence display errors like "`cannot allocate an object of abstract type ‘YourConstraintType’`". Adding const
keywords in the right position(s) should solve the problems.
COIN-OR (Clp 1.14.7 and Symphony 5.4.5) is included in the OGDF source tree. However, it is not linked to the OGDF binary.
Only minor changes have been made to the COIN-OR source which are documented in src/coin/Readme.txt
.