⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 properties.cpp

📁 eCos1.31版
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            String strN;            strN.Format(_T("%u"),p->GetValue());            str+=strN;          }          break;        case CProperties::CProperty::Float:        case CProperties::CProperty::Double:        case CProperties::CProperty::szString:        case CProperties::CProperty::GPString:        case CProperties::CProperty::Void:          str+=p->GetStringValue();          break;      }      str+=_TCHAR('\n');      _fputts(str,f);    }    fclose(f);  }  return (0!=f);}bool CProperties::LoadFromFile(LPCTSTR pszFileName,LPCTSTR pszPrefix){  int nPrefixlen=_tcslen(pszPrefix);  FILE *f=_tfopen(pszFileName,_T("rt"));  bool rc=(0!=f);  if(rc){    TCHAR c[256];    while(_fgetts(c,sizeof(c)-1,f)){      if(_TCHAR('\0')!=c[0]){        c[_tcslen(c)-1]=_TCHAR('\0'); // remove trailing \n      }      if((signed)_tcslen(c)>nPrefixlen && 0==_tcsncmp(c,pszPrefix,nPrefixlen)){        TCHAR *pEq=_tcschr(c,_TCHAR('='));        if(pEq){          const String strName(c+nPrefixlen,pEq-c-nPrefixlen);          CProperties::CProperty *p=Lookup(strName);          if(p){            pEq++;            rc&=p->SetValue(pEq);          } else {            //TRACE(_T("Failed to find %s\n"),(LPCTSTR)strName);            rc=false;          }        }      }    }    fclose(f);  }  return rc;  }CProperties::CProperty::CProperty(LPCTSTR pszName,Typetype type,void *_pData):  strName(pszName),  Type(type),  pData(_pData){}CProperties::CProperty::~CProperty(){}void CProperties::Add(LPCTSTR pszName,int &n,int _nDefault) {    CProperty *p=new CProperty(pszName,CProperty::Integer,&n);    p->nDefault=_nDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,unsigned int &n,unsigned int _nDefault){    CProperty *p=new CProperty(pszName,CProperty::Integer,&n);    p->nDefault=_nDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,bool &b,bool _bDefault){    CProperty *p=new CProperty(pszName,CProperty::Bool,&b);    p->nDefault=_bDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,char &c,char _cDefault){    CProperty *p=new CProperty(pszName,CProperty::Char,&c);    p->nDefault=_cDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,unsigned char &c,unsigned char _cDefault){    CProperty *p=new CProperty(pszName,CProperty::Char,&c);    p->nDefault=_cDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,short &s,short _sDefault){    CProperty *p=new CProperty(pszName,CProperty::Short,&s);    p->nDefault=_sDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,unsigned short &s,unsigned short _sDefault){    CProperty *p=new CProperty(pszName,CProperty::Short,&s);    p->nDefault=_sDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,float &f,float _fDefault){    CProperty *p=new CProperty(pszName,CProperty::Float,&f);    p->dDefault=_fDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,double &f,double dDefault) {    CProperty *p=new CProperty(pszName,CProperty::Double,&f);    p->dDefault=dDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,void *pv,unsigned int _nLength,void *pvDefault){    CProperty *p=new CProperty(pszName,CProperty::Void,pv);    p->nLength=_nLength;    p->pvDefault=pvDefault;    ar.push_back(p);}void CProperties::Add(LPCTSTR pszName,LPTSTR s,unsigned int _nLength,LPCTSTR _pszDefault){    CProperty *p=new CProperty(pszName,CProperty::szString,s);    p->nLength=_nLength;    p->strDefault=_pszDefault;    ar.push_back(p);}void CProperties::Add (LPCTSTR pszName,void *pObj,getFn *getFn,putFn *putFn,LPCTSTR pszDefault){    CProperty *p=new CProperty(pszName,CProperty::GPString,pObj);    p->strDefault=pszDefault;    p->pgetFn=getFn;    p->pputFn=putFn;    p->strDefault=pszDefault;    ar.push_back(p);}unsigned long CProperties::CProperty::GetValue() const{    unsigned long dw;    switch(Type){        case Integer:            dw=*(int *)pData;            break;        case Bool:            dw=*(bool *)pData;            break;        case Char:            dw=*(char *)pData;            break;        case Short:            dw=*(short *)pData;            break;        default:            dw=0;            assert(false);    }    return dw;}const String CProperties::CProperty::GetStringValue() const {    String str;    switch(Type){        case szString:            str=(LPCTSTR)(pData);             break;        case GPString:            str=pgetFn(pData);             break;        case CProperties::CProperty::Integer:        case CProperties::CProperty::Bool:        case CProperties::CProperty::Char:        case CProperties::CProperty::Short:            str.Format(_T("%u"),GetValue());            break;        case CProperties::CProperty::Float:            str.Format(_T("%e"),*(float *)(pData));            break;        case CProperties::CProperty::Double:            str.Format(_T("%e"),*(double *)(pData));            break;        case CProperties::CProperty::Void:            {                unsigned char *c=(unsigned char *)pData;                for(unsigned int i=0;i<nLength;i++){                    TCHAR buf[3];                    _tprintf(buf,_T("%02x"),c[i]);                    str+=buf;                }            }            break;        default:            break;    }    return str;}bool CProperties::CProperty::SetValue(int n){    bool rc=true;    switch(Type){        case Integer:            *(int *)(pData)=n;            break;        case Bool:            *(bool *)(pData)=(0!=n);            break;        case Char:            *(char *)(pData)=(char)n; //FIXME: range checks            break;        case Short:            *(short *)(pData)=(short)n;//FIXME: range checks            break;        default:            //TRACE(_T("Failed to set '%s' to integer value '%d'\n"),(LPCTSTR)strName,n);            break;    }    return rc;}bool CProperties::CProperty::SetValue(double n){    bool rc=true;    switch(Type){        case Double:            *(float *)(pData)=(float)n;//FIXME: range checks?            break;        case Float:            *(double *)(pData)=n;            break;        default:            //TRACE(_T("Failed to set '%s' to double value '%f'\n"),(LPCTSTR)strName,n);            rc=false;            break;    }    return rc;}bool CProperties::CProperty::SetValue(LPCTSTR psz){    bool rc=false;    TCHAR *pEnd;    double d;    long l;    switch(Type){        case szString:            _tcsncpy((LPTSTR)pData,psz,nLength);            if(nLength<=_tcslen(psz)){                ((LPTSTR)pData)[nLength]=_TCHAR('\0');            }            rc=true;            break;        case GPString:            pputFn(pData,psz);            rc=true;            break;                     case Float:            d=_tcstod(psz,&pEnd);            rc=(_TCHAR('\0')==*pEnd);            if(rc){                SetValue((float)d);            }            break;        case Double:            d=_tcstod(psz,&pEnd);            rc=(_TCHAR('\0')==*pEnd);            if(rc){                SetValue(d);            }            break;        case Integer:        case Bool:        case Char:        case Short:            l=_tcstol(psz,&pEnd,10);            rc=(_TCHAR('\0')==*pEnd);            if(rc){                SetValue((int)l);            }            break;        default:            //TRACE(_T("Failed to set '%s' to string value '%s'\n"),(LPCTSTR)strName,psz);            break;    }    return rc;}void CProperties::CProperty::SetDefault(){    switch(Type){        case Bool:        case Integer:        case Char:        case Short:            SetValue(nDefault);            break;        case Float:        case Double:            SetValue(dDefault);            break;        case szString:        case GPString:            SetValue(strDefault);            break;        case Void:            if(pvDefault){                memcpy(pData,pvDefault,nLength);            }            break;        default:            assert(false);    }}void CProperties::SetDefaults(){    for(int i=ar.size()-1;i>=0;--i){        ((CProperty*)ar[i])->SetDefault();    }}bool CProperties::Load(LPCTSTR pszPrefix){    #ifdef _WIN32    return m_hKey?LoadFromRegistry((HKEY)m_hKey,m_strName,pszPrefix):LoadFromFile(m_strName,pszPrefix);    #else // UNIX    return LoadFromFile(m_strName,pszPrefix);    #endif}bool CProperties::Save(LPCTSTR pszPrefix){    #ifdef _WIN32    return m_hKey?SaveToRegistry((HKEY)m_hKey,m_strName,pszPrefix):SaveToFile(m_strName,pszPrefix);    #else // UNIX    return SaveToFile(m_strName,pszPrefix);    #endif}/*bool CProperties::Remove(LPCTSTR pszName){    for(int i=ar.size()-1;i>=0;--i){        CProperties::CProperty *p=(CProperties::CProperty *)ar[i];        if(p->strName==pszName){            delete p;            ar.RemoveAt(i);            return true;        }    }    return false;}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -