Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

plist.cc

Go to the documentation of this file.
00001 #include "plist.h"
00002 
00003 using namespace std;
00004 
00005 namespace plist {
00006 
00007   ObjectBase* loadXML(xmlNode* node) {
00008     ObjectBase* obj=NULL;
00009     if(ObjectBase::xNodeHasName(node,"array")==0)
00010       obj=new Array(true);
00011     else if(ObjectBase::xNodeHasName(node,"dict")==0)
00012       obj=new Dictionary(true);
00013     else if(ObjectBase::xNodeHasName(node,"real")==0)
00014       obj=new Primitive<double>;
00015     else if(ObjectBase::xNodeHasName(node,"integer")==0)
00016       obj=new Primitive<long>;
00017     else if(ObjectBase::xNodeHasName(node,"string")==0)
00018       obj=new Primitive<std::string>;
00019     else if(ObjectBase::xNodeHasName(node,"true")==0)
00020       obj=new Primitive<bool>;
00021     else if(ObjectBase::xNodeHasName(node,"false")==0)
00022       obj=new Primitive<bool>;
00023     else
00024       return NULL;
00025     obj->loadXML(node);
00026     return obj;
00027   }
00028   
00029   //! allows us to use the LoadSave suite for loading and parsing general XML functions, but forwards loadXML to plist::loadXML() and stores the result as a member
00030   class PolymorphicLoader : public XMLLoadSave {
00031   public:
00032     PolymorphicLoader() : XMLLoadSave(), obj(NULL) {} //!< constructor
00033     virtual ~PolymorphicLoader() {} //!< destructor
00034     PolymorphicLoader(const PolymorphicLoader& p) : XMLLoadSave(p), obj(NULL) {} //!< copy constructor -- doesn't copy #obj, sets the local instance to NULL
00035     PolymorphicLoader& operator=(const PolymorphicLoader& p) { XMLLoadSave::operator=(p); return *this; } //!< copy constructor -- doesn't copy #obj, keeps current value of #obj
00036     virtual void loadXML(xmlNode* node) { obj=plist::loadXML(node); } //!< forward call to the static plist implementation
00037     virtual void saveXML(xmlNode * /*node*/) const {*(int*)NULL=0xDEADDEAD;} //!< shouldn't ever be called -- call saveXML() on #obj directly
00038     ObjectBase * obj; //!< storage of results from loadXML
00039   };
00040   
00041   ObjectBase* loadFile(const std::string& file) {
00042     PolymorphicLoader loader;
00043     if(!loader.loadFile(file.c_str()))
00044       return NULL;
00045     return loader.obj;
00046   }
00047   
00048   ObjectBase* loadBuffer(const char* buf, unsigned int len) {
00049     PolymorphicLoader loader;
00050     if(!loader.loadBuffer(buf,len))
00051       return NULL;
00052     return loader.obj;
00053   }
00054   
00055 } //namespace plist
00056 
00057 /*! @file
00058  * @brief 
00059  * @author Ethan Tira-Thompson (ejt) (Creator)
00060  *
00061  * $Author: ejt $
00062  * $Name: tekkotsu-3_0 $
00063  * $Revision: 1.10 $
00064  * $State: Exp $
00065  * $Date: 2006/09/16 20:11:53 $
00066  */

Tekkotsu v3.0
Generated Wed Oct 4 00:03:45 2006 by Doxygen 1.4.7