YAPOG  0.0.1
Yet Another Pokemon Online Game
XmlObjectIDLoader.hxx
Go to the documentation of this file.
1 #ifndef YAPOG_XMLOBJECTIDLOADER_HXX
2 # define YAPOG_XMLOBJECTIDLOADER_HXX
3 
6 
7 namespace yap
8 {
9  template <typename T, typename TXmlReader>
11  const Path& rootPath,
12  const String& rootNodeName)
13  : rootPath_ (rootPath)
14  , rootNodeName_ (rootNodeName)
15  , objects_ ()
16  , currentID_ ()
17  , currentObject_ (nullptr)
18  {
19  }
20 
21  template <typename T, typename TXmlReader>
23  {
24  for (const auto& it : objects_)
25  delete it.second;
26  }
27 
28  template <typename T, typename TXmlReader>
30  {
31  if (objects_.Contains (id))
32  return objects_[id];
33 
34  T* object = new T (id);
35  objects_.Add (id, object);
36 
37  IFStream file;
38  ContentManager::Instance ().LoadFile (rootPath_, id, file);
39 
40  XmlReader xmlReader (file, rootNodeName_);
41  TXmlReader objectReader (GetObject (id), rootNodeName_);
42  xmlReader.Accept (objectReader);
43 
44  return object;
45  }
46 
47  template <typename T, typename TXmlReader>
49  {
50  if (currentID_ != id)
51  {
52  currentID_ = id;
53  currentObject_ = objects_[currentID_];
54  }
55 
56  return *currentObject_;
57  }
58 } // namespace yap
59 
60 #endif // YAPOG_XMLOBJECTIDLOADER_HXX