Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Tools/Xabsl2/Xabsl2Engine/Xabsl2Symbols.cpp

Go to the documentation of this file.
00001 /**
00002 * @file Xabsl2Symbols.cpp
00003 *
00004 * Implementation of class Xabsl2Symbols and helper classes
00005 *
00006 * @author Martin Lötzsch
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 * Change Log:
00289 *
00290 * $Log: Xabsl2Symbols.cpp,v $
00291 * Revision 1.1.1.1  2004/05/22 17:37:57  cvsadm
00292 * created new repository GT2004_WM
00293 *
00294 * Revision 1.2  2004/03/19 15:34:01  tim
00295 * added some const qualifiers
00296 *
00297 * Revision 1.1  2003/10/07 10:13:25  cvsadm
00298 * Created GT2004 (M.J.)
00299 *
00300 * Revision 1.1.1.1  2003/07/02 09:40:29  cvsadm
00301 * created new repository for the competitions in Padova from the 
00302 * tamara CVS (Tuesday 2:00 pm)
00303 *
00304 * removed unused solutions
00305 *
00306 * Revision 1.6  2003/05/25 22:36:32  loetzsch
00307 * only when an output symbol was set during the execution of the graph,
00308 * coresponding function is invoked or the coresponding variable is changed.
00309 *
00310 * Revision 1.5  2003/05/19 10:30:02  risler
00311 * wrong error messages corrected
00312 *
00313 * Revision 1.4  2003/01/08 11:07:12  loetzsch
00314 * all kinds of symbols now can be registered at the Xabsl2Engine
00315 *
00316 * Revision 1.3  2002/12/16 14:19:58  loetzsch
00317 * added boolean input symbols
00318 *
00319 * Revision 1.2  2002/12/07 12:34:13  loetzsch
00320 * added debug interfaces
00321 *
00322 * Revision 1.1  2002/12/06 21:13:37  loetzsch
00323 * Decimal input symbols can now be registered at the engine
00324 *
00325 */

Generated on Thu Sep 23 19:57:42 2004 for GT2004 by doxygen 1.3.6