new: Module DOT including export in DOT language format.
Version 1.5.1 - July 07, 2012
mod: More performance optimizations, improved default optimazation hints.
Version 1.5.0 - June 22, 2012
new: Parameter nodeUpVisitor added to dfs to allow distinct node visitors when moving down and up - see method traverseDownUp.
new: sorted traversal - neighbor nodes/edges may be visited in a user-specified order - see chapter 4.10.2 in User Guide.
fix: findCycle could return bad results when undirected edges were involved.
mod: The default implementation relies now on native JVM arrays to boost performance.
mod: Graph companion factory methods have now an implicit parameter list comprised of the edge type parameter manifest and the graph configuration. See also chapter 5.1 Altering Configuration Options in Graph4Scala-UserGuide.
mod: Constraints are to be supplied by implicit values - see the updated Graph4Scala-Constrained-UserGuide.
fix: totalWeight ignored duplicate weights.
del: Graph.from(edges) discontinued. Use from(edges = ...) instead.
mod: If user traits extending GraphLike also extend the inner class InnerNodeLike, the compile time error "illegal inheritance; self-type..." occurs upon the above change. In this case please define the self-type of InnerNodeLike as this: NodeT =>.
mod: Refactorings being of interest only to users who have extended or implemented Graph:
new: Constrained module containing the predefined constraints Connected and Acyclic and, based on these, the predefined constrained Graph types DAG, Forest and Tree. Among others, the constrained module comes with a programming model for the easy creation of any kind of custom constraints. Just read Graph4Scala-Constrained-UserGuide.
new: isCyclic, findCycle - latter anywhere in the graph or starting traversal at a given node.
fix: equals did not work correctly for instances of Path.
known issue: cycles for undirected hyper-edges will not be detected properly.
Version 1.3.2 - November 28, 2011
fix: The operators ++ and -- are now optimized for speed.
fix: The return type of the from factory methods was incorrect.
mod: The project has been splitted into moduls. Currently there are two moduls/JARS: core and json.
mod: simplified type parameters for Graph.from(nodeStreams, nodes, edgeStreams, edges); from renamed to fromStream
August 25, 2011
new: Ensured and verified that Graph (and outer edge) instances are serializable by means of the Java Serialization API. This enables to send graphs via network or persist them to disk out of the box. However, there is no optimisation with respect to serialization.
Version 1.2 - August 15, 2011
new: Graphs can now be instantiated or mutated by means of node/edge input streams. Input streams enable to instantiate or mutate graphs with no prior creation of outer nodes and edges. An edge input stream is an iterator combined with an edge factory and an edge adapter. More in chapter 2.4 Instantiating Graphs of the User Guide.
August 7, 2011
new: A range of edge creation methods (add[AndGet]WEdge, add[AndGet]LEdge, add[AndGet]WLEdge) and counterpart operators (+~%=, +~+=, +~%+=) has been added to mutable.Graph and its inner node class. This enables to add also weighted and/or labeled edges based on an edge factory without creating an outer edge first. See example q) in chapter 4.4 Adding and Subtracting of the User Guide.
trait GenericGraphTemplate has been eliminated. This is mainly an internal change but applications relying on custom Graph classes need to remove def graphCompanion and replace graphCompanion references with the concrete companion object.
Version 1.1 - July 2, 2011
new: A wealth of predefined convenience edge classes including all combinations of weighted, key-weighted, labeld and key-labeled edges in the scalax.collection.edge package. For instance, LkDiEdge with the shortcut ~+#> represents a key-labeled directed edge. These predefined edges facilitate you to bypass custom edge creation which proved tedious although it is more flexible. See chapter 2.3 Edge Factories in the User Guide.
mod: Weighted<E> with the shortcut $ has been renamed to W<E> with shortcut % to be compliant to the prefix-based edge naming convention which has been introduced to depict predefined edge variants. Weighted edge classes have also been moved into the new package scalax.collection.edge.
mod: For the sake of simplicity - meaning fewer types, less implicits and improved inference - the <X>In edge types have been eliminated. To migrate, replace <E>In with <E> anywhere in your code (<E> ::= UnDiEdge | DiEdge | ... | <CustomEdge>). For instance, replace UnDiEdgeIn with UnDiEdge. You may now even omit most of these explicit type parameters.Furthermore, custom edge classes neither need type <CustomEdgeClass>In nor implicit def flightToEdgeIn any more but they need to mix in EdgeIn[N,<CustomEdgeClass>]. See also the updated Flight.scala.
June 18, 2011
new: functional traversal in a specific direction- select between Successors (default), Predecessors or AnyConnected