package PragmARC
The root package of the components. Declares some common exceptions

package PragmARC.Ansi_Tty_Control
Control strings for ANSI-standard terminals
These strings when sent to an ANSI-standard terminal, have the stated effect

package PragmARC.Assertion_Handler
Provides run-time checking of assertions for program correctness
Test program: assertst.adb

procedure PragmARC.Assignment
Easy creation of procedure Assign for instantiating structures with non-limited elements
An instantiation of this procedure simply performs
   To := From;

package PragmARC.Bag_Unbounded
Generic unbounded-bag ADT for general use
Test program: bag_test.adb; uses bag_test_help.ad?

package PragmARC.Bag_Unbounded_Unprotected
Generic unbounded-bag ADT for sequential use only.

package PragmARC.Binary_Searcher
Binary search of an ordered list
Test program: bs_test.adb

package PragmARC.Binary_Semaphore_Handler
Binary semaphore for controlling concurrent access not suitable for
a concurrent form or a monitor

package PragmARC.Character_Regular_Expression_Matcher
Instantiation of PragmARC.Regular_Expression_Matcher for strings
Test program: mt.adb, strm_sub.adb

package PragmARC.Complex
Provides complex numbers and operations
Ada.Numerics.Generic_Complex_Types provides all the functionality
of this package
It is provided should your compiler not implement Annex G
Test program: cmplxtst.adb

package PragmARC.Date_Handler
Provides day of the week functions; leap-year functions; days-in-month
functions; functions to split Seconds to Hours, Minutes, and Seconds; and
various Image functions for Year, Month, Day, Hour, Minutes, and Seconds,
including an Image function for type Ada.Calendar.Time
Test program: datetest.adb, df_test.adb

package PragmARC.Deck_Handler
A simplified cross between a list and a queue to be used as a deck of cards in card games
Test program: devil.adb, devil2.adb

package PragmARC.Forwarder
Concurrent forwarder for task decoupling

procedure PragmARC.Genetic_Algorithm
A generic framework for genetic programming.
Test program: evolve_pi.adb

function PragmARC.Get_Line
A function to obtain an entire line of text from an input file, & skip the line terminator
Modified from the algorithm in the article "Variable-Length String Input in Ada" by J. Carter in ADA LETTERS, 1989 May/Jun

package PragmARC.Hash_Fast_Variable_Length
Fast "hashing function specifically tailored to variable-length text strings."
"Similar strings are not likely to collide."
From P. K. Pearson, "Fast Hashing of Variable-Length Text Strings," Comm. ACM, 1990 Jun
Test program: hashtest.adb

package PragmARC.Images
Extended image functions for integer, modular, and floating-point types
Test program: test_images.adb

function PragmARC.Images.Image
Instantion of PragmARC.Images.Signed_Image for type Integer

package PragmARC.Least_Squares_Fitting
Least-squares line fitting to a set of data
Test programs: line_fit_test.adb, line_fit_test_win_io.adb
(line_fit_test_win_io.adb uses Win_IO packages to plot data and fit line)

package PragmARC.Linear_Equation_Solver
Solves linear equations of the form A * X = B for X, where A is
a matrix and X and B are vectors
Works for indeterminate linear equations
Uses QR factorization
Test program: lin_test.adb

package PragmARC.List_Bounded
General purpose list for general use
A list has elements in sequence; each element has a position in
that sequence
Positions are used to manipulate a list
Each list has a maximum length

package PragmARC.List_Bounded_Unprotected
General purpose list for sequential use only
A list has elements in sequence; each element has a position in
that sequence
Positions are used to manipulate a list
Each list has a maximum length
Test program: lb_test.adb; uses lb_test_help.ad?

package PragmARC.List_Unbounded
General purpose list for general use
A list has elements in sequence; each element has a position in
that sequence
Positions are used to manipulate a list
Test program: lsort.adb; uses lsorthlp.ad?

package PragmARC.List_Unbounded_Unprotected
General purpose list for sequential use
A list has elements in sequence; each element has a position in
that sequence
Positions are used to manipulate a list

package PragmARC.Math
Provides useful constants not defined by Ada.Numerics

package PragmARC.Math.Integer_Functions
Provides GCD and LCM functions
Test program: gcd_test.adb

package PragmARC.Math.Functions
This package is implemented in terms of Ada.Numerics.Generic_Elementary_Functions. It provides
argument checking via subtypes rather than using Argument_Error.
Test program: mathtest.adb

package PragmARC.Matrix_Math
Matrix manipulation routines
User supplies Element (number) type of matrices and constants
and operations for the type
Must be able to supply negative one (-1) and zero (0) constants
The generic parameters are designed to make instantiation easy for
a floating-point element:
     use Ada.Numerics.Elementary_Functions; -- For Sqrt

     package PragmARC.Real_Matrix is new Matrix_Math (Element => Float,
         Neg_One_Element => -1.0, Zero_Element => 0.0);
Type Element is private to allow more abstract types
(complex numbers, for example)
Test program: mat_test.adb

package PragmARC.Menu_Handler
Straightforward text menus for ANSI-standard terminals

package PragmARC.Min_Max
Minimum and maximum functions for non-scalar values for which "<"
is meaningful

