mainc++ library for object persistence - Summary

Membership Info
Project Admin:
1 active member

Group identification
Id: #8544
System Name: libpersist
Name: c++ library for object persistence
Group Type: non-GNU software and documentation

Search in this Group


This project is not part of the GNU Project.

libpersist is a small library of c++ base classes and templates providing the capability to store and load objects in their entirety across executions. It also provides for object relocation between threads in a NUMA (non-uniform memory access) parallel processing environment.

libpersist was written for use in simulations, where software objects often correspond to simulated objects that are connected to or contained within others. During the build phase, the objects are instantiated, then stored to disk. In the operation phase, the objects are reloaded. The objects are usually built once, and operated many times with variations in inputs or parameters. There is usually no high throughput requirements during the build phase of a simulator. High throughput, however, becomes the most important issue in actual simulation runs.

The core idea is that objects stored to disk as POD are re-constructed as objects. This re-construction is aided by three id-based reference/handler template classes. They replace POPs (plain old pointers) for embedding objects in other objects. Together with supporting template functions, these reference classes relieve the user from the drudgery of explicitly coding for object management for every relevant object.

In a NUMA environment, threads can be made to execute on specified processors and allocate memory from specified memory blocks. This means objects should be relocated to the thread that will execute their member functions. Relocation is a special case of persistence, requiring re-construction after the POD has been moved in memory. After all objects have been relocated to their target memories, all references to the objects must be swizzled (their ids resolved to their addresses), so that they can be de-referenced efficiently like POPs.

libpersist does assume the use of threads, which share a common virtual address space, so that POPs are valid in all threads. It provides an in-memory object manager which keeps a hash table of object id to address translations. This means all objects are accessible in all threads. libpersist does not impose any access restriction. But users can impose their own.

The use of NUMA and threads is NOT part of libpersist. But example derived classes and programs, included as part of the documentation, demonstrate the use of libpersist in NUMA threads.

Registration Date: Tue 09 May 2006 07:17:50 PM UTC
License: GNU General Public License v2 or later
Development Status: 3 - Alpha


Latest News rss feed
Release 2-0.0
     posted by elainety, Fri 24 Jun 2011 06:28:46 PM UTC - 0 replies

1) Unimportant interface change to Exception, but still an interface change, hence the major revision.

2) Refinements to object retrieval - to try harder.

3) More syntax neatness to make g++ 4.6 happier.

The tar ball has been uploaded to the download area.

Bug Fix
     posted by elainety, Fri 15 May 2009 12:10:07 AM UTC - 0 replies

Fix mref::insert bug. Explicitly initialize new Object.

To check out:
bzr co

Main Features in Release 1.0.1
     posted by elainety, Tue 28 Apr 2009 06:29:27 PM UTC - 0 replies

Provides for the base class Object to be a virtual base for multiple inheritances.

Provides for full reconstruction when an object is first loaded as a less than fully derived class, via overriding the static method Object::fullyReconstruct in an appropriate intermediate derived class.

Communication Tools
 Mailing Lists (0 public mailing lists)

Development Tools
 Bug Tracker (open items: 0, total: 0)
  - Browse open items
  - Submit a new item
 Task Manager (open items: 3, total: 3)
  - Browse open items
  - Submit a new item

Back to the top

Powered by Savane 3.7