Mercurial > flash_v2
diff host/tools/Utils/common/Properties.h @ 76:435cced73e2f ecos-v1_3_1-release
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
| author | jlarmour |
|---|---|
| date | Tue, 28 Mar 2000 14:10:45 +0000 |
| parents | |
| children | 6736c52df507 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/host/tools/Utils/common/Properties.h @@ -0,0 +1,128 @@ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This program is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +// Properties.h: interface for the CProperties class. +// +////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_PROPERTIES_H__DA938D29_135A_11D3_A50B_00A0C949ADAC__INCLUDED_) +#define AFX_PROPERTIES_H__DA938D29_135A_11D3_A50B_00A0C949ADAC__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "eCosStd.h" +#include "Collections.h" + +class CProperties +{ +public: +// bool Remove (LPCTSTR pszName); + void RemoveAll (); + // Declare various types of property. The functions associate names with + // variables, but no values are assigned here. That comes later when a + // load function (such as LoadFromRegistry) is called. + void Add (LPCTSTR pszName,int &n,int nDefault=0); + void Add (LPCTSTR pszName,unsigned int &n,unsigned int nDefault=0); + void Add (LPCTSTR pszName,bool &b,bool bDefault=false); + void Add (LPCTSTR pszName,char &c,char cDefault='\0'); + void Add (LPCTSTR pszName,unsigned char &c,unsigned char cDefault='\0'); + void Add (LPCTSTR pszName,short&s,short sDefault=0); + void Add (LPCTSTR pszName,unsigned short&s,unsigned short sDefault=0); + void Add (LPCTSTR pszName,float&f,float fDefault=0.0); + void Add (LPCTSTR pszName,double&f,double fDefault=0.0); + void Add (LPCTSTR pszName,void *d,unsigned int nLength,void *pvDefault=0); + void Add (LPCTSTR pszName,LPTSTR s,unsigned int nLength,LPCTSTR sDefault=_T("")); + // String adding with caller defining get and put. This is here to preserve the neutrality of + // the class - cannot assume MFC's String, for example. Implementation of these fns might be: + // static LPCTSTR CALLBACK GetFn (void *pObj) { return (LPCTSTR)*(String *)pObj; } + // static void CALLBACK PutFn (void *pObj,LPCTSTR psz) { *(String *)pObj=psz; } + + typedef void (CALLBACK putFn)(void *,LPCTSTR); + typedef LPCTSTR (CALLBACK getFn)(void *); + void Add (LPCTSTR pszName,void *pObj,getFn *pgetFn,putFn *pputFn,LPCTSTR pszDefault=_T("")); + + // Set all Added variables to their default values + void SetDefaults(); + // Load (from registry ro f + bool Load(LPCTSTR pszPrefix=_T("")); + bool Save(LPCTSTR pszPrefix=_T("")); + + // Load from and save to a command string. + String MakeCommandString (LPCTSTR pszPrefix=_T("-")) const; // caller must delete [] + bool LoadFromCommandString (LPCTSTR psz,LPCTSTR pszPrefix=_T("-")); + + CProperties(LPCTSTR pszFile,void *hKey=0); + virtual ~CProperties(); +#ifdef _WIN32 + static bool CreateKey (LPCTSTR pszKey,HKEY hKey=HKEY_CURRENT_USER); +#endif +protected: + static bool CreatePathToFile(LPCTSTR pszDir); + String m_strName; + + // Load from and save to a given file. The format is name=value, one per line. + bool LoadFromFile(LPCTSTR pszFileName,LPCTSTR pszPrefix=_T("")); + bool SaveToFile (LPCTSTR pszFileName,LPCTSTR pszPrefix=_T("")) const; + // Load from and save to the registry + void *m_hKey; +#ifdef _WIN32 + bool SaveToRegistry(HKEY,LPCTSTR,LPCTSTR pszPrefix=_T("")) const; + bool LoadFromRegistry (HKEY,LPCTSTR,LPCTSTR pszPrefix=_T("")); +#endif + + PtrArray ar; // Holds declared properties + class CProperty { + public: + enum Typetype {Integer, szString, GPString, Bool, Char, Short, Float, Double, Void}; + CProperty(LPCTSTR pszName,Typetype type,void *_pData); + virtual ~CProperty(); + void SetDefault(); + friend class CProperties; + bool SetValue(int n); + bool SetValue(double n); + bool SetValue(void *d,int nLength); + bool SetValue(LPCTSTR psz); + const String GetStringValue() const; + unsigned long GetValue() const; + + protected: + String strName; + Typetype Type; + void *pData; + union { + int nDefault; + double dDefault; + void* pvDefault; + }; + String strDefault; // can't be in union - has copy ctor + getFn *pgetFn; + putFn *pputFn; + unsigned int nLength; // for szString and Void + }; + CProperty * Lookup (LPCTSTR pszName); +}; + +#endif // !defined(AFX_PROPERTIES_H__DA938D29_135A_11D3_A50B_00A0C949ADAC__INCLUDED_)
