annotate trunk/src/Support/Parameters.h @ 284:fb52ca0e6339

-Profile module for taking slices of an SAI or SSI (or anything else for that matter) -Stub SSI module - not yet complete -Fixes to the module template
author tomwalters
date Fri, 19 Feb 2010 13:07:54 +0000
parents ef14c9f2c1d2
children fe5ce00a64f5
rev   line source
tomwalters@280 1 // Copyright 2006-2010, Willem van Engen, Thomas Walters
tomwalters@268 2 //
tomwalters@268 3 // AIM-C: A C++ implementation of the Auditory Image Model
tomwalters@268 4 // http://www.acousticscale.org/AIMC
tomwalters@268 5 //
tomwalters@268 6 // This program is free software: you can redistribute it and/or modify
tomwalters@268 7 // it under the terms of the GNU General Public License as published by
tomwalters@268 8 // the Free Software Foundation, either version 3 of the License, or
tomwalters@268 9 // (at your option) any later version.
tomwalters@268 10 //
tomwalters@268 11 // This program is distributed in the hope that it will be useful,
tomwalters@268 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
tomwalters@268 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
tomwalters@268 14 // GNU General Public License for more details.
tomwalters@268 15 //
tomwalters@268 16 // You should have received a copy of the GNU General Public License
tomwalters@268 17 // along with this program. If not, see <http://www.gnu.org/licenses/>.
tomwalters@268 18
tomwalters@280 19 /*!
tomwalters@280 20 * \file
tomwalters@280 21 * \brief Main parameters store
tomwalters@280 22 *
tomwalters@280 23 * \author Willem van Engen <cnbh@willem.engen.nl>
tomwalters@280 24 * \author Thomas Walters <tom@acousticscale.org>
tomwalters@280 25 * \date created 2006/09/21
tomwalters@280 26 * \version \$Id: Parameters.h 4 2010-02-03 18:44:58Z tcw $
tomwalters@280 27 */
tomwalters@268 28
tomwalters@283 29 #ifndef AIMC_SUPPORT_PARAMETERS_H_
tomwalters@283 30 #define AIMC_SUPPORT_PARAMETERS_H_
tomwalters@268 31
tomwalters@273 32 #include <string>
tomwalters@273 33
tomwalters@268 34 #include "Support/SimpleIni.h"
tomwalters@268 35
tomwalters@268 36 namespace aimc {
tomwalters@268 37 /*!
tomwalters@268 38 * \class Parameters "Support/Parameters.h"
tomwalters@268 39 * \brief Main parameter store for parameters
tomwalters@268 40 */
tomwalters@268 41 class Parameters {
tomwalters@280 42 public:
tomwalters@268 43 Parameters();
tomwalters@268 44 ~Parameters();
tomwalters@268 45
tomwalters@268 46 /*!
tomwalters@268 47 * \brief Load parameter file
tomwalters@268 48 * \param sParamFilename Filename of parameter file to read
tomwalters@268 49 * \return true on succes, false on error
tomwalters@268 50 *
tomwalters@268 51 */
tomwalters@268 52 bool Load(const char *sParamFilename);
tomwalters@268 53
tomwalters@268 54 /*! \brief Save Parameter File
tomwalters@268 55 * \param sParamFilename Filename of parameter file to save
tomwalters@268 56 * \return true on success, false on error
tomwalters@268 57 */
tomwalters@268 58 bool Save(const char *sParamFilename);
tomwalters@268 59
tomwalters@268 60 /*!
tomwalters@268 61 * \brief Load parameter file and merge parameters with current, overwriting
tomwalters@268 62 * duplicates.
tomwalters@268 63 * \param sParamFilename Filename of parameter file to read
tomwalters@268 64 * \return true on succes, false on error
tomwalters@268 65 */
tomwalters@268 66 bool Merge(const char *sParamFilename);
tomwalters@268 67
tomwalters@268 68 /*! \brief Get a parameter, setting it with a default value if it is not
tomwalters@268 69 * already set
tomwalters@268 70 * \param sName Name of parameter
tomwalters@268 71 * \param val Value of the parameter
tomwalters@268 72 */
tomwalters@268 73 const char * DefaultString(const char* sName, const char *val);
tomwalters@268 74
tomwalters@268 75 /*! \overload
tomwalters@268 76 */
tomwalters@268 77 int DefaultInt(const char* sName, int val);
tomwalters@268 78
tomwalters@268 79 /*! \overload
tomwalters@268 80 */
tomwalters@268 81 unsigned int DefaultUInt(const char* sName, unsigned int val);
tomwalters@268 82
tomwalters@268 83 /*! \overload
tomwalters@268 84 */
tomwalters@268 85 float DefaultFloat(const char* sName, float val);
tomwalters@268 86
tomwalters@268 87 /*! \overload
tomwalters@268 88 */
tomwalters@268 89 bool DefaultBool(const char* sName, bool val);
tomwalters@268 90
tomwalters@268 91
tomwalters@268 92 /*! \brief Set a parameter
tomwalters@268 93 * \param sName Name of parameter
tomwalters@268 94 * \param val Value of parameter
tomwalters@268 95 */
tomwalters@268 96 void SetString(const char *sName, const char *val);
tomwalters@268 97
tomwalters@268 98 /*! \overload
tomwalters@268 99 */
tomwalters@268 100 void SetInt(const char *sName, int val);
tomwalters@268 101
tomwalters@268 102 /*! \overload
tomwalters@268 103 */
tomwalters@268 104 void SetUInt(const char *sName, unsigned int val);
tomwalters@268 105
tomwalters@268 106 /*! \overload
tomwalters@268 107 */
tomwalters@268 108 void SetFloat(const char *sName, float val);
tomwalters@268 109
tomwalters@268 110 /*! \overload
tomwalters@268 111 */
tomwalters@268 112 void SetBool(const char *sName, bool val);
tomwalters@268 113
tomwalters@268 114 /*! \brief Get the value of a parameter
tomwalters@268 115 * \param sName Name of parameter
tomwalters@268 116 * \return Value of parameter
tomwalters@268 117 *
tomwalters@268 118 * The specified parameter _must_ exist. So put every parameter you may
tomwalters@268 119 * possibly require into the default parameter file. This method returns
tomwalters@268 120 * the empty string when a value doesn't exist, but that is only to keep
tomwalters@268 121 * the application from crashing: don't count on it.
tomwalters@268 122 * You can use IsSet() however to check for a parameter's existence.
tomwalters@268 123 */
tomwalters@268 124 const char *GetString(const char *sName);
tomwalters@268 125
tomwalters@268 126 /*! \overload
tomwalters@268 127 */
tomwalters@268 128 int GetInt(const char *sName);
tomwalters@268 129
tomwalters@268 130 /*! \overload
tomwalters@268 131 */
tomwalters@268 132 unsigned int GetUInt(const char *sName);
tomwalters@268 133
tomwalters@268 134 /*! \overload
tomwalters@268 135 */
tomwalters@268 136 float GetFloat(const char *sName);
tomwalters@268 137
tomwalters@268 138 /*! \overload
tomwalters@268 139 */
tomwalters@268 140 bool GetBool(const char *sName);
tomwalters@268 141
tomwalters@268 142 /*! \brief Returns if the parameters exists or not
tomwalters@268 143 * \param sName Name of parameter
tomwalters@268 144 * \return true if exists, false if not
tomwalters@268 145 */
tomwalters@268 146 bool IsSet(const char *sName);
tomwalters@268 147
tomwalters@268 148 /*! \brief Sets a parameter assignment from a string
tomwalters@268 149 * \param sCmd String to parse
tomwalters@268 150 * \return true if parsing succeeded, false if an error occured.
tomwalters@268 151 *
tomwalters@268 152 * This function parses a string like "foo.bar=50" and sets the parameter
tomwalters@268 153 * accordingly. Use this function to parse parameter assignments as given
tomwalters@268 154 * by the user, for example on the command-line or in a parameter file.
tomwalters@268 155 */
tomwalters@268 156 bool Parse(const char *sCmd);
tomwalters@268 157
tomwalters@268 158 /*! \brief Delete a parameter. GetSection may not return correctly after
tomwalters@268 159 * this call, so it may not be possible to repopulate the parameter grid
tomwalters@268 160 * after deleting a parameter
tomwalters@268 161 * \param sName Parameter name
tomwalters@268 162 * \return true on success
tomwalters@268 163 */
tomwalters@268 164 bool Delete(const char *sName);
tomwalters@268 165
tomwalters@273 166 /*! \brief Append parameters to a string
tomwalters@273 167 * \param sName pointer to a string
tomwalters@273 168 * \return true on success
tomwalters@273 169 */
tomwalters@280 170 std::string WriteString();
tomwalters@273 171
tomwalters@280 172 /*! \brief Maximum length of a parameter name in characters
tomwalters@280 173 */
tomwalters@268 174 static const unsigned int MaxParamNameLength = 128;
tomwalters@268 175
tomwalters@280 176 protected:
tomwalters@268 177 /*!
tomwalters@268 178 * \brief Load parameter file
tomwalters@268 179 * \param sParamFilename Filename of parameter file to read
tomwalters@268 180 * \return true on succes, false on error
tomwalters@268 181 */
tomwalters@268 182 bool LoadFile(const char *sParamFilename);
tomwalters@268 183 /*!
tomwalters@268 184 * \brief Load parameter file and merge parameters with current,
tomwalters@268 185 * overwriting duplicates.
tomwalters@268 186 * \param sParamFilename Filename of parameter file to read
tomwalters@268 187 * \return true on succes, false on error
tomwalters@268 188 */
tomwalters@268 189 bool MergeFile(const char *sParamFilename);
tomwalters@268 190
tomwalters@268 191 /*! \brief Default ini-section to use
tomwalters@268 192 *
tomwalters@268 193 * Since SimpleIni is an ini-parser but we don't want the sections,
tomwalters@268 194 * we use the empty section. This gives use the behaviour desired.
tomwalters@268 195 */
tomwalters@268 196 static const char *m_SDefaultIniSection;
tomwalters@268 197
tomwalters@280 198 /*! \brief Parameter file object
tomwalters@280 199 */
tomwalters@268 200 CSimpleIniCase *m_pIni;
tomwalters@280 201 /*! \brief \c preset.include nesting counter to avoid loops
tomwalters@280 202 */
tomwalters@268 203 unsigned int m_iNestCount;
tomwalters@280 204 /*! \brief maximum value m_iNestCount may reach
tomwalters@280 205 */
tomwalters@268 206 static const unsigned int m_iNestCountMaximum = 16;
tomwalters@268 207 };
tomwalters@268 208 }
tomwalters@268 209
tomwalters@283 210 #endif // AIMC_SUPPORT_PARAMETERS_H_
tomwalters@268 211