00001
00018 #ifndef INC_MI32_INIAUTO_H
00019 #define INC_MI32_INIAUTO_H
00020
00021 #ifndef INC_MI32_INIDEFNS_H
00022 #include <mi32/inidefns.h>
00023 #endif
00024
00025
00036 template <class _DT> class INI_AUTO {
00037
00038 public:
00039
00040 INI_AUTO (
00041 const char *field,
00042 const char *group = NULL,
00043 bool copyfield = false,
00044 bool copygroup = false
00045 ) :
00046 m_Group(group),
00047 m_Field(field),
00048 m_CopyGroup(copygroup),
00049 m_CopyField(copyfield)
00050 {
00051 if (copyfield) m_Field = strdup(field);
00052 if (copygroup) m_Group = strdup(group);
00053 IniRead(NULL, m_Group, m_Field, m_Data);
00054 }
00055
00056 INI_AUTO (
00057 const _DT &defaultdata,
00058 const char *field,
00059 const char *group = NULL,
00060 bool copyfield = false,
00061 bool copygroup = false
00062 ) :
00063 m_Data(defaultdata),
00064 m_Group(group),
00065 m_Field(field),
00066 m_CopyGroup(copygroup),
00067 m_CopyField(copyfield)
00068 {
00069 if (copyfield) m_Field = strdup(field);
00070 if (copygroup) m_Group = strdup(group);
00071 IniRead(NULL, m_Group, m_Field, m_Data);
00072 }
00073
00074 ~INI_AUTO (
00075 ) {
00076 if (m_CopyField) free(const_cast<char*>(m_Field));
00077 if (m_CopyGroup) free(const_cast<char*>(m_Group));
00078 }
00079
00080 operator const _DT& (
00081 ) const { return (m_Data); }
00082
00083 const _DT& operator= (
00084 const _DT& dt
00085 ) {
00086 m_Data = dt;
00087 Write();
00088 return (m_Data);
00089 }
00090
00093 void Set (
00094 const _DT& dt,
00095 bool write = true
00096 ) {
00097 m_Data = dt;
00098 if (write)
00099 Write();
00100 }
00101
00103 void Write (
00104 INIHANDLE inihandle = NULL
00105 ) const { IniWrite(inihandle, m_Group, m_Field, m_Data); }
00106
00107 private:
00108 #ifndef GENERATING_DOXYGEN_OUTPUT
00109 _DT m_Data;
00110 const char *m_Group;
00111 const char *m_Field;
00112 bool m_CopyGroup;
00113 bool m_CopyField;
00114 #endif // GENERATING_DOXYGEN_OUTPUT
00115 };
00116
00128 template <class _DT> class INI_AUTO_ENUM {
00129
00130 public:
00131
00132 INI_AUTO_ENUM (
00133 const _DT &defaultdata,
00134 const char *field,
00135 const char *group = NULL,
00136 bool copyfield = false,
00137 bool copygroup = false
00138 ) :
00139 m_Data(defaultdata),
00140 m_Group(group),
00141 m_Field(field),
00142 m_CopyGroup(copygroup),
00143 m_CopyField(copyfield)
00144 {
00145 #ifdef WIN32
00146 #pragma warning (disable:4996)
00147 #endif
00148 if (copyfield) m_Field = strdup(field);
00149 if (copygroup) m_Group = strdup(group);
00150 IniReadEnum(NULL, m_Group, m_Field, m_Data);
00151 #ifdef WIN32
00152 #pragma warning (default:4996)
00153 #endif
00154 }
00155
00156 ~INI_AUTO_ENUM (
00157 ) {
00158 if (m_CopyField) free(const_cast<char*>(m_Field));
00159 if (m_CopyGroup) free(const_cast<char*>(m_Group));
00160 }
00161
00162 operator const _DT& (
00163 ) const { return (m_Data); }
00164
00165 const _DT& operator= (
00166 const _DT& dt
00167 ) {
00168 m_Data = dt;
00169 Write();
00170 return (m_Data);
00171 }
00172
00175 void Set (
00176 const _DT& dt,
00177 bool write = true
00178 ) {
00179 m_Data = dt;
00180 if (write)
00181 Write();
00182 }
00183
00185 void Write (
00186 INIHANDLE inihandle = NULL
00187 ) const { IniWrite(inihandle, m_Group, m_Field, m_Data); }
00188
00189 private:
00190 #ifndef GENERATING_DOXYGEN_OUTPUT
00191
00192 _DT m_Data;
00193 const char *m_Group;
00194 const char *m_Field;
00195 bool m_CopyGroup;
00196 bool m_CopyField;
00197 #endif // GENERATING_DOXYGEN_OUTPUT
00198
00199 };
00200
00201 #endif // INC_MI32_INIAUTO_H
00202