The generic graph component library

In this paper we present the Generic Graph Component Library (GGCL), a generic programming framework for graph data structures and graph algorithms. Following the theme of the Standard Template Library (STL), the graph algorithms in GGCL do not depend on the particular data structures upon which they operate, meaning a single algorithm can operate on arbitrary concrete representations of graphs. To attain this type of flexibility for graph data structures, which are more complicated than the containers in STL, we introduce several concepts to form the generic interface between the algorithms and the data structures, namely, Vertex, Edge, Visitor, and Decorator. We describe the principal abstractions comprising the GGCL, the algorithms and data structures that it provides, and provide examples that demonstrate the use of GGCL to implement some common graph algorithms. Performance results are presented which demonstrate that the use of novel lightweight implementation techniques and static polymorphism in GGCL results in code which is significantly more efficient than similar libraries written using the object-oriented paradigm.

[1]  Jeremy G. Siek,et al.  The Matrix Template Library: A Generic Programming Approach to High Performance Numerical Linear Algebra , 1998, ISCOPE.

[2]  Alexander A. Stepanov,et al.  C++ Standard Template Library , 2000 .

[3]  Yannis Smaragdakis,et al.  Implementing Layered Designs with Mixin Layers , 1998, ECOOP.

[4]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[5]  Matthew H. Austern Generic programming and the STL - using and extending the C++ standard template library , 1999, Addison-Wesley professional computing series.

[6]  J. Pasciak,et al.  Computer solution of large sparse positive definite systems , 1982 .

[7]  Matthew Harold Austern,et al.  Generic programming and the STL , 1998 .

[8]  Jaakko Järvi ML-style Tuple Assignment in Standard C++ -Extending the Multiple Return Value Formalism , 1999 .

[9]  Dietmar Kühl Design Patterns for the Implementation of Graph Algorithms , 1996 .

[10]  Jeremy G. Siek,et al.  Generic Graph Algorithms for Sparse Matrix Ordering , 1999, ISCOPE.

[11]  Nathan Myers,et al.  A new and useful template technique: “traits” , 1996 .

[12]  Alan George,et al.  Computer Solution of Large Sparse Positive Definite , 1981 .

[13]  Donald E. Knuth,et al.  The Stanford GraphBase - a platform for combinatorial computing , 1993 .

[14]  William Gropp,et al.  Modern Software Tools in Scientific Computing , 1994 .

[15]  Todd L. Veldhuizen,et al.  Expression templates , 1996 .

[16]  Steven Skiena,et al.  Implementing discrete mathematics - combinatorics and graph theory with Mathematica , 1990 .

[17]  簡聰富,et al.  物件導向軟體之架構(Object-Oriented Software Construction)探討 , 1989 .

[18]  Gerd Heber,et al.  Self-Avoiding Walks over Adaptive Unstructured Grids , 1999, Concurr. Pract. Exp..

[19]  Joseph W. H. Liu,et al.  Modification of the minimum-degree algorithm by multiple elimination , 1985, TOMS.

[20]  Jeremy G. Siek,et al.  A Modern Framework for Portable High-Performance Numerical Linear Algebra , 2000 .

[21]  Ivar Jacobson,et al.  The Unified Software Development Process , 1999 .

[22]  Steven Skiena,et al.  The Algorithm Design Manual , 2020, Texts in Computer Science.

[23]  Michael J. Vilot,et al.  Standard template library , 1996 .