vrshoot

annotate libs/assimp/OgreXmlHelper.hpp @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children
rev   line source
nuclear@0 1
nuclear@0 2 #include "irrXMLWrapper.h"
nuclear@0 3 #include "fast_atof.h"
nuclear@0 4
nuclear@0 5 namespace Assimp
nuclear@0 6 {
nuclear@0 7 namespace Ogre
nuclear@0 8 {
nuclear@0 9
nuclear@0 10 typedef irr::io::IrrXMLReader XmlReader;
nuclear@0 11
nuclear@0 12
nuclear@0 13 //------------Helper Funktion to Get a Attribute Save---------------
nuclear@0 14 template<typename t> inline t GetAttribute(XmlReader* Reader, std::string Name);
nuclear@0 15
nuclear@0 16 /*
nuclear@0 17 {
nuclear@0 18 BOOST_STATIC_ASSERT(false);
nuclear@0 19 return t();
nuclear@0 20 }
nuclear@0 21 */
nuclear@0 22
nuclear@0 23 template<> inline int GetAttribute<int>(XmlReader* Reader, std::string Name)
nuclear@0 24 {
nuclear@0 25 const char* Value=Reader->getAttributeValue(Name.c_str());
nuclear@0 26 if(Value)
nuclear@0 27 return atoi(Value);
nuclear@0 28 else
nuclear@0 29 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
nuclear@0 30 }
nuclear@0 31
nuclear@0 32 template<> inline unsigned int GetAttribute<unsigned int>(XmlReader* Reader, std::string Name)
nuclear@0 33 {
nuclear@0 34 const char* Value=Reader->getAttributeValue(Name.c_str());
nuclear@0 35 if(Value)
nuclear@0 36 return static_cast<unsigned int>(atoi(Value));//yes, ugly, but pfff
nuclear@0 37 else
nuclear@0 38 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
nuclear@0 39 }
nuclear@0 40
nuclear@0 41 template<> inline float GetAttribute<float>(XmlReader* Reader, std::string Name)
nuclear@0 42 {
nuclear@0 43 const char* Value=Reader->getAttributeValue(Name.c_str());
nuclear@0 44 if(Value)
nuclear@0 45 return fast_atof(Value);
nuclear@0 46 else
nuclear@0 47 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
nuclear@0 48 }
nuclear@0 49
nuclear@0 50 template<> inline std::string GetAttribute<std::string>(XmlReader* Reader, std::string Name)
nuclear@0 51 {
nuclear@0 52 const char* Value=Reader->getAttributeValue(Name.c_str());
nuclear@0 53 if(Value)
nuclear@0 54 return std::string(Value);
nuclear@0 55 else
nuclear@0 56 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
nuclear@0 57 }
nuclear@0 58
nuclear@0 59 template<> inline bool GetAttribute<bool>(XmlReader* Reader, std::string Name)
nuclear@0 60 {
nuclear@0 61 const char* Value=Reader->getAttributeValue(Name.c_str());
nuclear@0 62 if(Value)
nuclear@0 63 {
nuclear@0 64 if(Value==std::string("true"))
nuclear@0 65 return true;
nuclear@0 66 else if(Value==std::string("false"))
nuclear@0 67 return false;
nuclear@0 68 else
nuclear@0 69 throw DeadlyImportError(std::string("Bool value has invalid value: "+Name+" / "+Value+" / "+Reader->getNodeName()));
nuclear@0 70 }
nuclear@0 71 else
nuclear@0 72 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
nuclear@0 73 }
nuclear@0 74 //__________________________________________________________________
nuclear@0 75
nuclear@0 76 inline bool XmlRead(XmlReader* Reader)
nuclear@0 77 {
nuclear@0 78 do
nuclear@0 79 {
nuclear@0 80 if(!Reader->read())
nuclear@0 81 return false;
nuclear@0 82 }
nuclear@0 83 while(Reader->getNodeType()!=irr::io::EXN_ELEMENT);
nuclear@0 84 return true;
nuclear@0 85 }
nuclear@0 86
nuclear@0 87 }//namespace Ogre
nuclear@0 88 }//namespace Assimp