function PragmARC.Mixed_Case
Convert a string to mixed case
Test program: reflect_test.adb

package PragmARC.Monitor_Handler
Monitor for concurrent use

package PragmARC.Postfix_Calculator
Provides a postfix (reverse Polish notation) calculator with
many features
Test program: calc.adb

package PragmARC.Protected_Option
Provides a Boolean Enabled/Disabled option selection suitable
for concurrent use

package PragmARC.Queue_Bounded
Bounded queue ADT for general use
Each queue has a preset maximum size
Test program: qb_test.adb; uses qb_test_hlp.ads

package PragmARC.Queue_Bounded_Blocking
Bounded queue ADT for concurrent use only
Each queue has a preset maximum size
A call to Put when the queue is full blocks the caller until
another task calls Get
A call to Get when the queue is empty blocks the caller until
another task calls Put

package PragmARC.Queue_Bounded_Unprotected
Bounded queue ADT for sequential use only
Each queue has a preset maximum size

package PragmARC.Queue_Unbounded
General purpose queue for general use
Test program: q_test.adb; uses q_test_hlp.ads

package PragmARC.Queue_Unbounded_Blocking
Blocking queue for concurrent use
Attempts to Get from an empty queue block until another task adds an Element to the queue

package PragmARC.Queue_Unbounded_Unprotected
General purpose queue for sequential use

package PragmARC.Quick_Searcher
Fast string search routine; faster than Boyer-Moore for
most reasonable search patterns
From COMMUNICATIONS OF THE ACM, 1990 Aug
Test program: qs_test.adb

package PragmARC.Reflection
Determine a unit's full name
Test program: reflect_test.adb

package PragmARC.Regular_Expression_Matcher
Generic regular expression pattern matching
A pattern consists of elements
Elements can be
    A literal
    The wild item
    An escaped item
    A negated element
    A class
    A closure
Test program: mt.adb, strm_sub.adb

package PragmARC.REM_NN_Wrapper
A Recursive Error Minimization (REM) neural network
Easy to use, fast, & robust
Need only specify Num_Input_Nodes, Num_Hidden_Nodes, Num_Output_Nodes, & Num_Patterns
If Num_Patterns is not easily determined, set it & R to 1
Set New_Random_Weights to False & Num_Patterns to 1 to use
a previously-trained network
Set Weight_File_Name as desired
Default values for all other parameters should be satisfactory
Test program: xor_problem.adb

package PragmARC.Safe_Pointers
Reference-counted pointers that are automatically deallocated when the count becomes
zero
Test program: sp_test.adb; uses sp_test_help.ads

package PragmARC.Safe_Suspension_Objects
Invokes a suspension object "safely" using the features of controlled types

package PragmARC.Safe_Semaphore_Handler
Invokes a binary semaphore "safely" using the features of controlled types

package PragmARC.Set_Discrete
Pascal-like set type and operations
Test program: set_test.adb

package PragmARC.Skip_List_Unbounded
Implements a skip list, a probabilistically-balanced
structure similar to a balanced tree in use and in search time
Described by W. Pugh in "Skip Lists:  A Probabilistic Alternative
to Balanced Trees," CACM 1990 Jun
Can also be used as a priority queue
Test program: skiptest.adb; uses skip_help.ad?

procedure PragmARC.Skip_List_Unbounded.Put
Output procedure for skip lists, for debugging and visualization

procedure PragmARC.Sort_Heap
Generic heap sort
Test program: heap_test.adb

procedure PragmARC.Sort_Insertion
Generic insertion sort

procedure PragmARC.Sort_Quick_In_Place
Generic quick sort
Uses median-of-3 pivot selection
Uses PragmARC.Sort_Insertion on short arrays

procedure PragmARC.Sort_Radix
Generic radix sort for arrays of modular types
Test program: radix_test.adb

package PragmARC.Stack_Unbounded
General purpose stack for general use

package PragmARC.Stack_Unbounded_Unprotected
General purpose stack for sequential use

package PragmARC.Three_Way
Three way comparison operation

package PragmARC.Transporter_Handler
Transporter task for task decoupling

package PragmARC.Universal_Random
Universal random number generator
Passes "stringent" tests for randomness and independence
Modified by J. Carter from version given in Ada Letters 1988 Sep/Oct
Ada 95 defines 2 standard random-number
packages, Ada.Numerics.Float_Random & Ada.Numerics.Discrete_Random.
However, the random-number algorithm used by these packages
is implementation defined. This package provides a portable
generator of known, good quality, should portability of the
algorithm be a concern.
Test program: randtest.adb

package PragmARC.Us_Card
Definition of standard cards used in USA

package PragmARC.Us_Deck
An instantiation of PragmARC.Deck_Handler for the cards defined in PragmARC.Us_Card

package PragmARC.Word_Input
Provides the capability to get a word from a text file
A word is a sequence of non-whitespace characters separated
by whitespace
Whitespace is one or more spaces, horizontal tabs, or
line terminators

package PragmARC.Wrapping
Provides equivalents to the 'Pred and 'Succ functions that wrap around from 'First to 'Last and from 'Last to 'First
Test program: wrapping_test.adb
