Previous slide Next slide Back to the first slide View text version


Notes:

A large variety of components are contained in DiSTiL. These fall into six distinct categories, as shown.

The data-structure components determine how elements are going to be connected at a conceptual level and how these connections are used when accessing the elements. The library contains arrays (both random-access and stack-like constructs), linked lists (ordered or not), red-black trees (a convenient form of a self-balancing binary tree) and hash-table structures.

Storage components define how data is going to be stored in memory. We can do all our work in persistent memory (our data-structure is going to be written in a file and retrieved from there when we access it again) or simply in transient memory. These options can be combined with allocation policies (allocate containers and elements on demand vs. pre-allocate a large enough memory area).

Architectural components can simply “flavor” our code generation process. By default, the implementations of all data-structure operations are inlined. By addition of a “Functional” component, however, code can be generated in functions (and possibly reused by subsequent operations on the same structure).

Our “special-purpose” layer was created for an application that I intend to describe later.

Other useful data-structure features (e.g. run-time bound check) have been encapsulated in DiSTiL components and can be used in any data-structure.

Additionally, we have factored out code from a number of components and reuse them in a transparent manner (i.e., these components may exist even though the user didn’t explicitly specify them)