We presently seem to lack efficients libraries to manipulate automata, which are a common but not so user-friendly data structure. ASTL has been developed to fill this gap the best possible way...
ASTL is a set of C++, STL-like software components to manipulate automata,. It is based on generic programming techniques introduced by A. Stepanov, M. Lee and D. musser known as the Standard Template Library and part of the standard C++. Accordingly, ASTL provide two main components: automaton container classes and generic algorithms which make use of two others components, the iterators and function objects. Notion of programming with STL is a prerequisite to fully understand this library. We stress the fact that generic programming in C++ as defined by A. Stepanov is not really object oriented programming. Of course it make use of objects and encapsulation, but inheritance is rarely used and it rather centers around templates manipulation for efficiency purposes.
ASTL aims at providing generic algorithms on automata written once and for all. We designed the code with efficiency and flexibility in mind. with this library, we are able to write adaptative code (which is a synonym for reusabbility) letting some doors opened for futures needs. We achieve flexibility at the lower level, that is the container implementation: to meet a users need on memory space restriction or on willingly fast part of the code, we supply a variety of automaton containers, each one of these presenting advantages and drawbacks, so that the programmer can pick his choice among them according to his objectives.
This library has been designed to be algorithm-oriented and effort have been made on analysis and conception of code to fit in the STL philosophy of programming: we want the algorithms to impose constraints on the containers interface (including its iterators interface) but not the other way round. Eventually we ended up with a combination of class templates constituting the common public interface of all our automaton classes.