00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "Xabsl2Symbols.h"
00010
00011 Xabsl2EnumeratedInputSymbol::~Xabsl2EnumeratedInputSymbol()
00012 {
00013 int i;
00014 for (i=0; i< enumElements.getSize(); i++)
00015 {
00016 delete enumElements[i];
00017 }
00018 }
00019
00020 Xabsl2EnumeratedOutputSymbol::~Xabsl2EnumeratedOutputSymbol()
00021 {
00022 int i;
00023 for (i=0; i< enumElements.getSize(); i++)
00024 {
00025 delete enumElements[i];
00026 }
00027 }
00028
00029 void Xabsl2EnumeratedOutputSymbol::setActiveValue()
00030 {
00031 if (activeValueWasSet)
00032 {
00033 if (pF!=0)
00034 {
00035 (pI->*pF)(activeValue);
00036 }
00037 else
00038 {
00039 *pV=activeValue;
00040 }
00041 activeValueWasSet = false;
00042 }
00043 }
00044
00045 Xabsl2Symbols::~Xabsl2Symbols()
00046 {
00047 int i;
00048 for (i=0; i< decimalInputSymbols.getSize(); i++) delete decimalInputSymbols[i];
00049 for (i=0; i< decimalInputFunctions.getSize(); i++) delete decimalInputFunctions[i];
00050 for (i=0; i< booleanInputSymbols.getSize(); i++) delete booleanInputSymbols[i];
00051 for (i=0; i< enumeratedInputSymbols.getSize(); i++) delete enumeratedInputSymbols[i];
00052 for (i=0; i< enumeratedOutputSymbols.getSize(); i++) delete enumeratedOutputSymbols[i];
00053 }
00054
00055 void Xabsl2Symbols::registerDecimalInputSymbol(const char* name, const double* pVariable)
00056 {
00057 XABSL2_DEBUG_INIT(errorHandler.message("registering decimal input symbol \"%s\"",name));
00058
00059 if (decimalInputSymbols.exists(name))
00060 {
00061 errorHandler.error("registerDecimalInputSymbol(): symbol \"%s\" was already registered",name);
00062 return;
00063 }
00064 decimalInputSymbols.append(name,new Xabsl2DecimalInputSymbol(name, pVariable));
00065 }
00066
00067 void Xabsl2Symbols::registerDecimalInputSymbol
00068 (const char* name, Xabsl2FunctionProvider* pInstance,
00069 double (Xabsl2FunctionProvider::*pFunction)())
00070 {
00071 XABSL2_DEBUG_INIT(errorHandler.message("registering decimal input symbol \"%s\"",name));
00072
00073 if (decimalInputSymbols.exists(name))
00074 {
00075 errorHandler.error("registerDecimalInputSymbol(): symbol \"%s\" was already registered",name);
00076 return;
00077 }
00078 decimalInputSymbols.append(name,new Xabsl2DecimalInputSymbol(name, pInstance,pFunction));
00079 }
00080
00081 Xabsl2DecimalInputSymbol* Xabsl2Symbols::getDecimalInputSymbol(const char* name)
00082 {
00083 return decimalInputSymbols.getElement(name);
00084 }
00085
00086 bool Xabsl2Symbols::existsDecimalInputSymbol(const char* name)
00087 {
00088 return decimalInputSymbols.exists(name);
00089 }
00090
00091
00092 void Xabsl2Symbols::registerDecimalInputFunction(const char* name, Xabsl2FunctionProvider* pInstance,
00093 double (Xabsl2FunctionProvider::*pFunction)())
00094 {
00095 XABSL2_DEBUG_INIT(errorHandler.message("registering decimal input function\"%s\"",name));
00096
00097 if (decimalInputFunctions.exists(name))
00098 {
00099 errorHandler.error("registerDecimalInputFunction(): function \"%s\" was already registered",name);
00100 return;
00101 }
00102
00103 decimalInputFunctions.append(name, new Xabsl2DecimalInputFunction(name,pInstance,pFunction));
00104 }
00105
00106 void Xabsl2Symbols::registerDecimalInputFunctionParameter(const char* functionName,
00107 const char* name, double& param)
00108 {
00109 XABSL2_DEBUG_INIT(errorHandler.message("registering parameter \"%s\" for decimal input function\"%s\"",name, functionName));
00110
00111 if (!decimalInputFunctions.exists(functionName))
00112 {
00113 errorHandler.error("registerDecimalInputFunctionParameter(): function \"%s\" was not registered",functionName);
00114 return;
00115 }
00116 if (decimalInputFunctions.getElement(functionName)->parameters.exists(name))
00117 {
00118 errorHandler.error("registerDecimalInputFunctionParameter(): parameter \"%s\" was already registered",name);
00119 return;
00120 }
00121
00122 decimalInputFunctions.getElement(functionName)->parameters.append(name,param);
00123 }
00124
00125 Xabsl2DecimalInputFunction* Xabsl2Symbols::getDecimalInputFunction(const char* name)
00126 {
00127 return decimalInputFunctions.getElement(name);
00128 }
00129
00130 bool Xabsl2Symbols::existsDecimalInputFunction(const char* name)
00131 {
00132 return decimalInputFunctions.exists(name);
00133 }
00134
00135
00136 void Xabsl2Symbols::registerBooleanInputSymbol(const char* name, const bool* pVariable)
00137 {
00138 XABSL2_DEBUG_INIT(errorHandler.message("registering boolean input symbol \"%s\"",name));
00139
00140 if (booleanInputSymbols.exists(name))
00141 {
00142 errorHandler.error("registerBooleanInputSymbol(): symbol \"%s\" was already registered",name);
00143 return;
00144 }
00145 booleanInputSymbols.append(name,new Xabsl2BooleanInputSymbol(name, pVariable));
00146 }
00147
00148
00149 void Xabsl2Symbols::registerBooleanInputSymbol(const char* name, Xabsl2FunctionProvider* pInstance,
00150 bool (Xabsl2FunctionProvider::*pFunction)())
00151 {
00152 XABSL2_DEBUG_INIT(errorHandler.message("registering boolean input symbol \"%s\"",name));
00153
00154 if (booleanInputSymbols.exists(name))
00155 {
00156 errorHandler.error("registerBooleanInputSymbol(): symbol \"%s\" was already registered",name);
00157 return;
00158 }
00159 booleanInputSymbols.append(name,new Xabsl2BooleanInputSymbol(name, pInstance,pFunction));
00160 }
00161
00162 Xabsl2BooleanInputSymbol* Xabsl2Symbols::getBooleanInputSymbol(const char* name)
00163 {
00164 return booleanInputSymbols.getElement(name);
00165 }
00166
00167 bool Xabsl2Symbols::existsBooleanInputSymbol(const char* name)
00168 {
00169 return booleanInputSymbols.exists(name);
00170 }
00171
00172 void Xabsl2Symbols::registerEnumeratedInputSymbol(const char* name, const int* pVariable)
00173 {
00174 XABSL2_DEBUG_INIT(errorHandler.message("registering enumerated input symbol \"%s\"",name));
00175
00176 if (enumeratedInputSymbols.exists(name))
00177 {
00178 errorHandler.error("registerEnumeratedInputSymbol(): symbol \"%s\" was already registered",name);
00179 return;
00180 }
00181 enumeratedInputSymbols.append(name,new Xabsl2EnumeratedInputSymbol(name, pVariable));
00182 }
00183
00184 void Xabsl2Symbols::registerEnumeratedInputSymbol(const char* name, Xabsl2FunctionProvider* pInstance,
00185 int (Xabsl2FunctionProvider::*pFunction)())
00186 {
00187 XABSL2_DEBUG_INIT(errorHandler.message("registering enumerated input symbol \"%s\"",name));
00188
00189 if (enumeratedInputSymbols.exists(name))
00190 {
00191 errorHandler.error("registerEnumeratedInputSymbol(): symbol \"%s\" was already registered",name);
00192 return;
00193 }
00194 enumeratedInputSymbols.append(name,new Xabsl2EnumeratedInputSymbol(name, pInstance,pFunction));
00195 }
00196
00197 Xabsl2EnumeratedInputSymbol* Xabsl2Symbols::getEnumeratedInputSymbol(const char* name)
00198 {
00199 return enumeratedInputSymbols.getElement(name);
00200 }
00201
00202 void Xabsl2Symbols::registerEnumeratedInputSymbolEnumElement(const char* symbolName,
00203 const char* name, int value)
00204 {
00205 XABSL2_DEBUG_INIT(errorHandler.message("registering enum element \"%s\" for enumerated input symbol \"%s\"",name, symbolName));
00206
00207 if (!enumeratedInputSymbols.exists(symbolName))
00208 {
00209 errorHandler.error("registerEnumeratedInputSymbolEnumElement(): symbol \"%s\" was not registered.", symbolName);
00210 return;
00211 }
00212 if (enumeratedInputSymbols.getElement(symbolName)->enumElements.exists(name))
00213 {
00214 errorHandler.error("registerEnumeratedInputSymbolEnumElement(): enum element \"%s\" for symbol \"%s\" was already registered.", name, symbolName);
00215 return;
00216 }
00217 enumeratedInputSymbols.getElement(symbolName)->enumElements.append(name, new Xabsl2EnumElement(name,value));
00218 }
00219
00220 bool Xabsl2Symbols::existsEnumeratedInputSymbol(const char* name)
00221 {
00222 return enumeratedInputSymbols.exists(name);
00223 }
00224
00225
00226 void Xabsl2Symbols::registerEnumeratedOutputSymbol(const char* name, int* pVariable)
00227 {
00228 XABSL2_DEBUG_INIT(errorHandler.message("registering enumerated output symbol \"%s\"",name));
00229
00230 if (enumeratedOutputSymbols.exists(name))
00231 {
00232 errorHandler.error("registerEnumeratedOutputSymbol(): symbol \"%s\" was already registered",name);
00233 return;
00234 }
00235 enumeratedOutputSymbols.append(name,new Xabsl2EnumeratedOutputSymbol(name, pVariable));
00236 }
00237
00238 void Xabsl2Symbols::registerEnumeratedOutputSymbol(const char* name, Xabsl2FunctionProvider* pInstance,
00239 void (Xabsl2FunctionProvider::*pFunction)(int))
00240 {
00241 XABSL2_DEBUG_INIT(errorHandler.message("registering enumerated output symbol \"%s\"",name));
00242
00243 if (enumeratedOutputSymbols.exists(name))
00244 {
00245 errorHandler.error("registerEnumeratedOutputSymbol(): symbol \"%s\" was already registered",name);
00246 return;
00247 }
00248 enumeratedOutputSymbols.append(name,new Xabsl2EnumeratedOutputSymbol(name, pInstance,pFunction));
00249 }
00250
00251 Xabsl2EnumeratedOutputSymbol* Xabsl2Symbols::getEnumeratedOutputSymbol(const char* name)
00252 {
00253 return enumeratedOutputSymbols.getElement(name);
00254 }
00255
00256 void Xabsl2Symbols::registerEnumeratedOutputSymbolEnumElement(const char* symbolName,
00257 const char* name, int value)
00258 {
00259 XABSL2_DEBUG_INIT(errorHandler.message("registering enum element \"%s\" for enumerated output symbol \"%s\"",name, symbolName));
00260
00261 if (!enumeratedOutputSymbols.exists(symbolName))
00262 {
00263 errorHandler.error("registerEnumeratedOutputSymbolEnumElement(): symbol \"%s\" was not registered.", symbolName);
00264 return;
00265 }
00266 if (enumeratedOutputSymbols.getElement(symbolName)->enumElements.exists(name))
00267 {
00268 errorHandler.error("registerEnumeratedOutputSymbolEnumElement(): enum element \"%s\" for symbol \"%s\" was already registered.", name, symbolName);
00269 return;
00270 }
00271 enumeratedOutputSymbols.getElement(symbolName)->enumElements.append(name, new Xabsl2EnumElement(name,value));
00272 }
00273
00274 bool Xabsl2Symbols::existsEnumeratedOutputSymbol(const char* name)
00275 {
00276 return enumeratedOutputSymbols.exists(name);
00277 }
00278
00279
00280 void Xabsl2Symbols::setOutputSymbols()
00281 {
00282 for (int i=0;i<enumeratedOutputSymbols.getSize();i++)
00283 enumeratedOutputSymbols[i]->setActiveValue();
00284 }
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325