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")) {
00010       Array * a=new Array;
00011       a->setLoadSavePolicy(Collection::SYNC,Collection::SYNC); // just in case defaults change...
00012       obj=a;
00013     } else if(ObjectBase::xNodeHasName(node,"dict")) {
00014       Dictionary * d=new Dictionary;
00015       d->setLoadSavePolicy(Collection::SYNC,Collection::SYNC); // just in case defaults change...
00016       obj=d;
00017     } else if(ObjectBase::xNodeHasName(node,"real"))
00018       obj=new Primitive<double>;
00019     else if(ObjectBase::xNodeHasName(node,"integer"))
00020       obj=new Primitive<long>;
00021     else if(ObjectBase::xNodeHasName(node,"string"))
00022       obj=new Primitive<std::string>;
00023     else if(ObjectBase::xNodeHasName(node,"true"))
00024       obj=new Primitive<bool>;
00025     else if(ObjectBase::xNodeHasName(node,"false"))
00026       obj=new Primitive<bool>;
00027     else
00028       return NULL;
00029     obj->loadXML(node);
00030     return obj;
00031   }
00032   
00033   //! 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
00034   class PolymorphicLoader : public XMLLoadSave {
00035   public:
00036     PolymorphicLoader() : XMLLoadSave(), obj(NULL) {} //!< constructor
00037     virtual ~PolymorphicLoader() {} //!< destructor
00038     PolymorphicLoader(const PolymorphicLoader& p) : XMLLoadSave(p), obj(NULL) {} //!< copy constructor -- doesn't copy #obj, sets the local instance to NULL
00039     PolymorphicLoader& operator=(const PolymorphicLoader& p) { XMLLoadSave::operator=(p); return *this; } //!< copy constructor -- doesn't copy #obj, keeps current value of #obj
00040     virtual void loadXML(xmlNode* node) { obj=plist::loadXML(node); } //!< forward call to the static plist implementation
00041     virtual void saveXML(xmlNode * /*node*/) const {*(int*)NULL=0xDEADDEAD;} //!< shouldn't ever be called -- call saveXML() on #obj directly
00042     ObjectBase * obj; //!< storage of results from loadXML
00043   };
00044   
00045   ObjectBase* loadFile(const std::string& file) {
00046     PolymorphicLoader loader;
00047     if(!loader.loadFile(file.c_str()))
00048       return NULL;
00049     return loader.obj;
00050   }
00051   
00052   ObjectBase* loadBuffer(const char* buf, unsigned int len) {
00053     PolymorphicLoader loader;
00054     if(!loader.loadBuffer(buf,len))
00055       return NULL;
00056     return loader.obj;
00057   }
00058   
00059 } //namespace plist
00060 
00061 /*! @file
00062  * @brief 
00063  * @author Ethan Tira-Thompson (ejt) (Creator)
00064  *
00065  * $Author: ejt $
00066  * $Name: tekkotsu-4_0 $
00067  * $Revision: 1.12 $
00068  * $State: Exp $
00069  * $Date: 2007/11/08 19:48:47 $
00070  */

Tekkotsu v4.0
Generated Thu Nov 22 00:54:54 2007 by Doxygen 1.5.4