Sakura
Today, we released the new version v.2012.07 (Sakura) of OGDF! This release is mainly a clean-up and bug-fix release, bringing support for new compilers and fixing some annoying bugs.
Highlights
- Improved compiler support:
- Support for the latest compiler versions (gcc 4.7, Visual Studio 2012) and new compilers (MinGW, LLVM/clang).
- Adjusted generated project files for Visual Studio, so that source files can now be compiled in parallel.
- Support for shared libraries (DLLs for Visual Studio 2008-2012, shared libraries for gcc, LLVM/clang).
- Clean-up of classes for planarity testing and embedding.
PlanarStraightLayoutandPlanarDrawLayoutnow have a module option for the embedder.- Various important bugfixes:
- Fixed crashes when compiling with gcc and
-O2or-O3. By default, OGDF release builds now use-O2. - Fixed crashes of some embedder modules when the input graph contained blocks just consisting of two parallel edges.
- Fixed a bug in the special handling of isolated nodes when minimizing crossings with
SugiyamaLayout. Previous code did not work as intended, the revised code can decrease the number of crossings in many cases.
- Fixed crashes when compiling with gcc and
Detailed Changelog
New Features
- Clean-up of classes for planarity testing and embedding:
PlanarModulehas been renamed toBoothLueker; both have been adjusted to the new interface specified byPlanarityModule.- Introduced a base class
PlanarityModulespecifiying the interface for planarity testing and embedding. - Derived
BoothLuekerandBoyerMyvoldfromPlanarityModuleand adjusted their interface. - Added new functions for planarity testing and embedding to
extended_graph_alg.h, making it easier to call this functionality:isPlanar(),planarEmbed(),planarEmbedPlanarGraph() - Remark: If you used
PlanarModulefor planarity testing or embedding in your programs, you have to rewrite your code! The simplest way is to use the above functions fromextended_graph_alg.hinstead.
- Changed the interface of embedder modules from
PlanReptoGraph. - Added module option for the embedder to
PlanarStraightLyoutandPlanarDrawLayout.
Minor Modifications
- renamed some graph load functions (for consistent naming):
loadRomeGraphStream→loadRomeGraphloadChacoStream→loadChacoGraphloadSimpleGraphStream→loadSimpleGraphloadBenchHypergraphStream→loadBenchHypergraph
- made
Array2D::det()method const - moved definition of
MemElemtoMallocMemoryAllocator - replaced ogdf’s
min/maxbystd::min/std::max - renamed
eLabelTyp→eLabelType - made destructor of class
Threadvirtual
Bug Fixes
- Fixed crashes when compiling with gcc and
-O2or-O3. By default, OGDF release builds now use-O2. - Fixed crashes of some embedder modules when the input graph contained blocks just consisting of two parallel edges. Affected where
EmbedderMaxFace,EmbedderMaxFaceLayers,EmbedderMinDepth,EmbedderMinDepthMaxFace,EmbedderMinDepthMaxFaceLayers. - Fixed a bug in the special handling of isolated nodes when minimizing crossings with
SugiyamaLayout. Previous code did not work as intended, the revised code can decrease the number of crossings in many cases. - Fixed a bug in
makeConnected(): now also works for empty graphs (just returns) - Added missing header files for
SteinLibParser. - Corrected various errors when compiling
HyperGraph.h.
Build System
- Added support for gcc 4.7.
- Added support for Visual Studio 2012.
- Added support for MinGW on Windows (just 32-bit MinGW version).
- Added support for LLVM/clang on Linux.
- Adjusted generated project files for Visual Studio, so that source files can now be compiled in parallel.
- OGDF can now be built as DLL with Visual Studio 2008-2012
- OGDF can now be built as a shared library on Linux with gcc and LLVM/clang
- Clean-up of OGDF’s main directory:
- moved project templates to the subdirectory
config - moved OGDF’s doxygen configuration file
ogdf-doxygen.cfgto the subdirectorydoc
- moved project templates to the subdirectory
- Documentation adjusted to latest doxygen version (1.8.1.1).
Madrona
Today, we released the new version v2012.05 (Madrona) of OGDF! This release brings various new algorithms and modules, as well as bug fixes and adaptions for current compilers.
Highlights
- First implementation of the approximation algorithm for multi-edge insertion (class
MultiEdgeApproxInserter). - New planar straight-line layout methods: de Faysseix, Pack, Pollack (class
FPPLayout) and Schnyder (classSchnyderLayout). - Various new modules to be used with
SugiyamaLayout:- New two-layer crossing minimization heuristics based on sifting (class
SiftingHeuristic) and greedy approaches (classesGreedyInsertHeuristicandGreedySwitchHeuristic). - New ranking module based on the Coffman-Graham algorithm (class
CoffmanGrahamRanking). - New module for coordinate assignment based on the algorithm by Brandes and Köpf (class
FastSimpleHierarchyLayout).
- New two-layer crossing minimization heuristics based on sifting (class
- New Union/Find data structure (class
DisjointSets). - Support for some additional file formats (GD Challenge format, Chaco format).
- Further graph generators ((toroidal) grid graphs, Petersen graphs, planar graphs).
Detailed Changelog
New Features
- New edge insertion module (
MultiEdgeApproxInserter) implementing an approximation algorithm for multi-edge insertion. - New planar straight-line layout algorithms:
FPPLayoutimplements the algorithm by de Fraysseix, Pach, Pollack.SchnyderLayoutimplements the algorithm by Schnyder.
- New ranking module (
CoffmanGrahamRanking) which allows to limit the number of nodes on a layer. - New two-layer crossing minimization heuristics:
GreedyInsertHeuristicGreedySwitchHeuristicSiftingHeuristic
- New module for coordinate assignment (
FastSimpleHierarchyLayout) in Sugiyama’s framework implementing the algorithm by Brandes and Köpf. - New Union/Find data structure (
DisjointSets). - New force-directed layout algorithm (
SpringEmbedderFRExact): Fruchterman/Reingold spring-embedder with exact force calculations; also features OpenMP and SSE3 parallelization. - New functions for parsing file formats:
loadChallengeGraph(),saveChallengeGraph(): read and write graphs in GD Challenge file format.loadChacoGraph: read graph in Chaco (graph partitioning software) file format.loadEdgeListSubgraph(),saveEdgeListSubgraph(): read and write graphs with specified subgraphs in a simple file format (used in experimental evaluation of edge insertion algorithms by Chimani and Gutwenger).SteinLibParser: reads instances from SteinLib.
- New graph generators:
planarConnectedGraph(): creates a connected (simple) planar (embedded) graph.gridGraph(): creates a (toroidal) grid graph.petersenGraph(): creates a generalized Petersen graph.
Minor Modifications
changeDir()now returns a boolean value (true= successful).SList,SListPure: addedsearch()method.- Renamed
ModularMultilevelMixerLayout.htoModularMultilevelMixer.h(since it defines classModularMultilevelMixer). ClusterGraphAttributes: made methodreadClusterGraphGML()private, since it should not be called by a user.CrossingsMatrix: changed return type ofoperator()fromdoubletointScalingLayout,PreprocessorLayout: proper usage of module options.- Moved definitions of constants for pi and e to class
Mathand renamedeulertoe; added definitions of constantspi_2,pi_4, andtwo_pi.
Bug Fixes
- Fixed a bug in
GraphAttributes:writeGMLnow uses edge arrow attributes if specified. - Fixed bug in
GmlParser: Access to uninitialized pointer in destructor if file could not be opened in constructor. ModularMultilevelMixer: implemented correct usage of module options; fixes a potential memory leak.Cluster-Sugiyama: fixed bug inExtendedNestingGraph::tryEdge()(integer overflow); reimplemented computation of “levels” for fast acyclicity testing such that levels are < 2n.DynamicPlanarSPQRTree.h: fixed include statement (missing subdirectorydecomposition).- Fixed a 0-pointer exception in
GraphListBase::swap()(wrong swap-function was called).
Build System
- Documentation adjusted to latest doxygen version (1.8.0).
Sassafras
Today, we released the new version v2010.10 (Sassafras) of OGDF! This release brings various new algorithms and features.
Highlights
- Completely revised memory management; pool-memory allocator now supports thread-safe allocation.
- Basic multithreading support for OGDF algorithms.
- New class
Systemprovides methods for accessing system-dependent information and functionality (processor features, memory usage, file system). - New hierarchical graph layout method using upward planarization (class
UpwardPlanarization); outperforms traditional Sugiyama-based methods with respect to crossings by far. - New multilevel layout algorithm (
FastMultipoleMultilevelEmbedder), based on the multipole method, well-separated pair decomposition, and a new quadtree space partitioning (Martin Gronemann’s Diploma thesis); makes use of SSE and multicore processors and is significantly faster thanFMMMLayout. - New modular framework for multilevel graph layout (class
ModularMultilevelMixer) with various options for coarsening, placement, and single-level layout. - New force-directed layout algorithms: Kamada-Kawai (class
SpringEmbedderKK) and stress majorization (classStressMajorization). - New layout algorithms for directed graphs:
DominanceLayoutandVisibilityLayout. - Implementation of Prims’ algorithm for minimum spanning tree computation.
- Added support for OGML graph file format.
- Exact algorithms for computing maximum planar and maximum c-planar subgraphs (classes
MaximumPlanarSubgraphandMaximumCPlanarSubgraph). - OGDF can now be compiled as DLL under Windows.
- Support for Visual Studio 2010 and latest g++ compilers.
Detailed Changelog
New Features
- Completely revised memory management, with a new thread-safe pool-memory allocator. OGDF provides now three allocators (which can be selected with compiler predefines):
- thread-safe pool allocator (
OGDF_MEMORY_POOL_TS; usually the deafult), - non-thread-safe pool allocator (
OGDF_MEMORY_POOL_NTS), and - ordinary malloc/free (
OGDF_MEMORY_MALLOC_TS).
- thread-safe pool allocator (
- Basic, platform-independent multithreading support for OGDF algorithms; new classes
Thread,CriticalSection,Mutex,Barrier. - New class
Systemprovides methods for accessing system-dependent information and functionality (processor features, memory usage, file system). - New layout algorithms for directed (hierarchical) graphs:
DominanceLayout, based on dominance layout of st-digraphs.VisibilityLayout, based on computation of a visibility representation.
- New hierarchical graph layout method using upward planarization (class
UpwardPlanarization); implements the algorithm by Chimani, Gutwenger, Mutzel and Wong. Outperforms traditional Sugiyama-based methods with respect to number of crossings by far. Uses module options for upward planarization and layout:UpwardPlanarizerModule: its implementationSubgraphUpwardPlanarizerapplies a 2-phase approach: first compute a feasible upward planar subgraph (FUPSModulewith implementationFUPSSimple), then insert remaining edges (UpwardEdgeInserterModulewith implementationFixedEmbeddingUpwardEdgeInserter).UPRLayoutModule: implementationLayerBasedUPRLayoutwhich makes use of hierarchy layout modules from the Sugiyama framework.
- New force-directed layout algorithms:
- Kamada-Kawai (class
SpringEmbedderKK) - stress majorization (class
StressMajorization).
- Kamada-Kawai (class
- New multilevel layout algorithm (
FastMultipoleMultilevelEmbedder), based on the multipole method, well-separated pair decomposition, and a new quadtree space partitioning (Martin Gronemann’s Diploma thesis); makes use of SSE and multicore processors and is significantly faster thanFMMMLayout. - New modular framework for multilevel graph layout (class ModularMultilevelMixer) with various options for coarsening, placement, and single-level layout.
MultilevelBuildermodule (coarsening):EdgeCoverMerger,IndependentSetMerger,LocalBiconnectedMerger,MatchingMerger,RandomMerger,SolarMerger.InitialPlacermodule (placement):BarycenterPlacer,CirclePlacer,MedianPlacer,RandomPlacer,SolarPlacer,ZeroPlacer.
- Implementation of Prims’ algorithm for minimum spanning tree computation (function
computeMinSTinogdf/basic/extended_graph_alg.h. - Added support for OGML graph file format:
- class
OgmlParserimplements a parser for OGML-files; - methods
writeOGMLandreadClusterGraphOGMLinClusterGraphAttributesprovide reading and writing of OGML files.
- class
- Exact algorithm for computing a maximum planar subgraph (class
MaximumPlanarSubgraph); requires COIN and ABACUS. - Exact algorithm for computing a maximum c-planar subgraph (class
MaximumCPlanarSubgraph); requires COIN and ABACUS.
Minor Modifications
GraphAttributesprovides now a flag indicating if the graph is directed or not (default istrue): methodsdirectedfor getting / setting, support in reading and writing GML files (readGMLandwriteGML).- Hash values are now of type
size_tfor providing better compatibility with 64-bit systems. - Default parameters of
GEMLayoutrevised. ClusterPlanarizationLayoutnow allows to pass edge weights in its call, which are used for computing a c-planar subgraph (edges with low weight are preferred).- Clarified
Comparerinterfaces:- Class
Comparer<E>renamed toVComparer<E>(since it relies on virtual functions). - Added the macros
OGDF_AUGMENT_COMPARERandOGDF_AUGMENT_STATICCOMPARERto allow easy generation of comparers with full interfaces. - Added
StdComparer(standard comparers) andTargetComparer(for comparing targets of pointers).
- Class
Array::grow()allows now to enlarge an array with empty index set.PlanarizationLayout: changed default planar subgraph toFastPlanarSubgraph.- Changed return type of
BCTree::findPathBCTree()to pointer (instead of reference) to reflect the fact that the returned object has been allocated with new. isConnected(),makeConnected(): improved performance by replacing recursive with iterative implementation.- New, more efficient implementation of list-based stacks.
Bug Fixes
- Fixed bug in
SugiyamaLayout: possibly incorrect setting of number of crossings if there are several connected components andarrangeCCs= true. - Fixed bug in
BoyerMyrvold: incorrect embedding of self-loops. - Fixed memory leaks in
PlanarAugmentationFix,EmbedderMaxFace,EmbedderMaxFaceLayers,EmbedderMinDepth,EmbedderMinDepthMaxFace,EmbedderMinDepthMaxFace,EmbedderMinDepthPiTa,PlanarizationLayout. - Fixed bug with copy constructor of graph arrays (
NodeArray,EdgeArrayetc.): crashed if copied array was not initialized for a graph. - Fixed bug with
Hierarchy: memory leaks occurred when usinginitByNodes(). - Revised compiler condition for systems providing only 15 random bits with
rand()function; fixes a non-termination bug withFMMMLayouton Solaris/SPARC. - Fixed a bug in
makeConnected(). - Fixed a memory leak in
LPSolver_coin.
Build System
- Added support for Visual Studio 2010, which introduces an new project format (.vcxproj). For creating such a project, use
makeVCXProj.py(instead ofmakeVCProj.py). At the moment, there is just one possible template file for VS 2010 (ogdf.vcxproj.vs2010.template; which is the default). - Added support for compiling OGDF as DLL under Windows (currently VS 2005 only); simply select project template
ogdf.dll.vcproj.vs2005.templateinmakeVCProj.config. - Added support for latest g++ compilers (4.1.x – 4.4.x) on Linux and Mac OS X.
- Windows only: OGDF now requires to also link against
Psapi.lib. - g++ on Linux/Mac only: OGDF now requires to link against pthreads; add option
-pthreadwhen compiling and linking withg++.
Bubinga
The second public release of OGDF has been released today. This release focuses on improved usability, but also contains new functionality.
Highlights
- New algorithm for planar augmentation with fixed embedding.
- The planar drawing algorithms Planar-Straight, Planar-Draw, and Mixed-Model can now be called with a given planar embedding.
- New class
DualGraphrepresenting the geometric dual graph of a combinatorial embedding. - Consistent interface for planarization layout that allows to call with
GraphAttributes. - Sugiyama layout now produces drawings with given node ranks that are also respected across different connected components.
- Hashing functions can now be passed as template parameters; the implementation of two-dimensional hash-arrays has been revised and allows now using different types for each index.
- Optional template parameter for index type of array-based classes.
- Unified naming conventions and interfaces.
- Improved build system for Visual Studio, including support for compiling with Osi Coin and creating projects for Visual Studio 2003.
- Significantly improved documentation.
Detailed Changelog
New Features
- Additional (optional) template parameter for used size/index type in
Array,ArrayBuffer,BoundedQueue,BoundedStack,MinHeap, andTop10Heap. - Specification of hash function as (optional) template parameter in
HashingandHashArray.- The default hash function is implemented by
DefHashFunc<K>(instead of functionhash()); this can be extended to further types by specializingDefHashFunc.
- The default hash function is implemented by
- Revised implementation of HashArray2D.
- Supports now different types for each index.
- The hash-function can be passed as (optional) template parameter.
entry(const I&,const I&)→operator()(const I1&,const I2&)- Iterators:
key(I&,I&)→key1()andkey2()
- The new class
DualGraphrepresents the geometric dual graph of a combinatorial embedding. - New augmentation algorithm for planar biconnected augmentation with fixed embedding (class
PlanarAugmentationFix). - Planar drawing algorithms now implement a call for drawing with a given planar embedding.
- The base class
PlanarGridLayoutModuledefines this interface. PlanarStraightLayout,PlanarDrawLayout, andMixedModelLayoutimplement this interface.
- The base class
- The planarization layout can now be called with
GraphAttributeslike other layout algorithms; setting/getting of options made consistent with ogdf naming style. The following changes were done:UMLPlanarizationLayout→PlanarizationLayoutUMLLayoutModuleinherits fromLayoutModulePlanarizationLayouthas now acall(GraphAttributes&)setCliqueSize(int)→minCliqueSize(int)- added
int minCliqueSize() preProcessCliques(bool)→preprocessCliques(bool)- added
bool preprocessCliques()
SugiyamaLayouthas a new optionarrangeCCs(deciding whether components are laid out separately and arranged afterwards) and a new module optionpacker(for arranging connected components). SettingarrangeCCsto false and passing node ranks directly allows to get a layout which truly respects the layering across all connected components.LongestPathRankinghas a new optionoptimizeEdgeLength; setting this option to false gives a longest-path ranking as known from the literature; default is true which is same behavior as before (performs additional optimization for reducing edge lengths).
Minor Modifications
- Unified interface for containers (
ArrayBuffer,BinaryHeap,BoundedQueue,BoundedStack,MinHeap,Top10Heap).size()returns the current number of elements in the container.capacity()returns the maximal number of elements that can be stored in the container (if applicable).empty()returns true if the container contains no elements.full()returns true if the current number of elements has reached the capacity (if applicable).clear()removes all elements from the container.
- Unified naming conventions for array classes:
Array2→Array2DHashingArray→HashArrayTwoDHashArray→HashArray2DTwoDHashIterator→HashConstIterator2D
- Usage of
size_tinstead ofintin:BendString::BendString(char,size_t)BendString::operator[](size_t)BendString::size()BendString::set(char,size_t)BendString::init(char,size_t)String::String(size_t,const char *)String::length()String::operator[](size_t)
- Removed
String::operator const char *(); use the new methodString::cstr()instead. - Usage of
const String&instead ofconst char*in:CliqueFinder::writeGraph(Graph &, NodeArray<int> &, const String &)GraphAttributes::readGML(Graph &, const String &)GraphAttributes::writeGML(const String &)GraphAttributes::readXML(Graph &G, const String &fileName)GraphAttributes::writeXML(const String &, const char*, const char*)GraphAttributes::readRudy(Graph &, const String &)GraphAttributes::writeRudy(const String &)String::compare(const String &,const String &)
GraphAttributesreturn now default values fortype(node)andtype(edge)even if the respective arrays are not initialized.- Renamed
GraphStructure→GraphObserver. - The Methods
assignNode(),unassignNode(), andremoveNodeAssignment()inClusterGraphare now private (not meant for public use). - Added constructor
PlanRepUML(const GraphAttributes&). - Changed default augmenter of
PlanarStraightLayoutandPlanarDrawLayouttoPlanarAugmentation. - Removed
OrthoFormerUML(obsolete); renamedOrthoFormerGENERIC→OrthoShaper. - Renamed
UMLOrthoLayout→OrthoLayoutandUMLPlanarLayoutModule→LayoutPlanRepModule. - Revised design of
ClusterPlanarizationLayout:ClusterPlanarizationLayoutdoes not inherit fromUMLLayoutModuleanymore.- Removed unsupported call methods.
- Removed (unused) module options
subgraphandinserter. - Changed type of
planarLayouterto new module typeLayoutClusterPlanRepModule. - Changed base class of
ClusterOrthoLayouttoLayoutClusterPlanRepModule. - Renamed
ClusterOrthoFormertoClusterOrthoShaper
- Renamed
ClustererBase→ClustererModuleand moved headerClustererModule.htoogdf/module/. - Logging output of Coin Osi solver turned off by default (previous version produced some output in debug builds).
Bug Fixes
- Fixed possible rounding error in
LPSolver::checkFeasibility(). - Fixed C++ template syntax for
print()function ofBoundedQueue. - Removed ”
LPSolver::” in declaration ofLPSolver::checkFeasibility()(did not compile with some g++ versions).
Build System
- Visual Studio project file: Added configuration file
makeVCProj.configfor specifying project template and optional settings for LP-solver. - Support for Visual Studio 2003 (Visual C++ 7.1) by selecting
ogdf.vcproj.vs2003.templateas project template. - Linux/g++ makefile: Build targets renamed to
release,cleanrelease, etc. (instead ofrelease_all,release_clean).
Available make targets are nowdebug,saferelease(-O0), andrelease(-O1); default isreleasewhich yields a typical performance gain over the previousrelease(with -O0) by a factor of 2.5−12. We discourage using -O2 or -O3 with g++, since this is not stable.
Jacaranda
The first public version of OGDF is released.

