I am pleased to announce the initial release of Dequesterity.
Dequesterity is a set of Ada 2005 generics that provide various forms of
general purpose buffer containers. Buffers may be used as deques,
queues, ring buffers, stacks, double ended stacks, vectors, and similar
The generics are combinable and pluggable such that lower level buffer
implementations may be combined with higher level buffer generics to create
a wide selection of buffer types with specific sets of functionality.
Lower level buffer implementations include bounded and unbounded buffer
Higher level buffer implementations add concurrency support, and
streaming capabilities, including Ravenscar compliant buffer forms.
A Passive Buffer provides capabilities for deadlock detection, as well
as seamlessly managing oversized requests. (Read and Write requests that
are larger than the buffer. The oversized requests are blocked until
successful, and the transfer occurs automatically in the background
without requiring any additional tasks.
Buffer instances may be streamed, or may be accessed remotely using the
Distributed Systems Annex.
The Stream Buffer forms allow heterogeneous objects to be read and
written to the buffer. A Ravenscar Stream Buffer allows a producer
and a consumer task to stream heterogeneous objects.
Most buffers can store their state persistently. Some buffer
implementations operate entirely on secondary (file based) storage.
The buffers may be instantiated with user defined types, and indefinite
buffer forms also exist.
The interface to the buffers is modeled after the Ada 2005 container
Some might recall papers presented at SIGAda 2008 discussing the
buffers. I finally got around to creating a release for them.
Any comments on the generics would be greatly appreciated.
Please send comments to brad....@shaw.ca
The latest stable release and older releases may be downloaded from;
For those who want the current development versions of the source they
can download using git (http://git-scm.com/
) by issuing the following
The current development version typically will correspond to the latest
release, but may at times be unstable when new features are being worked on.