Corey's Home Page
The online home of Corey Minyard
This is a pretty lame web page, but I need something to put information
on for others to use.
Ada Structured Library (ASL) - Current Version 1.0
I have a long-term dream to build a nice set of general containers, mathematical
libraries, and even a generic graphical interface for Ada95. That's
quite a big job, but I have a pretty good set of container classes (lists,
queues, stacks, heaps, trees, btrees, hash tables, sets, bags, etc.) with
a lot of different modes. I also have some semaphores and a leak
detection storage manager. You can read the overview of the containers
The containers themselves are available in zip
archives. A krunched (short filename) zip version is also available
for those of you using weak operating systems :-). These containers are
licensed under the LGPL.
These containers compile under gnat-3.11a and Rational Apex (tested
by Gene Ouye at Rational). They may or may not compile with other
compilers, although several compiler vendors have worked with me to make
the containers more portable. They will not compile with gnat-3.10p.
Hopefully they will compile with gnat-3.11p when it is released, I'll work
hard with ACT to make this happen, if necessary. The containers should
be fully conformant to the RM. I make use of some pretty esoteric
stuff (generic children with inheritance, inherited discriminants, and
others) so some compilers may have trouble. If someone wants to use
the containers and has trouble, I'll be glad to work with them.
A Short Overview of the Containers
The container classes consist of the main container types:
Containers come in three flavors:
Vector - A variable-sized array
AList - A list based upon an array. This is good for
stacks and queues that don't require insertions in the middle.
DList - A doubly linked list, also good for stacks and queues.
This one is good at insertions in the middle.
Tree - An ordered binary tree, balance or unbalanced.
List - A singly linked list, good for traversing in order,
but you can't go backwards.
Hash - A hash table. Good for fast lookups, sets, and
Heap - An ordered heap. Good for finding the largest
or smallest value in a set.
Graph - A standard graph. The links are all bidirectional
DiGraph - A directed graph. The links are uni-directional.
BTree - Good for fast lookups. Not quite as fast as
heaps, but more deterministic.
All containers come in all flavors, except a few do not have
dynamic flavors because it doesn't make sense and Btrees are only dynamic.
Actually, some other combinations don't seem to make much sense, but someone
might use them so they are provided.
Fixed - Implemented using a fixed size array. These
containers are guaranteed to not allocate any dynamic store for their operations.
Expandable - Implemented using a pointer to an array that
will be reallocated as necessary.
Dynamic - Each node in the container is dynamically allocated.
All containers come in versions that use the default storage
management or allow the user to specify the storage management.
The containers are quite functional, each has a rich set
of functions. Tests and example programs are provided as well as
some reasonable documentation.
The ASL contains several semaphore objects implemented using
Binary - A standard binary semaphore
Counting - A standard counting semaphore
Nested - A binary semaphore, but the same task can claim
it multiple times. It must be released the same number of times (by
that task) to release the semaphore.
Nested_Prio - A nested semaphore, but it does priority inheritance.
This doesn't really work yet because setting dynamic priorities in Ada
doesn't work immediately. If anyone has an idea how to make it work,
I'd like to know.
Leak Detection Storage Manager
A storage manager that tracks all the allocated data and
lets the user iterate over it. Useful for finding memory leaks.
It has found a few for me :-).
I'm Looking For A Job
I'm currently in a casual job search, meaning I'm not looking
extremely hard but if the right job comes along I'll jump. I want
to work for a small company with management that can think clearly.
For instance, I want all the engineers to have offices (read Peopleware,
then you will understand). I want to design software using Ada95.
I want to work on free software. The actual products being produced
are not so important, but attitude of the company itself is.
If you are still interested after all that, here is my
resume in pdf
Schedule for reading the Bible in one year
I put together a list
of what to read every day to read the Bible in a year. I also have
a Psion Series 5 agenda
file that has each entry as an anniversary. This can be
used as a standalone agenda or merged in to another agenda.
Obviously, there are 365 entries, so it will clutter up an agenda, but
I like having it in my normal agenda to remind me. The schedule was
taken from an American Tract Society
tract called "Through the Bible in a Year"
Alphanumeric Pager Program in Ada
Here is a program
page an alphanumeric pager using the IXO protocol. It can use a Hayes
modem on a POSIX serial port or a telnet connection.