A C++ class library is provided containing classes and functions that implement the
ODL constructs. In addition, OML (Object Manipulation Language) is used to specify
how database objects are retrieved and manipulated within the application program. To
create a working application, the C++ ODL declarations are passed through a C++ ODL
preprocessor, which has the effect of generating a C++ header file containing the object
database definition and storing the ODMS metadata in the database. The user’s C++ application,
which contains OML, is then compiled in the normal way along with the generated
object database definition C++ header file. Finally, the object code output by the compiler
is linked with the ODMS runtime library to produce the required executable image, as
illustrated in Figure 27.16. In addition to the ODL/OML bindings, within ODL and OML
the programmer can use a set of constructs, called physical pragmas, to control some
physical storage characteristics such as the clustering of objects on disk, indexes, and
memory management