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::ImageStyleimageAlignmentNode, imageDrawLineNode, imageHeightNode, imageStyleNode, imageUriNode, imageWidthNodeSome 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.