Overview


The Ada 95 Booch Components began in late 1994 when David Weller began a port of
Grady Booch's C++ components.
A first beta release was soon available, followed by a release
in February 1997.
In December of that year, David concluded that he wouldn't be
able to continue with the Components and appealed on the Team Ada mailing
list for a volunteer. Having already found the Components very
useful, I got my employers' permission to take them on (not a
speedy process); work began 18.vii.98.
Storage Management was added in August 1998 by Pat Rogers, thanks very much Pat!
(you may like to visit Pat's web
site).
The Components are issued under the GNU General Public Licence.
The units that you need to instantiate and compile in order to use
the Components in your own software are licenced under the
"GNAT-modified GPL", which adds the following to the normal GPL
permissions:
As a special exception, if other files instantiate
generics from this unit, or you link this unit with other files to
produce an executable, this unit does not by itself cause the
resulting executable to be covered by the GNU General Public
License. This exception does not however invalidate any other
reasons why the executable file might be covered by the GNU Public
License.
The current version has the following components available (the
red parts, if any, are new since the last
release):
- Bounded, Dynamic, Unbounded and Unmanaged Bags
- Bounded, Dynamic, Unbounded and Unmanaged Collections and
Ordered Collections
- Bounded, Dynamic, Unbounded and Unmanaged Deques
- Directed and Undirected Graphs
- Single and Double Lists
- Bounded, Dynamic, Unbounded and Unmanaged Maps
- Bounded, Dynamic, Unbounded and Unmanaged Queues and Ordered
Queues
- Bounded, Dynamic, Unbounded and Unmanaged Rings
- Bounded, Dynamic, Unbounded and Unmanaged Sets
- Bounded, Dynamic, Unbounded and Unmanaged Stacks
- AVL Trees
- Binary Trees
- Pre-order, in-order and post-order iteration
- Multiway Trees
- Pre-order and post-order iteration
- Smart Pointers
See the Component Documentation
for the details.
Tests, demonstrations and
contributions
The Components are tested with GNAT. I try hard not to release
anything that doesn't work with the latest public version.
I also use the Aonix ObjectAda compiler (the Special Edition;
currently I am stuck at 7.2, because of some DLL hell which
prevents 7.2.1 from working! I wouldn't regard a problem with OA as
a very good reason for withholding a feature, though.
You'll find a set of notes on various compiler problems.
The Components come with test and
demonstration code samples.
There is also a collection of contributions
(only an access to the SourceForge SNV repository at present).
Please feel free to mail
me with any thoughts you may have!
- Lists; to use or not to use?
- Many people, faced with the BCs for the first time, choose
Lists (Single or Double) as their standard Container.
This is probably not the best choice. Lists are complex
entities which, I suppose, would be useful if you were implementing
a list-processing engine like Lisp.
You'll be a lot better off using
Collections!
- Hierarchy, Graphs, Lists and Trees
- Most of the Components are derived from
BC.Containers.Container (and are in packages that are
children of BC.Containers). The only feature common at
this level is iteration; implicit in the fact that
BC.Containers is a generic package parameterised by the
type Item is that Containers contain just one sort of
thing.
This works fine except for Graphs; a Graph is a collection of
Vertices (OK so far), while Vertices are connected by (not
collections of) Arcs. Graphs will remain outside the Containers
hierarchy.
Trees aren't Containers, largely because of the difficulty of
supporting standard Iterators in a non-linear structure like a
Tree, but also because they are "polylithic" (Grady's term, implies
structural sharing).
Lists aren't Containers, because they are polylithic.
That said, I've tried to use a common style throughout.
- Compilers
- The new Aonix ObjectAda 7.2 demo compiler handles the stock
Components without change, so the old "Aonix-only" versions of the
test programs, which omitted Dynamic forms, are no longer needed.
The Components work well (for me) with GCC-3.2 and prerelease
3.3 compilers.

[index]