Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

Persistence.cxx

Go to the documentation of this file.
00001 // $Id: Persistence.cxx,v 1.4 2001/02/09 20:29:06 jrb Exp $
00002 //
00003 // Implementation of the PersistentObject, and CompoundPersistentObject classes.
00004 
00005 
00006 #include "dom/DOM_Document.hpp"
00007 #include "xml/Persistence.h"
00008 
00009 namespace xml {
00010   std::map<PersistentObject::_PersistKey, PersistentObject::_Factory*>* 
00011     PersistentObject::s_persist_table = 0;
00012 
00014   PersistentObject* PersistentObject::_Factory::create(const DOM_Element&) {
00015     return 0;
00016   }
00017 
00018   // persist - create an xml element out of this object
00019 
00020   //  DOM_Element&
00021   DOM_Element    PersistentObject::persist(DOM_Element& parent) const {
00022     DOM_Document doc = parent.getOwnerDocument();
00023     
00024     // Make a new element by specifying tagname and list of attr.
00025     // Note DOM spec only allows creation of non-null element when
00026     // it's associated with a pre-existing document.
00027 
00028     //    DOM_Element& newElem = 
00029     DOM_Element newElem = 
00030       doc.createElement(static_cast<DOMString> (persistKey().c_str()));
00031     parent.appendChild(newElem);
00032     
00033     return newElem;
00034   }
00035   
00036   
00037   // addPersistence -- register a class key with an object to create for
00038   //  persistence
00039   
00040   bool PersistentObject::addPersistence(const _PersistKey& i, _Factory* f) {
00041       
00042     static std::map<PersistentObject::_PersistKey, PersistentObject::_Factory*>
00043       splist;
00044       
00045     if (!s_persist_table)
00046       s_persist_table = &splist;
00047     
00048     else if ((s_persist_table->find(i) != s_persist_table->end()))      
00049       return false;
00050     
00051     s_persist_table->insert( std::make_pair<_PersistKey,_Factory*>(i,f) );
00052     
00053     return true;
00054   }
00055 }  // end namespace xml
00056 
00057 
00058 
00059 
00060 

Generated at Wed Nov 21 12:22:26 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000