scispace - formally typeset
Search or ask a question
Proceedings ArticleDOI

The generic graph component library

01 Oct 1999-Vol. 34, Iss: 10, pp 399-414
TL;DR: 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.
Abstract: 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.

Content maybe subject to copyright    Report

Citations
More filters
Journal ArticleDOI
TL;DR: A package of practical tools and libraries for manipulating graphs and their drawings that includes stream and event interfaces for graph operations, high-quality static and dynamic layout algorithms, and the ability to handle sizable graphs is described.
Abstract: SUMMARY We describe a package of practical tools and libraries for manipulating graphs and their drawings. Our design, which aimed at facilitating the combination of the package components with other tools, includes stream and event interfaces for graph operations, high-quality static and dynamic layout algorithms, and the ability to handle sizable graphs. We conclude with a description of the applications of this package to a variety of software engineering tools. Copyright c 1999 John Wiley & Sons, Ltd.

1,237 citations


Cites background from "The generic graph component library..."

  • ...Grappa (described in a later section) is a Java implementation, and the C++ graph template library of Lee, Lumsdaine and Siek[14] partly addresses the problem of cleanly managing the typed attributes necessitated by the use of multiple libraries....

    [...]

Proceedings ArticleDOI
26 Oct 2003
TL;DR: A comprehensive comparison of generics in six programming languages is reported on, identifying eight language features necessary to provide powerful generics and that their absence causes serious difficulties for programmers.
Abstract: Many modern programming languages support basic generic programming, sufficient to implement type-safe polymorphic containers. Some languages have moved beyond this basic support to a broader, more powerful interpretation of generic programming, and their extensions have proven valuable in practice. This paper reports on a comprehensive comparison of generics in six programming languages: C++, Standard ML, Haskell, Eiffel, Java (with its proposed generics extension), and Generic C. By implementing a substantial example in each of these languages, we identify eight language features that support this broader view of generic programming. We find these features are necessary to avoid awkward designs, poor maintainability, unnecessary run-time checks, and painfully verbose code. As languages increasingly support generics, it is important that language designers understand the features necessary to provide powerful generics and that their absence causes serious difficulties for programmers.

142 citations


Cites methods from "The generic graph component library..."

  • ...The design presented here descends from the generic graph library presented in [43], which evolved into the Boost Graph Library (BGL) [41]....

    [...]

Proceedings ArticleDOI
12 Oct 2005
TL;DR: This paper revisits the abstractions comprising the Boost Graph Library in the context of distributed-memory parallelism, lifting away the implicit requirements of sequential execution and a single shared address space and develops general principles and patterns for using (and reusing) generic, object-oriented parallel software libraries.
Abstract: This paper describes the process used to extend the Boost Graph Library (BGL) for parallel operation with distributed memory. The BGL consists of a rich set of generic graph algorithms and supporting data structures, but it was not originally designed with parallelism in mind. In this paper, we revisit the abstractions comprising the BGL in the context of distributed-memory parallelism, lifting away the implicit requirements of sequential execution and a single shared address space. We illustrate our approach by describing the process as applied to one of the core algorithms in the BGL, breadth-first search. The result is a generic algorithm that is unchanged from the sequential algorithm, requiring only the introduction of external (distributed) data structures for parallel execution. More importantly, the generic implementation retains its interface and semantics, such that other distributed algorithms can be built upon it, just as algorithms are layered in the sequential case. By characterizing these extensions as well as the extension process, we develop general principles and patterns for using (and reusing) generic, object-oriented parallel software libraries. We demonstrate that the resulting algorithm implementations are both efficient and scalable with performance results for several algorithms.

82 citations


Cites methods from "The generic graph component library..."

  • ...For example, the cg() algorithm above can be used with Matrix Template Library classes in the following way. typedef matrix...

    [...]

Journal ArticleDOI
TL;DR: A comprehensive comparison of facilities for generic programming in eight programming languages is reported on, finding that these features are necessary to avoid awkward designs, poor maintainability, and painfully verbose code.
Abstract: Many modern programming languages support basic generics, sufficient to implement type-safe polymorphic containers. Some languages have moved beyond this basic support, and in doing so have enabled a broader, more powerful form of generic programming. This paper reports on a comprehensive comparison of facilities for generic programming in eight programming languages: C++, Standard ML, Objective Caml, Haskell, Eiffel, Java, Cn (with its proposed generics extension), and Cecil. By implementing a substantial example in each of these languages, we illustrate how the basic roles of generic programming can be represented in each language. We also identify eight language properties that support this broader view of generic programming: support for multi-type concepts, multiple constraints on type parameters, convenient associated type access, constraints on associated types, retroactive modeling, type aliases, separate compilation of algorithms and data structures, and implicit argument type deduction for generic algorithms. We find that these features are necessary to avoid awkward designs, poor maintainability, and painfully verbose code. As languages increasingly support generics, it is important that language designers understand the features necessary to enable the effective use of generics and that their absence can cause difficulties for programmers.

