PartSizeClass.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #include "stdafx.h"
  2. #include "PartSizeClass.h"
  3. #include "otsdataconst.h"
  4. namespace OTSMODEL {
  5. // CPartSizeClass
  6. using namespace OTSDATA;
  7. // constructor
  8. CPartSizeClass::CPartSizeClass()
  9. {
  10. // initialization
  11. Init();
  12. }
  13. // copy constructor
  14. CPartSizeClass::CPartSizeClass(const CPartSizeClass& a_oSource)
  15. {
  16. // can't copy itself
  17. if (&a_oSource == this)
  18. {
  19. return;
  20. }
  21. // copy data over
  22. Duplicate(a_oSource);
  23. }
  24. // copy constructor
  25. CPartSizeClass::CPartSizeClass(CPartSizeClass* a_poSource)
  26. {
  27. // input check
  28. ASSERT(a_poSource);
  29. if (!a_poSource)
  30. {
  31. return;
  32. }
  33. // can't copy itself
  34. if (a_poSource == this)
  35. {
  36. return;
  37. }
  38. // copy data over
  39. Duplicate(*a_poSource);
  40. }
  41. // =operator
  42. CPartSizeClass& CPartSizeClass::operator=(const CPartSizeClass& a_oSource)
  43. {
  44. // cleanup
  45. Cleanup();
  46. // copy the class data over
  47. Duplicate(a_oSource);
  48. // return class
  49. return *this;
  50. }
  51. // ==operator
  52. BOOL CPartSizeClass::operator==(const CPartSizeClass& a_oSource)
  53. {
  54. // class data list
  55. int nSize = (int)m_listSizeClass.size();
  56. if (nSize != (int)a_oSource.m_listSizeClass.size())
  57. {
  58. return FALSE;
  59. }
  60. for (int i = 0; i < nSize; ++i)
  61. {
  62. if (abs(m_listSizeClass[i] - a_oSource.m_listSizeClass[i]) > MIN_DOUBLE_VALUE)
  63. {
  64. return FALSE;
  65. }
  66. }
  67. // members
  68. return m_strName.Compare(a_oSource.m_strName) == 0;
  69. }
  70. // destructor
  71. CPartSizeClass::~CPartSizeClass()
  72. {
  73. // cleanup
  74. Cleanup();
  75. }
  76. // CPartSizeClass member functions
  77. // public
  78. // serialization
  79. void CPartSizeClass::Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode)
  80. {
  81. xmls::xString xstrName;
  82. xmls::xString xSizeStr;
  83. xmls::Slo slo;
  84. slo.Register("Name", &xstrName);
  85. slo.Register("SizeClass", &xSizeStr);
  86. if (isStoring)
  87. {
  88. xstrName = m_strName;
  89. CString sizeStr;
  90. CString ss;
  91. for (unsigned int i = 0; i < m_listSizeClass.size(); i++)
  92. {
  93. ss.Format ("%.4lf",m_listSizeClass[i]);
  94. if (i < m_listSizeClass.size())
  95. {
  96. sizeStr += ss + ",";
  97. }
  98. else
  99. {
  100. sizeStr += ss;
  101. }
  102. }
  103. xSizeStr = sizeStr;
  104. slo.Serialize(true, classDoc, rootNode);
  105. }
  106. else
  107. {
  108. slo.Serialize(false, classDoc, rootNode);
  109. m_strName = xstrName.value().c_str();
  110. std::vector <std::string> strvector;
  111. xmls::SplitString(xSizeStr.value(), strvector, ",");
  112. m_listSizeClass.clear();
  113. for (unsigned int i = 0; i < strvector.size(); i++)
  114. {
  115. m_listSizeClass.push_back(atof(strvector[i].c_str()));
  116. }
  117. }
  118. }
  119. // validation
  120. BOOL CPartSizeClass::IsValid()
  121. {
  122. // name can't be an empty string
  123. m_strName.Trim();
  124. if (m_strName.IsEmpty())
  125. {
  126. return FALSE;
  127. }
  128. // class data list can't be empty
  129. if (m_listSizeClass.empty())
  130. {
  131. return FALSE;
  132. }
  133. // ok, return TRUE
  134. return TRUE;
  135. }
  136. // protected
  137. // cleanup
  138. void CPartSizeClass::Cleanup()
  139. {
  140. // need to do nothing at the moment
  141. }
  142. // initialization
  143. void CPartSizeClass::Init()
  144. {
  145. // initialization
  146. m_strName = _T("");
  147. m_listSizeClass.clear();
  148. }
  149. // duplication
  150. void CPartSizeClass::Duplicate(const CPartSizeClass& a_oSource)
  151. {
  152. // initialization
  153. Init();
  154. // copy data over
  155. m_strName = a_oSource.m_strName;
  156. m_listSizeClass = a_oSource.m_listSizeClass;
  157. }
  158. }