From: Arkadiy Vertleyb (vertleyb_at_[hidden])
Date: 2004-02-04 11:17:52
A while ago we introduced RTL the Relational Template Library a
lightweight facility to create relational tables and perform relational
operations on them.
The main concept RTL operates with is a relation, which has two types of
models: tables and operators. Tables can store, in a type safe manner,
fields of any types that satisfy requirements imposed by a typical STL
container. Operators store references to their arguments, and produce data
on the fly. Both provide iterators that can be used in STL algorithms.
Any relation (operator or table) can serve as an argument to yet another
operator, thus forming an arbitrary complicated expression tree.
A relation has a sort order, which is calculated at compile time based on
the sort order of its arguments. Range queries are available, based on this
RTL allows to index any relation, which again can be either a table or a
relational operator. In this sense our indexing models the ORDERED BY
feature, provided by SQL. Therefore a relational expression can contain any
number of indexes, used to re-sort tuples to better suite a particular query
The March issue of C/C++ users journal will contain our article about RTL,
where we described the library in more depth. This article reflects the
state of the library as of about a year ago.
This time we are offering a significantly enhanced version of the library.
The main addition is the TRANSACTION facility, that allows for synchronized
updates to one or more tables. The additional very powerful (in our
opinion) benefit is the possibility of incremental index update.
When a table is changed, all the indexes that depend on this table get
invalidated, and need to be updated. RTL takes care of this by calculating
deltas on each index, and applying only necessary changes incrementally.
We also modified the library interface to use MPL sequences instead of our
proprietary type list implementation, and replaced all our meta-programming
code to also make use of MPL.
RTL allows the user to choose between available table implementations, as
well as define new ones. The current in-stock implementation is based on
std::vector, and therefore is most appropriate when the updates dont happen
too often. We also experimented with indexed_set library to define a
set-based implementation. Since the indexed_set is not a part of boost yet,
we do not currently supply this implementation. However we do have it, and
if anybody has immediate interest, please let us know well make it
available (you will have to download the indexed_set library).
We struggled to support VC6 up to the last moment, when some of our tests
failed to build with Boost release candidate 2. The problems are with
quantitative limitations we are getting ISO, and have to brake down our
tests in smaller units. Since Microsoft no longer supports this compiler,
we also decided to stop supporting it (we may re-consider if there are
The library has been tested with VC7.1 and GCC 3.3.
Here is the link:
As always, we are looking forward to any feedback.
Scope out the new MSN Plus Internet Software optimizes dial-up to the max!
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk