next up previous contents index
Next: Synopsis Up: Eco Lab Documentation Previous: eco_strstream   Contents   Index


cachedDBM

cachedDBM implements a notion of persistent objects. First and foremostly, it has the syntax of std::map, ie it is a template map object, with a key and value type pair. However, by calling the init() method, you can attach a database file, so that values saved in the cachedDBM are stored on disk, to be accessible at a later time.

The iterator range begin() to end() refers to everything stored in the database. An alternative interface that iterates over the database keys is provided by keys.begin() and keys.end() The database is committed when begin() is called, unless the database was opened readonly. In this latter case, there are potentially items stored in the map which will not be iterated over. The alternative iteration methods firstkey(), nextkey() and eof() is an older interface for iterating over keys.begin() to keys.end(). In this instance, the cachedDBM is not committed when firstkey() is called.

Elements stored in the cachedDBM are not actually written to disk until commit() is called (or the cachedDBM object is destroyed).

Entries in the database can be removed via del(). However, if an item with the same key is in the cache, it will need to be removed via erase() as well, otherwise it will be reinserted in the database at commit time.

Only a very simple caching algorithm is employed, but it seems sufficient for many purposes. If the member max_elem is set, then this acts as an upper limit to the number of items stored in memory. If you request a new item to be loaded via the [] operator, and it will cause the number of items to be exceeded, the cachedDBM object is committed. At least the oldest quarter of the cache is cleared, and up to half of the cache. So if max_elem=100, then one is guaranteed that the previous 50 accessed objects will always be in memory, so can be assigned to a reference.

Classdesc serialisation (XDR serialisation) is used store both keys and value data. The database file are therefore machine independent. As a special exception to serialisation rules, char* can be used as key and data types.



Subsections
next up previous contents index
Next: Synopsis Up: Eco Lab Documentation Previous: eco_strstream   Contents   Index
Russell Standish 2016-09-02