TriTempItem.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #include "stdafx.h"
  2. #include "TriTempItem.h"
  3. namespace OTSMODEL {
  4. //constructor
  5. CTriTempItem::CTriTempItem()
  6. {
  7. // initialization
  8. Init();
  9. }
  10. // copy constructor
  11. CTriTempItem::CTriTempItem(const CTriTempItem& a_oSource)
  12. {
  13. // can't copy itself
  14. if (&a_oSource == this)
  15. {
  16. return;
  17. }
  18. // copy data over
  19. Duplicate(a_oSource);
  20. }
  21. // copy constructor
  22. CTriTempItem::CTriTempItem(CTriTempItem* a_poSource)
  23. {
  24. // can't copy itself
  25. if (a_poSource == this)
  26. {
  27. return;
  28. }
  29. // copy data over
  30. Duplicate(*a_poSource);
  31. }
  32. // =operator
  33. CTriTempItem& CTriTempItem::operator=(const CTriTempItem& a_oSource)
  34. {
  35. // cleanup
  36. Cleanup();
  37. // copy the class data over
  38. Duplicate(a_oSource);
  39. // return class
  40. return *this;
  41. }
  42. // ==operator
  43. BOOL CTriTempItem::operator==(const CTriTempItem& a_oSource)
  44. {
  45. // return FASLE, if the two list are in different size
  46. int nSize = (int)m_listTriTempItemElement.size();
  47. if (nSize != (int)a_oSource.m_listTriTempItemElement.size())
  48. {
  49. return FALSE;
  50. }
  51. // return FALSE if any of the pare holes are different
  52. for (int i = 0; i < nSize; ++i)
  53. {
  54. if (!(*(m_listTriTempItemElement[i].get()) == *(a_oSource.m_listTriTempItemElement[i].get())))
  55. {
  56. return FALSE;
  57. }
  58. }
  59. return m_strTemplateName.Compare(a_oSource.m_strTemplateName) == 0 &&
  60. m_TemplateID == a_oSource.m_TemplateID;
  61. }
  62. //destructor
  63. CTriTempItem::~CTriTempItem()
  64. {
  65. // cleanup
  66. Cleanup();
  67. }
  68. void CTriTempItem::SetTriTempItemElementList(CTriTempItemElementList& a_listTriTemp, BOOL a_bClear/* = TRUE*/)
  69. {
  70. // clear list if necessary
  71. if (a_bClear)
  72. {
  73. m_listTriTempItemElement.clear();
  74. }
  75. // copy the list
  76. for (auto pTriTemp : a_listTriTemp)
  77. {
  78. CTriTempItemElementPtr pTriTempItemElementNew = CTriTempItemElementPtr(new CTriTempItemElement(*pTriTemp.get()));
  79. m_listTriTempItemElement.push_back(pTriTempItemElementNew);
  80. }
  81. }
  82. // initialization
  83. void CTriTempItem::Init()
  84. {
  85. m_TemplateID = -1;
  86. m_strTemplateName = _T("");
  87. m_strTopName = _T("");
  88. m_strLeftName = _T("");
  89. m_strRightName = _T("");
  90. // initialization
  91. m_listTriTempItemElement.clear();
  92. }
  93. // cleanup
  94. void CTriTempItem::Cleanup()
  95. {
  96. m_listTriTempItemElement.clear();
  97. }
  98. // duplication
  99. void CTriTempItem::Duplicate(const CTriTempItem& a_oSource)
  100. {
  101. // initialization
  102. Init();
  103. // copy data over
  104. m_TemplateID = a_oSource.m_TemplateID;
  105. m_strTemplateName = a_oSource.m_strTemplateName;
  106. m_strTopName = a_oSource.m_strTopName;
  107. m_strLeftName = a_oSource.m_strLeftName;
  108. m_strRightName = a_oSource.m_strRightName;
  109. for (auto pTriTempItemElement : a_oSource.m_listTriTempItemElement)
  110. {
  111. CTriTempItemElementPtr pTriTempNew = CTriTempItemElementPtr(new CTriTempItemElement(pTriTempItemElement.get()));
  112. m_listTriTempItemElement.push_back(pTriTempNew);
  113. }
  114. }
  115. void CTriTempItem::Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode)
  116. {
  117. // Name
  118. xmls::xInt xnTemplateID;
  119. xmls::xString xstrTempName;
  120. xmls::xString xstrTopName;
  121. xmls::xString xstrLeftName;
  122. xmls::xString xstrRightName;
  123. xmls::Collection<CTriTempItemElement> xTriTempItemElement;
  124. xmls::Slo slo;
  125. slo.Register("TemplateID", &xnTemplateID);
  126. slo.Register("TemplateName", &xstrTempName);
  127. slo.Register("TopName", &xstrTopName);
  128. slo.Register("LeftName", &xstrLeftName);
  129. slo.Register("RightName", &xstrRightName);
  130. slo.Register("TemplateItemElement", &xTriTempItemElement);
  131. if (isStoring)
  132. {
  133. xnTemplateID = m_TemplateID;
  134. xstrTempName = m_strTemplateName;
  135. xstrTopName = m_strTopName;
  136. xstrLeftName = m_strLeftName;
  137. xstrRightName = m_strRightName;
  138. for (int i = 0; i < m_listTriTempItemElement.size(); i++)
  139. {
  140. xTriTempItemElement.addItem(m_listTriTempItemElement[i].get());
  141. }
  142. slo.Serialize(true, classDoc, rootNode);
  143. }
  144. else
  145. {
  146. slo.Serialize(false, classDoc, rootNode);
  147. m_TemplateID = xnTemplateID.value();
  148. m_strTemplateName = xstrTempName.value().c_str();
  149. m_strTopName = xstrTopName.value().c_str();
  150. m_strLeftName = xstrLeftName.value().c_str();
  151. m_strRightName = xstrRightName.value().c_str();
  152. for (int i = 0; i < xTriTempItemElement.size(); i++)
  153. {
  154. m_listTriTempItemElement.push_back(CTriTempItemElementPtr(xTriTempItemElement.getItem(i)));
  155. }
  156. }
  157. }
  158. }