This page contain a description of the architecture of the base layer in the GNU PDF Library.
Base Layer Architecture
The base layer of the GNU PDF Library provide system-independent access to several facilities.
The implemented facilities are organized into modules. Each module export an API to be used by the client application or other layers of the library. Some modules make use of the facilities implemented in other modules (such as allocation or error functions).
- Memory Allocation Module
- This module provides system-independent memory allocation/deallocation.
- Basic Types Module
- This module provides a system-independent implementation of basic data types such as signed and unsigned integers, constants, etc.
- Hash Module
- This module provides an implementation of associative tables using several hashing algorithms.
- List Module
- This module provides an implementation of dynamic lists and vectors.
- Stream Module
- This module provides system-independent and device-independent homogeneous access to filesystem files and memory buffers.The streams are buffered and support filtering for both read and write operations.
- Floating Point Arithmetic Module
- This module provides system-independent floating point real numbers and several related facilities such as matrix and points manipulations, interpolation routines, real to string and string to real conversion and rounding.
- Text Module
- This module provides access to a text abstraction as an encoded sequence of characters. Several text encodings are supported and conversion functions to change the encoding of a text are provided.
- Time Module
- This module provides facilities to manipulate calendar dates, time arithmetic and time spans.
- Filesystem Module
- This module provides facilities to access filesystem objects (files, directories, file permissions, etc) in a system-independent way.
- Error Module
- This module provides facilities to manage error types, error signaling, error descriptions, etc.
- Crypt Module
- This module provides de/encryption facilities.
Some modules depends on the availability of another module. So the implementation of certain modules should be deferred until the implementation of another module becomes available (we are not using stubs in the development).
Here is the dependency graph for the modules pertaining to the Base Layer of the library.