RVL defines computational types realizing the principal concepts of calculus in vector spaces, in the form of C++ classes. Brief descriptions of the main classes follow. For a more complete description of each, and for a list of auxiliary classes and functions, see the TOMS paper and the class documentation.
In principle, defining a usable (concrete) subclass involves implementing all five basic methods. RVL provides an partially implemented RVL::StdSpace subclass which implements the three vector methods and encapsulates the others, for spaces whose vector data structure is local, that is, consists of (any number of) elemental parts which expose scalar arrays (pointers) - see LocalRVL. The principal work involved in implementing a new space using RVL::StdSpace is the definition of the vector instance data structure (RVL::DataContainer, see below) appropriate to the space, and designing code to test equality of spaces. Since the space comparison (operator==) will be used in all of the vector function classes listed below, implementations should be as efficient as possible.
Thus applications do not access the computational methods directly. Instead, access to these computations proceeds through an evaluation class. RVL::FunctionalEvaluation and RVL::OperatorEvaluation combine a function and a vector, and return the value of the function at that vector, the value of its derivative (a linear operator), and (optionally) the value of the second derivative (as a bilinear operator), each these encapsulated as an appropriate RVL object. While RVL::Functional and RVL::Operator are abstract base classes, and the various protecte apply... methods must be implemented to build instantiable subclasses. RVL::FunctionalEvaluation and RVL::OperatorEvaluation are fully implemented. Their sanity-check input and output objects, and delegate the actual evaluation to the protected methods defined in RVL::Functional and RVL::Operator subclasses, after the pattern of the RVL::LinearOp apply... methods. Thus these user-defined protected methods can be written with assurance that all domain and range requirements are satisfied.
The Evaluation class concept was introduced in the Hilbert Class Library and further developed in RVL. Besides automated sanity checks, the Evaluation device ensures that the various objects attached to a function at a point of its domain (value, derivative,...) remain coherent, and avoids a great deal of redundant effort otherwise necessary for correct programming. The evaluation technique has various consequences for the construction of functions, described in the TOMS paper.