|
1 | 1 | /***************************************************************************** |
2 | 2 | * |
3 | | - * PROJECT: Multi Theft Auto v1.0 |
| 3 | + * PROJECT: Multi Theft Auto |
4 | 4 | * LICENSE: See LICENSE in the top level directory |
5 | 5 | * FILE: xml/CXMLImpl.cpp |
6 | 6 | * PURPOSE: XML handler class |
@@ -32,65 +32,83 @@ CXMLFile* CXMLImpl::CreateXML(const char* szFilename, bool bUseIDs, bool bReadOn |
32 | 32 | CXMLFile* xmlFile = new CXMLFileImpl(szFilename, bUseIDs, bReadOnly); |
33 | 33 | if (xmlFile->IsValid()) |
34 | 34 | return xmlFile; |
35 | | - else |
36 | | - { |
37 | | - delete xmlFile; |
38 | | - return NULL; |
39 | | - } |
| 35 | + delete xmlFile; |
| 36 | + return nullptr; |
40 | 37 | } |
41 | 38 |
|
42 | 39 | void CXMLImpl::DeleteXML(CXMLFile* pFile) |
43 | 40 | { |
44 | 41 | delete pFile; |
45 | 42 | } |
46 | 43 |
|
| 44 | +CXMLNode* CXMLImpl::ParseString(const char* strXmlContent) |
| 45 | +{ |
| 46 | + TiXmlDocument* xmlDoc = new TiXmlDocument(); |
| 47 | + if (xmlDoc) |
| 48 | + { |
| 49 | + if (xmlDoc->Parse(strXmlContent, 0, TIXML_ENCODING_UTF8)) |
| 50 | + { |
| 51 | + TiXmlElement* xmlDocumentRoot = xmlDoc->RootElement(); |
| 52 | + CXMLNodeImpl* xmlBaseNode = new CXMLNodeImpl(nullptr, nullptr, *xmlDocumentRoot); |
| 53 | + CXMLNode* xmlRootNode = CXMLImpl::BuildNode(xmlBaseNode, xmlDocumentRoot); |
| 54 | + return xmlRootNode; |
| 55 | + } |
| 56 | + } |
| 57 | + return nullptr; |
| 58 | +} |
| 59 | + |
| 60 | +CXMLNode* CXMLImpl::BuildNode(CXMLNodeImpl* xmlParent, TiXmlNode* xmlNode) |
| 61 | +{ |
| 62 | + TiXmlNode* xmlChild = nullptr; |
| 63 | + TiXmlElement* xmlChildElement; |
| 64 | + CXMLNodeImpl* xmlChildNode; |
| 65 | + while (xmlChild = xmlNode->IterateChildren(xmlChild)) |
| 66 | + { |
| 67 | + xmlChildElement = xmlChild->ToElement(); |
| 68 | + xmlChildNode = new CXMLNodeImpl(nullptr, xmlParent, *xmlChildElement); |
| 69 | + CXMLImpl::BuildNode(xmlChildNode, xmlChildElement); |
| 70 | + } |
| 71 | + return xmlParent; |
| 72 | +} |
| 73 | + |
47 | 74 | CXMLNode* CXMLImpl::CreateDummyNode() |
48 | 75 | { |
49 | | - CXMLNode* xmlNode = new CXMLNodeImpl(NULL, NULL, *new TiXmlElement("dummy_storage")); |
| 76 | + CXMLNode* xmlNode = new CXMLNodeImpl(nullptr, nullptr, *new TiXmlElement("dummy_storage")); |
50 | 77 | if (xmlNode->IsValid()) |
51 | 78 | return xmlNode; |
52 | | - else |
53 | | - { |
54 | | - delete xmlNode; |
55 | | - return NULL; |
56 | | - } |
| 79 | + delete xmlNode; |
| 80 | + return nullptr; |
57 | 81 | } |
58 | 82 |
|
59 | 83 | CXMLAttribute* CXMLImpl::GetAttrFromID(unsigned long ulID) |
60 | 84 | { |
61 | 85 | // Grab it and verify the type |
62 | 86 | CXMLCommon* pCommon = CXMLArray::GetEntry(ulID); |
63 | 87 | if (pCommon && pCommon->GetClassType() == CXML_ATTR) |
64 | | - { |
65 | 88 | return reinterpret_cast<CXMLAttribute*>(pCommon); |
66 | | - } |
67 | 89 |
|
68 | 90 | // Doesn't exist or bad type |
69 | | - return NULL; |
| 91 | + return nullptr; |
70 | 92 | } |
71 | 93 |
|
72 | 94 | CXMLFile* CXMLImpl::GetFileFromID(unsigned long ulID) |
73 | 95 | { |
74 | 96 | // Grab it and verify the type |
75 | 97 | CXMLCommon* pCommon = CXMLArray::GetEntry(ulID); |
76 | 98 | if (pCommon && pCommon->GetClassType() == CXML_FILE) |
77 | | - { |
78 | 99 | return reinterpret_cast<CXMLFile*>(pCommon); |
79 | | - } |
80 | 100 |
|
81 | 101 | // Doesn't exist or bad type |
82 | | - return NULL; |
| 102 | + return nullptr; |
83 | 103 | } |
84 | 104 |
|
85 | 105 | CXMLNode* CXMLImpl::GetNodeFromID(unsigned long ulID) |
86 | 106 | { |
87 | 107 | // Grab it and verify the type |
88 | 108 | CXMLCommon* pCommon = CXMLArray::GetEntry(ulID); |
89 | 109 | if (pCommon && pCommon->GetClassType() == CXML_NODE) |
90 | | - { |
91 | 110 | return reinterpret_cast<CXMLNode*>(pCommon); |
92 | | - } |
93 | 111 |
|
94 | 112 | // Doesn't exist or bad type |
95 | | - return NULL; |
| 113 | + return nullptr; |
96 | 114 | } |
0 commit comments