../../README.md "OGDF" » ../dev-guide.md "Developer's Guide" » ../porting.md "Porting Guide" » Unreleased
OGDF now requires C++17 features. We no longer officially support compilers older than gcc 9, clang 9 or Visual Studio 2017 15.8 (MSVC 19.15).
The OGDF now uses iwyu to make sure each source file explicitly lists all header files it uses, but no further unused headers. This especially means that certain headers that were previously transitively provided but not used by some other header now might need to be explicitly included in your code. We recommend also running iwyu on your code before (and also after) porting to get an explicit overview over which imports are used from where.
Due to the RegisteredArray
changes mentioned below, this also means that the following header files have been removed as all their functionality is now included in the corresponding (Cluster/Hyper)Graph.h
file.
The header ogdf/basic/NodeSet.h
was replaced by ogdf/basic/GraphSets.h
, now also providing Edge and AdjEntry sets.
When their height is equal to their width, Shape::Triangle
and Shape::InvTriangle
are now drawn as regular triangles in SVGs (and not as just isosceles ones).
TikzWriter::isCoveredBy()
was removed in favor of isPointCoveredByNode()
in geometry.h
.
RegisteredArray
, the underlying class for NodeArray
, EdgeArray
etc. now uses std::vector
instead of ogdf::Array
for data storage. If the stored elements have a non-trivial move-constructor, it should be marked noexcept
. Otherwise, all elements will be copied when the array grows.
ClusterSetSimple
was removed in favor of ClusterArray<bool>
and ClusterSetPure
in favor of ClusterSet<false>
(which does not keep track of its size).
The move constructor and assignment operators of Graph
are now deleted, which especially means that NodeArray<Graph>
, EdgeArray<Graph>
, FaceArray<Graph>
, etc. is no longer possible. (Previously it compiled, but randomly broke at runtime when adding new nodes.) Use NodeArrayP<Graph>
, EdgeArrayP<Graph>
, FaceArrayP<Graph>
, etc. instead to wrap the Graph
s in std::unique_ptr
s and then make one pass over all entries to initialize the pointers. See the documentation of NodeArrayP
for usage as member variable on MSVC<=16. For this reason, SimDraw::getBasicGraph
now returns a std::unique_ptr<GraphCopy>
instead of copying a Graph
object on return.
GraphCopy::createEmpty()
was deprecated in favor of setOriginalGraph()
. The same holds for createEmpty()
of GraphCopySimple
and EdgeWeightedGraph
.
GraphObserver
s are now notified when their Graph
is destructed through GraphObserver::registrationChanged()
.
ClusterGraphObserver
s are now notified of their ClusterGraph
being cleared through ClusterGraphObserver::clustersCleared()
.
HypergraphObserver::init()
was deprecated in favor of reregister()
.
Observer
s and their Observable
s now have deleted copy and move constructors and assignment operators. Subclasses can instead explicitly declare their copy and move behaviour using the default constructors of Observer
/ Observable
, Observer::getObservers()
, Observer::clearObservers()
and Observable::reregister()
.
Multiple methods for inserting (parts of) a graph were merged into a single Graph::insert
implementation. This implementation is also used when copy-constructing or (in combination with clear) when copy-assigning. It replaces the following different implementations, which were removed:
GraphCopy::insert
(and GraphCopySimple::insert
) will automatically update its mappings when inserting parts of the original Graph. This can be disabled by using setLinkCopiesOnInsert
.
PoolMemoryAllocator::defrag()
was renamed to defragGlobal()
and (more importantly) now has a companion method defragThread()
that defragments the thread-local memory pool.
The following methods were moved to graph_generators/clustering.h
and renamed to more accurately reflect their functionality. Note that randomClusterPlanarGraph
did not actually generate cluster planar, but cluster-connected instances, and none of the methods used the Graph
parameter.