Based on the discussion in previous sections, we are able to specify three relatively autonomous areas a C++ persistence library should cover: