BARE2D
XMLDataManager.tcc
Go to the documentation of this file.
1 #pragma once
2 
3 namespace BARE2D {
4  // Need to define getData()
5  template<typename T>
6  T XMLDataManager::getData(std::string dataType, unsigned int key) {
7  XMLData* dataPtr = getDataCache(dataType)->findItem(key);
8  if(!dataPtr) return T();
9  T* data = static_cast<T*>(dataPtr);
10  return *data;
11  }
12 
13  // Need to specialize XMLDataManager::readValue()
14  template<>
15  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, std::string& variable);
16  template<>
17  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, unsigned int& variable);
18  template<>
19  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, std::vector<unsigned int>& variable);
20  template<>
21  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, int& variable);
22  template<>
23  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, float& variable);
24  template<>
25  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, std::vector<float>& variable);
26  template<>
27  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, bool& variable);
28  template<>
29  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, std::vector<bool>& variable);
30  template<>
31  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, glm::vec2& variable);
32  template<>
33  bool XMLDataManager::readValue(rapidxml::xml_node<>* parent, std::string valueName, std::vector<glm::vec2>& variable);
34 
35  template<typename T>
36  void XMLDataManager::addDataType() {
37  // Make sure that T is actually a child class of XMLData
38  static_assert(std::is_base_of<XMLData, T>::value, "XML Data Type is not derived class of BARE2D::XMLData");
39 
40  T sample;
41 
42  m_dataTypingFunctions[sample.nodeName] = []() -> XMLData* { return new T; };
43  }
44 }