Property.cpp
资源名称:antinimda.zip [点击查看]
上传用户:leon2013
上传日期:2007-01-10
资源大小:186k
文件大小:3k
源码类别:
杀毒
开发平台:
Visual C++
- // Property.cpp: implementation of the Property class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "Property.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- // Static property indicating invalid parameter
- Property Property::InvalidProperty;
- Property::Property()
- {
- }
- Property::Property(LPCTSTR name, LPCTSTR value)
- {
- if (name) Name=name;
- if (value) CString::operator=(value);
- }
- Property::Property(LPCTSTR name, bool value)
- : Name(name), CString( value?"true":"false" )
- {
- }
- Property::Property(LPCTSTR name, long value)
- : Name(name)
- {
- AsInteger=value;
- }
- Property::Property(LPCTSTR name, double value)
- : Name(name)
- {
- AsFloat=value;
- }
- Property::~Property()
- {
- }
- CString& Property::asstring()
- {
- return *this;
- }
- void Property::asstring(LPCTSTR s)
- {
- *this = s;
- }
- bool Property::asbool() const
- {
- return (operator[](0)=='T') || (operator[](0)=='t');
- }
- void Property::asbool(const bool b)
- {
- AsString=(b?"true":"false");
- }
- long Property::asint() const
- {
- return atol(*this);
- }
- void Property::asint(const long i)
- {
- AsString.Format("%d",i);
- }
- double Property::asfloat() const
- {
- return atof(*this);
- }
- void Property::asfloat(const double f)
- {
- AsString.Format("%f",f);
- }
- Properties::Properties()
- {
- }
- Properties::Properties(const Properties& p)
- {
- operator=(p);
- }
- const Property& Properties::operator()(LPCTSTR name) const
- {
- for(const_iterator p=begin(), e=end(); p!=e; p++)
- if ((*p).Name.CompareNoCase(name)==0)
- return *p;
- return Property::InvalidProperty;
- }
- Property& Properties::operator()(LPCTSTR name)
- {
- for(iterator p=begin(), e=end(); p!=e; p++)
- if ((*p).Name.CompareNoCase(name)==0)
- return *p;
- // Create a new parameter named 'name' and set to ""
- p=insert(end(),Property(name));
- return *p;
- }
- bool Properties::contains(LPCTSTR name) const
- {
- for(const_iterator p=begin(), e=end(); p!=e; p++)
- if ((*p).Name.CompareNoCase(name)==0)
- if ((*p).IsEmpty())
- return false;
- else
- return true;
- return false;
- }
- bool Properties::IsPropertyList(LPCTSTR s)
- {
- return (s[0]=='{') && (s[strlen(s)-1]=='}');
- }
- Properties& Properties::operator =(const Properties& p)
- {
- clear();
- insert(end(),p.begin(), p.end());
- return *this;
- }
- Properties& Properties::operator +=(const Properties& p)
- {
- insert(end(),p.begin(), p.end());
- return *this;
- }
- Properties& Properties::operator =(LPCTSTR plist)
- {
- if (IsPropertyList(plist))
- {
- CString list = plist;
- CString name, value;
- int istart, iend;
- list = list.Mid(1,list.GetLength()-2);
- // trim the properties list
- list.TrimRight(); list+=';';
- while (!list.IsEmpty())
- {
- list.TrimLeft();
- istart = list.Find('(');
- iend = list.Find(");");
- if ((istart>0) && (iend>0))
- {
- name = list.Left(istart); name.TrimRight();
- value = list.Mid(istart+1,iend-istart-1); value.TrimLeft(); value.TrimRight();
- operator()(name) = value;
- list=list.Mid(iend+2);
- }
- else
- list.Empty();
- }
- }
- return *this;
- }