74 citations


Cites background from "The generic graph component library..."

  • ...The design presented here descends from the generic graph library reported in Lee et al. (1999), which evolved into the Boost Graph Library (BGL) (Siek et al., 2002). class Comparable t where better :: (t, t) → Bool pick :: Comparable t ⇒ (t, t) → t pick (x, y) = if (better(x, y)) then x else…...

    [...]

References
More filters
Book
01 Jan 1994
TL;DR: The book is an introduction to the idea of design patterns in software engineering, and a catalog of twenty-three common patterns, which most experienced OOP designers will find out they've known about patterns all along.
Abstract: The book is an introduction to the idea of design patterns in software engineering, and a catalog of twenty-three common patterns. The nice thing is, most experienced OOP designers will find out they've known about patterns all along. It's just that they've never considered them as such, or tried to centralize the idea behind a given pattern so that it will be easily reusable.

22,762 citations


"The generic graph component library..." refers background in this paper

  • ...In adirectedgraph an edge(u,v) leaves from thesourcevertexu to thetargetvertexv....

    [...]

Book
01 Jan 1990
TL;DR: The updated new edition of the classic Introduction to Algorithms is intended primarily for use in undergraduate or graduate courses in algorithms or data structures and presents a rich variety of algorithms and covers them in considerable depth while making their design and analysis accessible to all levels of readers.
Abstract: From the Publisher: The updated new edition of the classic Introduction to Algorithms is intended primarily for use in undergraduate or graduate courses in algorithms or data structures. Like the first edition,this text can also be used for self-study by technical professionals since it discusses engineering issues in algorithm design as well as the mathematical aspects. In its new edition,Introduction to Algorithms continues to provide a comprehensive introduction to the modern study of algorithms. The revision has been updated to reflect changes in the years since the book's original publication. New chapters on the role of algorithms in computing and on probabilistic analysis and randomized algorithms have been included. Sections throughout the book have been rewritten for increased clarity,and material has been added wherever a fuller explanation has seemed useful or new information warrants expanded coverage. As in the classic first edition,this new edition of Introduction to Algorithms presents a rich variety of algorithms and covers them in considerable depth while making their design and analysis accessible to all levels of readers. Further,the algorithms are presented in pseudocode to make the book easily accessible to students from all programming language backgrounds. Each chapter presents an algorithm,a design technique,an application area,or a related topic. The chapters are not dependent on one another,so the instructor can organize his or her use of the book in the way that best suits the course's needs. Additionally,the new edition offers a 25% increase over the first edition in the number of problems,giving the book 155 problems and over 900 exercises thatreinforcethe concepts the students are learning.

21,651 citations

01 Dec 1989

4,898 citations


"The generic graph component library..." refers background in this paper

  • ...(By “high-quality” in this case we take to mean, such attributes as functionality, reliability, usability, efficiency, maintainability, and portability [15].)...

    [...]

Book
01 Jan 1988
TL;DR: Object-Oriented Software Construction, second edition is the comprehensive reference on all aspects of object technology, from design principles to Object- Oriented techniques, Design by Contract, Object-O Oriented analysis, concurrency, persistence, abstract data types and many more.
Abstract: From the Publisher: Object-Oriented Software Construction, second edition is the comprehensive reference on all aspects of object technology, from design principles to Object-Oriented techniques, Design by Contract, Object-Oriented analysis, concurrency, persistence, abstract data types and many more. Written by a pioneer in the field, contains an in-depth analysis of both methodological and technical issues. Two-color printing provides for clear figures and readable software extracts. Comes with a CD-ROM containing: the complete hyperlinked text, for easy reference; software to read the text on major industry platforms; supplementary material (reusable components, mathematical complements); and a complete graphical Object-Oriented development environment supporting the concepts of the book.

4,060 citations

Book
01 Jan 1999
TL;DR: This book provides a comprehensive guide to The Objectory Software Development Process derived from the three market leading OOA&D methods: Booch, OOSE (Use-Case), and OMT.
Abstract: The three amigos of software development come together again to bring you an introduction to a new standard for creating today's software that will definitely be useful for any developer or manager familiar with UML. This book provides a comprehensive guide to The Objectory Software Development Process derived from the three market leading OOA&D methods: Booch, OOSE (Use-Case), and OMT. Overviews of the four basic principles of the Unified Process are complemented by excellent use case examples that are drawn from such areas as banking and inventory control.

3,486 citations