Property.cpp
上传用户:leon2013
上传日期:2007-01-10
资源大小:186k
文件大小:3k
源码类别:

杀毒

开发平台:

Visual C++

  1. // Property.cpp: implementation of the Property class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "Property.h"
  5. #ifdef _DEBUG
  6. #undef THIS_FILE
  7. static char THIS_FILE[]=__FILE__;
  8. #define new DEBUG_NEW
  9. #endif
  10. // Static property indicating invalid parameter
  11. Property Property::InvalidProperty;
  12. Property::Property()
  13. {
  14. }
  15. Property::Property(LPCTSTR name, LPCTSTR value)
  16. {
  17. if (name) Name=name;
  18. if (value) CString::operator=(value);
  19. }
  20. Property::Property(LPCTSTR name, bool value)
  21. : Name(name), CString( value?"true":"false" )
  22. {
  23. }
  24. Property::Property(LPCTSTR name, long value)
  25. : Name(name)
  26. {
  27. AsInteger=value;
  28. }
  29. Property::Property(LPCTSTR name, double value)
  30. : Name(name)
  31. {
  32. AsFloat=value;
  33. }
  34. Property::~Property()
  35. {
  36. }
  37. CString& Property::asstring()
  38. {
  39. return *this;
  40. }
  41. void Property::asstring(LPCTSTR s)
  42. {
  43. *this = s;
  44. }
  45. bool Property::asbool() const
  46. {
  47. return (operator[](0)=='T') || (operator[](0)=='t');
  48. }
  49. void Property::asbool(const bool b)
  50. {
  51. AsString=(b?"true":"false");
  52. }
  53. long Property::asint() const
  54. {
  55. return atol(*this);
  56. }
  57. void Property::asint(const long i)
  58. {
  59. AsString.Format("%d",i);
  60. }
  61. double Property::asfloat() const
  62. {
  63. return atof(*this);
  64. }
  65. void  Property::asfloat(const double f)
  66. {
  67. AsString.Format("%f",f);
  68. }
  69. Properties::Properties()
  70. {
  71. }
  72. Properties::Properties(const Properties& p)
  73. {
  74. operator=(p);
  75. }
  76. const Property& Properties::operator()(LPCTSTR name) const
  77. {
  78. for(const_iterator p=begin(), e=end(); p!=e; p++)
  79. if ((*p).Name.CompareNoCase(name)==0)
  80. return *p;
  81. return Property::InvalidProperty;
  82. }
  83. Property& Properties::operator()(LPCTSTR name)
  84. {
  85. for(iterator p=begin(), e=end(); p!=e; p++)
  86. if ((*p).Name.CompareNoCase(name)==0)
  87. return *p;
  88. // Create a new parameter named 'name' and set to ""
  89. p=insert(end(),Property(name));
  90. return *p;
  91. }
  92. bool Properties::contains(LPCTSTR name) const
  93. {
  94. for(const_iterator p=begin(), e=end(); p!=e; p++)
  95. if ((*p).Name.CompareNoCase(name)==0)
  96. if ((*p).IsEmpty())
  97. return false;
  98. else
  99. return true;
  100. return false;
  101. }
  102. bool Properties::IsPropertyList(LPCTSTR s)
  103. {
  104. return (s[0]=='{') && (s[strlen(s)-1]=='}');
  105. }
  106. Properties& Properties::operator =(const Properties& p)
  107. {
  108. clear();
  109. insert(end(),p.begin(), p.end());
  110. return *this;
  111. }
  112. Properties& Properties::operator +=(const Properties& p)
  113. {
  114. insert(end(),p.begin(), p.end());
  115. return *this;
  116. }
  117. Properties& Properties::operator =(LPCTSTR plist)
  118. {
  119. if (IsPropertyList(plist))
  120. {
  121. CString list = plist;
  122. CString name, value;
  123. int istart, iend;
  124. list = list.Mid(1,list.GetLength()-2);
  125. // trim the properties list
  126. list.TrimRight();  list+=';';
  127. while (!list.IsEmpty())
  128. {
  129. list.TrimLeft();
  130. istart = list.Find('(');
  131. iend   = list.Find(");");
  132. if ((istart>0) && (iend>0))
  133. {
  134. name = list.Left(istart);  name.TrimRight();
  135. value = list.Mid(istart+1,iend-istart-1);  value.TrimLeft();  value.TrimRight();
  136. operator()(name) = value;
  137. list=list.Mid(iend+2);
  138. }
  139. else
  140. list.Empty();
  141. }
  142. }
  143. return *this;
  144. }